【问题标题】:Are loaded OpenGL functions context- or thread- specific? (Windows)加载的 OpenGL 函数是上下文特定的还是线程特定的? (视窗)
【发布时间】:2023-03-18 07:03:01
【问题描述】:

考虑一个场景,其中 2 个渲染上下文(每个属于自己的不同窗口)存在于 2 个单独的执行线程中。 OpenGL函数指针是否需要分别加载和使用?或者 gl* 函数指针可以是全局的,对于给定的应用程序实例只加载一次,并由窗口或上下文使用?

我问的原因是因为OpenGL Function Loading Docs 在谈到加载 wgl 函数时指出:

此函数仅在存在有效 OpenGL 上下文的情况下有效。 确实,它返回的函数指针本身就是特定于上下文的。此函数的 Windows 文档指出,返回的函数可能适用于另一个上下文,具体取决于该上下文的供应商和该上下文的像素格式。

实际上,如果两个上下文来自同一个供应商并引用同一个 GPU,那么从一个上下文中提取的函数指针将在另一个上下文中工作。在 Windows 中创建 OpenGL 上下文时这一点很重要,因为您需要创建一个“虚拟”上下文来获取 WGL 扩展函数来创建真正的上下文。

强调我的。

我想知道OpenGL函数是否也存在这样的要求?

【问题讨论】:

    标签: c++ c windows winapi opengl


    【解决方案1】:

    您在问题中复制的段落之前漏掉了一句话(重点是我的):

    [...] 函数可以是 OpenGL 函数或特定于平台的 WGL 函数

    此函数仅在存在有效 OpenGL 上下文的情况下有效。实际上,它返回的函数指针本身就是特定于上下文的 [...]

    这意味着加载的 OpenGL 函数是特定于上下文的,就像 Windows 上的 WGL 函数一样。

    【讨论】:

      【解决方案2】:

      旧硬件可能会针对不同的上下文返回不同的函数指针。现在我对此表示怀疑。 GLEW 正在努力避免这种多上下文 (MX) 功能。

      【讨论】:

        猜你喜欢
        • 2020-11-16
        • 2010-11-28
        • 2022-10-17
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多