Windows Aero はどのようにして画面のティアリングを防ぐのでしょうか?

Windows Aero はどのようにして画面のティアリングを防ぐのでしょうか?

Windows Aero がオンの場合、Aero なしで Basic テーマを使用した場合とは異なり、画面のティアリングは発生しません。

しかし、垂直同期を使用するゲームでは、デスクトップで何かを行うときよりも入力遅延がはるかに大きいように見えるのはなぜでしょうか? V-sync をオフにしたウィンドウ ゲームでも、ゲームに組み込まれている方法を使用する場合よりも同期が優れているようです。

なぜ、どのようにしてこのようなことが起こるのでしょうか、あるいは起こるように見えるのでしょうか?

答え1

実際、Aero がアプリケーションで VSYNC を強制的にオンにしなくてもティアリングを防止できるのは、Aero が合成ウィンドウ マネージャーだからです。Aero は、実行中のアプリケーションとは関係なく、デスクトップとすべてのウィンドウを非同期に描画します。

つまり、Windows Vista / 7で合成を有効にすると(いつもWindows 8で有効になっている場合、最後に後ろから前に入れ替えられた画像のコピーを使用してすべてのウィンドウを描画します。コンポジター(MicrosoftはDWMと呼んでいますが、デスクトップ ウィンドウ マネージャー)はVSYNCを有効にしてすべてを合成し、最後のコピーを使用して描画するため、完全に交換された各ウィンドウのフロント バッファ イメージは、部分的に描画されたフレームを表示することはありません。ただし、フロント バッファにのみ描画するように設計された非常に古いソフトウェアが正しく動作しなくなるという残念な副作用があります。ただし、最新のソフトウェアではこれが行われません。

簡単に言えば、DWM はティアリングに対する保護層を追加します。これにより、システムで実行されているすべてのアプリケーションが、ディスプレイのリフレッシュ レートに関係なく一定の速度で描画し、ティアリングを防ぐことができます。このようなシステムでは、ウィンドウ モードで OpenGL または Direct3D の VSYNC を有効にすると、CPU/GPU の使用率を実際に抑制できるというメリットしかありません。

これが、アダプティブ VSYNC が作成された理由です。その考え方は、ディスプレイのリフレッシュ レートを維持できないアプリケーションを、リフレッシュ レートの低い係数 (例: 60 Hz --> 30、20、15、10、12、6、5、4、3、2、1) に強制的に移行させることでペナルティを課すのではなく、モニターが画像を表示できるよりも速く描画するアプリケーションが、過剰な量の CPU / GPU パワーを使用することを制限することです。

答え2

Aeroを有効にすると、デスクトップウィンドウマネージャーはダブルバッファリング:

Windows Aero 機能は、ダブルバッファリングを多用して画面に描画します。

ソース

ウィキペディア画面のティアリングを防ぐために V-sync と併用する方法について、次のように述べています。

垂直ブランキング期間中、ドライバーはビデオ カードに対して、オフスクリーン グラフィック領域をアクティブ表示領域に高速でコピーする (ダブル バッファリング) か、両方のメモリ領域を表示可能として扱い、それらの領域間を単純に切り替えるように指示します (ページ フリップ)。

答え3

ダブルバッファリング + V-sync をオンにするとティアリングは発生しません。Aero ではたまたまその構成が使用されています。

答え4

DWM(エアロ効果を可能にする技術)は、画面上のすべてをD3Dサーフェスとしてレンダリングします(これにより、Flipでビデオを再生し続けることができます)。このレンダリング技術により、引き裂くただし、ゲーム メソッドは汎用 DWM メソッドよりも優れているはずです (結局のところ、独自のエンジンです)。したがって、ゲーム メソッドがそもそもそれほど優れていないか、構成に最適化されていない可能性があります。

関連情報