catalinaの備忘録

ソフトウェアやハードウェアの備忘録。後で逆引きできるように。

DirectX11を使ってみる(頂点バッファデータの書き換え)

ずいぶん長い間ご無沙汰していたDirectXを使ってみる。
10年くらい前のバージョンと比較して、いろいろと進化しているようだ。

過去に作ったちょっとしたエフェクトやアプリの移植をしつつ、詰まった点や解決策を残していく。
今回詰まった点はエフェクトで使う頂点バッファの書き換え。メッシュの変形とか。

頂点バッファの書き換えを行う


頂点データの書き換えを行っていろいろな演出ができる。
手元にある過去のDirectXを使ったコードだとバッファのlock, unlockなどをやっていた。

DirectX11では、VRAMへの頂点データの転送には「UpdateSubresource」という関数を使う。
(IASetVertexBuffersだけでは、システムメモリ上の頂点データの変更がVRAMに反映されない。)

変数として宣言した頂点データはシステムメモリ上にしか載っていないので、VRAM側に転送してやる必要がある。
変数いくら書き換えても反映されないのはこれが原因。
描画はVRAM側に置かれてる頂点データを参照してしまうのだから。

他にもいくつか方法があるようだが、まずは今回はコレで。
(開いていたMSDNのページ閉じちゃったorz 眠いし今日はこれくらいで。)