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

C++ 使用多个线程进行GL调用是否安全?,c++,c,multithreading,opengl,C++,C,Multithreading,Opengl,我想知道使用多个线程进行GL调用是否安全。基本上,我使用的是臀大肌振荡器,我想知道是否可以将要绘制的对象分成4个,并为每个对象分配一个线程 我只是想知道这是否会造成麻烦,因为tesselator使用回调函数。只要回调不访问ant全局变量,两个线程可以同时运行同一个回调吗 还有其他方法可以使用多线程优化OpenGL绘图吗?对于“只要回调不访问ant全局变量,两个线程可以同时运行同一个回调吗?”的回答是肯定的 但是,当您在回调函数中修改OpenGL的状态时,您会遇到问题,尤其是在使用glBegin/

我想知道使用多个线程进行GL调用是否安全。基本上,我使用的是臀大肌振荡器,我想知道是否可以将要绘制的对象分成4个,并为每个对象分配一个线程

我只是想知道这是否会造成麻烦,因为tesselator使用回调函数。只要回调不访问ant全局变量,两个线程可以同时运行同一个回调吗

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

对于“只要回调不访问ant全局变量,两个线程可以同时运行同一个回调吗?”的回答是肯定的

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


如果要优化图形,可能需要使用几何体着色器进行细分。这需要着色器模型4。

在问题的两行之间阅读,答案是否定的。您不能同时从不同线程调用相同的GL上下文。您可以在中找到更多详细信息。

着色器模型4特定于DirectX:。你是说GLSL 1.3吗?好的,正确的术语是“统一着色器模型”,在DX中称为着色器模型4。这是图形卡必须支持的。OpenGL几何体着色器随OpenGL 3.2、GLSL 1.50一起提供,但您也可以将其用作OpenGL 2.0.0中的扩展