不是,Android 的 UI 线程和 OpenGL 线程是两个独立的线程。如果需要在 UI 线程中执行 OpenGL 相关的操作,可以使用 SurfaceView 或 GLSurfaceView,并在相应的回调函数中执行 OpenGL 相关的代码。示例如下:
public class MyGLSurfaceView extends GLSurfaceView {
private final MyGLRenderer mRenderer;
public MyGLSurfaceView(Context context) {
super(context);
// 创建 OpenGL ES 2.0 上下文
setEGLContextClientVersion(2);
mRenderer = new MyGLRenderer();
// 设置渲染器
setRenderer(mRenderer);
// 只在绘图数据发生改变时才绘制视图
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 在 UI 线程中更新 OpenGL 数据
mRenderer.handleTouchEvent(event);
// 请求重新绘制视图
requestRender();
return true;
}
}
public class MyGLRenderer implements GLSurfaceView.Renderer {
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 初始化 OpenGL 相关的数据
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// 当视图发生改变时调用,比如横竖屏切换
gl.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
// 在渲染循环中绘制图形
}
public void handleTouchEvent(MotionEvent event) {
// 在 UI 线程中更新 OpenGL 数据
}
}