Accueil🇫🇷Chercher

Vertex Buffer Object

Les VBOs (de l'anglais Vertex Buffer Object dont une traduction pourrait ĂŞtre objet tampon de vertex) sont en OpenGL une mĂ©thode qui permet d'envoyer des donnĂ©es 3D (vertex, normales, maillage, couleurs, etc) vers la carte graphique. Cette mĂ©thode s'oppose au « mode immĂ©diat » lequel est dĂ©sormais dĂ©signĂ© comme obsolète en OpenGL. Les VBOs ont Ă©tĂ© conçus afin d'obtenir les meilleures performances possibles et sont actuellement la mĂ©thode la plus efficace en OpenGL du fait que les donnĂ©es 3D ne rĂ©sident plus dans la mĂ©moire système mais dans la mĂ©moire de la carte graphique ce qui permet un rendu plus rapide.

Prérequis

L'affichage d'images en 3D et en temps réel pour notamment les jeux vidéo requiert beaucoup de calculs qui doivent être effectués en un temps très court. Afin que cela soit rendu possible ces calculs pour être optimisés ne sont pas réalisés par le processeur de l'ordinateur mais par la carte graphique qui est équipée d'unités de calcul spécialisés à cette fin. Une scène 3D étant souvent constituée d'énormément d'éléments, la gestion de la mémoire requise à leur affichage représente un point capital pour les performances et c'est là que les VBOs entrent en jeu.

Historique

Avant l'adoption des VBOs des mĂ©thodes pour optimiser l'affichage Ă©taient les « Display List » et les « VertexArray ». Les « Display List » permettent un stockage des donnĂ©es sur la carte graphique mais ne permettent pas de mettre Ă  jour ces donnĂ©es. Les « VertexArray » conservent les donnĂ©es dans des tampons en mĂ©moire système ce qui permet de les modifier mais oblige Ă  transfĂ©rer toutes ces donnĂ©es Ă  chaque fois qu'elles doivent ĂŞtre affichĂ©es.

Pour répondre à ces problèmes les fabricants de cartes graphiques Nvidia et ATI développèrent les extensions NV_vertex_array_range [1] et ATI_vertex_array_object [2] qui furent regroupées et normalisées par l'ARB (Architecture Review Board) pour donner les "Vertex Buffer Object" (VBO, extension ARB_vertex_buffer_object) qui furent inclus dans la version d'OpenGL 1.4.

Interface

Voici les fonctions permettant de manipuler les VBOs :

glGenBuffers(sizei n, uint *buffers)

génère un identifiant pour un nouveau VBO. Retourne un entier non signé avec 0 comme valeur réservée.

glBindBuffer(enum target, uint buffer)

Indique quel VBO doit être considéré comme actif pour les opérations sur les VBOs.

glBufferData(enum target, sizeiptr size, const void *data, enum usage)

Envoie les données vers la carte graphique qui seront associées avec le VBO actif[3].

glDeleteBuffers(sizei n, const uint *buffers)

Détruit/libère un ou des VBO(s) lorsqu'on ne désire plus les utiliser.

Exemple en C

  /* DĂ©clare une variable qui contiendra un identifiant pour un VBO */
  unsigned int id;
  /* 3 vertex définissant un triangle (dans le sens des aiguilles d’une montre) */
  float data[] = {
     1.0, 0.0,  1.0,
     0.0, 0.0, -1.0,
    -1.0, 0.0,  1.0
  };
  /* Crée un nouvel identifiant pour un VBO */
  glGenBuffers(1, &id);
  /* Active le nouveau VBO */
  glBindBuffer(GL_ARRAY_BUFFER, id);
  /* Envoie les données du triangle vers la carte graphique */
  glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);

Références

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.