GLSurfaceView.queueEvent不在GL线程中执行

时间:2013-09-16 11:39:55

标签: android opengl-es

我正在尝试从我的主要活动为我的GLSurfaceView执行一些OpenGL命令。由于OpenGL渲染器在自己的线程中工作,据我所知,我必须使用queueEvent

我在GLSurfaceView中使用以下代码调用queueEvent

queueEvent(new Runnable(){
     @Override
     public void run() {
          renderer.doSomething(data); //executes some OpenGL commands
          requestRender();
}});

doSomething()方法绑定纹理并编译着色器。

这不起作用。 glCreateProgram返回0,例如在GL线程之外执行GL命令时会发生这种情况。如果我在渲染器中执行它,完全相同的代码也可以正常工作。因此,似乎我使用queueEvent执行的命令不在GL上下文中执行,而是在错误的线程中执行。

我的理解是调用queueEvent足以执行GL线程中的代码错误吗?还有什么我必须做的,或者我现在怎么称呼它的错误?

1 个答案:

答案 0 :(得分:4)

它进行了一些实验,似乎在某些情况下,在实际调用onSurfaceCreated之前,queueEvent将执行Runnable,但仍然在GL线程上。 如果您在活动中的onResume之后立即使用queueEvent,则会发生这种情况。

我使用glClearColor进行了实验,即使它没有任何异常地调用命令,背景也没有改变。也许GLContext仍然没有正常使用,命令什么都不做。

希望这有帮助!