QRhiGles2InitParams Struct
OpenGL-spezifische Initialisierungsparameter. Mehr...
Kopfzeile: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
qmake: | QT += gui-private |
Since: | Qt 6.6 |
Vererbt: | QRhiInitParams |
Öffentliche Funktionen
Öffentliche Variablen
QSurface * | fallbackSurface |
QSurfaceFormat | format |
QOpenGLContext * | shareContext |
QWindow * | window |
Statische öffentliche Mitglieder
QOffscreenSurface * | newFallbackSurface(const QSurfaceFormat &format = QSurfaceFormat::defaultFormat()) |
Detaillierte Beschreibung
Hinweis: Dies ist eine RHI-API mit begrenzten Kompatibilitätsgarantien, siehe QRhi für Details.
Ein OpenGL-basiertes QRhi benötigt ein bereits erstelltes QSurface, das in Kombination mit QOpenGLContext verwendet werden kann. In der Praxis ist dies in den meisten Fällen eine QOffscreenSurface. Zusätzlich, obwohl optional, wird empfohlen, dass die QWindow, auf die das erste QRhiSwapChain abzielt, ebenfalls mit übergeben wird.
QOffscreenSurface *fallbackSurface = QRhiGles2InitParams::newFallbackSurface(); QRhiGles2InitParams params; params.fallbackSurface = fallbackSurface; params.window = window; rhi = QRhi::create(QRhi::OpenGLES2, ¶ms);
Standardmäßig erstellt QRhi selbständig eine QOpenGLContext. Dieser Ansatz funktioniert in den meisten Fällen gut, auch in Szenarien mit mehreren Threads, in denen es für jeden Rendering-Thread ein eigenes QRhi gibt. Da es für jeden QRhi einen QOpenGLContext gibt, sind die OpenGL-Kontextanforderungen (ein Kontext kann nur auf einem Thread aktuell sein) erfüllt. Der implizit erstellte Kontext wird automatisch zusammen mit dem QRhi zerstört.
Der QSurfaceFormat für den Kontext wird in format
angegeben. Der Konstruktor setzt diesen auf QSurfaceFormat::defaultFormat(), so dass Anwendungen, die QSurfaceFormat::setDefaultFormat() mit den entsprechenden Einstellungen aufrufen, bevor der Konstruktor läuft, den Wert von format
nicht ändern müssen.
Hinweis: Denken Sie daran, die Tiefen- und Schablonenpuffergrößen auf 24 und 8 zu setzen, wenn der Renderer auf Tiefen- oder Schablonentests angewiesen ist, entweder in der globalen Standardeinstellung QSurfaceFormat oder alternativ separat in allen beteiligten QSurfaceFormat Instanzen: in format
, dem an newFallbackSurface() übergebenen Formatargument und auf jeder QWindow, die mit QRhi verwendet wird.
Ein QSurface muss in fallbackSurface
angegeben werden. Um Fehler in threaded Situationen zu vermeiden, wird dieses niemals automatisch von QRhi erstellt, da, wie QWindow, Instanzen von QSurface Unterklassen oft nur auf dem gui/main thread erstellt werden können.
Als Bequemlichkeit können Anwendungen newFallbackSurface() verwenden, das ein QOffscreenSurface erzeugt und zurückgibt, das mit dem QOpenGLContext kompatibel ist, das anschließend von QRhi erzeugt wird. Beachten Sie, dass das Eigentum an der zurückgegebenen QOffscreenSurface an den Aufrufer übertragen wird und die QRhi sie nicht zerstört.
Hinweis: Mit dem OpenGL-Backend kann QRhiSwapChain nur QWindow Instanzen ansprechen, deren Oberflächentyp auf QSurface::OpenGLSurface oder QSurface::RasterGLSurface gesetzt ist.
Hinweis: window
ist optional. Es wird empfohlen, es wann immer möglich anzugeben, um Probleme auf Multi-Adapter- und Multi-Screen-Systemen zu vermeiden. Wenn window
nicht festgelegt ist, wird das allererste QOpenGLContext::makeCurrent() mit fallbackSurface
ausgeführt, was auf einigen Plattformen (z. B. Windows) ein unsichtbares Fenster sein kann und in einigen Fällen unerwartete Probleme verursachen kann.
Falls die gemeinsame Nutzung von Ressourcen mit einem bestehenden QOpenGLContext gewünscht ist, kann shareContext
auf ein bestehendes QOpenGLContext gesetzt werden. Alternativ dazu wird auch Qt::AA_ShareOpenGLContexts beachtet, wenn es aktiviert ist.
Arbeiten mit bestehenden OpenGL-Kontexten
Bei der Zusammenarbeit mit einer anderen Grafik-Engine kann es notwendig sein, eine QRhi -Instanz zu erhalten, die denselben OpenGL-Kontext verwendet. Dies kann erreicht werden, indem ein Zeiger auf eine QRhiGles2NativeHandles an QRhi::create() übergeben wird. Die QRhiGles2NativeHandles::context
muss dann auf einen Nicht-Null-Wert gesetzt werden.
Ein alternativer Ansatz ist es, eine QOpenGLContext zu erstellen, die shares resources mit dem Kontext der anderen Engine und die Übergabe dieses Kontextes über QRhiGles2NativeHandles.
Die QRhi übernimmt nicht das Eigentum an der QOpenGLContext, die über QRhiGles2NativeHandles übergeben wird.
Dokumentation der Mitgliedsfunktionen
QRhiGles2InitParams::QRhiGles2InitParams()
Konstruiert einen neuen QRhiGles2InitParams.
format wird auf QSurfaceFormat::defaultFormat() gesetzt.
[static]
QOffscreenSurface *QRhiGles2InitParams::newFallbackSurface(const QSurfaceFormat &format = QSurfaceFormat::defaultFormat())
Gibt ein neues QOffscreenSurface zurück, das mit einem QRhi verwendet werden kann, indem es über ein QRhiGles2InitParams übergeben wird.
Wenn format nicht angegeben wird, ist der Standardwert das globale Standardformat, das über QSurfaceFormat::setDefaultFormat() eingestellt werden kann.
format wird gegebenenfalls angepasst, um spätere Probleme aufgrund eines inkompatiblen Kontexts und einer inkompatiblen Oberfläche zu vermeiden.
Hinweis: Diese Funktion darf nur im gui/main thread aufgerufen werden.
Hinweis: Es liegt in der Verantwortung der Anwendung, die zurückgegebene QOffscreenSurface auf dem gui/main thread zu zerstören, sobald die zugehörige QRhi zerstört wurde. Die QRhi wird die QOffscreenSurface nicht zerstören.
Dokumentation der Mitgliedsvariablen
QSurface *QRhiGles2InitParams::fallbackSurface
Ein QSurface, das mit format kompatibel ist. Typischerweise ein QOffscreenSurface. Dies ist zwingend erforderlich. Beachten Sie die Auswirkungen auf das Threading: ein QOffscreenSurface, wie QWindow, darf immer nur im Haupt-Thread (GUI-Thread) erstellt und zerstört werden, auch wenn das QRhi in einem anderen Thread erstellt wird und dort arbeitet.
QSurfaceFormat QRhiGles2InitParams::format
Die QSurfaceFormat, die standardmäßig mit QSurfaceFormat::defaultFormat() initialisiert wird.
QOpenGLContext *QRhiGles2InitParams::shareContext
Optional, die QOpenGLContext, mit der die Ressource geteilt werden soll. QRhi erstellt seinen eigenen Kontext, und das Setzen dieses Mitglieds auf ein gültiges QOpenGLContext führt zum Aufruf von setShareContext() mit diesem.
QWindow *QRhiGles2InitParams::window
Die Angabe ist optional, wird aber empfohlen, wenn Sie eine QWindow mit der QRhi anvisieren.
© 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.