2012-01-11 45 views
5

私はglBufferDataに与えるバッファを構築したり、変更してシーンをレンダリングしています。 Vertex Array Objectsの私の理解は、私が使用しているすべてのVBOの手動バインドをスキップできるようにすることです。これは、私のバッファを常に更新する場合にも当てはまりますか?VBOを変更する必要がある場合、VAOを再構築する必要はありますか?

私はVAOをバインドして、glBufferDataと呼んで、頂点とインデックス(私が現時点で持っている唯一の2つのVBO)を更新してからレンダリングできますか?

VBOでメモリマッピングを使用できますか?その後、VAOをバインドし、バッファを変更してからレンダリングできますか?

VAOは正確に何をしていますか? VBOに頂点属性のバインディングを保存して自動化するショートカットの機能ですか?データまたはバインディングの所有権を取得していますか?

答えて

3

あなたはおそらくこれをテストする必要がありますが、私の理解からVBOは生成時にIDが与えられ、VAOは使用しているVBO IDとともに各頂点の属性のみを参照します。 glBufferDataまたはglBufferSubDataに電話できる必要があります。私はドローコールの直前にメモリマッピングがうまくいくかどうかは分かりませんが、VAOと描画をバインドすること間違いなく可能です。 VAOはVBOをロックしたり、アクセスを制限したりしません。

一般に、VAOは属性とすべての設定(VBO、ストライド、オフセットなど)を保存し、バインド時に自動的に属性をバインドします。 glBindVertexArray(0);を呼び出すまで、すべての頂点属性はバインドされたVAOに結び付けられます。

+0

VAOは、バインドしたVBOに影響しませんか?私はそれらをバインドし、 'glBufferData'を呼び出す必要があります。 –

+0

@Robert Rouhaniあなたの頂点のレイアウトがほとんどの描画で同じであることを考慮すると、VBOごとに別の頂点属性を格納する必要があるというのは非常にばかげています。私はこれを避けようとしばらくしたが、どこにもいなかった。 – Zebrafish

+0

@TitoneMaurice取られるスペースの量は最小限(バイトオーダ)でなければなりません。別の属性をバインドする余分なGL呼び出しがボトルネックになってはいけません。あなたが望む最も近いものがインスタンス化している、私の意見では、他のものは不必要な/時期尚早の最適化ではありません。 –

関連する問題