昨日今日と、今やろうとしていることになんとなくパーティクルあたりのサンプルも参考になるのではということで、「FluidCS11」サンプルのシェーダーコード辺りを読んでいた。
このサンプルは2次元流体シミュレーションをコンピュートシェーダーで行って表示するというサンプルで、構造化バッファーを使って演算、描画を行っている。構造化バッファーは読み書き可能なものと読み取りのみのものがあり、DirectX11では読み書き可能なバッファーはコンピュートシェーダーとピクセルシェーダーからのみアクセス可能である。このサンプルでは読み書き可能バッファーを使いコンピュートシェーダーで計算して、それを読み取りのみのバッファーに丸ごとコピーして描画している。
この方法を使えばBox2Dの物理演算もGPUにさせることができそうだけれども、今の私には無理なので、Box2Dフィクスチャーにくっつくシェイプの座標変換を行う部分をコンピュートシェーダーにやらそうかなとか考えているけど、ポリゴン・シェイプとかだと頂点の数が可変なので普通に定数バッファー+頂点シェーダーでやる方がよいかもしれない。サンプルを観ながらそのあたりを思案しているところだ。
DirectX11.1になると読み書き可能バッファーはすべてのシェーダーステージで使用することができる。これを使えば読み書きバッファーから読み取りバッファーへのコピー操作が不要となる。DirectX11.1は小幅なバージョンアップのように思っていたけど、結構いろいろな変更が行われている。大まかにはWindows8のUIのための拡張がほとんどように思えるけれど。