使用多个线程进行GL调用是否安全?

时间:2010-06-01 20:53:41

标签: c++ c multithreading opengl

我想知道用多个线程进行GL调用是否安全。基本上我正在使用GLUtesselator并且想知道我是否可以将对象划分为4并为每个对象分配一个线程。

我只是想知道这是否会引起麻烦,因为tesselator使用回调函数。只要该回调不能访问ant全局变量,2个线程可以同时运行相同的回调吗?

还有其他方法可以使用多线程优化OpenGL绘图吗?

2 个答案:

答案 0 :(得分:2)

在你问题的行之间阅读,答案是否定的。您不能同时从不同的线程调用相同的 GL上下文。您可以在Parallel OpenGL FAQ

中找到更多详细信息

答案 1 :(得分:1)

答案“只要该回调不能访问ant全局变量,2个线程可以同时运行相同的回调吗?”是明确的。

但是,当您在回调函数中修改OpenGL的状态时会遇到问题,尤其是在使用glBegin / glEnd时(例如,如果生成DisplayList)。只要您不使用GPU(例如,如果您使用网格),就可以使用多线程进行细分。

如果要优化绘图,可能需要使用几何着色器进行细分。这需要Shader Model 4。