Sur cette page

QQuickGraphicsConfiguration Class

QQuickGraphicsConfiguration permet de contrôler les paramètres graphiques de bas niveau de l'QQuickWindow. En savoir plus...

En-tête : #include <QQuickGraphicsConfiguration>
CMake : find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake : QT += quick
Depuis : Qt 6.0

Fonctions publiques

QQuickGraphicsConfiguration()
~QQuickGraphicsConfiguration()
QByteArrayList deviceExtensions() const
(since 6.5) bool isAutomaticPipelineCacheEnabled() const
bool isDebugLayerEnabled() const
bool isDebugMarkersEnabled() const
bool isDepthBufferEnabledFor2D() const
QString pipelineCacheLoadFile() const
QString pipelineCacheSaveFile() const
bool prefersSoftwareDevice() const
(since 6.5) void setAutomaticPipelineCache(bool enable)
(since 6.5) void setDebugLayer(bool enable)
(since 6.5) void setDebugMarkers(bool enable)
void setDepthBufferFor2D(bool enable)
void setDeviceExtensions(const QByteArrayList &extensions)
(since 6.5) void setPipelineCacheLoadFile(const QString &filename)
(since 6.5) void setPipelineCacheSaveFile(const QString &filename)
(since 6.5) void setPreferSoftwareDevice(bool enable)
(since 6.6) void setTimestamps(bool enable)
(since 6.6) bool timestampsEnabled() const

Membres publics statiques

(since 6.1) QByteArrayList preferredInstanceExtensions()

Description détaillée

La classe QQuickGraphicsConfiguration est un conteneur de paramètres graphiques de bas niveau pouvant influencer la manière dont l’API graphique sous-jacente, telle que Vulkan, est initialisée par le graphe de scène d’ Qt Quick. Elle permet également de contrôler certains aspects du moteur de rendu du graphe de scène.

Remarque : la configuration d’un objet `QQuickGraphicsConfiguration` sur un ` QQuickWindow ` doit être effectuée suffisamment tôt, avant que le graphe de scène ne soit initialisé pour la première fois pour cette fenêtre. Pour les fenêtres à l’écran, cela signifie que l’appel doit être effectué avant d’invoquer `show()` sur ` QQuickWindow ` ou ` QQuickView`. Avec ` QQuickRenderControl `, la configuration doit être finalisée avant d’appeler ` initialize()`.

Configuration pour les moteurs de rendu externes ou les API XR

Lors de la construction et de l’affichage d’une QQuickWindow utilisant Vulkan pour le rendu, une instance Vulkan (VkInstance), un périphérique physique (VkPhysicalDevice), un périphérique (VkDevice) et les objets associés (files d’attente, pools) sont initialisés via l’API Vulkan. Il en va de même, pour l’essentiel, lorsque l’on utilise ` QQuickRenderControl ` pour rediriger le rendu vers une cible de rendu personnalisée, telle qu’une texture. Bien que la construction de ` QVulkanInstance ` soit alors sous le contrôle de l’application, l’initialisation des autres objets graphiques s’effectue de la même manière dans ` QQuickRenderControl::initialize()` que dans le cas d’un rendu à l’écran ` QQuickWindow`.

Pour la plupart des applications, aucune configuration supplémentaire n’est nécessaire, car Qt Quick fournit des valeurs par défaut raisonnables pour de nombreux paramètres graphiques de bas niveau, par exemple les extensions de périphérique à activer.

Cela ne sera toutefois pas toujours suffisant. Dans des cas d’utilisation avancés, lors de l’intégration de contenu Vulkan direct ou d’autres API graphiques, ou lors de l’intégration avec un moteur 3D ou VR externe, tel qu’OpenXR, l’application souhaitera spécifier son propre ensemble de paramètres pour certains détails, comme les extensions de périphérique à activer.

C’est précisément ce que permet cette classe. Elle permet de spécifier, par exemple, une liste d’extensions de périphérique qui sera ensuite reprise par le graphe de scène lors de l’utilisation de Vulkan, ou d’API graphiques où ce concept s’applique. Lorsque certains concepts ne s’appliquent pas, les paramètres correspondants sont simplement ignorés.

Parmi les fonctions de cette catégorie, on peut citer ` setDeviceExtensions()` et ` preferredInstanceExtensions()`. Cette dernière est utile lorsque l’application gère son propre ` QVulkanInstance `, qui est ensuite associé à la ` QQuickWindow ` via ` QWindow::setVulkanInstance()`.

Qt Quick Configuration du moteur de rendu du graphe de scène

