1

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

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

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

4

2 回答 2

1

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

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

于 2011-09-01T20:03:14.573 回答
0

NVIDIA 和 AMD 都有允许您选择使用哪个 GPU 的方法。NVIDIA 有WGL_NV_gpu_affinity和 AMD 有WGL_AMD_gpu_association。它们的工作方式完全不同,因此您必须在不同的硬件上执行不同的操作才能获得所需的行为。

于 2011-09-01T11:03:32.627 回答