Vertex Array Object

vertex-array-object.png

VAO は頂点 Attribute の情報を保存し、描画時に利用することができます。
つまり、今まで描画する度にglVertexAttribPointerを呼んでいたのが、しなくてよくなるわけです。

頂点情報とインデックス情報は1つのVAOにまとめることが出来ます。
new type of GL object, the "vertex array object", which stores a set of bindings to vertex arrays; this allows such arrays to be rebound with one function call rather than several calls to EnableVertexAttribArray, VertexAttribPointer, etc.

GLuint vbo = 0;
        glGenBuffers(1, &vbo);
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(float), points, GL_STATIC_COPY);
GLuint vao = 0;
        glGenVertexArrays(1, &vao);
        glBindVertexArray(vao);
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);

OpenGL 3.x (core profile) 以降は VAO が必須で、glBindVertexArray() が無いと
glVertexAttribPointer() がエラーになります。

描画する時

glBindVertexArray(mVaoID);//vaoをバインドするだけ!
glDrawelEments(GL_TRIANGLES,...);

opengl3

サポートサイト Wikidot.com opengl3