Une autre catégorie de paramètres concerne le moteur de rendu du graphe de scène. Dans certains cas, les applications peuvent souhaiter contrôler certains comportements, comme l’utilisation du tampon de profondeur lors du rendu de contenu 2D. Dans Qt 5, ces paramètres n'étaient soit pas contrôlables du tout, soit gérés via des variables d'environnement. Dans Qt 6, QQuickGraphicsConfiguration offre un nouvel emplacement pour ces paramètres, tout en conservant la prise en charge des variables d'environnement héritées, le cas échéant.

setDepthBufferFor2D() en est un exemple.

Configuration des périphériques graphiques

Lorsque les objets d’instance et de périphérique graphique (par exemple, VkInstance et VkDevice avec Vulkan, ID3D11Device avec Direct 3D, etc.) sont créés par Qt lors de l’initialisation d’un QQuickWindow, certains paramètres peuvent nécessiter d’être contrôlés par les applications ou les bibliothèques dans certaines circonstances.

Avant Qt 6.5, certains de ces paramètres pouvaient être contrôlés via des variables d’environnement. Par exemple, ` QSG_RHI_DEBUG_LAYER ` ou ` QSG_RHI_PREFER_SOFTWARE_RENDERER`. Celles-ci sont toujours disponibles et continuent de fonctionner comme auparavant. `QQuickGraphicsConfiguration` fournit en outre des accesseurs C++.

Par exemple, la fonction `main()` suivante ouvre un ` QQuickView ` tout en spécifiant que la validation Vulkan ou la couche de débogage Direct3D doit être activée :

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQuickGraphicsConfiguration config;
    config.setDebugLayer(true);

    QQuickView *view = new QQuickView;
    view->setGraphicsConfiguration(config);

    view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
    view->show();
    return app.exec();
}

Sauvegarde et chargement du cache du pipeline

Qt Quick prend en charge la sauvegarde sur disque du cache du pipeline graphique/de calcul, ainsi que sa relecture lors des exécutions suivantes d’une application. Le contenu exact du cache du pipeline, le fonctionnement des recherches et les éléments précis qui sont accélérés dépendent tous du backend Qt RHI et de l’API graphique native sous-jacente utilisée lors de l’exécution. Les différentes API 3D ont des concepts distincts en matière de shaders, de programmes et d’objets d’état de pipeline, ainsi que de mécanismes de cache correspondants. Le concept de haut niveau de cache de pipeline présenté ici résume tout cela à la sauvegarde et à la récupération d’un seul blob binaire vers et depuis un fichier.

Remarque : le stockage du cache sur le disque peut entraîner des améliorations, parfois significatives, lors des exécutions suivantes de l’application.

Lorsque le même programme de shader et/ou le même état de pipeline que lors d’une exécution précédente est rencontré, un certain nombre d’opérations sont susceptibles d’être ignorées, ce qui accélère les temps d’initialisation des shaders et des matériaux ; le démarrage peut ainsi être plus rapide, et les ralentissements ainsi que les « saccades » pendant le rendu peuvent être réduits, voire évités.

Lors de l’exécution avec une API graphique où la récupération et le rechargement du cache du pipeline (ou des binaires de shader/programme) ne sont pas applicables ou ne sont pas pris en charge, tenter d’utiliser un fichier pour enregistrer et charger le cache n’a aucun effet.

Remarque : dans de nombreux cas, les données récupérées dépendent du pilote graphique (et éventuellement de sa version exacte) et y sont liées. Qt effectue automatiquement les vérifications nécessaires, en stockant des métadonnées supplémentaires dans le fichier de cache du pipeline. Si les données du fichier ne correspondent pas au périphérique graphique et à la version du pilote au moment de l’exécution, leur contenu sera ignoré de manière transparente pour l’application. Il est donc sans risque de faire référence à un cache généré sur un autre périphérique ou avec un autre pilote.

Il existe des exceptions au problème de dépendance vis-à-vis du pilote, notamment Direct 3D 11, où le « cache de pipeline » sert uniquement à stocker les résultats de la compilation HLSL->DXBC à l’exécution et est donc indépendant du périphérique et du fournisseur.

Dans certains cas, il peut être souhaitable d’optimiser la toute première exécution de l’application en « préremplissant » le cache. Cela est possible en fournissant le fichier de cache enregistré lors d’une exécution précédente et en y faisant référence sur une autre machine ou un autre périphérique. De cette manière, l’application ou le périphérique dispose dès son premier lancement des programmes de shaders et des pipelines déjà rencontrés lors de l’exécution qui a généré le fichier de cache. Le transfert et le déploiement du fichier de cache n’ont de sens que si le périphérique et les pilotes graphiques sont identiques sur le système cible ; dans le cas contraire, le fichier de cache est ignoré si la version du périphérique ou du pilote ne correspond pas (à l’exception de D3D11), comme décrit ci-dessus.

