Vertex Array Objectは、OpenGLが一連のVBOを解釈する方法を格納します。
本質的には、新しいメッシュをレンダリングするたびにglVertexAttribPointerを呼び出さないようにします。
VAOを扱いたくない場合は、プログラムの初期化中にVAOを作成してバインドし、存在しないふりをするだけです。
void glEnableVertexAttribArray(GLuint attribIndex);
void glDisableVertexAttribArray(GLuint attribIndex);
void glVertexAttribPointer(GLuint attribIndex、GLintサイズ、GLnum型、GLboolean正規化、GLsizei stride、const GLvoid *ポインタ);
void glVertexAttribFormat(GLuint attribIndex、GLintサイズ、GLenumタイプ、GLboolean正規化、GLuint相対オフセット)。
void glVertexAttribBinding(GLuint attribIndex、GLuint bindingIndex);
void glBindVertexBuffer(GLuint bindingIndex、GLuintバッファ、GLintptrオフセット、GLintptrストライド);
パラメータ | 詳細 |
---|---|
attribIndex | 頂点配列がデータを供給する頂点属性の場所 |
サイズ | 属性から引き出されるコンポーネントの数 |
タイプ | バッファ内の属性データのC ++型 |
正規化された | 浮動小数点範囲[0、1](符号なしの場合)または[-1、1](符号付きの場合)に整数型をマップするかどうか。 |
ポインタ | 属性データの最初のバイトまでのバッファへのバイトオフセット(従来の理由からvoid* にキャスト) |
オフセット | バッファの先頭から配列データの開始位置までの基本バイトオフセット |
relativeOffset | バッファの基本オフセットに対する特定の属性へのオフセット |
ストライド | 1頂点のデータから次の頂点のデータまでのバイト数 |
バッファ | 頂点配列が格納されているバッファオブジェクト |
bindingIndex | ソースバッファオブジェクトがバインドされるインデックス |
別個のアトリビュートフォーマットVAOセットアップは、 glVertexAttribPointer
相互運用できます(後者は前者の定義で定義されています)。しかしそうするときには注意が必要です。
別の属性フォーマットバージョンは、4.5の同等の直接的なアクセス(DSA)を持っています。これらは同じパラメータを持ちますが、バインドされたVAOを使用する代わりに、変更されるVAOは明示的に渡されます。 glDrawElements
DSAインデックスバッファを使用する場合、 glVertexArrayElementBuffer(vao, ebo);
で設定できますglVertexArrayElementBuffer(vao, ebo);