DirectX9で、CPU上でごりごりとテクスチャ処理して
VRAMに転送し、普段使うのはその転送後のテクスチャという方式を考えてみました。CPU上のテクスチャは D3DPOOL_SYSMEMで作り、
VRAM上のテクスチャは D3DPOOL_DEFAULTで作るという方法です。
この転送には、IDirect3DDevice9::UpdateTexture メソッドが使えます。
VRAMに転送し、普段使うのはその転送後のテクスチャという方式を考えてみました。CPU上のテクスチャは D3DPOOL_SYSMEMで作り、
VRAM上のテクスチャは D3DPOOL_DEFAULTで作るという方法です。
この転送には、IDirect3DDevice9::UpdateTexture メソッドが使えます。
少々メモリは食いますが、
CPUからの操作のやりやすさと、実行パフォーマンスという点では
この方法は結構いけてると思っています。
で、1つ手間取った部分がありました。
デバイスロスト等で再度テクスチャを転送しなくてはいけないときに、
何も考えずにUpdateTextureをしても反映されませんでした。
どう対処するかというと、転送元のテクスチャにダーティフラグをつけておかなくてはならないようです。
これには、AddDirtyRect メソッドがあります。
とりあえずロック&書き込みしないような転送前には全領域をダーティとしてマークしておけば、UpdateTextureで正しく送ることが出来ます。
知っていれば、なんてことはないネタですが
自分の防備録として日記に残しておきました。
コメント