Une fois le contenu du cache chargé, il est toujours possible que l’application construise des pipelines graphiques et de calcul qui n’ont pas été rencontrés lors des exécutions précédentes. Dans ce cas, le cache s’agrandit, les pipelines et programmes de shaders y étant ajoutés. Si l’application choisit également d’enregistrer le contenu (peut-être même dans le même fichier), les anciens et les nouveaux pipelines seront alors tous deux stockés. Le chargement à partir du même fichier et l’enregistrement dans celui-ci à chaque exécution permettent d’obtenir un cache en constante expansion qui stocke tous les pipelines et programmes de shaders rencontrés.

En pratique, on peut s’attendre à ce que le cache de pipelines Qt corresponde aux fonctionnalités suivantes de l’API graphique native :

  • Vulkan - VkPipelineCache - L'enregistrement du cache de pipelines stocke en fait le blob récupéré via vkGetPipelineCacheData, accompagné de métadonnées supplémentaires permettant d’identifier de manière fiable le périphérique et le pilote, car le blob du cache de pipelines dépend du pilote précis.
  • Metal - MTLBinaryArchive - Lorsque l’enregistrement du cache de pipeline est activé, Qt stocke tous les pipelines de rendu et de calcul rencontrés dans un fichier MTLBinaryArchive. L’enregistrement du cache de pipeline stocke le blob récupéré à partir de l’archive, accompagné de métadonnées supplémentaires permettant d’identifier le périphérique. Remarque : actuellement, l’utilisation de MTLBinaryArchive est désactivée sur macOS et iOS en raison de divers problèmes sur certains matériels et certaines versions du système d’exploitation.
  • OpenGL - Il n’existe pas de concept natif de pipelines ; le « cache de pipeline » stocke un ensemble de binaires de programme récupérés via glGetProgramBinary. Les binaires de programme sont regroupés dans un seul blob, accompagnés de métadonnées supplémentaires permettant d’identifier le périphérique, le pilote et la version à partir de laquelle les binaires ont été récupérés. La mise en cache persistante des binaires de programme n’est pas une nouveauté dans Qt : Qt 5 disposait déjà d’une fonctionnalité similaire dans QOpenGLShaderProgram, voir par exemple addCacheableShaderFromSourceCode(). En réalité, ce mécanisme est également toujours actif dans Qt 6 lors de l’utilisation d’ Qt Quick avec OpenGL. Cependant, lorsque l’on utilise la nouvelle abstraction de cache de pipeline indépendante de l’API graphique fournie ici, le cache de binaires de programme de l’époque de Qt 5 est automatiquement désactivé, car ce même contenu est désormais regroupé dans le « cache de pipeline ».
  • Direct 3D 11 – Il n’existe pas de concept natif de pipelines ni de récupération de binaires pour la deuxième phase de compilation (lorsque le bytecode intermédiaire, indépendant du fournisseur, est compilé en jeu d’instructions spécifique au périphérique). Les pilotes utilisent généralement leur propre système de mise en cache à ce niveau. À la place, le « cache de pipeline » d’ Qt Quick est utilisé pour accélérer les cas où les shaders contiennent du code source HLSL qui doit d’abord être compilé au format bytecode intermédiaire. Cela peut apporter des gains de performances significatifs dans les applications et les bibliothèques qui composent du code de shader à l’exécution, car lors des exécutions suivantes, les appels à D3DCompile(), potentiellement coûteux et non mis en cache, peuvent être évités si le bytecode est déjà disponible pour le shader HLSL rencontré. Un bon exemple est Qt Quick 3D, où les shaders générés à l’exécution pour les matériaux impliquent de gérer du code source HLSL. La sauvegarde et le rechargement du cache de pipeline Qt Quick peuvent donc apporter des améliorations considérables dans les scènes contenant un ou plusieurs éléments View3D. Qt Quick lui-même peut constituer un contre-exemple : comme la plupart des shaders intégrés pour le contenu 2D sont fournis avec du bytecode DirectX généré au moment de la compilation, le cache n’apportera pas d’améliorations significatives.

