1 Introduction

Nous avons vu dans le chapitre précédent comment utiliser directement la mémoire de notre carte graphique en y stockant les données de nos modèles 3D. Aujourd'hui, nous allons continuer sur cette lancée en stockant autre chose dans cette mémoire, ce qui permettra de faire gagner encore plus de temps à OpenGL.

Ne pensez pas que l'on maltraite notre carte graphique en la sollicitant ainsi, elle est justement faite pour ça et préfère même gérer ces informations elle-même plutôt que de devoir aller les chercher dans la RAM.

Ce chapitre sera très court car il se rapproche beaucoup du précédent, vous n'allez pas être dépaysés.

Les Vertex Array Object (ou VAO) sont des objets OpenGL relativement proches des Vertex Buffer Object (VBO) et font donc à peu près la même chose : stocker des informations sur la carte graphique.

Avec les VBO, nous facilitons la vie à OpenGL en lui évitant des transferts de données inutiles avec la RAM. Nous lui donnons toutes nos données une seule fois pendant le chargement et nous n'en parlons plus. Avec les VAO, c'est un peu la même chose sauf que nous allons stocker des appels de fonctions.

Hein ? Ça veut dire qu'on va pouvoir stocker du code source dans la carte graphique ?

Alors oui et non. Nous n'allons pas lui envoyer directement du code, elle ne comprendrait pas et nous enverrait gentiment paître.

En fait, nous allons "enregistrer" certains appels de fonctions à l'intérieur de la carte graphique de façon à ce qu'OpenGL ne fasse pas des aller-retours répétitifs (à chaque frame donc 60 fois par seconde) avec l'application. Les appels concernés sont ceux qui s'occupent de l'envoi de données (vertices, ...) :

Malgré l'utilisation l'utilisation des VBO, OpenGL fait toujours quelques aller-retours entre la carte graphique et l'application pour savoir où chercher les données. Certes, il n'y a plus le transfert de millions de données mais il y existe quand même des appels répétitifs qui ne font que spécifier un emplacement dans la mémoire vidéo.

plop

Pour éviter ça, OpenGL propose d'utiliser les Vertex Array Objects pour enregistrer un petit bout de code dans la carte graphique, ce qui lui permet d'aller chercher ses données dans la mémoire vidéo sans avoir à demander à l'application où elles se trouvent.

plop

plop

Grâce aux VAO, OpenGL sait exactement où aller chercher ses données sans avoir à le demander à personne. Tout se passe directement dans la carte graphique. On ne sait pas vraiment ce qu'il se passe à l'intérieur des VAO et d'ailleurs on s'en moque on veut seulement que ça fonctionne, peu importe comment. Ceux qui connaissent OpenGL 2.1 feront sûrement l'analogie avec les Display List, on peut dire que les VAO sont leurs petits frères.

Pour vous donner une petite info, l'utilisation combinée des VAO et des VBO nous permettra de passer à OpenGL 3.3. Dans la dernière partie de ce chapitre, nous modifierons notre contexte pour profiter de la dernière version d'OpenGL 3.