Estoy empezando a aprender OpenGL hoy con este tutorial: http://openglbook.com/the-book/
Llegué al capítulo 2, donde dibujo un triángulo, y entiendo todo excepto los VAO (¿está bien este acrónimo?). El tutorial tiene este código:
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
Si bien entiendo que el código es necesario, no tengo ni idea de lo que hace. Aunque nunca uso VaoId más allá de este punto (excepto para destruirlo), el código no funciona sin él. Supongo que esto se debe a que debe estar vinculado, pero no sé por qué. ¿Este código exacto solo necesita ser parte de todos los programas OpenGL? El tutorial explica los VAO como:
Un Vertex Array Object (o VAO) es un objeto que describe cómo se almacenan los atributos de vértice en un Vertex Buffer Object (o VBO). Esto significa que VAO no es el objeto real que almacena los datos del vértice, sino el descriptor de los datos del vértice. Los atributos de vértice se pueden describir mediante la función glVertexAttribPointer y sus dos funciones hermanas glVertexAttribIPointer y glVertexAttribLPointer, la primera de las cuales exploraremos a continuación.
No entiendo cómo la VAO describe los atributos de vértice. No los he descrito de ninguna manera. ¿Obtiene la información del glVertexAttribPointer? Supongo que debe ser esto. ¿Es la VAO simplemente un destino para la información de glVertexAttribPointer?
En una nota al margen, ¿es aceptable el tutorial que estoy siguiendo? ¿Hay algo que deba tener en cuenta o un tutorial mejor a seguir?