QAbstractOpenGLFunctions Class
Die Klasse QAbstractOpenGLFunctions ist die Basisklasse einer Familie von Klassen, die alle Funktionen für jede OpenGL-Version und jedes Profil zur Verfügung stellen. Mehr...
Kopfzeile: | #include <QAbstractOpenGLFunctions> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
Vererbt von: | 27 TypenQOpenGLFunctions_1_0, QOpenGLFunctions_1_1, QOpenGLFunctions_1_2, QOpenGLFunctions_1_3, QOpenGLFunctions_1_4, QOpenGLFunctions_1_5, QOpenGLFunctions_2_0, QOpenGLFunctions_2_1, QOpenGLFunctions_3_0, QOpenGLFunctions_3_1, QOpenGLFunctions_3_2_Compatibility, QOpenGLFunctions_3_2_Core, QOpenGLFunctions_3_3_Compatibility, QOpenGLFunctions_3_3_Core, QOpenGLFunctions_4_0_Compatibility, QOpenGLFunctions_4_0_Core, QOpenGLFunctions_4_1_Compatibility, QOpenGLFunctions_4_1_Core, QOpenGLFunctions_4_2_Compatibility, QOpenGLFunctions_4_2_Core, QOpenGLFunctions_4_3_Compatibility, QOpenGLFunctions_4_3_Core, QOpenGLFunctions_4_4_Compatibility, QOpenGLFunctions_4_4_Core, QOpenGLFunctions_4_5_Compatibility, QOpenGLFunctions_4_5_Core, und QOpenGLFunctions_ES2 |
Öffentliche Funktionen
virtual | ~QAbstractOpenGLFunctions() |
Geschützte Funktionen
Detaillierte Beschreibung
OpenGL-Implementierungen auf verschiedenen Plattformen sind in der Lage, sich mit einer variablen Anzahl von OpenGL-Funktionen zu verbinden, abhängig von der OpenGL ABI auf dieser Plattform. Zum Beispiel können unter Microsoft Windows nur Funktionen bis zu denen in OpenGL 1.1 zur Erstellungszeit verknüpft werden. Alle anderen Funktionen müssen zur Laufzeit aufgelöst werden. Die traditionelle Lösung für dieses Problem war die Verwendung von QOpenGLContext::getProcAddress() oder QOpenGLFunctions. Ersteres ist mühsam und fehleranfällig und bedeutet, dass man direkt mit Funktionszeigern umgehen muss. Letztere stellt nur die Funktionen zur Verfügung, die OpenGL ES 2 und Desktop OpenGL gemeinsam haben. Es gibt jedoch viele neue OpenGL-Funktionen, die beim Schreiben von OpenGL-Anwendungen in der realen Welt nützlich sind.
Qt stellt nun eine Familie von Klassen zur Verfügung, die alle von QAbstractOpenGLFunctions erben und die jede OpenGL-Kernfunktion durch eine entsprechende Mitgliedsfunktion offenlegen. Es gibt eine Klasse für jede gültige Kombination von OpenGL-Version und Profil. Jede Klasse folgt der Namenskonvention:
QOpenGLFunctions_<MAJOR VERSION>_<MINOR VERSION>[_PROFILE]
Für die OpenGL-Versionen 1.0 bis 3.0 gibt es keine Profile, was zu den Klassen führt:
- QOpenGLFunctions_1_0
- QOpenGLFunctions_1_1
- QOpenGLFunctions_1_2
- QOpenGLFunctions_1_3
- QOpenGLFunctions_1_4
- QOpenGLFunctions_1_5
- QOpenGLFunctions_2_0
- QOpenGLFunctions_2_1
- QOpenGLFunctions_3_0
wobei jede Klasse von QAbstractOpenGLFunctions erbt.
OpenGL Version 3.1 entfernte viele veraltete Funktionen, was zu einer viel einfacheren und generischen API führte.
Mit OpenGL 3.2 wurde das Konzept der Profile eingeführt. Derzeit sind zwei Profile für OpenGL definiert: Core und Compatibility.
Das Core-Profil enthält keine der Funktionen, die in OpenGL 3.1 entfernt wurden. Das Kompatibilitätsprofil enthält alle Funktionen des Kernprofils der gleichen Version plus alle Funktionen, die in OpenGL 3.1 entfernt wurden. Auf diese Weise ermöglichen die Klassen des Kompatibilitätsprofils die Verwendung neuerer OpenGL-Funktionen, aber auch die Weiterverwendung Ihres alten OpenGL-Codes. Für neuen OpenGL-Code sollte das Core-Profil bevorzugt werden.
Bitte beachten Sie, dass einige Hersteller, vor allem Apple, das Kompatibilitätsprofil nicht implementieren. Wenn Sie also neue OpenGL-Funktionen unter macOS nutzen möchten, sollten Sie sicherstellen, dass Sie einen Core-Profil-Kontext über QSurfaceFormat::setProfile() anfordern.
Qt bietet Klassen für alle Versionen und Kombinationen von Core- und Compatibility-Profilen. Die Klassen für die OpenGL-Versionen 3.1 bis 4.3 sind:
- QOpenGLFunctions_3_1
- QOpenGLFunctions_3_2_Core
- QOpenGLFunctions_3_2_Compatibility
- QOpenGLFunctions_3_3_Core
- QOpenGLFunctions_3_3_Compatibility
- QOpenGLFunctions_4_0_Core
- QOpenGLFunctions_4_0_Compatibility
- QOpenGLFunctions_4_1_Core
- QOpenGLFunctions_4_1_Compatibility
- QOpenGLFunctions_4_2_Core
- QOpenGLFunctions_4_2_Compatibility
- QOpenGLFunctions_4_3_Core
- QOpenGLFunctions_4_3_Compatibility
wobei jede Klasse von QAbstractOpenGLFunctions erbt.
Ein Zeiger auf ein Objekt der Klasse, die der verwendeten Version und dem Profil von OpenGL entspricht, kann von QOpenGLVersionFunctionsFactory::get() erhalten werden. Wenn Sie auf diese Weise einen Zeiger erhalten, beachten Sie, dass QOpenGLContext das Eigentum an dem Objekt behält. Dies ist so, dass die Instanz zwischengespeichert und gemeinsam genutzt werden kann.
Bevor Sie eine der exponierten OpenGL-Funktionen aufrufen, müssen Sie sicherstellen, dass das Objekt die Funktionszeiger auf die OpenGL-Funktionen aufgelöst hat. Dies muss nur einmal pro Instanz mit initializeOpenGLFunctions() gemacht werden. Sobald das Objekt initialisiert ist, kann es verwendet werden, um jede OpenGL-Funktion für die entsprechende Version und das entsprechende Profil aufzurufen. Beachten Sie, dass initializeOpenGLFunctions() unter bestimmten Umständen fehlschlagen kann, überprüfen Sie also den Rückgabewert. Situationen, in denen die Initialisierung fehlschlagen kann, sind, wenn Sie ein Funktionsobjekt für eine Version oder ein Profil haben, das Funktionen enthält, die nicht Teil des Kontexts sind, der verwendet wird, um die Funktionszeiger aufzulösen.
Wenn Sie ausschließlich Funktionsobjekte verwenden, erhalten Sie Kompilierzeitfehler, wenn Sie versuchen, eine Funktion zu verwenden, die nicht in dieser Version und diesem Profil enthalten ist. Dies ist natürlich viel einfacher zu debuggen als undefiniertes Verhalten zur Laufzeit.
Siehe auch QOpenGLVersionFunctionsFactory::get().
Dokumentation der Mitgliedsfunktionen
[protected]
QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()
Konstruiert ein QAbstractOpenGLFunctions-Objekt.
[virtual noexcept]
QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()
Zerstört ein QAbstractOpenGLFunctions Objekt.
© 2025 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.