gpt4 book ai didi

windows - 具有不同刷新率的 OpenGL 多头 vsync

转载 作者:可可西里 更新时间:2023-11-01 10:48:42 32 4
gpt4 key购买 nike

如何使用 OpenGL(在 Windows 7 上)以不同的分辨率和刷新率驱动多个显示器(多显示器)并且仍然能够在设备之间共享纹理?

我有一个多头 GPU。它驱动4个磁头。 (它恰好是 AMD FirePro V7900,以防万一。)头都共享一个“场景”(顶点和纹理数据等),但我想每次在显示器上发生垂直同步时渲染这个场景(每个头本质上是一个不同的视口(viewport))。但要注意的是,不同的头部可能具有不同的刷新率。例如,有些显示器可能为 60Hz,有些可能为 30Hz,有些可能为 24Hz。

当我调用 SwapBuffers调用 block ,所以我无法判断下一个需要渲染哪个头。我希望得到像 Direct3D9 的 <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb205908%28v=vs.85%29.aspx" rel="noreferrer noopener nofollow">IDirect3DSwapChain9::Present</a> 这样的东西与 <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb172585%28v=vs.85%29.aspx#D3DPRESENT_DONOTWAIT" rel="noreferrer noopener nofollow">D3DPRESENT_DONOTWAIT</a>标志,以及相关的D3DERR_WASSTILLDRAWING返回值。使用这种方法,我可以确定下一个要渲染的头部。通过循环轮询不同的头,直到一个成功。但我不知道 OpenGL 中的等效方法是什么。

我已经发现了 wglSwapIntervalEXT(1)使用垂直同步。而且我可以在 HDC 之间切换以使用单个 HGLRC 渲染到不同的窗口。但是刷新率的差异让我很困惑。

我不确定如何让单个 HGLRC 以不同的刷新率渲染所有这些显示器。我认为它必须是单个 HGLRC 才能有效地使用共享纹理(和其他资源)...如果我错了请纠正我。如果资源与多个 HGLRC 重复,这对我来说并不有趣,因为我希望这会将我的内存减少到 25%(1 个 GPU 上有 4 个磁头:所以我不想要任何资源的 4 个副本。)

如果需要的话,我对使用多线程的想法持开放态度。

谁能告诉我如何构建我的主循环,以便我可以共享资源但仍然以自己的刷新率和分辨率驱动显示器?

最佳答案

您可以通过共享上下文来共享承载数据的 OpenGL 缓冲区。 Windows 中的调用是名称 wglShareLists

使用它,您可以为每个窗口提供在自己的线程中运行的渲染上下文,而所有上下文共享它们的数据。多窗口垂直同步实际上是多线程 OpenGL 有意义的少数情况之一。

关于windows - 具有不同刷新率的 OpenGL 多头 vsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351369/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com