Sur cette page

QRhiGles2InitParams Struct

Paramètres d'initialisation spécifiques à OpenGL. Plus d'informations...

En-tête : #include <rhi/qrhi.h>
CMake : find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake : QT += gui-private
Depuis : Qt 6.6
Hérite : QRhiInitParams

Fonctions publiques

Variables publiques

QSurface *fallbackSurface
QSurfaceFormat format
QOpenGLContext *shareContext
QWindow *window

Membres publics statiques

QOffscreenSurface *newFallbackSurface(const QSurfaceFormat &format = QSurfaceFormat::defaultFormat())

Description détaillée

Remarque : il s'agit d'une API RHI avec des garanties de compatibilité limitées, voir QRhi pour plus de détails.

Un site QRhi basé sur OpenGL a besoin d'un site QSurface déjà créé qui peut être utilisé en combinaison avec QOpenGLContext. Dans la pratique, il s'agit le plus souvent de QOffscreenSurface. De plus, bien qu'optionnel, il est recommandé que le QWindow que le premier QRhiSwapChain ciblera soit également transmis.

QOffscreenSurface *fallbackSurface = QRhiGles2InitParams::newFallbackSurface();
QRhiGles2InitParams params;
params.fallbackSurface = fallbackSurface;
params.window = window;
rhi = QRhi::create(QRhi::OpenGLES2, &params);

Par défaut, QRhi crée un QOpenGLContext tout seul. Cette approche fonctionne bien dans la plupart des cas, y compris dans les scénarios threadés, où il y a un QRhi dédié pour chaque thread de rendu. Comme il y aura un QOpenGLContext pour chaque QRhi, les exigences du contexte OpenGL (un contexte ne peut être courant que sur un seul thread) sont satisfaites. Le contexte implicitement créé est détruit automatiquement avec le QRhi.

Le QSurfaceFormat du contexte est spécifié dans format. Le constructeur lui attribue la valeur QSurfaceFormat::defaultFormat(), de sorte que les applications qui appellent QSurfaceFormat::setDefaultFormat() avec les paramètres appropriés avant l'exécution du constructeur n'auront pas besoin de modifier la valeur de format.

Remarque : n'oubliez pas de définir les tailles des tampons de profondeur et de stencil à 24 et 8 lorsque le moteur de rendu s'appuie sur des tests de profondeur ou de stencil, soit dans le fichier global par défaut QSurfaceFormat, soit séparément dans toutes les instances QSurfaceFormat concernées : dans format, dans l'argument de format transmis à newFallbackSurface() et dans tout fichier QWindow utilisé avec QRhi.

Un QSurface doit être spécifié dans fallbackSurface. Afin d'éviter les erreurs dans les situations threadées, il n'est jamais créé automatiquement par QRhi car, comme QWindow, les instances des sous-classes QSurface peuvent souvent être créées uniquement sur le thread gui/principal.

Par commodité, les applications peuvent utiliser newFallbackSurface() qui crée et renvoie un QOffscreenSurface compatible avec le QOpenGLContext qui sera créé par le QRhi par la suite. Notez que la propriété du QOffscreenSurface renvoyé est transférée à l'appelant et que le QRhi ne le détruira pas.

Note : Avec le backend OpenGL, QRhiSwapChain ne peut cibler que les instances QWindow dont le type de surface est QSurface::OpenGLSurface.

Remarque : window est facultatif. Il est recommandé de le spécifier dans la mesure du possible, afin d'éviter les problèmes sur les systèmes multi-adaptateurs et multi-écrans. Lorsque window n'est pas défini, le tout premier QOpenGLContext::makeCurrent() se produit avec fallbackSurface, qui peut être une fenêtre invisible sur certaines plates-formes (par exemple, Windows) et qui peut entraîner des problèmes inattendus dans certains cas.

Si le partage des ressources avec un site QOpenGLContext existant est souhaité, shareContext peut être associé à un site QOpenGLContext existant. Alternativement, Qt::AA_ShareOpenGLContexts est également respecté, lorsqu'il est activé.

Travailler avec des contextes OpenGL existants

Lors de l'interopérabilité avec un autre moteur graphique, il peut être nécessaire d'obtenir une instance de QRhi qui utilise le même contexte OpenGL. Ceci peut être réalisé en passant un pointeur sur QRhiGles2NativeHandles à QRhi::create(). L'adresse QRhiGles2NativeHandles::context doit alors être définie à une valeur non nulle.

Une autre approche consiste à créer un QOpenGLContext qui shares resources avec le contexte de l'autre moteur et à transmettre ce contexte via QRhiGles2NativeHandles.

L'adresse QRhi n'est pas propriétaire de l'adresse QOpenGLContext transmise via QRhiGles2NativeHandles.

Documentation sur les fonctions membres

QRhiGles2InitParams::QRhiGles2InitParams()

Construit un nouveau QRhiGles2InitParams.

format est défini sur QSurfaceFormat::defaultFormat().

[static] QOffscreenSurface *QRhiGles2InitParams::newFallbackSurface(const QSurfaceFormat &format = QSurfaceFormat::defaultFormat())

Renvoie un nouveau QOffscreenSurface qui peut être utilisé avec un QRhi en le transmettant par l'intermédiaire d'un QRhiGles2InitParams.

Lorsque format n'est pas spécifié, sa valeur par défaut est le format global par défaut paramétrable via QSurfaceFormat::setDefaultFormat().

format Le format est ajusté comme il se doit afin d'éviter tout problème ultérieur dû à un contexte et à une surface incompatibles.

Note : Cette fonction ne doit être appelée que sur le thread principal de l'interface utilisateur ou si l'intégration de la plateforme prend en charge les surfaces hors écran.

Remarque : il incombe à l'application de détruire l'objet QOffscreenSurface renvoyé dans le fil d'exécution principal de l'interface utilisateur une fois que l'objet QRhi associé a été détruit. Le QRhi ne détruira pas le QOffscreenSurface.

Documentation sur les variables membres

QSurface *QRhiGles2InitParams::fallbackSurface

Un QSurface compatible avec format. Typiquement un QOffscreenSurface. Il est obligatoire de le fournir. Soyez conscient des implications en matière de threading : un QOffscreenSurface, comme un QWindow, ne doit jamais être créé et détruit que sur le thread principal (gui), même si le QRhi est créé et opère sur un autre thread.

QSurfaceFormat QRhiGles2InitParams::format

La valeur de QSurfaceFormat, initialisée à QSurfaceFormat::defaultFormat() par défaut.

QOpenGLContext *QRhiGles2InitParams::shareContext

Facultatif, le QOpenGLContext avec lequel partager la ressource. QRhi crée son propre contexte, et la définition de ce membre avec un QOpenGLContext valide permet d'appeler setShareContext() avec lui.

QWindow *QRhiGles2InitParams::window

Facultatif, mais il est recommandé de le définir lorsque l'on cible un site QWindow à l'aide de la fonction QRhi.

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