在 Windows XP 上使用异构多 GPU 配置进行无缝多屏 OpenGL 渲染

发布于 2024-12-02 14:12:12 字数 403 浏览 2 评论 0 原文

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

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

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

On Windows XP (64-bit) it seems to be impossible to render with OpenGL to two screens connected to different graphics cards with different GPUs (e.g. two NVIDIAs of different generations). What happens in this case is that rendering works only in one of the screens. On the other hand, with Direct3D it works without problem, rendering in both screens. Anyone knows why is this? Or more importantly: is there a way to render in both screens with OpenGL?

I have discovered that on Windows 7 rendering works on both screens even with GPUs of different brands (e.g. AMD and Intel). I think this may be because of its display model, which runs on top of a Direct3D compositer if I am not mistaken. This is just a suposition, I really don't know if it is the actual reason.

If Direct3D would be the solution, one idea would be to do all the rendering with OpenGL to a texture, and then somehow render this texture with Direct3D, suposing it isn't too slow.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

玻璃人 2024-12-09 14:12:12

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

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

What happens in Windows 7 is, that one GPU, or same type GPUs coupled, render the image to an offscreen buffer, which is then composited spanning the screens. However it is (yet) impossible to distribute rendering of a single context over GPUs of different making. That would require a standardized communication and synchronization infrastructure, which simply doesn't exsist. Neither OpenGL or Direct3D can do it.

What can be done is copying the rendering results into the onscreen framebuffers of several GPUs. Windows 7 and DirectX have support for this built in. Doing it with OpenGL is a bit more involved. Technically you render to an offscreen device context, usually a so called PBuffer. After finishing the rendering you copy the result using GDI functions to your window. This last copying step however is very slow, compared to the rest of OpenGL operation.

橘虞初梦 2024-12-09 14:12:12

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

Both NVIDIA and AMD have ways of allowing you to choose which GPU to use. NVIDIA has WGL_NV_gpu_affinity and AMD has WGL_AMD_gpu_association. They both work rather differently, so you'll have to do different things on the different hardware to get the behavior you need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文