对于具有不同上下文的多个线程,OpenGL线程是否安全?

Ben*_*tto 11 iphone multithreading opengl-es ios

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

我还没有找到一个明确的答案,我是否可以安全地在两个不同的线程上创建两个上下文(例如,绘制到屏幕的主线程,以及执行屏幕外绘制工作的辅助线程)并且拥有它们同时进行GL函数调用.

换句话说,只要上下文不同,两个线程可以"共享"C API,从而"共享"GPU吗?或者这本身就是不可分享的东西?或者这是特定于实现的?

在iOS上专门询问OpenGL ES,但这可能是一个普遍的GL问题.

Mat*_*gro 9

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

  • 不完全正确:每个线程不需要一个上下文,只要你不同时在多个线程中使用相同的上下文,例如通过锁定对上下文的所有访问权限,并且因为这种锁定在需要一个系统的系统上包含一个内存屏障(锁通常总是如此). (5认同)