読者です 読者をやめる 読者になる 読者になる

Windows Presentation Foundation

DirectX .NET

Windows Presentation Foundation (WPF) は Unmanaged な描画サブシステム*1の上に構築された,.NET による GUI フレームワークです.以下のような機能を持ち,ブラウザ,Flash,ゲームスクリプトエンジン(吉里吉里など)と類似した問題領域をカバーすると考えられます.

  • ベクタグラフィックス
  • アニメーション
  • GUI ツールキット
  • メッセージング
  • 専用記述ファイル
  • リモーティングによる GUI のサーバ・クライアントの分離

Windows OS との関係ですが,ウィンドウのクライアント領域をまるまるフレームバッファとして使用し,Win32 の提供するウィンドウシステムやメッセージング機構は基本的に使用しません*2.この点でブラウザ,Flash,ゲームスクリプトエンジンとよく似ています.この影響により,外部アプリケーションから SendMessage でリストボックスの中身を取り出すなんてのもできなくなりますし,メッセージフックとサブクラス化によってコントロールの拡張を行うのもアウトになります.また,いくら WPF が便利に見えても Unmanaged な世界から利用する手段は見た感じなさそうに見えます.
WPFWindows XP にも移植されていますが,この辺りから MIL が使用する最も低レベルの API はせいぜい DirectX9 程度で,カーネル内部に深く結びついてはいないと予想されます*3
意外に思われるかもしれませんが,Microsoft Expression は,「.NET で実装され,描画に DirectX を使用するアプリケーション」です.実際 Windows XP に以下の 2 つをインストールし,再起動もなく Expression が起動することから,WinFX の方向性がカーネルモードの拡張ではなくユーザモード方向の建て増しにあるという印象を強固にします.

せっかくなので証拠写真.



Windows XPExpression Interactive Designer January 2006 CTP を起動し,ロードされた DLL を Process Explorer で確認してみたもの.(クリックで拡大)

DirectX9 を使用していること,GDIPlus.dll が存在しないこと,.NET の GC カウンタが増えていっていることがわかります.


さらに Windows Vista Build 5308 日本語版で同じ Expression を起動してみた様子です.(クリックで拡大)

なお Expression の操作感は Vista の方がすでに快適です.原因はいくつか考えられますが,Vista の DirectX9.L では StretchRect 等の処理にチューニングが入っている可能性が高く,この辺は後で要検証.


さて,WPF が下位レイヤーで DirectX9 を使っているのなら,原理上 PIX for Windows の守備範囲です,というわけで見てみました.(クリックで拡大)

ふつうに Stream Playback に成功しました.API の呼び出しを見てみると,結構頻繁に テクスチャのロックを行っていたり SetRenderTarget を行っていたりとなかなかおもしろいです.


というわけで,「.NET から DirectX 描画」をしたいだけなら Expression をインストールして,適当に貼り付けて F5 を押せばそれで完了だったりするのです.
個人的には,紆余曲折を経て XNA Framework へ突撃中の Managed DirectX に比べて,WinFX としての WPF の方が先に製品としてものになりそうな気がしています.

*1:Media Integration Layer

*2:WPF のウィンドウ上に Win32 コントロールをホストすることは一応可能

*3:追記.詳細については Windows Presentation Foundation (Avalon) FAQ に詳しい.初期出荷バージョンの WPF は DirectX9 Shader Model 2 あたりまでを利用するが,ソフトウェアエミュレーションにも対応とのこと.