I have an applicaiton that displays video written in OpenGL. In short I need to coordinate my SwapBuffers() with the vertical resync to stop tearing. This solution needs to run on either head and needs to work when multiple OpenGL applications are running.
I find that the “wait for vertical sync” feature controlled from the catalyst control panel always syncs you to the primary display even if your window is on the secondary display. Also it seems to do a round robin thing if more then one OpenGL application is running. (ie. If two are running they get alternating vsync events and end up dropping every other frame)
I have tried getting the timing information directly from the GPU with register reads and waiting for vertical blanking myself but I can't seem to find a method on a windows machine that will let me sleep with the accuricy I need. Polling the register isn't an option as I just can't use that much CPU.
Any Ideas? Am I missing the "usual" way to solve this problem. I assume others have run into this issue but I can't seem to find anyone talking about it on the web.
System: Windows XP/ATI Driver 8.88/4690 GPU