DirectX プログラミング
例えば沢山のオブジェクトを描画したくて DrawPrimitive の頂点バッファを作るとき、その頂点バッファをどうやって作るのが正しいのかということについて。
[方法1]
DrawPrimitive で描画する単位で CreateVertexBuffer を使って頂点バッファを作成しておく。(配列とかリストにしておく)
それを順番に DrawPrimitive で描画していく。
[方法2]
一回だけ CreateVertexBuffer を使って全てのオブジェクトの頂点バッファを作成しておく。
それを StartVertex でオフセットを指定して DrawPrimitive で順番に描画していく。
最初は StartVertex を指定するのが面倒くさいと思って 1 の方法でコーディングしていたのですが、オブジェクトの数が何十万とかになってくると CreateVertexBuffer が E_OUTOFMEMORY を返すようになってきました。
で、2の方法に変更すると問題なく動くのでやっぱり正しいのは2なんでしょうね。
一人でプログラミングしていると、誰にも聞けないのでやたらと時間がかかるときがあります。最初は「E_OUTOFMEMORYというのなら幾つまでなら作れるのか?」という視点で調べて、全く情報がないことに途方にくれていました。そのうちに書き方が違うのではないかということに気付いたのですが、それでも「正しい書き方」についての情報も見つけることはできませんでした。きっと知っている人には低レベルの問題だったのでしょうけど。