Windows Aero 如何防止螢幕撕裂?

Windows Aero 如何防止螢幕撕裂?

當 Windows Aero 開啟時,不會出現任何螢幕撕裂現象,這與使用沒有 Aero 的基本主題時不同。

但是,為什麼採用垂直同步的遊戲似乎比在桌面上執行某些操作時的輸入延遲要大得多?它甚至似乎可以在垂直同步關閉的情況下同步視窗遊戲,這比使用遊戲內建的任何方法都要好。

為什麼以及如何發生這種情況或看起來發生這種情況?

答案1

實際上,Aero 無需在應用程式中強制 VSYNC 即可防止撕裂的原因是因為它是一個合成視窗管理器。它相對於任何正在運行的應用程式非同步繪製桌面和所有視窗。

也就是說,當您在 Windows Vista / 7 中啟用合成時(它是總是在 Windows 8 中啟用),它將使用從後到前交換的最後一個映像的副本來繪製所有視窗。合成器(微軟稱為 DWM,桌面視窗管理器)在啟用 VSYNC 的情況下合成所有內容,並且因為它使用最後一個的副本進行繪製完全交換每個視窗的前端緩衝區影像從不顯示部分繪製的畫面。然而,它確實有一個不幸的副作用,即阻止那些專門設計用於繪製前緩衝區的舊軟體正常工作 - 但現代軟體不會這樣做。

簡而言之,DWM 增加了一層額外的防撕裂保護。它允許系統上運行的任何應用程式以某種速率進行繪製,而不管顯示器的刷新率如何,並且仍然可以防止撕裂。在這樣的系統上,在視窗模式下,在 OpenGL 或 Direct3D 中啟用 VSYNC 的唯一好處實際上是降低 CPU/GPU 的使用率。

這就是為什麼創建自適應VSYNC 的原因,其想法並不是透過強制應用程式採用較低的刷新率係數(例如60 Hz --> 30、20、15、10、12)來懲罰無法維持顯示器更新率的應用程式。

答案2

啟用 Aero 後,桌面視窗管理器使用雙緩衝:

Windows Aero 功能廣泛使用雙緩衝在螢幕上繪圖。

來源

維基百科關於如何將其與 V-sync 一起使用以防止螢幕撕裂,有這樣的說法:

在垂直消隱間隔期間,驅動程式命令顯示卡要么快速將離屏圖形區域複製到活動顯示區域(雙緩衝),要么將兩個內存區域視為可顯示,並在它們之間簡單地來回切換(頁面翻轉)。

答案3

雙緩衝+垂直同步可確保無撕裂。 Aero 恰好使用了該配置。

答案4

DWM(支援 Aero 效果的技術)將螢幕中的所有內容渲染為 D3D 表面(這使得影片可以在 Flip 上繼續播放)。這種渲染技術會自動防止撕裂,雖然遊戲方法應該比通用的DWM方法更好(畢竟是他們自己的引擎)。因此,遊戲方法可能一開始就不是那麼好,或者沒有針對您的配置進行最佳化。

相關內容