QOpenGLVertexArrayObject Class
Die Klasse „QOpenGLVertexArrayObject“ dient als Wrapper für ein OpenGL-Vertex-Array-Objekt. Mehr...
| Header: | #include <QOpenGLVertexArrayObject> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| Erbt von: | QObject |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QOpenGLVertexArrayObject ist Teil von „3D-Rendering“.
Öffentliche Typen
| class | Binder |
Öffentliche Funktionen
| QOpenGLVertexArrayObject(QObject *parent = nullptr) | |
| virtual | ~QOpenGLVertexArrayObject() |
| void | bind() |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| GLuint | objectId() const |
| void | release() |
Ausführliche Beschreibung
Ein Vertex-Array-Objekt (VAO) ist ein OpenGL-Containerobjekt, das den Zustand kapselt, der erforderlich ist, um Attributdaten pro Scheitelpunkt an die OpenGL-Pipeline zu übergeben. Anders ausgedrückt: Ein VAO speichert die Zustände von Pufferobjekten (siehe QOpenGLBuffer) und deren zugehörige Zustände (z. B. Scheitelpunktattribut-Teiler). Dies ermöglicht eine sehr einfache und effiziente Methode zum Wechseln zwischen OpenGL-Pufferzuständen für das Rendern verschiedener „Objekte“ in einer Szene. Die Klasse `QOpenGLVertexArrayObject` ist ein schlanker Wrapper um ein OpenGL-VAO.
Auf dem Desktop werden VAOs als Kernfunktion in OpenGL 3.0 oder neuer sowie über die Erweiterung GL_ARB_vertex_array_object für ältere Versionen unterstützt. Unter OpenGL ES 2 werden VAOs durch die optionale Erweiterung GL_OES_vertex_array_object bereitgestellt. Sie können die OpenGL-Version mit `QOpenGLContext::surfaceFormat()` überprüfen und mit ` QOpenGLContext::hasExtension()` prüfen, ob Erweiterungen vorhanden sind.
Wie bei den anderen „ Qt OpenGL “-Klassen verfügt auch QOpenGLVertexArrayObject über die Funktion „ create()“, um das zugrunde liegende OpenGL-Objekt zu erstellen. Dadurch kann der Entwickler sicherstellen, dass zum jeweiligen Zeitpunkt ein gültiger OpenGL-Kontext vorhanden ist.
Sobald Sie ein VAO erfolgreich erstellt haben, sieht das typische Verwendungsmuster wie folgt aus:
- In der Initialisierungsfunktion der Szene, für jedes visuelle Objekt:
- Das VAO binden
- Legen Sie den Vertex-Datenzustand für dieses visuelle Objekt fest (Vertexdaten, Normalen, Texturkoordinaten usw.)
- Lösen Sie die Bindung (release()) des VAO
- In der Render-Funktion für jedes visuelle Objekt:
- Binde das VAO (und bei Bedarf das Shader-Programm)
- Eine glDraw*()-Funktion aufrufen
- Entbinde (release()) das VAO
Das Binden des VAO in der Renderfunktion bewirkt, dass der gesamte in der Initialisierungsphase eingerichtete Zustand der Vertexdaten wiederhergestellt wird. Auf diese Weise können wir beim Einrichten eines VAO eine Vielzahl von Zuständen festlegen und effizient zwischen den Zustandssätzen der zu rendernden Objekte wechseln. Die Verwendung von VAOs ermöglicht es dem OpenGL-Treiber zudem, die Validierungsprüfungen der Vertexdaten zu verteilen.
Hinweis: Vertex -Array-Objekte sind, wie alle anderen OpenGL-Containerobjekte, kontextspezifisch und können nicht innerhalb einer Kontextgruppe gemeinsam genutzt werden.
Siehe auch QOpenGLVertexArrayObject::Binder und QOpenGLBuffer.
Dokumentation der Mitgliedsfunktionen
[explicit] QOpenGLVertexArrayObject::QOpenGLVertexArrayObject(QObject *parent = nullptr)
Erstellt ein `QOpenGLVertexArrayObject` mit dem angegebenen ` parent`. Vor der Verwendung müssen Sie die Funktion ` create()` mit einem gültigen OpenGL-Kontext aufrufen.
[virtual noexcept] QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
Löscht den „ QOpenGLVertexArrayObject “ und die zugrunde liegende OpenGL-Ressource.
void QOpenGLVertexArrayObject::bind()
Bindet dieses Vertex-Array-Objekt an den OpenGL-Bindungspunkt. Ab diesem Zeitpunkt und bis zum Aufruf von ` release()` oder bis ein anderes Vertex-Array-Objekt gebunden wird, werden alle Änderungen am Zustand der Vertex-Daten in diesem Vertex-Array-Objekt gespeichert.
Wird anschließend ein anderes Vertex-Array-Objekt gebunden, können Sie den mit diesem Objekt verbundenen Zustandssatz später wiederherstellen, indem Sie `bind()` erneut für dieses Objekt aufrufen. Dies ermöglicht einen effizienten Wechsel zwischen verschiedenen Zuständen der Vertexdaten in Rendering-Funktionen.
bool QOpenGLVertexArrayObject::create()
Erstellt das zugrunde liegende OpenGL-Vertex-Array-Objekt. Damit diese Funktion erfolgreich ausgeführt werden kann, muss ein gültiger OpenGL-Kontext aktiv sein, der Vertex-Array-Objekte unterstützt.
Gibt „ true “ zurück, wenn das OpenGL-Vertex-Array-Objekt erfolgreich erstellt wurde.
Wenn der Rückgabewert „ false “ lautet, ist die Unterstützung für Vertex-Array-Objekte nicht verfügbar. Dies ist kein Fehler: Auf Systemen mit OpenGL 2.x oder OpenGL ES 2.0 werden Vertex-Array-Objekte möglicherweise nicht unterstützt. Die Anwendung kann in diesem Fall die Ausführung fortsetzen, muss jedoch darauf vorbereitet sein, auch ohne VAO zu arbeiten. Das bedeutet, dass nicht einfach „ bind()“ aufgerufen werden darf, sondern der Wert von „ isCreated()“ überprüft werden muss und die Vertex-Arrays auf herkömmliche Weise initialisiert werden müssen, wenn kein Vertex-Array-Objekt vorhanden ist.
Siehe auch isCreated().
void QOpenGLVertexArrayObject::destroy()
Löscht das zugrunde liegende OpenGL-Vertex-Array-Objekt. Damit diese Funktion erfolgreich ausgeführt werden kann, muss ein gültiger OpenGL-Kontext aktiv sein, der Vertex-Array-Objekte unterstützt.
bool QOpenGLVertexArrayObject::isCreated() const
Gibt „ true “ zurück, wenn das zugrunde liegende OpenGL-Vertex-Array-Objekt erstellt wurde. Wenn „ true “ zurückgegeben wird und der zugehörige OpenGL-Kontext aktuell ist, können Sie dieses Objekt mit „ bind()“ verwenden.
GLuint QOpenGLVertexArrayObject::objectId() const
Gibt die ID des zugrunde liegenden OpenGL-Vertex-Array-Objekts zurück.
void QOpenGLVertexArrayObject::release()
Löst die Bindung dieses Vertex-Array-Objekts auf, indem das Standard-Vertex-Array-Objekt (ID = 0) gebunden wird.
© 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.