Auf dieser Seite

QAbstractOpenGLFunctions Class

Die Klasse „QAbstractOpenGLFunctions“ ist die Basisklasse einer Klasse von Klassen, die alle Funktionen für jede OpenGL-Version und jedes OpenGL-Profil bereitstellen. Mehr...

Öffentliche Funktionen

QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &)
virtual ~QAbstractOpenGLFunctions()
QAbstractOpenGLFunctions &operator=(const QAbstractOpenGLFunctions &)

Geschützte Funktionen

Ausführliche Beschreibung

OpenGL-Implementierungen auf verschiedenen Plattformen können je nach der OpenGL-ABI auf dieser Plattform eine variable Anzahl von OpenGL-Funktionen einbinden. Beispielsweise können unter Microsoft Windows beim Kompilieren nur Funktionen bis hin zu OpenGL 1.1 eingebunden werden. Alle anderen Funktionen müssen zur Laufzeit aufgelöst werden. Die herkömmliche Lösung hierfür bestand darin, entweder ` QOpenGLContext::getProcAddress()` oder ` QOpenGLFunctions` zu verwenden. Ersteres ist mühsam und fehleranfällig und erfordert den direkten Umgang mit Funktionszeigern. Letzteres stellt nur jene Funktionen bereit, die sowohl in OpenGL ES 2 als auch in Desktop-OpenGL vorhanden sind. Es gibt jedoch viele neue OpenGL-Funktionen, die beim Schreiben realer OpenGL-Anwendungen nützlich sind.

Qt stellt nun eine Klasse von Klassen bereit, die alle von `QAbstractOpenGLFunctions` erben und jede zentrale OpenGL-Funktion über eine entsprechende Mitgliedsfunktion bereitstellen. Für jede gültige Kombination aus OpenGL-Version und -Profil gibt es eine Klasse. Jede Klasse folgt der folgenden Namenskonvention:

QOpenGLFunctions_<MAJOR VERSION>_<MINOR VERSION>[_PROFILE]

Für die OpenGL-Versionen 1.0 bis einschließlich 3.0 gibt es keine Profile, was zu folgenden Klassen führt:

wobei jede Klasse von `QAbstractOpenGLFunctions` erbt.

Mit der OpenGL-Version 3.1 wurden viele veraltete Funktionen entfernt, was zu einer wesentlich einfacheren und generischeren API führte.

Mit OpenGL 3.2 wurde das Konzept der Profile eingeführt. Derzeit sind für OpenGL zwei Profile definiert: „Core“ und „Compatibility“.

Das „Core“-Profil enthält keine der Funktionen, die in OpenGL 3.1 entfernt wurden. Das „Compatibility“-Profil enthält alle Funktionen des „Core“-Profils derselben Version sowie alle Funktionen, die in OpenGL 3.1 entfernt wurden. Auf diese Weise ermöglichen die Klassen des „Compatibility“-Profils die Nutzung neuerer OpenGL-Funktionen, während Sie gleichzeitig Ihren älteren OpenGL-Code weiterhin verwenden können. Für neuen OpenGL-Code sollte das „Core“-Profil bevorzugt werden.

Bitte beachten Sie, dass einige Anbieter, insbesondere Apple, das „Compatibility“-Profil nicht implementieren. Wenn Sie daher neue OpenGL-Funktionen unter macOS nutzen möchten, sollten Sie sicherstellen, dass Sie über ` QSurfaceFormat::setProfile()` einen „Core“-Profil-Kontext anfordern.

Qt stellt Klassen für alle Kombinationen aus Versionen sowie „Qt Core“- und „Compatibility“-Profilen bereit. Die Klassen für die OpenGL-Versionen 3.1 bis 4.3 lauten:

wobei jede Klasse von `QAbstractOpenGLFunctions` erbt.

Ein Zeiger auf ein Objekt der Klasse, die der verwendeten OpenGL-Version und dem Profil entspricht, kann über ` QOpenGLVersionFunctionsFactory::get()` abgerufen werden. Wenn der Zeiger auf diese Weise abgerufen wird, beachte bitte, dass die ` QOpenGLContext ` die Eigentumsrechte an dem Objekt behält. Dies geschieht, damit die Instanz zwischengespeichert und gemeinsam genutzt werden kann.

Bevor Sie eine der bereitgestellten 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()` erfolgen. Nach der Initialisierung kann das Objekt verwendet werden, um beliebige OpenGL-Funktionen für die entsprechende Version und das entsprechende Profil aufzurufen. Beachten Sie, dass `initializeOpenGLFunctions()` unter bestimmten Umständen fehlschlagen kann; überprüfen Sie daher den Rückgabewert. Die Initialisierung kann unter anderem dann fehlschlagen, wenn Sie ein Funktionsobjekt für eine Version oder ein Profil haben, das Funktionen enthält, die nicht Teil des Kontexts sind, der zum Auflösen der Funktionszeiger verwendet wird.

Wenn Sie ausschließlich Funktionsobjekte verwenden, erhalten Sie Kompilierungsfehler, sobald Sie versuchen, eine Funktion zu nutzen, die nicht in dieser Version und diesem Profil enthalten ist. Dies lässt sich natürlich wesentlich einfacher debuggen als undefiniertes Verhalten zur Laufzeit.

Siehe auch ` QOpenGLVersionFunctionsFactory::get()`.

Dokumentation zu Mitgliedsfunktionen

[protected] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()

Erstellt ein Objekt vom Typ „QAbstractOpenGLFunctions“.

[delete] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &)

Erstellt eine Instanz von „ QAbstractOpenGLFunctions “ durch Kopieren. Diese Funktion wurde gelöscht.

[virtual noexcept] QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()

Löscht ein „ QAbstractOpenGLFunctions “-Objekt.

[delete] QAbstractOpenGLFunctions &QAbstractOpenGLFunctions::operator=(const QAbstractOpenGLFunctions &)

Weist dieser QAbstractOpenGLFunctions -Instanz other per Kopierzuweisung zu. Diese Funktion wird gelöscht.

© 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.