シューティングゲーム(19)D2DとD3D11を共存させる?

公開:2010-01-15 18:56
更新:2020-02-15 04:36
カテゴリ:windows,direct2d,シューティングゲーム,ゲーム,directx,c++,ゲーム製作

下記記事を参考に、D2DとD3D11を共存させるべくようやくコードを書き始めた。

Surface Sharing Between Windows Graphics APIs - MSDN
http://msdn.microsoft.com/en-us/library/ee913554(VS.85).aspx

自分にとって興味のある2点ほど抜き出し要約(要訳?)すると、

1.D2D,D3D10.1,D3D11は共存動作が可能
※ここでいう共存動作とは、Direct2D描画とDirect3D描画が同一画面で混合できることを指す。

2.D2D,D3D10.1は容易に共存動作することが可能
D3D10.1のAPIを使ってスワップチェーンをつくり、スワップチェーン中のバックバッファをCreateDxgiSurfaceRenderTargetによりDirect2Dの描画対象とすることで、共存動作する。

3.D2D,D3d10.1とDirect3D11との共存動作は同期共有サーフェースという特殊なサーフェースを経由することによって行なう。
D2D/D3D10.1とD3D11は直接共存動作させるAPIはなく、同期共有サーフェースとDXGI1.1のAPIを使用して共存動作させる。共存動作させるコードは排他オブジェクトを使用するもので若干複雑。

2.はサンプルコードもあり、実際にコードを書いてみたけどとても簡単だ。3.はサンプルコードがなぜか複数のD3D10.1デバイスの共存動作例であり、一番共存の可能性の高いD2D・D3D11デバイスのコード例はなく、端折られている。
以下MSDNの引用。

Similarly, for sharing between Direct3D 11 and Direct3D 10.1 APIs, a synchronized shared surface can be created from either API device and shared with the other API device(s), in or out of process.
そういうわけで自力で共存動作コードを書き始めたわけだけれど、D3D10の知識でなんとかなるさ!と思ったけどD3D11はこれまたいろいろ変わっていて大変。Effect周りのAPIが正式リリースされていなかったりとかでD3D10コードをちょこっといじるだけでは動かない。D3D9→D3D10ほどではないけれど。

なぜD2D,D3D11でやりたいのかというと「D3D11のComputeShaderを使ってみたい、でもD2Dで楽したい。」から。

まあ暇だし勉強しがてら進めることにする。