最終更新:2015-04-14 (火) 04:03:42 (1699d)  

DWM はてなブックマークを見る
Top / DWM

Desktop Window Manager

デスクトップ上のウィンドウ?の表示と更新を制御する Windows Vista のテクノロジ

Windows の以前のバージョンでは、アプリケーションが非同期的にディスプレイ上に直接ウィンドウを描画していたため、描画の誤差が発生していました。このような誤差を除去するため、DWM ではアプリケーション ウィンドウなどの画面上のコンテンツをディスプレイ上に描画する前に、バックスクリーンバッファまたはオフスクリーン バッファで合成します。

DWM は、言わば、コンピュータの起動時にアクティブになる Direct3D アプリケーションです。したがって、このシナリオでは、GPU のリソースと処理能力を共有する機能など、WDDM のコア機能が不可欠となります。Windows Vista では、DWM に関連して 2 つの投資分野が設定されました。それは、全体的な品質の向上と魅力的なユーザー エクスペリエンスです。後述のように、WDDM は、この 2 つを実現するうえで重要な役割を果たしています。DWM テクノロジを基に構築されているのが、Windows Vista の目玉であるエンドユーザー エクスペリエンス Windows Aero です。

OSごとの対応

Windows Vista/Windows 7

  • Windows Aeroテーマ使用時などに限られていた
  • DWMの実行にはDirect3D 9.0Ex?シェーダモデル 2.0? に対応したビデオカードが必要
  • GDIを利用した従来のアプリケーション描画をオフ・スクリーン画面にリダイレクトし、デスクトップ上のウィンドウ合成にDirectX技術を使用

Windows 8

  • 常にDWMを使用
  • ビデオカードが対応していない場合にソフトウェアでDWMの処理が行われる

アンチティアリング

  • DWM 環境では,プログラムが「描画 API」を呼び出してもすぐにウィンドウのコンポジション結果に反映されるわけではありません.特にウィンドウのクライアント領域全体を更新することが多い DirectX アプリケーションのウィンドウモードや,WPF アプリケーションでは,クライアント領域数枚分(と書いたけどDWM_SOURCE_FRAME_SAMPLING の要求眺めてたら余分なフレームバッファ 1 枚で数フレームキューイングしているように見せかけられるような気がしてきた.要調査.)のキューを用意し,その中から次回の画面更新で表示すべきクライアント画像を DWM が「選択」します.
  • 例えばアプリケーションが毎秒 120 回ものシーンレンダリングを行っても,画面更新が毎秒 60 回であれば DWM は自動的に半分の画像を捨ててしまいます.この場合,毎秒 120 回のレンダリングは明らかに無駄になるため,場合によっては DWM の影響をプログラム側で考慮する必要があるでしょう.
  • 普通のアプリでは1枚のフレームバッファをDWMが保持していて、60fpsのリフレッシュレートにあわせて最新のフレームバッファがレンダリングされる。ところがこれでは、アニメーションなどを行うアプリケーションではDWMの更新タイミングとの同期が取れずに破綻するので、DWMはそういうアプリ(Media Application)用の更新アルゴリズムを選べるようになっている。

Windows 7 のグラフィックスの変更点を整理する

Windows 7 での滑らかなアニメーションの実現

APIs in the Desktop Window Manager

Information Querying and Setting

  • DwmEnableComposition? - enables and disables composition.
  • DwmIsCompositionEnabled - returns whether or not composition is occurring.
  • DwmGetColorizationColor? - returns the current window colorization information.
  • DwmSetWindowAttribute?/DwmGetWindowAttribute? - controls various attributes on windows, including the policy for

Scheduling and Media Presentation

  • DwmEnableMMCSS -- allows the DWM to participate in the Multimedia Class Schedule Service to have stronger control over the use of CPU resources in conjunction with another app using MMCSS (typically for video playback)
  • DwmGetCompositionTimingInfo -- provides information about the rate at which the DWM is composing, how many frames are completed, how many are pending, dropped frames, etc.
  • DwmModifyPreviousDxFrameDuration?, DwmSetDxFrameDuration?, DwmSetPresentParameters? -- these allow applications to queue up multiple DirectX surfaces for presentation and precisely control when they're to be presented. They're typically used by video presentation applications to counteract the latency that's inherent in a compositing system.

関連

MSDN

参考