在 Windows 应用程序中,我同时打开了多个 OpenGL 窗口。理想情况下,我希望每个都以 60 fps 的速度绘制,与屏幕刷新同步。
对于每个渲染上下文,我都会调用wglSwapIntervalEXT(1)
以打开 vsync。每个窗口都有自己的显示线程,它绘制框架然后调用SwapBuffers
更新。
事实证明,这些窗口正在相互“战斗”:看起来SwapBuffers
调用是同步的并相互等待,即使它们位于不同的线程中。我正在测量每个窗口的帧到帧时间,并且有两个窗口,这下降到 30 fps,3 到 20 fps 等。
如果我用 关闭垂直同步wglSwapIntervalEXT(0)
,无论我打开多少个窗口,它们都会愉快地以 60 fps 刷新。但是在打开一个窗口的情况下,这并不像打开 vsync 那样平滑。
有什么方法可以用 OpenGL 完成我想要的吗?