Tout cela est indépendant du traitement des shaders effectué par le module Qt Shader Tools et ses outils en ligne de commande tels que qsb. Prenons l’exemple de Vulkan. Il est judicieux de compiler le code source GLSL compatible Vulkan en SPIR-V soit hors ligne, soit au moment de la compilation (directement via qsb ou CMake), car cela permet d’éviter la compilation coûteuse à partir du code source lors de l’exécution. Le SPIR-V est toutefois un format intermédiaire indépendant du fournisseur. Au moment de l’exécution, lors de la construction de pipelines graphiques ou de calcul, une nouvelle étape de compilation a probablement lieu, cette fois-ci du format intermédiaire vers le jeu d’instructions spécifique au fabricant du GPU (et cela peut dépendre de certains états du pipeline graphique ainsi que des cibles de rendu). Le cache du pipeline facilite cette dernière phase.

Remarque : de nombreuses implémentations d’API graphiques utilisent leur propre cache disque persistant de manière transparente pour les applications. L’utilisation de la fonctionnalité de cache de pipeline de Qt Quick apportera probablement des améliorations dans ce cas, mais les gains pourraient être moindres.

Appelez ` setPipelineCacheSaveFile()` et ` setPipelineCacheLoadFile()` pour contrôler les fichiers dans lesquels ` QQuickWindow ` ou ` QQuickView ` enregistre et charge le cache du pipeline.

Pour vous faire une idée des effets de l’activation du stockage sur disque du cache du pipeline, activez les journaux les plus importants relatifs au graphe de scène et aux graphismes, soit via la variable d’environnement QSG_INFO=1, soit via les catégories de journalisation qt.scenegraph.general et qt.rhi.general. À la fermeture de l’ QQuickWindow, un message de journalisation similaire à celui-ci s’affiche :

Total time spent on pipeline creation during the lifetime of the QRhi was 123 ms

Cela donne une idée approximative du temps consacré à la création du pipeline graphique et de calcul (qui peut inclure différentes étapes de compilation des shaders) pendant la durée de vie de la fenêtre.

Lorsque le chargement à partir d’un fichier de cache de pipeline est activé, cela est confirmé par un message :

Attempting to seed pipeline cache from 'filename'

De même, pour vérifier si l’enregistrement du cache est bien activé, recherchez un message tel que celui-ci :

Writing pipeline cache contents to 'filename'

Le cache de pipeline automatique

Lorsqu’aucun nom de fichier n’est fourni pour l’enregistrement et le chargement, la stratégie de mise en cache automatique du pipeline est utilisée. Cela implique le stockage des données à l’emplacement de cache spécifique à l’application du système (QStandardPaths::CacheLocation).

