是OpenGL线程安全的多个线程与不同的上下文?

我知道在线程之间共享一个上下文是个坏消息。 我知道,当主线程上的GL没有发生任何事情时,我可以安全地在辅助线程上创build和使用带有屏幕外帧缓冲区的上下文。

对于是否可以在两个不同的线程上安全地创build两个上下文(比如,一个主线程在屏幕上绘图,另一个线程在屏幕外绘制工作),我还没有find一个明确的答案,并让他们同时进行GL函数调用。

换句话说,只要上下文不同,两个线程可以“共享”C API,从而GPU? 或者,这固有的东西是不可共享的? 或者是这个实现特定的?

在iOS上特别要求OpenGL ES,但这可能是一个普遍的GL问题。

是的,你需要为每个想要使用OpenGL的线程使用一个上下文,也可以在上下文之间共享对象。 这是要走的路 :)

选项1 :如果不同时使用两个线程的上下文,则一个上下文就足够了。

选项2 :如果您需要同时使用多个线程使用OpenGL,则需要多个上下文。 然后,如果上下文共享他们的Sharegroup ,他们共享他们的OpenGL内容,如纹理。 这样你就可以加载纹理或在后台线程上执行大量的帧缓冲处理。

看看有关Sharegroups的最后一节: http : //developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithOpenGLESContexts/WorkingwithOpenGLESContexts.html

选项3 :GLKit提供了一些内置的后台处理,例如通过GLKTextureLoader s - textureWithContentsOfFileasynchronous纹理加载。 我不知道所有的选项,但它绝对简化了一些asynchronousOpenGL的用例。