2 Utilité

Vous vous posez peut-être la question de savoir quel intérêt peut-on avoir à stocker des données directement dans la carte graphique ?

L'intérêt n'est peut-être pas évident pour le moment car nous n'avons pas de projets d'envergure pour le moment, mais sachez que les VBO permettent de gagner beaucoup de temps calculs en évitant à OpenGL des aller et retours inutiles.

En effet, lorsque vous affichez un modèle 3D (comme une maison par exemple), vous devez spécifier ses vertices, ses coordonnées de texture, ... Toutes ces données se trouvent automatiquement dans la RAM. Or, à chaque fois que vous appelez la fonction glDrawArrays() ou glDrawElements() pour afficher votre modèle, OpenGL va chercher toutes les données correspondantes dans la RAM pour les transférer dans la mémoire graphique pour qu'ensuite seulement il puisse travailler avec :

plop

Je pense que vous aurez compris que ces transferts ralentissent pas mal le temps de calcul, surtout quand vous transférez des centaines de milliers de données 60 fois par seconde !

Pour éviter de perdre du temps avec ces transferts, OpenGL nous propose d'utiliser les Vertex Buffer Objects pour accéder directement à la mémoire vidéo. Au moment du chargement d'un modèle, on envoie toutes les données au VBO qui va se contenter de les stocker dans la carte graphique. Il n'y a donc plus qu'un seul transfert :

plop

plop

On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.

Attention cependant, on conserve tout de même une copie des données dans la RAM. Elles ne sont plus copiées à chaque affichage mais elles sont quand même là. On doit les converser pour pouvoir effectuer des calculs dessus, comme un déplacement de personnage par exemple.

D'ailleurs, lorsqu'on les mettra à jour il faudra les re-transférer dans le VBO, mais ça ce sera pour la fin du chapitre.