终于设法解决了问题。
在我使用的一个视图控制器中:
dispatch_async(openGLESContextQueue, ^{
[(EAGLView *)self.view setFramebuffer];
(...opengl draw code...)
[(EAGLView *)self.view presentFramebuffer];
});
在多线程环境中使用 EAGLContext 时,必须小心以防止其他线程同时使用:
@syncronized(context) { ...opengl drawing here...}
并在将控制权传递给另一个 ViewController(通过 presentViewController:) 之前耗尽当前的 dispatch_queue,使用:
dispatch_sync(openGLESContextQueue, ^{});
因此,通过使用这两个技巧,我能够在多个视图中只使用一个 EAGLContext。还必须特别注意 EAGLContext 的当前状态。我得到了意想不到的结果,因为在第一个视图中我有:
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
在第二个视图中,我有完全不同的绘图代码,当然,我忘了使用:
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
瞧!
谢谢 :)