Cette fonctionnalité peut être désactivée de l’une des manières suivantes :

  • Définissez l’attribut d’application Qt::AA_DisableShaderDiskCache. (désactive complètement la mise en cache automatique)
  • Définir la variable d’environnement QT_DISABLE_SHADER_DISK_CACHE sur une valeur non nulle. (désactive complètement le stockage automatique)
  • Définissez la variable d’environnement QSG_RHI_DISABLE_SHADER_DISK_CACHE sur une valeur non nulle. (désactive complètement la mise en cache automatique)
  • Appeler setAutomaticPiplineCache() en définissant l'argument enable sur false. (désactive complètement le stockage automatique)
  • Définissez un nom de fichier en appelant la fonction ` setPipelineCacheLoadFile()`. (désactive uniquement le chargement à partir de la mémoire cache automatique, en privilégiant à la place le fichier spécifié)
  • Définissez un nom de fichier en appelant ` setPipelineCacheSaveFile()`. (Cela désactive uniquement l'écriture dans le stockage automatique, en privilégiant le fichier spécifié à la place.)

Les deux premiers sont des mécanismes existants utilisés depuis Qt 5.9 pour contrôler le cache binaire du programme OpenGL. Pour des raisons de compatibilité et de familiarité, le même attribut et la même variable d’environnement sont pris en charge pour le cache de pipeline amélioré de Qt 6.

Le cache de pipeline automatique utilise un seul fichier par application, mais un fichier différent pour chaque backend RHI (API graphique). Cela signifie que le passage à une autre API graphique lors de la prochaine exécution de l’application n’entraînera pas la perte du cache de pipeline généré lors de l’exécution précédente. Les applications comportant plusieurs instances d’ QQuickWindow s affichées simultanément peuvent toutefois ne pas en tirer pleinement parti, car le cache automatique ne peut stocker que les données collectées à partir d’un seul objet RHI à la fois. (Et avec la boucle de rendu par défaut threaded, chaque fenêtre dispose de son propre RHI, le rendu s’effectuant de manière indépendante sur des threads dédiés). Pour tirer pleinement parti du cache disque dans une application comportant plusieurs fenêtres, il est préférable de définir explicitement le nom de fichier pour chaque fenêtre via ` setPipelineCacheSaveFile()` ().

Voir également QQuickWindow::setGraphicsConfiguration(), QQuickWindow et QQuickRenderControl.

Documentation des fonctions membres

QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()

Crée une instance par défaut de `QQuickGraphicsConfiguration` qui ne spécifie aucun paramètre supplémentaire à prendre en compte par le graphe de scène.

[noexcept] QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()

Destructeur.

QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const

Renvoie la liste des extensions de périphérique supplémentaires demandées.

Voir aussi setDeviceExtensions().

[since 6.5] bool QQuickGraphicsConfiguration::isAutomaticPipelineCacheEnabled() const

Renvoie « true » si la mise en cache automatique du pipeline est activée.

Par défaut, cette valeur est true, sauf si certains attributs d'application ou certaines variables d'environnement sont définis. Pour plus d'informations, consultez The Automatic Pipeline Cache.

Cette fonction a été introduite dans Qt 6.5.

Voir également setAutomaticPipelineCache().

bool QQuickGraphicsConfiguration::isDebugLayerEnabled() const

Renvoie « true » si les couches de débogage/validation doivent être activées.

Par défaut, la valeur est false.

Voir aussi setDebugLayer().

bool QQuickGraphicsConfiguration::isDebugMarkersEnabled() const

Renvoie « true » si les marqueurs de débogage sont activés.

Par défaut, la valeur est false.

Voir aussi setDebugMarkers().

bool QQuickGraphicsConfiguration::isDepthBufferEnabledFor2D() const

Renvoie « true » si l'utilisation du tampon de profondeur est activée pour le contenu 2D.

Par défaut, la valeur est true, sauf si la variable d'environnement QSG_NO_DEPTH_BUFFER est définie.

QString QQuickGraphicsConfiguration::pipelineCacheLoadFile() const

Renvoie le nom de fichier actuellement défini pour le chargement du cache du pipeline.

Par défaut, la valeur est une chaîne vide.

Voir également setPipelineCacheLoadFile().

QString QQuickGraphicsConfiguration::pipelineCacheSaveFile() const

Renvoie le nom de fichier actuellement défini pour le stockage du cache du pipeline.

Par défaut, la valeur est une chaîne vide.

Voir également setPipelineCacheSaveFile().

[static, since 6.1] QByteArrayList QQuickGraphicsConfiguration::preferredInstanceExtensions()

Renvoie la liste des extensions d'instance Vulkan que Qt Quick préfère voir activées sur l'instance VkInstance.

Dans la plupart des cas, c'est Qt Quick qui se charge de créer une instance ` QVulkanInstance`. Cette fonction n'est alors pas pertinente. En revanche, lorsque l'on utilise QQuickRenderControl en combinaison avec un rendu basé sur Vulkan, il incombe à l'application de créer une QVulkanInstance et de l'associer à l'QQuickWindow(hors écran). Dans ce cas, l'application est censée interroger la liste des extensions d'instance à activer, puis les transmettre à QVulkanInstance::setExtensions() avant d'appeler QVulkanInstance::create().

Cette fonction a été introduite dans Qt 6.1.

bool QQuickGraphicsConfiguration::prefersSoftwareDevice() const

Renvoie « true » si la priorité est donnée à un périphérique graphique utilisant un rastériseur logiciel.

Par défaut, la valeur est false.

Voir également la fonction ` setPreferSoftwareDevice()`.

[since 6.5] void QQuickGraphicsConfiguration::setAutomaticPipelineCache(bool enable)

Modifie le comportement du cache automatique du pipeline conformément à la documentation disponible à l'adresse enable.

La valeur par défaut est « true », sauf si certains attributs d'application ou certaines variables d'environnement sont définis. Voir The Automatic Pipeline Cache pour plus d'informations.

Cette fonction a été introduite dans Qt 6.5.

Voir également isAutomaticPipelineCacheEnabled().

[since 6.5] void QQuickGraphicsConfiguration::setDebugLayer(bool enable)

Active les couches de débogage ou de validation de l'implémentation de l'API graphique, si elles sont disponibles.

En pratique, cette fonctionnalité est prise en charge par Vulkan et Direct 3D 11, à condition que les composants nécessaires (couches de validation, SDK Windows) soient installés et disponibles au moment de l'exécution. Lorsque la variable d'environnement enable a la valeur true, Qt tente d'activer la couche de validation standard sur l'instance VkInstance ou de définir la valeur D3D11_CREATE_DEVICE_DEBUG sur le périphérique graphique.

Pour Metal sous macOS, définissez plutôt la variable d’environnement METAL_DEVICE_WRAPPER_TYPE=1 avant de lancer l’application.

L'appel de cette fonction avec enable défini sur true équivaut à définir la variable d'environnement QSG_RHI_DEBUG_LAYER sur une valeur non nulle.

La valeur par défaut est « false ».

Remarque : l’activation des couches de débogage ou de validation peut avoir un impact non négligeable sur les performances. Il est fortement déconseillé de déployer des applications en production avec ce drapeau activé.

Remarque : sachez qu’en raison des différences de conception des API graphiques sous-jacentes, ce paramètre ne peut pas toujours être défini au niveau de chaque `QQuickWindow `, même si chaque ` QQuickWindow ` dispose de son propre ` QQuickGraphicsConfiguration`. Avec Vulkan en particulier, l’objet d’instance (VkInstance) n’est créé qu’une seule fois, puis utilisé par toutes les fenêtres de l’application. Par conséquent, l’activation de la couche de validation affecte toutes les fenêtres. Cela signifie également que tenter d’activer la validation via une fenêtre qui n’apparaît qu’après que d’autres fenêtres ont déjà commencé à s’afficher n’a aucun effet avec Vulkan. D’autres API, telles que D3D11, exposent le concept de couche de débogage sous la forme d’un paramètre par périphérique (ID3D11Device) ; il est donc contrôlé véritablement au cas par cas pour chaque fenêtre (en supposant que la boucle de rendu du graphe de scène utilise un périphérique/contexte graphique dédié pour chaque QQuickWindow).

Cette fonction a été introduite dans Qt 6.5.

Voir également isDebugLayerEnabled().

[since 6.5] void QQuickGraphicsConfiguration::setDebugMarkers(bool enable)

Le cas échéant, enable gère l'insertion de marqueurs de débogage et de noms d'objets dans le flux de commandes graphiques.

Certains frameworks, tels qu’ Qt Quick 3D, permettent d’annoter les objets graphiques qu’ils créent (tampons, textures) avec des noms et d’indiquer également le début et la fin des passes de rendu dans le tampon de commandes. Ces informations sont alors visibles dans les captures d’images réalisées à l’aide d’outils tels que RenderDoc ou XCode.

Les API graphiques susceptibles de prendre en charge cette fonctionnalité sont Vulkan (si VK_EXT_debug_utils est disponible), Direct 3D 11 et Metal.

L'appel de cette fonction avec l'option « enable » définie sur « true » équivaut à définir la variable d'environnement « QSG_RHI_PROFILE » sur une valeur non nulle.

La valeur par défaut est « false ».

Remarque : l’activation des marqueurs de débogage peut avoir un impact sur les performances. Il n’est pas recommandé de déployer des applications en production avec ce drapeau activé.

Cette fonction a été introduite dans Qt 6.5.

Voir également isDebugMarkersEnabled().

void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool enable)

