windows - 将多个 OpenGL 窗口同步到 vsync

标签 windows multithreading opengl vsync

在 Windows 应用程序中,我同时打开了多个 OpenGL 窗口。理想情况下,我希望每一个都以 60 fps 的速度绘制,并与屏幕刷新同步。

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

事实证明,这些窗口正在相互“争斗”:看起来 SwapBuffers 调用是同步的并相互等待,即使它们在不同的线程中也是如此。我正在测量每个窗口的帧到帧时间,有两个窗口时,这个时间下降到 30 fps,有 3 到 20 fps,等等。

如果我使用 wglSwapIntervalEXT(0) 关闭垂直同步,无论我打开多少个窗口,它们都会以 60 fps 的速度愉快地刷新。但是在打开一个窗口的情况下,这远不如打开 vsync 时那么流畅。

有什么方法可以用 OpenGL 完成我想要的吗?

最佳答案

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

我解决了这些问题,在应用程序启动后使用一个线程仅用于显示、创建窗口、创建 glcontext 等,并使用信号量和队列在该线程与其他线程之间共享数据。

关于windows - 将多个 OpenGL 窗口同步到 vsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043745/

相关文章:

ruby - Windows 上 Pow 的替代品?

multithreading - 在 Qt 4.7 中流式传输 QImage

c++ - Qt 和 OpenGL : render a 2D texture

objective-c - 在 OpenGL 中显示 YUV

c# - 为 linux 架构发布 .NET Core C# 自包含应用程序

windows - 通过调用名称在 Windows 中调用 Ghostscript?

windows - 在 Windows 中,如何找出哪个进程位于本地网络套接字的另一端?

silverlight - Silverlight:空的 Storyboardvs BackgroundWorker

c++ - 特定的生产者-消费者场景

java - 除了使用 swt 绘图之外,还有更好的选择吗?