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

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

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

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

【问题讨论】:

标签: c++ c multithreading opengl


【解决方案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 中的扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2012-07-14
    • 2017-07-15
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多