将多个OpenGL窗口同步到vsync

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

对于每个渲染上下文,我调用wglSwapIntervalEXT(1)打开wglSwapIntervalEXT(1) 。 每个窗口都有自己的显示线程,它绘制框架,然后调用SwapBuffers进行更新。

事实certificate,这些窗口正在相互“搏斗”:看起来SwapBuffers调用是同步的,并且彼此等待,即使它们在不同的线程中。 我正在测量每个窗口的帧到帧时间和两个窗口,这将下降到30 fps,三到20 fps等。

如果我使用wglSwapIntervalEXT(0)closureswglSwapIntervalEXT(0) ,无论打开多less个窗口,都可以以60 fps的速度快速刷新。 但是打开一个窗口,这并不像打开vsync那样顺畅。

有没有办法用OpenGL来实现我想要的?

Solutions Collecting From Web of "将多个OpenGL窗口同步到vsync"

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

在Linux中,由于从各个线程调用视频函数,我的应用程序出现了很多奇怪的行为。

我使用一个线程解决了这些问题,从应用程序的开始,创建窗口,创建glcontext等,以及使用信号量和队列来共享这个线程和其他线程之间的数据。