VertexBufferとIndexBufferを使い、できるだけ1回でレンダリングできるように変更してみた。
仕様としては、
VertexBufferに頂点登録→最後にDrawIndexedPrimitiveで描画、
という流れ。
テクスチャやレンダリングステートが変わる部分ではどうしようもないので、
そこを区切りにレンダリング、それからバッファをクリアして、新たに登録&描画。
VertexBufferで確保するメモリ量は頂点128個分、
途中で足りなくなったら、とりあえずいったんレンダリングし、
その後バッファをクリアしてから頂点を登録する動作に戻る。
四角形ポリゴン以外レンダリングする気がないので、
インデックスはバッファを作成したついでにLockして書き込んでおき、2度と変更しない。
で、結果なんだけど、
壁は一気に全部描画しても頂点は128以下なので1回でレンダリングできて問題なし。
壁のエフェクトも同様。
オブジェクトの表示がすごいチカチカする。
自分のアプリケーションでは垂直同期をまたないので、
バッファのLock、Unlockをするたびに画面になんかでちゃってるのではないかと思う。
もう一度組みなおしてみたところ、この現象に遭遇しなくなった。
組み方が悪かったらしい。
1000回ほどのDrawPrimitiveを1回のDrawIndexedPrimitiveにすると、
確かに速度がアップした。200回ならともかく1000回ぐらいにもなると差が出るようで。
VertexBufferとIndexBufferを使うのをやめた。
何も開発に進展がないけど、まあ少し詳しくなったからいいか。
それ以前にバッファってどれくらいまで確保していいのかがわからん。
もっと使ってもいいのかしら。
あれこれしらべてたら「まじあん」の人は普通にDrawPrimitiveUpを使ってるみたいなんで、
明日はこの方向でいってみようとおもう。
(追記)問題は解決したが、物は試しにインデックスを使用しない方法も試してみよう!
0 件のコメント:
コメントを投稿