Définit l'utilisation du tampon de profondeur pour le contenu 2D sur « enable ». Lorsque cette option est désactivée, le graphe de scène « Qt Quick » n'écrit jamais dans le tampon de profondeur.

Par défaut, la valeur est « true », sauf si la variable d’environnement « QSG_NO_DEPTH_BUFFER » est définie.

La valeur par défaut « true » est le réglage le plus adapté à la grande majorité des scènes. La désactivation de l’utilisation du tampon de profondeur réduit l’efficacité du traitement par lots du graphe de scène.

Il existe toutefois des cas où autoriser l’écriture de contenu 2D dans le tampon de profondeur n’est pas idéal. Prenons l’exemple d’une scène 3D servant de « superposition » par-dessus la scène 2D, rendue via Qt Quick 3D à l’aide d’un View3D avec l’option « renderMode » définie sur « Overlay ». Dans ce cas, le fait que le tampon de profondeur soit rempli par du contenu 2D peut entraîner des résultats inattendus. En effet, la manière dont le moteur de rendu du graphe de scène 2D génère et gère les valeurs de profondeur n’est pas nécessairement compatible avec le fonctionnement d’une scène 3D. Cela peut entraîner des conflits de valeurs de profondeur, des collisions et des échecs inattendus lors des tests de profondeur. Par conséquent, l’approche la plus sûre consiste ici à appeler cette fonction avec l’option « enable » définie sur « false », et à désactiver les écritures dans le tampon de profondeur pour le contenu 2D dans le fichier « QQuickWindow ».

