9

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

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

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

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

这不起作用。return ,例如,当在 GL 线程之外执行 GL 命令时会发生这种情况glCreateProgram0如果我从渲染器中执行完全相同的代码,它也可以正常工作。所以看起来我执行的命令queueEvent不是在GL上下文中执行的,而是在错误的线程中执行的。

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

4

1 回答 1

9

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

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

希望这可以帮助!

于 2013-11-13T20:27:58.853 回答