1

当从其他线程控制OpenGL时,如果是GLSurfaceView,我们使用queueEvent()。那么,如果在 SurfaceView 上创建了 OpenGL(使用 eglCreateWindowSurface、eglMakeCurrent 等),我应该如何实现从其他线程操作 OpenGL?

4

1 回答 1

1

您可以实现自己的queueEvent.

  1. 排个队。( ArrayList<Runnable> mQueue)
  2. queueEvent()Runnable实例添加到此队列(mQueue)。
  3. SurfaceView的渲染线程event从队列中弹出。
  4. 调用event.run()

使用锁(synchronized或显式锁)来避免问题。

GLSurfaceViewGLThread 的循环中有 3 步和 4 步,mQueue并由synchronized块保护。

参见:GLSurfaceView

PS:对不起我糟糕的英语。

于 2012-11-27T16:10:57.133 回答