【问题标题】:Seamless multi-screen OpenGL rendering with heteregeneous multi-GPU configuration on Windows XP在 Windows XP 上使用异构多 GPU 配置进行无缝多屏幕 OpenGL 渲染
【发布时间】:2011-11-08 07:38:34
【问题描述】:

在 Windows XP(64 位)上,似乎不可能使用 OpenGL 渲染到连接到具有不同 GPU 的不同显卡的两个屏幕(例如不同代的两个 NVIDIA)。在这种情况下发生的情况是渲染仅在其中一个屏幕中起作用。另一方面,使用 Direct3D 可以毫无问题地在两个屏幕上进行渲染。有谁知道这是为什么?或者更重要的是:有没有办法使用 OpenGL 在两个屏幕上进行渲染?

我发现在 Windows 7 上,即使使用不同品牌的 GPU(例如 AMD 和 Intel),两个屏幕都可以进行渲染。我认为这可能是因为它的显示模型,如果我没记错的话,它运行在 Direct3D 合成器之上。这只是推测,不知道是不是真的原因。

如果 Direct3D 是解决方案,一个想法是使用 OpenGL 对纹理进行所有渲染,然后以某种方式使用 Direct3D 渲染该纹理,假设它不会太慢。

【问题讨论】:

    标签: opengl windows-xp multiscreen multi-gpu


    【解决方案1】:

    NVIDIA 和 AMD 都可以让您选择要使用的 GPU。 NVIDIA 有WGL_NV_gpu_affinity,AMD 有WGL_AMD_gpu_association。它们的工作方式截然不同,因此您必须在不同的硬件上执行不同的操作才能获得所需的行为。

    【讨论】:

    • 我知道这个扩展,但正如你所说,它们的目的是选择使用哪个 GPU,这不是我在这里问的(尽管我在另一个问题中问过)。我想要的是一种在 GPU 不同时在两个屏幕上获得渲染的方法,而不关心哪个是渲染器(现在)。
    【解决方案2】:

    在 Windows 7 中发生的情况是,一个 GPU 或耦合的同类型 GPU 将图像渲染到屏幕外缓冲区,然后跨屏幕进行合成。然而,(仍然)不可能将单个上下文的渲染分布在不同制造的 GPU 上。这将需要一个标准化的通信和同步基础设施,而这根本不存在。 OpenGL 和 Direct3D 都做不到。

    可以将渲染结果复制到多个 GPU 的屏幕帧缓冲区中。 Windows 7 和 DirectX 内置了对此的支持。使用 OpenGL 执行此操作涉及更多内容。从技术上讲,您渲染到屏幕外的设备上下文,通常是所谓的 PBuffer。完成渲染后,您使用 GDI 函数将结果复制到您的窗口。然而,与 OpenGL 操作的其余部分相比,最后一个复制步骤非常慢。

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      相关资源
      最近更新 更多