将多个OpenGL窗口同步到vsync

Fre*_*man 9 windows opengl multithreading vsync

在Windows应用程序中,我同时打开了多个OpenGL窗口.理想情况下,我希望每个以60 fps绘制,同步到屏幕刷新.

对于每个渲染上下文,我打电话wglSwapIntervalEXT(1)打开vsync.每个窗口都有自己的显示线程,它绘制帧然后调用SwapBuffers更新.

事实证明,窗户彼此"战斗":看起来SwapBuffers呼叫是同步的并且彼此等待,即使它们在不同的线程中.我正在测量每个窗口的帧到帧时间,并且有两个窗口,这下降到30 fps,有3到20 fps等.

如果我关闭vsync wglSwapIntervalEXT(0),无论我打开多少个窗口,他们都会以60 fps快速刷新.但是打开一个窗口时,这并不像打开vsync那样平滑.

有没有办法用OpenGL完成我想要的东西?

小智 0

您也许能够获取输出设备并在线程的循环中使用WaitForVBlank函数。然后,它可以为您感兴趣的每个窗口发布消息或信号事件。