7 Exemple de fonction d'affichage

Faire un rendu, devient très simple :

1
2
3
4
5
6
7
8
9
10
11
12
glUseProgram(shaderID);
	// Verrouillage du VAO
	glBindVertexArray(vaoID);
		// Envoi des matrices
		glUniformMatrix4fv(glGetUniformLocation(shaderID, "projection"), 1, GL_FALSE, matProjection));
		glUniformMatrix4fv(glGetUniformLocation(shaderID, "modelview"), 1, GL_FALSE, matModelview));
		// Rendu
		glDrawArrays(GL_TRIANGLES, 0, 36); //si on veut afficher un cube
	// Déverrouillage du VAO
	glBindVertexArray(0);
// Désactivation du shader
glUseProgram(0);

Bien sur, shaderID est l'identifiant d'un shader bien initialisé.

Et, oui, il suffit de verrouiller le VAO et de dire que l'on veut afficher des faces (ici des triangles).

Grâce à ce verrouillage, OpenGL saura automatiquement où se trouveront les données dont il a besoin.

Petit détail : vous n'êtes pas obligés d'insérer l'envoi des matrices pendant le verrouillage du VAO, ça fonctionnera très bien si vous le faites avant. Personnellement, j'aime bien tout mettre à l'intérieur (textures comprises).

Au fait, on ne déverrouille pas les tableaux Vertex Attrib ? On les a activés pendant la configuration du VAO mais on ne les désactive à aucun moment.

C'est une question que je me suis aussi posée la première fois. Apparemment, les appels aux fonctions glDisableVertexAttribPointer() sont inutiles avec les VAO, ils se désactivent en même temps que le déverrouillage du VAO. Pas besoin de se triturer la tête avec ça.