Estou começando a aprender OpenGL hoje com este tutorial: http://openglbook.com/the-book/
Cheguei ao capítulo 2, onde desenho um triângulo, e entendo tudo, exceto VAOs (esta sigla está OK?). O tutorial tem este código:
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
Embora eu entenda que o código é necessário, não tenho ideia do que ele faz. Embora eu nunca use o VaoId além desse ponto (exceto para destruí-lo), o código não funciona sem ele. Presumo que seja porque é obrigatório, mas não sei por quê. Esse código exato precisa apenas fazer parte de todos os programas OpenGL? O tutorial explica VAOs como:
Um Vertex Array Object (ou VAO) é um objeto que descreve como os atributos de vértice são armazenados em um Vertex Buffer Object (ou VBO). Isso significa que o VAO não é o objeto real que armazena os dados do vértice, mas o descritor dos dados do vértice. Os atributos do vértice podem ser descritos pela função glVertexAttribPointer e suas duas funções irmãs glVertexAttribIPointer e glVertexAttribLPointer, a primeira das quais exploraremos a seguir.
Não entendo como o VAO descreve os atributos do vértice. Eu não os descrevi de forma alguma. Ele obtém as informações do glVertexAttribPointer? Eu acho que deve ser isso. O VAO é simplesmente um destino para as informações do glVertexAttribPointer?
Por outro lado, o tutorial que estou seguindo é aceitável? Há algo que devo observar ou um tutorial melhor a seguir?