在Windows XP(64位)上,似乎无法使用OpenGL渲染到连接到具有不同GPU的不同图形卡的两个屏幕(例如,不同代的两个NVIDIA)。在这种情况下会发生的是渲染仅在其中一个屏幕中起作用。另一方面,使用Direct3D它可以正常工作,在两个屏幕中渲染。谁知道为什么会这样?或者更重要的是:有没有办法在两个屏幕上使用OpenGL进行渲染?
我发现,即使使用不同品牌的GPU(例如AMD和Intel),Windows 7渲染也可以在两个屏幕上运行。我想这可能是因为它的显示模型,如果我没有弄错的话,它运行在Direct3D合成器之上。这只是一个介词,我真的不知道这是不是真正的原因。
如果Direct3D是解决方案,那么一个想法是使用OpenGL对纹理进行所有渲染,然后以某种方式使用Direct3D渲染此纹理,假设它不太慢。
答案 0 :(得分:1)
Windows 7中发生的情况是,一个GPU或相同类型的GPU耦合,将图像渲染到屏幕外缓冲区,然后将其合成到屏幕上。然而,(不)不可能在不同制作的GPU上分发单个上下文的渲染。这将需要标准化的通信和同步基础设施,这根本不存在。 OpenGL或Direct3D都无法做到。
可以做的是将渲染结果复制到多个GPU的屏幕帧缓冲区中。 Windows 7和DirectX都支持这种内置。使用OpenGL做更多的事情。从技术上讲,您渲染到屏幕外设备上下文,通常是所谓的 PBuffer 。完成渲染后,使用GDI函数将结果复制到窗口。然而,与其余的OpenGL操作相比,最后的复制步骤非常慢。
答案 1 :(得分:0)
NVIDIA和AMD都有办法让您选择使用哪种GPU。 NVIDIA有WGL_NV_gpu_affinity,AMD有WGL_AMD_gpu_association。它们的工作方式各不相同,因此您必须在不同的硬件上执行不同的操作才能获得所需的行为。