2013-07-11 11 views
9

現在、私は、テクスチャ、VAOとVBOが含まれていRenderObjectクラスのコレクションを持っています。これらのオブジェクトの数千人を描画することは、すべての状態の切り替えにパフォーマンスの低下を招きし、三角形の小さな数字でglDrawArraysに呼び出します。各VBOにVAOが必要ですか?

ここでは、1MiB VBOシリーズを作成するように実装を変更するつもりです(1つで始まり、いっぱいになると2番目の1MiB VBOが作成され続けます)。 VBOごとに別々のVAOが必要ですか? VBOはすでに、インターリーブ頂点データを使用していますので、私は、私はいくつかの混乱があるかもしれないと思うなど、頂点、法線、テクスチャCOORDSため

答えて

10

を複数VBOsを使用しての話ではありません。頂点はattribsは(等を法線が1であろう他のUVS)は、単一の頂点で渡すことができ、頂点あたりの要素の数を指します。あなたの実装では、それはあなたがおそらく超えない16に制限されています。

VAOsは、単一のドローコールを発行するために必要な状態情報を格納します。これには、その呼び出しにどのVBOをバインドする必要があるかが含まれます。それぞれのVBOを描画しなければならないことを考えると、私はあなたにVAOがそれぞれのセットアップ情報を保存する必要があると思います。

はここで良い説明です:

http://ogldev.atspace.co.uk/www/tutorial32/tutorial32.html

+0

良い点、感謝、私は頂点ATTRIBのものを削除しました。 –

+0

@MarkIngram私は、他の読者のために、質問でそれを続けるだろう。 –

+1

VAOがVBOバインディングポイント(ARRAY_BUFFER_BINDING)をバインドしていないのは100%ですが、3.3コア仕様pdfのVAO状態テーブルページを見ると、次のppで「 VAO状態 "となる。また、https://twitter.com/id_aa_carmack/status/409495250646753280 https://www.opengl.org/registry/doc/glspec33.core.20100311.withchanges.pdfをチェックしてください。pp 281と282をご確認ください。 私はあなたがリンクしているチュートリアルは、いつも再利用されているものと同じ要素配列バッファーをソースしているか、または要素配列バッファーがどのVBOを使用するかを確かに保持しているからです。 – Amadiro