GLSurfaceView.queueEvent不在GL线程中执行

Mad*_*ist 4 android opengl-es

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

queueEvent在我的GLSurfaceView中调用以下代码:

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

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

这是行不通的。glCreateProgram返回0,例如在GL线程外执行GL命令时发生。如果从渲染器中执行相同的代码,也可以正常工作。因此,看来我执行的命令queueEvent不是在GL上下文中执行的,而是在错误的线程中执行的。

我的理解是调用queueEvent足以在GL线程内执行代码吗?我还有什么要做的,还是现在我怎么称呼它的任何错误?

Mom*_*sov 5

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

我使用glClearColor进行了实验,即使它毫无例外地调用了命令,背景也没有改变。也许GLContext仍然无法正确使用,并且命令什么也不做。

希望这可以帮助!