Desktop Window Manager

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
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 ManagerDWM、かつては Desktop Compositing EngineDCE とも)は、Windows VistaWindows 7 / 8で用いられるデスクトップ描画システムである。Windows Vista / 7ではWindows Aeroテーマ使用時などに限られていたが、Windows 8からは常にDWMを使用するようになった。

DWMが有効になる条件[編集]

Windows VistaおよびWindows 7では、Windowsテーマとしての Windows AeroまたはWindows Vistaスタンダード・Windows 7スタンダードの選択時に用いられる。Windows 8ではすべての場合においてDWMが使用される。

Windows VistaおよびWindows 7において、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 XQuartz 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]

2014年7月現在、Hyper-VVMwareなどの仮想マシン内でこの要件を満たすハードウェアは出現していない。

脚注[編集]

[ヘルプ]
  1. ^ Desktop Window Manager is always on”. MSDN Library. マイクロソフト (2012年11月28日). 2013年3月18日閲覧。
  2. ^ Windows Server 2008 を実行しているコンピュータで Windows Vista のユーザー エクスペリエンス機能を有効にする方法”. Knowledge Base. マイクロソフト (2008年2月20日). 2009年6月7日閲覧。
  3. ^ a b c Greg Schechter. “DWM's use of DirectX, GPU and hardware acceleration” (英語). Greg Schechter's Blog. MSDN Blogs. 2007年10月14日閲覧。
  4. ^ Greg Schechter. “Responding to Comments from "DWM's use of DirectX, GPU and hardware acceleration"” (英語). Greg Schechter's Blog. MSDN Blogs. 2008年4月20日閲覧。
  5. ^ Chris Jackson. “Desktop Window Manager only runs on the primary desktop” (英語). Chris Jackson's Semantic Consonance. MSDN Blogs. 2007年10月14日閲覧。
  6. ^ a b c Greg Schechter. “Under the hood of Desktop Window Manager” (英語). Greg Schechter's Blog. MSDN Blogs. 2007年10月14日閲覧。
  7. ^ 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日閲覧。
  8. ^ a b c Greg Schechter. “Redirecting GDI, DirectX, and WPF applications” (英語). 2007年10月14日閲覧。
  9. ^ Windows Vista のシステム要件”. マイクロソフト (2008年6月13日). 2009年6月7日閲覧。

外部リンク[編集]