Remarque : cet indicateur n’est pas tout à fait identique à la configuration de la variable d’environnement « QSG_NO_DEPTH_BUFFER ». Il ne contrôle pas la présence des tampons de profondeur et de stencil. Il concerne plutôt le pipeline de rendu. Pour forcer l’absence totale de tampons de profondeur et de stencil, définissez « QSG_NO_DEPTH_BUFFER » et « QSG_NO_STENCIL_BUFFER ». Sachez toutefois qu’un tel QQuickWindow, ainsi que toutes les couches d’éléments qu’il contient, peut alors devenir incompatible avec certains éléments, tels que View3D dans certains modes de fonctionnement, car le contenu 3D nécessite un tampon de profondeur. L’appel de cette fonction est toujours sans risque, mais peut impliquer la création de ressources, telles que des tampons de profondeur, même si celles-ci ne sont pas activement utilisées.

void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)

Définit la liste des extensions s supplémentaires à activer sur le périphérique graphique (par exemple, l'VkDevice).

Lors du rendu avec une API graphique où ce concept n’est pas applicable, les extensions « extensions » seront ignorées.

Remarque : la liste spécifie des extensions supplémentaires. La fonction ` Qt Quick ` active toujours les extensions requises par le graphe de scène.

Voir également deviceExtensions().

[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheLoadFile(const QString &filename)

Définit l'filename à partir de laquelle l'QQuickWindow doit charger le contenu initial du cache de son pipeline graphique/de calcul. La valeur par défaut est vide, ce qui signifie que le chargement du cache du pipeline est désactivé.

Voir Pipeline Cache Save and Load pour plus d’informations sur les caches de pipeline.

Le stockage persistant du cache du pipeline peut entraîner des améliorations de performances lors des exécutions ultérieures de l’application, car il permet d’éviter les étapes coûteuses de compilation des shaders et de construction du pipeline.

Le moment exact du chargement du contenu du fichier n’est pas défini, si ce n’est qu’il aura lieu à un moment donné pendant l’initialisation du graphe de scène de l’ QQuickWindow. Par conséquent, le fichier doit continuer d’exister après l’appel de cette fonction. La fonction ` QQuickGraphicsConfiguration ` ne stocke que le nom du fichier ; elle ne peut effectuer aucune opération d’E/S ni aucune opération graphique par elle-même. Le travail proprement dit aura lieu ultérieurement, éventuellement sur un autre thread.

Lorsqu’on utilise une API graphique où la récupération et le rechargement du cache du pipeline (ou des binaires de shaders/programmes) ne sont pas applicables ou ne sont pas pris en charge, l’appel de cette fonction n’a aucun effet.

L’appel de cette fonction équivaut pour l’essentiel à définir la variable d’environnement QSG_RHI_PIPELINE_CACHE_LOAD sur filename, à une différence importante près : cette fonction contrôle le stockage du cache du pipeline uniquement pour l’ QQuickWindow associée. Les applications comportant plusieurs instances d’ QQuickWindow ou d’ QQuickView peuvent donc stocker puis recharger ultérieurement le contenu du cache via des fichiers dédiés à chaque fenêtre. La variable d’environnement ne le permet pas.

Remarque : si les données contenues dans le fichier ne correspondent pas au périphérique graphique et à la version du pilote au moment de l’exécution, leur contenu sera ignoré, de manière transparente pour l’application. Cela s’applique à un certain nombre d’API graphiques, et les vérifications nécessaires sont prises en charge par Qt. Il existe toutefois des exceptions, notamment Direct 3D 11, où le « cache de pipeline » est utilisé uniquement pour stocker les résultats de la compilation HLSL->DXBC à l’exécution et est donc indépendant du périphérique et du fournisseur.

Avertissement : les données sérialisées du cache de pipeline sont considérées comme du contenu fiable. Il est conseillé aux développeurs d’applications de ne jamais transmettre de données provenant de sources non fiables.

Cette fonction a été introduite dans Qt 6.5.

Voir également pipelineCacheLoadFile() et setPipelineCacheSaveFile().

[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheSaveFile(const QString &filename)

Définit l'filename e dans laquelle l'QQuickWindow e est censée stocker le contenu du cache de son pipeline graphique/de calcul. La valeur par défaut est vide, ce qui signifie que le chargement du cache du pipeline est désactivé.

Voir Pipeline Cache Save and Load pour plus d’informations sur les caches de pipeline.

Le stockage persistant du cache du pipeline peut entraîner des améliorations de performances lors des exécutions futures de l’application, car cela permet d’éviter les étapes coûteuses de compilation des shaders et de construction du pipeline.

Le moment où l’écriture du fichier a lieu n’est pas défini. Elle se produira probablement à un moment donné lors du démontage du graphe de scène suite à la fermeture de la fenêtre. Par conséquent, les applications ne doivent pas supposer que le fichier est disponible tant que l’ QQuickWindow n’est pas entièrement détruite. L’ QQuickGraphicsConfiguration stocke uniquement le nom de fichier ; elle n’effectue aucune opération d’E/S ni aucune opération graphique de son propre chef.

Lorsqu’on utilise une API graphique où la récupération du cache du pipeline (ou des binaires de shaders/programmes) n’est pas applicable ou n’est pas prise en charge, l’appel de cette fonction n’a aucun effet.

L'appel de cette fonction équivaut pour l'essentiel à définir la variable d'environnement ` QSG_RHI_PIPELINE_CACHE_SAVE ` sur ` filename`, à une différence importante près : cette fonction contrôle le stockage du cache du pipeline uniquement pour l'QQuickWindow e associé. Les applications comportant plusieurs instances de ` QQuickWindow ` ou ` QQuickView ` peuvent ainsi stocker puis recharger ultérieurement le contenu du cache via des fichiers dédiés à chaque fenêtre. La variable d'environnement ne permet pas cela.

Cette fonction a été introduite dans Qt 6.5.

Voir également pipelineCacheLoadFile() et pipelineCacheSaveFile().

[since 6.5] void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)

Demande de sélection d'un adaptateur ou d'un périphérique physique utilisant une rastérisation logicielle. Applicable uniquement lorsque l'API sous-jacente prend en charge l'énumération des adaptateurs (par exemple, Direct 3D ou Vulkan) ; dans le cas contraire, cette demande est ignorée.

Si l’implémentation de l’API graphique ne dispose pas d’un tel adaptateur graphique ou périphérique physique, la requête est ignorée. Avec Direct 3D, on peut s’attendre à ce qu’un rastériseur basé sur WARP soit toujours disponible. Avec Vulkan, cet indicateur n’a d’effet que si lavapipe de Mesa, ou un autre périphérique physique signalant VK_PHYSICAL_DEVICE_TYPE_CPU, est disponible.

L'appel de cette fonction avec enable défini sur true équivaut à définir la variable d'environnement QSG_RHI_PREFER_SOFTWARE_RENDERER sur une valeur non nulle.

La valeur par défaut est « false ».

Cette fonction a été introduite dans Qt 6.5.

Voir également prefersSoftwareDevice().

[since 6.6] void QQuickGraphicsConfiguration::setTimestamps(bool enable)

Lorsqu’elle est activée, les données de chronométrage du GPU sont collectées à partir des tampons de commandes sur les plateformes et les API 3D qui prennent en charge cette fonctionnalité. Ces données sont ensuite enregistrées dans les journaux du moteur de rendu, qui peuvent être activés via la variable d’environnement ` QSG_RENDER_TIMING ` ou des catégories de journalisation telles que ` qt.scenegraph.time.renderloop`, et peuvent également être rendues visibles à d’autres modules, comme l’élément ` DebugView ` de ` Qt Quick 3D`.

Par défaut, cette fonctionnalité est désactivée, car la collecte des données peut impliquer un surcroît de travail, tel que l’insertion de requêtes d’horodatage dans le flux de commandes, en fonction de l’API graphique sous-jacente. Pour l’activer, appelez cette fonction avec enable défini sur true, ou définissez la variable d’environnement QSG_RHI_PROFILE sur une valeur non nulle.

Les API graphiques sur lesquelles cette fonctionnalité devrait être prise en charge sont Direct 3D 11, Direct 3D 12, Vulkan (à condition que l’implémentation Vulkan sous-jacente prenne en charge les requêtes d’horodatage), Metal et OpenGL avec un contexte de profil « core » ou « compatibility » pour la version 3.3 ou ultérieure. Les horodatages ne sont pas pris en charge avec OpenGL ES.

Cette fonction a été introduite dans Qt 6.6.

Voir également timestampsEnabled() et setDebugMarkers().

[since 6.6] bool QQuickGraphicsConfiguration::timestampsEnabled() const

Renvoie « true » si la collecte des données de synchronisation du GPU est activée.

Par défaut, la valeur est false.

Cette fonction a été introduite dans Qt 6.6.

Voir également ` setTimestamps()`.

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