PDA

View Full Version : SwapBuffers in Windows 8



Dark Photon
11-13-2014, 08:39 PM
Is there a way in Windows 8 to disable the Windows compositor (DWM), and run an OpenGL application such that when I call *SwapBuffers()/glFinish(), the GPU will immediately start scanning out from that new frame on the next GPU frame scan-out?

Reason I ask: I'm considering buying Windows 8 for home use. At work, we use Win 7. On Win 7, disabling the compositor is as simple as Desktop -> Personalize -> Select "Windows 7 Basic" theme. But in Windows 8, it sounds like you "may" have to resort to unsupported hackery such as suspending winlogin, killing the DWM process, restarting explorer, and such. Is there some more straightforward way to get rid of the added display latency and performance waste of that silly compositor on Windows 8?

Thanks in advance for any tips, no matter how tangentially related! I'm pretty new to OpenGL devel on Windows :-).

Shinta
11-14-2014, 03:48 AM
I don't know if it will work on Windows 8, but on Windows 7 the DWM disables automatically if you use a PixelFormat that supports quad-buffered stereo. (Of course this requires stereo capable hardware ;-)

Dark Photon
11-14-2014, 08:54 PM
I don't know if it will work on Windows 8, but on Windows 7 the DWM disables automatically if you use a PixelFormat that supports quad-buffered stereo. (Of course this requires stereo capable hardware ;-)

IIRC stereo-capable hardware means a Quadro. Alas, I'm running a high-end GeForce. Thanks anyway!

Shinta
11-17-2014, 02:04 AM
I have not checked with Windows 8 yet, but if you have 3D Vision glasses with your GeForce, the "NVIDIA 3D Vision Video Player" is capable of activating stereo. I quess it is some DX or NVAPI stuff that does it for 2D canvases, but it should also disable the DWM. (Just found something: google for the NV_STEREO_IMAGE_SIGNATURE trick)

mhagain
11-17-2014, 05:47 AM
If you run a fullscreen context you shouldn't need to disable the DWM; Windows should detect this automatically and give you an exclusive mode which bypasses the DWM. This is explicitly set under D3D but OpenGL should be able to infer it from your window creation parameters (i.e no border, WS_POPUP, etc).

If you're running a windowed context then you're stuck with the DWM and this applies to both GL and D3D.

Dark Photon
11-18-2014, 06:43 AM
Ok, thanks guys. I appreciate the info!