Sur cette page

QOpenGLVertexArrayObject Class

La classe `QOpenGLVertexArrayObject` encapsule un objet « Vertex Array » OpenGL. En savoir plus...

En-tête : #include <QOpenGLVertexArrayObject>
CMake : find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake : QT += opengl
Hérite de : QObject

Types publics

class Binder

Fonctions publiques

QOpenGLVertexArrayObject(QObject *parent = nullptr)
virtual ~QOpenGLVertexArrayObject()
void bind()
bool create()
void destroy()
bool isCreated() const
GLuint objectId() const
void release()

Description détaillée

Un Vertex Array Object (VAO) est un objet conteneur OpenGL qui encapsule l’état nécessaire pour spécifier les données d’attributs par sommet au pipeline OpenGL. En d’autres termes, un VAO mémorise les états des objets tampons (voir QOpenGLBuffer) et leur état associé (par exemple, les diviseurs d’attributs de sommets). Cela permet de basculer très facilement et efficacement entre les états de tampon OpenGL pour le rendu de différents « objets » dans une scène. La classe QOpenGLVertexArrayObject est un simple wrapper autour d’un VAO OpenGL.

Sur les ordinateurs de bureau, les VAO sont pris en charge en tant que fonctionnalité de base dans OpenGL 3.0 ou versions ultérieures, et via l’extension GL_ARB_vertex_array_object pour les versions plus anciennes. Sous OpenGL ES 2, les VAO sont fournis par l’extension optionnelle GL_OES_vertex_array_object. Vous pouvez vérifier la version d’OpenGL avec QOpenGLContext::surfaceFormat() et vérifier la présence d’extensions avec QOpenGLContext::hasExtension().

Comme pour les autres classes de l’ Qt OpenGL, QOpenGLVertexArrayObject dispose d’une fonction create() permettant de créer l’objet OpenGL sous-jacent. Cela permet au développeur de s’assurer qu’un contexte OpenGL valide est bien présent à ce moment-là.

Une fois que vous avez créé un VAO avec succès, le schéma d'utilisation typique est le suivant :

  • Dans la fonction d’initialisation de la scène, pour chaque objet visuel :
    • Lier le VAO
    • Définir l’état des données de sommets pour cet objet visuel (sommets, normales, coordonnées de texture, etc.)
    • Détacher (release())) le VAO
  • Dans la fonction de rendu, pour chaque objet visuel :
    • Lier le VAO (et le programme de shader si nécessaire)
    • Appeler une fonction glDraw*()
    • Désassocier (release()) le VAO

Le fait de lier le VAO dans la fonction de rendu a pour effet de restaurer l’ensemble de la configuration des données de sommets définie lors de la phase d’initialisation. De cette manière, nous pouvons définir un grand nombre d’états lors de la configuration d’un VAO et basculer efficacement entre les ensembles d’états des objets à rendre. L’utilisation des VAO permet également au pilote OpenGL d’amortir les vérifications de validité des données de sommets.

Remarque : les objets de tableaude sommets (VAO), comme tous les autres objets conteneurs OpenGL, sont spécifiques au contexte pour lequel ils ont été créés et ne peuvent pas être partagés au sein d’un groupe de contextes.

Voir également QOpenGLVertexArrayObject::Binder et QOpenGLBuffer.

Documentation sur les fonctions membres

[explicit] QOpenGLVertexArrayObject::QOpenGLVertexArrayObject(QObject *parent = nullptr)

Crée un objet `QOpenGLVertexArrayObject` avec l'parent` spécifiée. Vous devez appeler la fonction ` create()` avec un contexte OpenGL valide avant de l'utiliser.

[virtual noexcept] QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()

Supprime l'QOpenGLVertexArrayObject e et la ressource OpenGL sous-jacente.

void QOpenGLVertexArrayObject::bind()

Lie cet objet de tableau de sommets au point de liaison OpenGL. À partir de ce moment et jusqu’à ce que la fonction ` release()` soit appelée ou qu’un autre objet de tableau de sommets soit lié, toute modification apportée à l’état des données de sommets est stockée dans cet objet de tableau de sommets.

Si un autre objet de tableau de sommets est ensuite lié, vous pouvez restaurer ultérieurement l'ensemble d'états associé à cet objet en appelant à nouveau la fonction bind() sur cet objet. Cela permet de passer efficacement d'un état de données de sommets à un autre dans les fonctions de rendu.

bool QOpenGLVertexArrayObject::create()

Crée l'objet de tableau de sommets OpenGL sous-jacent. Pour que cette fonction aboutisse, un contexte OpenGL valide prenant en charge les objets de tableau de sommets doit être actif.

Renvoie ` true ` si l'objet de tableau de sommets OpenGL a été créé avec succès.

Lorsque la valeur de retour est false, la prise en charge des objets de tableau de sommets n’est pas disponible. Il ne s’agit pas d’une erreur : sur les systèmes équipés d’OpenGL 2.x ou d’OpenGL ES 2.0, les objets de tableau de sommets peuvent ne pas être pris en charge. Dans ce cas, l’application est libre de poursuivre son exécution, mais elle doit alors être prête à fonctionner également sans objet de tableau de sommets. Cela signifie qu’au lieu de se contenter d’appeler ` bind()`, il faut vérifier la valeur de ` isCreated()` et initialiser les tableaux de sommets de manière traditionnelle lorsqu’aucun objet de tableau de sommets n’est présent.

Voir également isCreated().

void QOpenGLVertexArrayObject::destroy()

Détruit l'objet de tableau de sommets OpenGL sous-jacent. Pour que cette fonction aboutisse, un contexte OpenGL valide prenant en charge les objets de tableau de sommets doit être actif.

bool QOpenGLVertexArrayObject::isCreated() const

Renvoie ` true ` si l'objet de tableau de sommets OpenGL sous-jacent a été créé. Si cette fonction renvoie ` true ` et que le contexte OpenGL associé est actif, vous pouvez alors appeler la fonction ` bind()` sur cet objet.

GLuint QOpenGLVertexArrayObject::objectId() const

Renvoie l'identifiant de l'objet « tableau de sommets » OpenGL sous-jacent.

void QOpenGLVertexArrayObject::release()

Désactive la liaison de cet objet de tableau de sommets en activant celle de l'objet de tableau de sommets par défaut (id = 0).

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.