Desktop Window Manager (DWM) とは
Desktop Window Manager(DWM)は、Windows Vista以降の
Microsoft Windowsオペレーティングシステムで採用されているデスクトップ描画システムです。以前はDesktop Compositing Engine(DCE)とも呼ばれていました。DWMは、ウィンドウの描画処理を効率化し、透明効果やアニメーションなどの視覚効果を実現する役割を担っています。
初期のWindows VistaやWindows 7では、Windows Aeroテーマを使用している場合に限定的にDWMが利用されていましたが、Windows 8以降ではクラシックテーマが廃止されたため、常にDWMが有効になっています。
DWMが有効になる条件
Windows VistaおよびWindows 7では、Windows AeroまたはWindows Vista/7スタンダードテーマを選択した場合にDWMが利用されます。Windows 8以降では、常にDWMが使用されます。
DWMの実行には、Direct3D 9.0Exと
シェーダーモデル 2.0に対応したグラフィックスハードウェア(GPU)と、Windows Display Driver Model(WDDM)に対応したデバイスドライバーが必要です。Windows 8以降では、WDDM準拠のグラフィックスドライバーがない場合、ソフトウェア(Microsoft Basic Display Adapter)によってDWMの処理が行われます。
Windows Vista StarterエディションにはDWMは搭載されていません。Windows Vista Home BasicエディションではDWMが搭載されていますが、透明なガラス効果やフリップ3Dなどの一部機能は無効化されています。また、Windows Server 2008およびServer 2008 R2では、対応GPUと「デスクトップ エクスペリエンス」機能を有効にすることでDWMが使用できます。
アーキテクチャ
Windows Vista(WDDM 1.0世代)のDWMでは、アプリケーションの描画出力は直接ビデオメモリ(VRAM)に送られず、システムメモリのオフスクリーン
バッファに保持されます。DWMが各アプリケーションのウィンドウの内容を合成して最終的な出力を行います。この仕組みはmacOSのQuartz Compositorと同様です。DWMはすべての描画内容を保持するため、複数のウィンドウにまたがる透明効果などを容易に適用できます。DWMはDirect3D 9.0Exを通してGPUを利用し、オフスクリーン
バッファから画面への描画に
CPUを使用しないようにしています。
ただし、アプリケーションがオフスクリーン
バッファへ描画する段階で、GDIのようなDWMと連携しない描画技術を用いる場合、
CPUを用いてビットマップとして描画します。Windows Presentation Foundation(WPF)のようなDWM対応の描画技術では、DWM互換の内部データを直接生成します。いずれにせよ、ウィンドウの内容はDirect3Dのテクスチャに変換されます。
Windows 7(WDDM 1.1)では、DWMのメモリ管理機構が改善され、ウィンドウ描画結果のコピーをシステムメモリに保持しなくなり、メモリ消費を抑えています。また、Windows 7のデスクトップ描画にはDirect3D 10.1 APIが使用されています。
デスクトップは全画面のDirect3Dサーフェイスであり、2つの三角形のメッシュで構成され、そこにデスクトップ全体のテクスチャが投影されます。ウィンドウの遷移アニメーションは、
シェーダープログラムによるメッシュ変形で実装されています。Windows Vistaでは組み込みの
シェーダーしか利用できませんでしたが、将来的にはプラグインによる独自効果の適用も検討されています。DWMはプライマリのデスクトップオブジェクトのみを3Dサーフェイスとして扱います。
すべての描画がオフスクリーン
バッファへ行われるようになったことで、他のアプリケーションの描画内容を取り込めるようになり、ライブサムネイルプレビューやWindowsフリップ3Dが実現しました。DWMはサムネイルを取得するAPIを提供しており、サムネイルのサイズを自由に拡大・縮小できます。Windowsフリップ3DはサムネイルAPIで取得したビットマップ画像をテクスチャに変換し、カスタム
シェーダーによって3Dメッシュに変換することで3D回転を実現しています。
DWMはMedia Integration Layer(MIL)を使用しています。MILはWPFと共同で使用するネイティブコードで、ウィンドウを合成ツリーのノードとして扱い、最終的なデスクトップ画面を描画します。MILは透明効果のためにカスタム
シェーダーを使用し、ウィンドウ枠のぼかし効果などにも利用されます。また、アプリケーション内部の描画でも任意に使用できます。
MILは合成ツリーをキャッシュする保持モードのグラフィック機構であり、ウィンドウ移動に伴う再描画はDWMとMILが制御します。これにより、ウィンドウ移動時のちらつきが排除され、変化のない領域は再描画しないなどの最適化が施されています。合成処理が複数モニターに対応しているため、DWMも複数モニターに対応しています。
リダイレクション
DWM非対応の描画技術では、出力をDWMのオフスクリーン
バッファに転送する必要があります。Windowsでは、GDIまたはDirect3Dが描画に用いられますが、DWMへ転送する機構が用意されています。
GDIで描画する場合、DWMがない状態ではVRAM上の
バッファへ描画しますが、DWM下ではシステムメモリに確保された
バッファへ描画され、その内容がDirect3D形式に変換されてVRAMに転送されます。システムメモリとVRAMの内容は常に同期されます。ただし、GDI描画にはハードウェアアクセラレーションは使用されません。また、GDIの制限により、ウィンドウが最小化されている間は
バッファの内容が更新されず、DWMは最小化直前の
バッファを保持します。
DirectXアプリケーションの場合、WDDMを通じてDWMとサーフェイスを共有し、DWMはアプリケーションのサーフェイスを直接展開します。WPFアプリケーションも同様に共有のサーフェイスに書き込みます。GDIとDirect3Dを1つのウィンドウ内で同時に使用することはできませんが、子ウィンドウ間では別々の描画技術を使用できます。ただし、GDIとDirect3Dの描画順序は保証されません。GDIのビットマップがVRAM上のサーフェイスに変換されたかどうかが保証できないためです。GDIとDirectXを混合したウィンドウを持つアプリケーションが実行中の場合、DWMは一時的に停止します。
ハードウェア要件
DWMは以下の要件を満たすGPUを必要とします。
Windows Display Driver Model(WDDM)対応
DirectX 9対応(ピクセル
シェーダー 2.0対応)
32ビットカラーモード
Windows Driver Kit(WDK)内のWindows Aero適応テストの通過
関連項目
Windows Display Driver Model
Windows Aero
DirectX
Direct3D
Direct2D
Graphics Device Interface
Windows Presentation Foundation
Quartz Compositor (macOSのウィンドウ合成システム)
外部リンク
Desktop Window Manager - Win32 apps | Microsoft Docs
APIs in the Desktop Window Manager | Microsoft Docs
*
Kenny Kerr - Windows Vista for Developers – Part 3 – The Desktop Window Manager