PDA

View Full Version : Win32, OpenGL, VSync and multiple monitors with different refresh rates



Rajveer86
08-18-2014, 10:46 AM
My game engine takes a simplistic approach to supporting multiple windows with a single OpenGL context in the following way:


Activate OpenGL context on window 1
Draw scene in to window 1

Activate OpenGL context on window 2
Draw scene in to window 2

Activate OpenGL context on window 3
Draw scene in to window 3

For all Windows
SwapBuffers

This works fine with monitors of the same refresh rate (with VSync on or off), and now I'm experimenting with monitors of different refresh rates. With V-Sync disabled, as long as the engine can produce enough frames, a window on a higher refresh rate monitor won't get slowed down by a window on a slower refresh rate monitor, as SwapBuffers doesn't block. With V-Sync enabled, SwapBuffers will sync to the slowest monitor and windows on faster monitors will get slowed down.

If there any way of fixing this without resorting to a thread and OpenGL context for each window? I was thinking along the lines of a non-blocking SwapBuffers and checking if a window is going through a swap, and if not then swapping it's buffers or something?

Shinta
09-05-2014, 05:25 AM
I don't think there is a way in OpenGL or wgl or their extension to help you here.

The only thing that should work is triple-buffering. In theory the swap should not block if triple-buffering and VSync is enabled. But of course this is a vendor/implementation dependent thing, and can't be controlled via gl or wgl, as far as I know. And at worst you'll end up rendering frames that won't be displayed.

henniman2
09-14-2014, 01:32 PM
Are you working on Windows VISTA/7/8? If so, you may experiment with turning off Aero ( Desktop Window Manager Session Manager Service ) else the whole desktop might be composited in the lowest frame rate?