I am confused with the point in generating/creating a Vertex Array Object (VAO) with:

glGenVertexArrays(GLsizei n, GLuint *arrays);

and

glBindVertexArray(GLuint);

Because I can still create a buffer object, say for vertices, and describe that buffer object with glVertexAttribPointer and glEnableVertexAttribArraywithout ever creating a VAO.

My question is if you do not have to actually create the VAO to describe the data in a buffer object, why would such sources as the OpenGL SuperBible 5ed include a call to create a VAO when creating VBOs? Are they only used for more advanced topics I have yet to discover, am I totally confused?

Also I first encountered this question when reading wikipedias entry on VBOs and their sample code includes no calls to glGenVertexArrays() but they still describe the data with glVertexAttribPointer().Wiki VBO entry -- Example where VAOs are created for what reason?

Edit
Report