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

Posted

技术标签:

【中文标题】使用多个线程进行 GL 调用是不是安全?【英文标题】:Is it safe to make GL calls with multiple threads?使用多个线程进行 GL 调用是否安全? 【发布时间】:2010-06-01 20:53:41 【问题描述】:

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

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

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

【问题讨论】:

相关***.com/questions/11097170/… 【参考方案1】:

从问题的字里行间看,答案是否定的。您不能同时从不同线程调用 same GL 上下文。您可以在Parallel OpenGL FAQ找到更多详细信息。

【讨论】:

【参考方案2】:

“只要回调不访问 ant 全局变量,两个线程能否同时运行同一个回调?”的答案?是明确的。

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

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

【讨论】:

Shader Model 4 是 DirectX 特定的:opengl.org/wiki/Detecting_the_Shader_Model。你是说 GLSL 1.3 吗? 好吧,正确的说法是“Unified Shader Model”,在DX中称为Shader Model 4。这是显卡必须支持的。 OpenGL 几何着色器随 OpenGL 3.2、GLSL 1.50 一起提供,但您也可以将其用作 OpenGL 2.0 中的扩展。

以上是关于使用多个线程进行 GL 调用是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

多个线程调用同一个函数是不是安全?

Java虚拟机—线程安全和锁优化

线程安全

Servlet不是线程安全的。

Qt入门教程QObject篇重入性和线程安全

[转]如何写出线程安全的类和函数