DirectX プログラミング

例えば沢山のオブジェクトを描画したくて DrawPrimitive の頂点バッファを作るとき、その頂点バッファをどうやって作るのが正しいのかということについて。

[方法1]
DrawPrimitive で描画する単位で CreateVertexBuffer を使って頂点バッファを作成しておく。(配列とかリストにしておく)
それを順番に DrawPrimitive で描画していく。

[方法2]
一回だけ CreateVertexBuffer を使って全てのオブジェクトの頂点バッファを作成しておく。
それを StartVertex でオフセットを指定して DrawPrimitive で順番に描画していく。

最初は StartVertex を指定するのが面倒くさいと思って 1 の方法でコーディングしていたのですが、オブジェクトの数が何十万とかになってくると CreateVertexBuffer が E_OUTOFMEMORY を返すようになってきました。

で、2の方法に変更すると問題なく動くのでやっぱり正しいのは2なんでしょうね。

一人でプログラミングしていると、誰にも聞けないのでやたらと時間がかかるときがあります。最初は「E_OUTOFMEMORYというのなら幾つまでなら作れるのか?」という視点で調べて、全く情報がないことに途方にくれていました。そのうちに書き方が違うのではないかということに気付いたのですが、それでも「正しい書き方」についての情報も見つけることはできませんでした。きっと知っている人には低レベルの問題だったのでしょうけど。

「DirectX プログラミング」への2件のフィードバック

  1. これって、すごい情報ではないですか。
    それにしても、メモリを解放する手段ぐらい用意してくれりゃいいのに。-> Microsoft

  2. DirectX を使う人はゲームを作る人が多いので、こういった使い方はあまり情報として出てこないのかも知れませんね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください