さまざまな頂点属性の VBO を持つ VAO があります: 頂点位置、頂点法線、および要素配列 VBO (すべて STATIC_DRAW) で、インスタンスのレンダリングに必要なものは次のとおりです。
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, <count>, <type>, 0);
ただし、インスタンスごとに異なる頂点テクスチャ (s、t) 座標を使用して、オブジェクトの複数のインスタンス (私は OS X GL 3.2 コア プロファイル BTW に制限されています) を描画したいと考えています。texcoord VBO は STREAM_DRAW ヒントを使用します (ただし、DYNAMIC_DRAW を使用するとうまくいく可能性があります)。
VAO をバインドし、現在の texcoord VBO をバインドし、 を介して属性ポインタを設定glVertexAttribPointer
し、VAO をファイナライズして、glBindVertexArray(0)
異なるテクスチャ座標で新しいインスタンスを描画する方が効率的ですか? それとも、VAO を更新するためのコストがかかるため、これはお粗末なアプローチになるのでしょうか? バインドされたVAO で texcoord VBO を更新するのはどうglBufferSubData
ですか?
間違った選択は大幅なリファクタリングにつながるため、別々のアプローチをベンチマークする前に、いくつかのフィードバックをいただければ幸いです。