我正在尝试从我的主要活动为我的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线程中的代码错误吗?还有什么我必须做的,或者我现在怎么称呼它的错误?
答案 0 :(得分:4)
它进行了一些实验,似乎在某些情况下,在实际调用onSurfaceCreated之前,queueEvent将执行Runnable,但仍然在GL线程上。 如果您在活动中的onResume之后立即使用queueEvent,则会发生这种情况。
我使用glClearColor进行了实验,即使它没有任何异常地调用命令,背景也没有改变。也许GLContext仍然没有正常使用,命令什么都不做。
希望这有帮助!