2013-01-11 34 views
0

我正在爲Windows(XP,Vista,7,8)的窗口化(非全屏)OpenGL應用程序工作,其中VSync和GPU幀排隊導致非常明顯(並且不好)的輸入滯後。我已經使用wglSwapBufferEXT禁用VSync,並在SwapBuffers之後使用glFinish來防止幀排隊。禁用航空窗口中的垂直同步

問題是,在啓用了Aero的Windows版本上,輸入滯後仍然存在。禁用Aero可修復此問題,但我們不希望強制用戶這樣做。有沒有辦法阻止Aero強制在我們的應用程序上使用VSync,或者僅僅爲我們的應用程序禁用Aero?

+0

可能的重複[延遲在Windows 7 OS上繪圖](http://stackoverflow.com/questions/4602936/delay-in-drawing-on-windows-7-os) –

回答

0

Aero是一個窗口合成系統。合成器本身就具有渲染延遲,甚至可能長達2幀時間。解決這個問題的唯一方法就是禁用排字工具。


大約兩年前,我做了概述了基於X11複合系統,其中每個項目將提供「單圈時間」它的渲染時間同步方案。基本上你不能讓你的滯後時間比渲染你的框架的時間短。但是,如果您儘可能延遲渲染幀的開始時間,那麼將用戶輸入集成到渲染的最初階段就可以獲得最短的延遲。

這個想法是讓合成器收集計時統計信息,複合窗口需要多長時間,每個程序渲染幀需要多長時間。然後合成器會給每個程序一個「立即開始渲染」的信號,以便渲染在V-Sync之前及時完成。

雖然到目前爲止我還沒有實現這一點。

0

您可以使用DwmEnableComposition函數在應用程序運行時禁用Aero。我不確定這是否正是您的意思,「僅針對我們的應用禁用Aero」。

+0

理想情況下,解決方案只會影響我們應用程序,而不是其他正在運行的應用程序,但否則是這就是我正在尋找的 - 謝謝!太糟糕了,它似乎被Windows 8棄用。 – Andrew