ずいぶん長い間ご無沙汰していたDirectXを使ってみる。
10年くらい前のバージョンと比較して、いろいろと進化しているようだ。
過去に作ったちょっとしたエフェクトやアプリの移植をしつつ、詰まった点や解決策を残していく。
今回詰まった点はエフェクトで使う頂点バッファの書き換え。メッシュの変形とか。
頂点バッファの書き換えを行う
頂点データの書き換えを行っていろいろな演出ができる。
手元にある過去のDirectXを使ったコードだとバッファのlock, unlockなどをやっていた。
DirectX11では、VRAMへの頂点データの転送には「UpdateSubresource」という関数を使う。
(IASetVertexBuffersだけでは、システムメモリ上の頂点データの変更がVRAMに反映されない。)
変数として宣言した頂点データはシステムメモリ上にしか載っていないので、VRAM側に転送してやる必要がある。
変数いくら書き換えても反映されないのはこれが原因。
描画はVRAM側に置かれてる頂点データを参照してしまうのだから。
他にもいくつか方法があるようだが、まずは今回はコレで。
(開いていたMSDNのページ閉じちゃったorz 眠いし今日はこれくらいで。)