Nov 23, 2008 - D3DImage
本業では.NET Framework3.5SP1を使ってWPFアプリケーションを開発しておりますが、描画に時間のかかる処理はDirect3Dとシェーダプログラミングで実装しています。
3.5までは、HwndHostクラスを使って子ウィンドウを作り、その中でDirect3Dの描画を行うウィンドウクラスをC++で実装していたため、WPFの子要素としては不完全な作りにしかできませんでしたが、3.5sp1ではD3DImageを使うことでrender-target surfaceをImageSourceとして扱えるようになり、とても便利になりました。
が、MSDN LibraryのD3DImageクラスに関する解説記事で紹介されているC++で実装したDirect3Dのサンプルコードは、複数のD3DImageインスタンスで異なる内容の表示を持とうとすることができなくて、結構苦労しました。あのサンプルコードは、マルチディスプレイを考慮して、それぞれのディスプレイごとにIDirect3DDevice9インスタンスを作成する例になっていますが、その結果、一種類のデータしか表示することができません。
私は複数のD3DImageで別々の内容を表示しなければなりませんでしたから、ディスプレイごとの情報と、D3DImageインスタンスごとに異なる情報を保持できるようにプログラムを作成しましたが、とても複雑になってしまいました。
もうちょっと作りやすくなっていたらよかったのに。