QOpenGLVertexArrayObject Class
La classe QOpenGLVertexArrayObject contient un objet OpenGL Vertex Array. Plus d'informations...
| En-tête : | #include <QOpenGLVertexArrayObject> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS OpenGL)target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake : | QT += opengl |
| Héritages : | QObject |
- Liste de tous les membres, y compris les membres hérités
- QOpenGLVertexArrayObject fait partie de Rendu en 3D.
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 se souvient de l'état des objets tampons (voir QOpenGLBuffer) et de leur état associé (par exemple, les diviseurs d'attributs de vertex). Cela permet une méthode très simple et efficace pour passer d'un état de tampon OpenGL à un autre pour le rendu de différents "objets" dans une scène. La classe QOpenGLVertexArrayObject est une enveloppe fine autour d'un VAO OpenGL.
Pour le bureau, les VAO sont supportés comme une fonctionnalité de base dans OpenGL 3.0 ou plus récent et par l'objet GL_ARB_vertex_array_object pour les versions plus anciennes. Sur 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 Qt OpenGL, QOpenGLVertexArrayObject possède une fonction create() pour créer l'objet OpenGL sous-jacent. Cette fonction permet au développeur de s'assurer qu'il existe un contexte OpenGL valide à ce moment-là.
Une fois que vous avez réussi à créer un VAO, 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 vertex pour cet objet visuel (vertices, normales, coordonnées de texture, etc.)
- Délier (release()) le VAO
- Dans la fonction de rendu, pour chaque objet visuel :
- Lier le VAO (et le programme shader si nécessaire)
- Appeler une fonction glDraw*()
- Détacher (release()) le VAO
Le fait de lier le VAO dans la fonction de rendu a pour effet de restaurer tous les états des données de vertex définis 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 passer efficacement d'un état à l'autre pour les objets à rendre. L'utilisation des VAO permet également au pilote OpenGL d'amortir les contrôles de validation des données de vertex.
Remarque : les objets de tableau de sommets, 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 des fonctions membres
[explicit] QOpenGLVertexArrayObject::QOpenGLVertexArrayObject(QObject *parent = nullptr)
Crée un objet QOpenGLVertexArrayObject avec l'adresse parent. Vous devez appeler create() avec un contexte OpenGL valide avant de l'utiliser.
[virtual noexcept] QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
Détruit le site QOpenGLVertexArrayObject et la ressource OpenGL sous-jacente.
void QOpenGLVertexArrayObject::bind()
Lie cet objet de tableau de vertex au point de liaison OpenGL. A partir de ce moment et jusqu'à ce que release() soit appelé ou qu'un autre objet tableau de vertex soit lié, toutes les modifications apportées à l'état des données des vertex sont stockées à l'intérieur de cet objet tableau de vertex.
Si un autre objet tableau de vertex est ensuite lié, vous pouvez restaurer ultérieurement l'ensemble des données associées à cet objet en appelant à nouveau bind() sur cet objet. Cela permet des changements efficaces entre les états des données de vertex dans les fonctions de rendu.
bool QOpenGLVertexArrayObject::create()
Crée l'objet de tableau de vertex OpenGL sous-jacent. Il doit y avoir un contexte OpenGL valide qui supporte les objets vertex array pour que cette fonction réussisse.
Retourne true si l'objet tableau de vertex OpenGL a été créé avec succès.
Lorsque la valeur de retour est false, la prise en charge de l'objet vertex array n'est pas disponible. Il ne s'agit pas d'une erreur : sur les systèmes avec OpenGL 2.x ou OpenGL ES 2.0, les objets de type vertex array peuvent ne pas être supportés. Dans ce cas, l'application est libre de poursuivre son exécution, mais elle doit également être prête à fonctionner sans VAO. Cela signifie qu'au lieu d'appeler simplement bind(), la valeur de isCreated() doit être vérifiée et les tableaux de vertex doivent être initialisés de manière traditionnelle lorsqu'il n'y a pas d'objet de tableau de vertex présent.
Voir aussi isCreated().
void QOpenGLVertexArrayObject::destroy()
Détruit l'objet de tableau de vertex OpenGL sous-jacent. Il doit y avoir un contexte OpenGL valide qui supporte les objets de type tableau de vertex pour que cette fonction réussisse.
bool QOpenGLVertexArrayObject::isCreated() const
Retourne true si l'objet de tableau de vertex OpenGL sous-jacent a été créé. Si le résultat est true et que le contexte OpenGL associé est courant, vous pouvez alors utiliser bind() cet objet.
GLuint QOpenGLVertexArrayObject::objectId() const
Renvoie l'identifiant de l'objet de tableau de vertex OpenGL sous-jacent.
void QOpenGLVertexArrayObject::release()
Libère cet objet de tableau de vertex en liant l'objet de tableau de vertex 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.