3.3 Allocation des données dans la carte graphique

Avant de pouvoir transférer les données, il faut déjà allouer de l'espace mémoire dans la carte graphique pour qu'elle puisse les stocker :

1
glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum  usage)
  • target : On ne le présente plus, on lui donnera la valeur GL_BUFFER_DATA
  • size : C'est la taille mémoire à allouer en bytes (octets), il faut prendre en compte TOUTES les données à envoyer (vertices, coordonnées de texture, ...) correspondant à un modèle 3D
  • data : Ce sont les données à transférer. On n'enverra rien du tout pour le moment car on ne peut pas envoyer plusieurs tableaux en un seul paramètre, nous lui affecterons la valeur 0
  • usage : Permet de définir la fréquence de mise à jour des données

Le paramètre usage permet à OpenGL de savoir si les données que nous stockerons dans le VBO seront mises à jour rarement, fréquemment ou tout le temps.

Par exemple, un personnage qui bouge devra quasiment tout le temps mettre à jour ses vertices, une caisse en revanche ne devra jamais le faire. OpenGL à besoin de connaitre cette fréquence de mise à jour, c'est pour ça qu'il nous donne le paramètre usage.

En théorie, il existe 6 valeurs possibles pour ce paramètre mais nous n'en retiendrons que 3 :

  • GL_STATIC_DRAW : pour les données très peu mises à jour
  • GL_DYNAMIC_DRAW : pour les données mises à jour fréquemment (plusieurs fois par seconde mais pas à chaque frame)
  • GL_STREAM_DRAW : pour les données mises à jour tout le temps (A chaque frame cette fois-ci)

On verra les autres valeurs après.