Desktop Window Manager
| Desktop Window Manager Microsoft Windows コンポーネント |
|
|---|---|
| 詳細 | |
| 標準提供 | Windows Vista Windows Server 2008 Windows 7 Windows 8 |
| サービス名 | UxSms |
| 正式名称 | Desktop Window Manager Session Manager |
| 関連コンポーネント | |
| DirectX Graphics Device Interface Media Integration Layer Windows Aero |
|
Desktop Window Manager (DWM、かつては Desktop Compositing Engine、DCE とも) は、Windows Vista と Windows 7/8 で用いられるデスクトップ描画システムである。Windows Vista/7ではWindows Aeroテーマ使用時などに限られていたが、Windows 8からは常にDWMを使用するようになった。
目次 |
DWMが有効になる条件[編集]
Windows VistaおよびWindows7では、Windows テーマとしての Windows AeroまたはWindows Vista スタンダード・Windows 7 スタンダードの選択時に用いられる。Windows 8ではすべての場合においてDWMが使用される。
Windows VistaおよびWindows7において、DWM の実行にはDirect3D 9.0Ex とシェーダー モデル 2.0 に対応したビデオカードが必要である。Windows 8では、ビデオカードが対応していない場合にソフトウェアでDWMの処理が行われる[1]。
DWM は Windows Vista Starter エディションには搭載されていない。Windows Vista Home Basic エディションには DWM が搭載されているが、透明なガラス効果やフリップ 3D など一部の機能は無効にされている。また、Windows Server 2008およびServer 2008 R2 でも対応するビデオカードを用い、「デスクトップ エクスペリエンス」機能を有効にすることで DWM が使用可能となる[2]。
アーキテクチャ[編集]
DWM の下では、アプリケーションソフトウェア(以下アプリケーション)の描画出力は直接ビデオメモリ(VRAM)に送られず、システム メモリのオフスクリーン バッファに保持される。そして、各アプリケーションのウィンドウの内容を DWM が最終的に合成して出力する。なお、Mac OS X の Quartz Compositor も同様の仕組みを用いている。DWM がすべてのアプリケーションの描画内容を保持するため、透明効果のような複数のアプリケーション ウィンドウに跨る効果が容易に適用できる。DWM では Direct3D 9.0Ex を通して GPU を利用し、オフスクリーン バッファから画面への描画に用いる過程に CPU を用いない仕組みとなっている。ただし、アプリケーションがオフスクリーン バッファへ描画する段階では、Graphics Device Interface (GDI) のような DWM と密な連携を持たない描画技術を用いる場合、オフスクリーン バッファへCPUを用いてビットマップとして描画することになる。Windows Presentation Foundation (WPF) のような DWM 対応の描画技術では、DWM 互換の形式の内部データを直接生成する。いずれにせよ、ウィンドウの内容は Direct3D のテクスチャへ変換される。
デスクトップは全画面の Direct3D サーフェースとなっている。2D の長方形を表現する 2 つの三角形のメッシュからなっており、デスクトップの画面全体を表すテクスチャがそこへマップされる。ウィンドウの変化は、シェーダ プログラムでメッシュの変化として実現されている[3]。Windows Vista では、この変化はDWM内蔵のものしか利用できない。マイクロソフトの開発者である Greg Schechter は、将来的にプラグイン方式で独自の効果を適用できるようにするかもしれないと示唆している[4]。DWM はプライマリのデスクトップ オブジェクトのみを 3D サーフェースとして扱う。ユーザーアカウント制御 (UAC) のセキュア デスクトップを含む他のデスクトップ オブジェクトでは使用できない[5]。
すべてのアプリケーションの描画がオフスクリーン バッファへ行われるようになった結果、他のアプリケーションが描画した内容を取り込めるようになった。オフスクリーン バッファはアプリケーションが絶えず更新するため、取り込んだ描画内容も動的に変化し続ける。これによって、ライブ サムネイル プレビューや Windows フリップ 3D が実現されている。DWM はサムネイルを取得する API を公開している[6]。サムネイルの大きさは固定されておらず、好きな大きさに拡大・縮小した画像を取得できる。Windows フリップ 3D はサムネイル API を用いてウィンドウの内容をビットマップ画像として取得し、2D 長方形のテクスチャに変換し、カスタム シェーダーによって 3D メッシュへ変換して、3D 上で回転のする動作を実現している。
DWM は Media Integration Layer (MIL) を用いている。これは、WPF と共同で使用するネイティブ コードで、各ウィンドウを合成ツリーの中の合成ノードとして扱い、最終的なデスクトップ画面を描画するシステムである[7]。最終的な出力を行う際、複数のウィンドウから出力するピクセルの色を決定する場合もある。つまり、ピクセル毎の透明効果が実装されている。DWM はそれを実現するためにカスタム シェーダを使用している。これらのシェーダは、ウィンドウ枠のぼかし効果などに DWM が使っているほか、アプリケーション内部の描画でも任意で使用可能である[3]。
MIL は合成ツリーのキャッシュという形態による保持モードのグラフィック機構である。ウィンドウの移動に伴う再描画・リフレッシュはアプリケーションの関与無しに DWM と MIL が制御している。その際、ウィンドウの内容はオフスクリーン バッファのものを用いるため、以前のように WM_PAINT を投げてアプリケーションに再描画を求めなくなっている[6]。これにより、DWM はダブル バッファによってウィンドウ移動時のちらつきを排除し[6][3]、変化のない領域は再描画しないなどの最適化も行われている[7]。合成処理が複数モニタの環境に対応しているため、DWM も複数モニタに対応している[7]。
リダイレクション[編集]
DWM 非対応の描画技術では、出力を DWM のオフスクリーン バッファへ転送しなければならない。Windows では、GDI もしくは Direct3D が描画に用いられるが、共に DWM へ転送する機構が用意されている。
Windows で UI の描画に最もよく用いられている GDI は、各アプリケーションはウィンドウが表示される状態になったときに通知を受け、自身で描画するという形態をとっている。DWM のない状態では、VRAM 上のバッファへ描画することになる。DWM の下では、ウィンドウと同じ大きさのバッファがシステム メモリ上に確保され、GDI での描画はそこへ行われるようになる。さらに、VRAM 上に Direct3D サーフェースが確保され、システム メモリのバッファの内容がそこへ Direct3D 形式へ変換しながら転送されるようになっている。システム メモリのバッファと VRAM 上の内容は常に同期されるようになっている。システム メモリへの GDI 描画には一切のハードウェア アクセラレーションが行われない。GDI の制限により、ウィンドウが最小化している間、バッファの内容は更新できない。その間、DWM は最小化直前のバッファの内容を保持し続ける[8]。
3D サーフェースへ書き込む DirectX アプリケーションの場合、Windows Vista の DirectX の実装が DWM とサーフェースを共有するよう WDDM を用いており、DWM はアプリケーションのサーフェースを直接、展開する。WPF アプリケーションでも同様に共有のサーフェースへ書き込む[8]。GDI と Direct3D のような複数の描画技術を 1 つのウィンドウで用いることは不可能だが、1 つのメイン ウィンドウ内に存在する複数の子ウィンドウ同士の間ではそれぞれ別のものを使用できる。その場合、GDI と Direct3D の間で描画順序の保証はない。システム メモリの GDI ビットマップが既に VRAM 上のサーフェースに変換されたかどうか保証できないためである[8]。これを禁じたため、GDI と DirectX を 1 つのウィンドウで混合して用いるウィンドウを持つアプリケーションが実行中の場合、DWM は一時的に停止する。
ハードウェア要件[編集]
DWM は次の要件を満たすハードウェアを必要とする[9]。
- Windows Display Driver Model (WDDM) 対応の GPU
- DirectX 9 対応
- ピクセルシェーダ 2.0 対応
- 32ビットカラー
- Windows Driver Kit (WDK) 内の Windows Aero 適応テストの通過
2013年6月現在、Hyper-V や VMware などの仮想マシン内でこの要件を満たすハードウェアは出現していない。
脚注[編集]
- ^ “Desktop Window Manager is always on”. MSDN Library. マイクロソフト (2012年11月28日). 2013年3月18日閲覧。
- ^ “Windows Server 2008 を実行しているコンピュータで Windows Vista のユーザー エクスペリエンス機能を有効にする方法”. Knowledge Base. マイクロソフト (2008年2月20日). 2009年6月7日閲覧。
- ^ a b c Greg Schechter. “DWM's use of DirectX, GPU and hardware acceleration” (英語). Greg Schechter's Blog. MSDN Blogs. 2007年10月14日閲覧。
- ^ Greg Schechter. “Responding to Comments from "DWM's use of DirectX, GPU and hardware acceleration"” (英語). Greg Schechter's Blog. MSDN Blogs. 2008年4月20日閲覧。
- ^ Chris Jackson. “Desktop Window Manager only runs on the primary desktop” (英語). Chris Jackson's Semantic Consonance. MSDN Blogs. 2007年10月14日閲覧。
- ^ a b c Greg Schechter. “Under the hood of Desktop Window Manager” (英語). Greg Schechter's Blog. MSDN Blogs. 2007年10月14日閲覧。
- ^ a b c Greg Schechter. “How underlying WPF concepts and technology are being used in the DWM” (英語). Greg Schechter's Blog. MSDN Blogs. 2007年10月14日閲覧。
- ^ a b c Greg Schechter. “Redirecting GDI, DirectX, and WPF applications” (英語). 2007年10月14日閲覧。
- ^ “Windows Vista のシステム要件”. マイクロソフト (2008年6月13日). 2009年6月7日閲覧。
外部リンク[編集]
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||