QQuickGraphicsConfiguration Class
QQuickGraphicsConfiguration contrôle les paramètres graphiques de bas niveau pour QQuickWindow. 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 pour les paramètres graphiques de bas niveau qui peuvent affecter la façon dont l'API graphique sous-jacente, telle que Vulkan, est initialisée par le graphe de scène Qt Quick. Elle peut également contrôler certains aspects du moteur de rendu du graphe de scène.
Remarque : la définition d'une QQuickGraphicsConfiguration sur un site QQuickWindow doit avoir lieu suffisamment tôt, avant que le graphe de scène ne soit initialisé pour la première fois pour cette fenêtre. Avec 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 la présentation d'un site QQuickWindow qui utilise 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 par l'intermédiaire de l'API Vulkan. Il en va de même lorsque l'on utilise QQuickRenderControl pour rediriger le rendu vers une cible de rendu personnalisée, telle qu'une texture. Alors que la construction de QVulkanInstance est sous le contrôle de l'application, l'initialisation d'autres objets graphiques se produit de la même manière dans QQuickRenderControl::initialize() qu'avec une QQuickWindow à l'écran.
Pour la majorité 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ériques à activer.
Cependant, cela ne sera pas toujours suffisant. Dans les cas d'utilisation avancés, lors de l'intégration directe de Vulkan ou d'autres contenus d'API graphiques, ou lors de l'intégration avec un moteur 3D ou VR externe, comme OpenXR, l'application voudra spécifier son propre ensemble de paramètres lorsqu'il s'agit de détails, tels que les extensions de périphériques à activer.
C'est ce que permet cette classe. Elle permet de spécifier, par exemple, une liste d'extensions de périphériques qui est ensuite reprise par le graphe de scène lors de l'utilisation de Vulkan ou d'API graphiques lorsque le concept est applicable. Lorsque certains concepts ne sont pas applicables, les paramètres correspondants sont simplement ignorés.
Des exemples de fonctions dans cette catégorie sont setDeviceExtensions() et preferredInstanceExtensions(). Cette dernière est utile lorsque l'application gère son propre QVulkanInstance qui est ensuite associé au QQuickWindow via QWindow::setVulkanInstance().
Qt Quick Configuration du moteur de rendu du graphe de scène
Une autre catégorie de paramètres est liée au moteur de rendu du graphe de scène. Dans certains cas, les applications peuvent vouloir contrôler un certain comportement, comme l'utilisation du tampon de profondeur lors du rendu d'un contenu 2D. Dans Qt 5, ces paramètres n'étaient pas contrôlables du tout ou étaient gérés par des variables d'environnement. Dans Qt 6, QQuickGraphicsConfiguration fournit un nouvel emplacement pour ces paramètres, tout en conservant la prise en charge des anciennes variables d'environnement, le cas échéant.
Un exemple dans cette catégorie est setDepthBufferFor2D().
Configuration des périphériques graphiques
Lorsque les objets instance graphique et périphérique (par exemple, les objets VkInstance et VkDevice avec Vulkan, ID3D11Device avec Direct 3D, etc.) sont créés par Qt lors de l'initialisation d'un site QQuickWindow, il existe des paramètres que les applications ou les bibliothèques voudront contrôler dans certaines circonstances.
Avant Qt 6.5, certains de ces paramètres pouvaient être contrôlés par des variables d'environnement. Par exemple, QSG_RHI_DEBUG_LAYER ou QSG_RHI_PREFER_SOFTWARE_RENDERER sont toujours disponibles et continuent à fonctionner comme avant. QQuickGraphicsConfiguration fournit en outre des paramètres C++.
Par exemple, la fonction main() suivante ouvre une page 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 le stockage du cache du pipeline graphique/de calcul sur le disque et son rechargement lors des exécutions ultérieures d'une application. Le contenu exact du cache du pipeline, la manière dont les consultations fonctionnent et ce qui est accéléré dépendent tous du backend Qt RHI et de l'API graphique native sous-jacente utilisée au moment de l'exécution. Les différentes API 3D ont des concepts différents en ce qui concerne les shaders, les programmes et les objets d'état de pipeline, ainsi que les mécanismes de cache correspondants. Le concept de cache de haut niveau du pipeline fait abstraction de tout cela pour stocker et récupérer un seul blob binaire dans un fichier.
Remarque : le stockage du cache sur disque peut entraîner des améliorations, parfois significatives, lors des exécutions ultérieures de l'application.
Lorsque le même programme de shader et/ou le même état de pipeline est rencontré lors d'une exécution précédente, un certain nombre d'opérations sont probablement ignorées, ce qui permet d'accélérer les temps d'initialisation des shaders et des matériaux, ce qui signifie que le démarrage peut devenir plus rapide et que les décalages et les "janks" pendant le rendu peuvent être réduits ou évités.
Si vous utilisez une API graphique dans laquelle 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, la tentative d'utilisation d'un fichier pour enregistrer et charger le cache n'a pas d'effet.
Note : Dans de nombreux cas, les données récupérées dépendent et sont liées au pilote graphique (et éventuellement à sa version exacte). Qt effectue les vérifications nécessaires automatiquement, en stockant des métadonnées supplémentaires dans le fichier de cache du pipeline. 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, le contenu sera ignoré de manière transparente pour l'application. Il n'est donc pas dangereux de faire référence à un cache qui a été généré sur un autre périphérique ou pilote.
Il existe des exceptions au problème de dépendance vis-à-vis du pilote, notamment Direct 3D 11, où le "pipeline cache" n'est utilisé que pour stocker les résultats de la compilation HLSL->DXBC au moment de l'exécution et est donc indépendant du périphérique et du fournisseur.
Dans certains cas, il peut être souhaitable d'améliorer la toute première exécution de l'application en "pré-ensemençant" le cache. Cela est possible en expédiant le fichier de cache sauvegardé lors d'une exécution précédente et en le référençant sur une autre machine ou un autre appareil. De cette manière, l'application ou le périphérique dispose des programmes/pipelines de shaders qui ont été rencontrés auparavant lors de l'exécution qui a sauvegardé le fichier de cache, et ce dès sa première exécution. L'envoi et le déploiement du fichier cache n'ont de sens que si le périphérique et les pilotes graphiques sont les mêmes sur le système cible, sinon le fichier 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 est agrandi et les pipelines/programmes de shaders y sont ajoutés. Si l'application choisit également de sauvegarder le contenu (peut-être même dans le même fichier), les anciens et les nouveaux pipelines seront stockés. Le fait de charger et de sauvegarder dans le même fichier à chaque exécution permet d'avoir un cache toujours plus grand qui stocke tous les pipelines et programmes de shaders rencontrés.
En pratique, on peut s'attendre à ce que le cache de pipeline de Qt corresponde aux fonctionnalités des API graphiques natives suivantes :
- Vulkan - VkPipelineCache - L'enregistrement du cache de pipeline stocke effectivement le blob récupéré à partir de vkGetPipelineCacheData, avec des métadonnées supplémentaires pour identifier en toute sécurité le périphérique et le pilote puisque le blob du cache de pipeline dépend du pilote exact.
- Metal - MTLBinaryArchive - Lorsque la sauvegarde du cache de pipeline est activée, Qt stocke tous les pipelines de rendu et de calcul rencontrés dans un MTLBinaryArchive. La sauvegarde du cache de pipeline stocke le blob récupéré dans l'archive, avec des métadonnées supplémentaires pour identifier le périphérique. Note : actuellement, l'utilisation de MTLBinaryArchive est désactivée sur macOS et iOS en raison de divers problèmes sur certains matériels et versions de systèmes d'exploitation.
- OpenGL - Il n'y a pas de concept natif de pipeline, le "pipeline cache" stocke une collection de programmes binaires récupérés via glGetProgramBinary. Les binaires de programme sont empaquetés dans un seul blob, avec des métadonnées supplémentaires pour identifier le périphérique, le pilote, et sa version à partir de laquelle les binaires ont été récupérés. La mise en cache permanente des programmes binaires n'est pas une nouveauté dans Qt : Qt 5 disposait déjà d'une fonctionnalité similaire dans QOpenGLShaderProgram, voir addCacheableShaderFromSourceCode() par exemple. En fait, ce mécanisme est toujours actif dans Qt 6 lorsque l'on utilise Qt Quick avec OpenGL. Cependant, lors de l'utilisation de la nouvelle abstraction de cache de pipeline indépendante de l'API graphique fournie ici, le cache binaire du programme de l'ère Qt 5 est automatiquement désactivé, puisque le même contenu est désormais emballé dans le "cache de pipeline".
- Direct 3D 11 - Il n'y a pas de concept natif de pipeline ou de récupération de binaires pour la deuxième phase de compilation (où le bytecode intermédiaire indépendant du fournisseur est compilé dans le jeu d'instructions spécifique au périphérique). Les pilotes emploient généralement leur propre système de cache à ce niveau. En revanche, le "pipeline cache" de Qt Quick est utilisé pour accélérer les cas où les shaders contiennent du code source HLSL qui doit d'abord être compilé dans le format de bytecode intermédiaire. Cela peut améliorer considérablement les performances des applications et des bibliothèques qui composent le code des nuanceurs au moment de l'exécution, car lors des exécutions suivantes, les appels potentiellement coûteux et non mis en cache à D3DCompile() peuvent être évités si le bytecode est déjà disponible pour le nuanceur HLSL rencontré. Un bon exemple est Qt Quick 3D, où les shaders générés en cours d'exécution pour les matériaux impliquent d'avoir à traiter le code source HLSL. Sauvegarder et recharger le cache du pipeline Qt Quick peut donc apporter des améliorations considérables dans les scènes contenant un ou plusieurs éléments View3D. Un contre-exemple peut être Qt Quick lui-même : comme la plupart des shaders intégrés pour le contenu 2D sont livrés avec le bytecode DirectX généré au moment de la construction, le cache ne va pas apporter 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. Le fait que le code source GLSL compatible avec Vulkan soit compilé dans SPIR-V soit hors ligne, soit au moment de la compilation (directement via qsb ou CMake) est une bonne chose, car la compilation coûteuse à partir de la forme source est évitée au moment de l'exécution. SPIR-V est cependant un format intermédiaire indépendant du fournisseur. Au moment de l'exécution, lors de la construction de pipelines graphiques ou de calcul, il est probable qu'un autre cycle de compilation se produise, cette fois du format intermédiaire au jeu d'instructions spécifique au fournisseur du GPU (et cela peut également dépendre de certains états dans le pipeline graphique et les cibles de rendu). Le cache du pipeline contribue à cette dernière phase.
Remarque : de nombreuses implémentations d'API graphiques utilisent leur propre cache de disque persistant de manière transparente pour les applications. L'utilisation de la fonction 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 pipeline.
Pour avoir une idée des effets de l'activation du stockage sur disque du cache du pipeline, activez les journaux de scènes et de graphiques les plus importants via la variable d'environnement QSG_INFO=1 ou les catégories de journaux qt.scenegraph.general et qt.rhi.general. Lorsque vous fermez le site QQuickWindow, un message de journalisation s'affiche comme suit :
Total time spent on pipeline creation during the lifetime of the QRhi was 123 ms
Cela donne une idée approximative du temps passé à créer des graphiques et des pipelines de calcul (ce qui peut inclure différentes étapes de la 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 la sauvegarde du cache est activée avec succès, recherchez un message tel que celui-ci :
Writing pipeline cache contents to 'filename'
Le cache automatique du pipeline
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. Cette stratégie consiste à stocker les données dans l'emplacement du cache spécifique à l'application du système (QStandardPaths::CacheLocation).
Cette stratégie peut être désactivée de l'une des manières suivantes :
- Définir l'attribut d'application Qt::AA_DisableShaderDiskCache. (désactive complètement le stockage automatique)
- Définir la variable d'environnement QT_DISABLE_SHADER_DISK_CACHE à une valeur non nulle. (désactive complètement le stockage automatique)
- Attribuez une valeur non nulle à la variable d'environnement QSG_RHI_DISABLE_SHADER_DISK_CACHE. (désactive complètement le stockage automatique)
- Appeler setAutomaticPiplineCache() avec l'argument enable à false. (désactive complètement le stockage automatique)
- Définir un nom de fichier en appelant setPipelineCacheLoadFile(). (désactive uniquement le chargement à partir du stockage automatique, en préférant le fichier spécifié à la place)
- Définir un nom de fichier en appelant setPipelineCacheSaveFile(). (désactive uniquement l'écriture dans le stockage automatique, préférant le fichier spécifié à la place)
Les deux premiers sont des mécanismes existants qui sont 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 RHI backend (API graphique). Cela signifie que le passage à une autre API graphique lors de l'exécution suivante 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 avec plusieurs instances QQuickWindow affichées simultanément peuvent cependant ne pas en bénéficier à 100 % puisque le cache automatique ne peut stocker les données collectées qu'à 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 car le rendu s'effectue indépendamment sur des threads dédiés). Pour profiter pleinement du cache disque dans une application avec plusieurs fenêtres, il est préférable de définir le nom de fichier explicitement, par fenêtre, via setPipelineCacheSaveFile().
Voir également QQuickWindow::setGraphicsConfiguration(), QQuickWindow, et QQuickRenderControl.
Documentation des fonctions membres
QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()
Construit une QQuickGraphicsConfiguration par défaut qui ne spécifie aucun paramètre supplémentaire à prendre en compte pour le graphe de scène.
[noexcept] QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()
Destructeur.
QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const
Renvoie la liste des extensions de périphériques supplémentaires demandées.
Voir aussi setDeviceExtensions().
[since 6.5] bool QQuickGraphicsConfiguration::isAutomaticPipelineCacheEnabled() const
Retourne vrai si le cache automatique du pipeline est activé.
Par défaut, cette valeur est vraie, sauf si certains attributs de l'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 aussi setAutomaticPipelineCache().
bool QQuickGraphicsConfiguration::isDebugLayerEnabled() const
Retourne true si les couches de débogage/validation doivent être activées.
La valeur par défaut est false.
Voir aussi setDebugLayer().
bool QQuickGraphicsConfiguration::isDebugMarkersEnabled() const
Retourne 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 un message indiquant que l'utilisation du tampon de profondeur est activée pour le contenu 2D.
La valeur par défaut 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 aussi 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 aussi 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 la VkInstance.
Dans la plupart des cas, Qt Quick est responsable de la création d'une QVulkanInstance. Cette fonction n'est pas pertinente dans ce cas. En revanche, lors de l'utilisation de QQuickRenderControl en combinaison avec un rendu basé sur Vulkan, il incombe à l'application de créer un QVulkanInstance et de l'associer au QQuickWindow(hors écran). Dans ce cas, on s'attend à ce que l'application demande la liste des extensions d'instance à activer et les transmette à QVulkanInstance::setExtensions() avant d'appeler QVulkanInstance::create().
Cette fonction a été introduite dans Qt 6.1.
bool QQuickGraphicsConfiguration::prefersSoftwareDevice() const
Renvoie la valeur true si un périphérique graphique basé sur un rasterizer logiciel est prioritaire.
La valeur par défaut est false.
Voir également setPreferSoftwareDevice().
[since 6.5] void QQuickGraphicsConfiguration::setAutomaticPipelineCache(bool enable)
Modifie l'utilisation du cache de pipeline automatique basé sur enable.
La valeur par défaut est true, sauf si certains attributs de l'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, cela est pris en charge avec Vulkan et Direct 3D 11, en supposant que le support nécessaire (couches de validation, Windows SDK) est installé et disponible au moment de l'exécution. Lorsque enable est vrai, Qt tentera d'activer la couche de validation standard sur la VkInstance, ou de définir D3D11_CREATE_DEVICE_DEBUG sur le périphérique graphique.
Pour Metal sur macOS, définissez la variable d'environnement METAL_DEVICE_WRAPPER_TYPE=1 avant de lancer l'application.
Appeler cette fonction avec enable à true équivaut à définir la variable d'environnement QSG_RHI_DEBUG_LAYER à 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é d'envoyer des applications en production avec l'option activée.
Remarque : sachez qu'en raison des différences de conception des API graphiques sous-jacentes, ce paramètre ne peut pas toujours être un paramètre parQQuickWindow, même si chaque QQuickWindow a son propre QQuickGraphicsConfiguration. Avec Vulkan en particulier, l'objet d'instance (VkInstance) n'est créé qu'une seule fois et est ensuite utilisé par toutes les fenêtres de l'application. Par conséquent, l'activation de la couche de validation concerne toutes les fenêtres. Cela signifie également que tenter d'activer la validation via une fenêtre qui ne s'affiche qu'après que d'autres fenêtres ont déjà commencé le rendu n'a aucun effet avec Vulkan. D'autres API, telles que D3D11, exposent le concept de couche de débogage comme un paramètre par périphérique (ID3D11Device), et il est donc contrôlé sur une véritable base par fenêtre (en supposant que la boucle de rendu de la scène utilise un périphérique/contexte graphique dédié pour chaque QQuickWindow).
Cette fonction a été introduite dans Qt 6.5.
Voir aussi isDebugLayerEnabled().
[since 6.5] void QQuickGraphicsConfiguration::setDebugMarkers(bool enable)
Le cas échéant, enable contrôle l'insertion de marqueurs de débogage et de noms d'objets dans le flux de commandes graphiques.
Certains frameworks, tels que Qt Quick 3D, ont la capacité d'annoter les objets graphiques qu'ils créent (tampons, textures) avec des noms et d'indiquer le début et la fin des passes de rendu dans le tampon de commande. Ces éléments sont ensuite visibles dans les captures d'images réalisées avec des outils tels que RenderDoc ou XCode.
Les API graphiques pour lesquelles on peut s'attendre à ce que cela soit pris en charge sont Vulkan (si VK_EXT_debug_utils est disponible), Direct 3D 11 et Metal.
Appeler cette fonction avec enable défini à true équivaut à définir la variable d'environnement QSG_RHI_PROFILE à 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é d'envoyer des applications en production avec l'indicateur activé.
Cette fonction a été introduite dans Qt 6.5.
Voir aussi isDebugMarkersEnabled().
void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool enable)
Définit l'utilisation du tampon de profondeur pour le contenu 2D sur enable. Lorsqu'il est désactivé, le graphe de scène Qt Quick n'écrit jamais dans le tampon de profondeur.
La valeur par défaut est true, sauf si la variable d'environnement QSG_NO_DEPTH_BUFFER est définie.
La valeur par défaut de true est le paramètre le plus optimal pour la grande majorité des scènes. Désactiver l'utilisation du tampon de profondeur réduit l'efficacité de la mise en lot du graphe de scène.
Cependant, dans certains cas, il n'est pas idéal de permettre au contenu 2D d'écrire dans le tampon de profondeur. Prenons l'exemple d'une scène 3D "superposée" à la scène 2D, rendue via Qt Quick 3D à l'aide de View3D, renderMode étant défini sur Overlay. Dans ce cas, le fait que le tampon de profondeur soit rempli par le contenu 2D peut entraîner des résultats inattendus. En effet, la manière dont le moteur de rendu du graphe de la 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. Il peut en résulter des conflits de valeurs de profondeur, des collisions et des échecs inattendus des tests de profondeur. Par conséquent, l'approche la plus robuste consiste à appeler cette fonction avec enable à false, et à désactiver l'écriture des tampons de profondeur pour le contenu 2D dans QQuickWindow.
Remarque : cet indicateur n'est pas totalement identique à la définition de la variable d'environnement QSG_NO_DEPTH_BUFFER. Il ne contrôle pas la présence des tampons de profondeur. Il concerne plutôt le pipeline de rendu. Pour forcer l'absence d'attachements de profondeur/stencil, définissez QSG_NO_DEPTH_BUFFER et QSG_NO_STENCIL_BUFFER. Sachez toutefois qu'un tel QQuickWindow, et toutes les couches d'éléments qu'il contient, peuvent alors devenir incompatibles avec des éléments tels que View3D dans certains modes de fonctionnement, car le contenu 3D nécessite un tampon de profondeur. L'appel à cette fonction est toujours sûr, mais peut signifier que des ressources, telles que les tampons de profondeur, sont créées même si elles ne sont pas activement utilisées.
void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)
Définit la liste des extensions supplémentaires à activer sur le périphérique graphique (comme VkDevice).
Lors du rendu avec une API graphique où le concept n'est pas applicable, extensions sera ignoré.
Remarque : la liste spécifie des extensions supplémentaires. 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'adresse filename à partir de laquelle QQuickWindow est censé charger le contenu initial de son cache de pipeline graphique/de calcul. La valeur par défaut est empty, ce qui signifie que le chargement du cache pipeline est désactivé.
Voir Pipeline Cache Save and Load pour une discussion sur les caches de pipeline.
Le stockage permanent du cache du pipeline peut entraîner une amélioration des performances lors des prochaines exécutions de l'application, car les étapes coûteuses de compilation des shaders et de construction du pipeline peuvent être évitées.
Le moment du chargement du contenu du fichier n'est pas défini, hormis le fait qu'il se produira à un moment donné lors de l'initialisation de la scène de QQuickWindow. Par conséquent, le fichier doit continuer à exister après l'appel de cette fonction. QQuickGraphicsConfiguration ne fait que stocker le nom du fichier, il ne peut pas effectuer d'opérations d'E/S et de graphisme en lui-même. Le vrai travail se fera plus tard, éventuellement dans un autre thread.
Si vous utilisez une API graphique dans laquelle 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 à cette fonction n'a aucun effet.
Appeler cette fonction équivaut en grande partie à définir la variable d'environnement QSG_RHI_PIPELINE_CACHE_LOAD sur filename, avec une différence importante : cette fonction contrôle le stockage du cache du pipeline pour l'adresse QQuickWindow associée uniquement. Les applications ayant plusieurs instances QQuickWindow ou QQuickView peuvent donc stocker et 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 du fichier ne correspondent pas au périphérique graphique et à la version du pilote au moment de l'exécution, le 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 des exceptions, notamment Direct 3D 11, où le "pipeline cache" est utilisé uniquement pour stocker les résultats de la compilation HLSL->DXBC au moment de l'exécution et est donc indépendant du périphérique et du fournisseur.
Attention : Les données sérialisées du cache du pipeline sont supposées être un contenu de confiance. 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 aussi pipelineCacheLoadFile() et setPipelineCacheSaveFile().
[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheSaveFile(const QString &filename)
Définit l'adresse filename où QQuickWindow est censé stocker le contenu du cache du pipeline graphique/de calcul. La valeur par défaut est empty, ce qui signifie que le chargement du cache du pipeline est désactivé.
Voir Pipeline Cache Save and Load pour une discussion sur les caches de pipeline.
Le stockage permanent du cache du pipeline peut entraîner une amélioration des performances lors des prochaines exécutions de l'application, car les étapes coûteuses de compilation des shaders et de construction du pipeline peuvent être évitées.
La date et l'heure de l'écriture du fichier ne sont pas définies. Il est probable qu'elle se produise à un moment ou à un autre lors de la fermeture de la fenêtre. Par conséquent, les applications ne doivent pas supposer que le fichier est disponible avant que le site QQuickWindow ne soit entièrement détruit. QQuickGraphicsConfiguration ne fait que stocker le nom du fichier, il n'effectue aucune opération d'E/S ou graphique.
Si vous utilisez une API graphique dans laquelle 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 à cette fonction n'a aucun effet.
Appeler cette fonction équivaut en grande partie à définir la variable d'environnement QSG_RHI_PIPELINE_CACHE_SAVE sur filename, avec une différence importante : cette fonction contrôle le stockage du cache du pipeline pour l'adresse QQuickWindow associée uniquement. Les applications ayant plusieurs instances QQuickWindow ou QQuickView peuvent donc stocker et recharger ultérieurement le contenu du cache via des fichiers dédiés à chaque fenêtre. La variable d'environnement ne le permet pas.
Cette fonction a été introduite dans Qt 6.5.
Voir aussi pipelineCacheLoadFile() et pipelineCacheSaveFile().
[since 6.5] void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)
Demande de choisir un adaptateur ou un périphérique physique qui utilise la rastérisation logicielle. Applicable uniquement lorsque l'API sous-jacente prend en charge l'énumération des adaptateurs (par exemple, Direct 3D ou Vulkan), et est ignorée dans le cas contraire.
Si l'implémentation de l'API graphique n'a pas d'adaptateur graphique ou de périphérique physique disponible, la demande est ignorée. Avec Direct 3D, on peut s'attendre à ce qu'un rasterizer basé sur WARP soit toujours disponible. Avec Vulkan, l'indicateur n'a d'effet que si Mesa's lavapipe, ou un autre périphérique physique signalant VK_PHYSICAL_DEVICE_TYPE_CPU est disponible.
Appeler cette fonction avec enable fixé à true équivaut à fixer la variable d'environnement QSG_RHI_PREFER_SOFTWARE_RENDERER à une valeur non nulle.
La valeur par défaut est false.
Cette fonction a été introduite dans Qt 6.5.
Voir aussi prefersSoftwareDevice().
[since 6.6] void QQuickGraphicsConfiguration::setTimestamps(bool enable)
Lorsqu'elles sont activées, les données de synchronisation du GPU sont collectées à partir des tampons de commande sur les plates-formes et les API 3D qui le prennent en charge. Ces données sont ensuite imprimées dans les journaux du moteur de rendu qui peuvent être activés via la variable d'environnement QSG_RENDER_TIMING ou les catégories de journalisation telles que qt.scenegraph.time.renderloop, et peuvent également être rendues visibles pour d'autres modules, tels que l'élément DebugView de Qt Quick 3D.
Par défaut, cette fonction est désactivée, car la collecte des données peut impliquer un travail supplémentaire, comme l'insertion de requêtes d'horodatage dans le flux de commandes, en fonction de l'API graphique sous-jacente. Pour l'activer, il faut soit appeler cette fonction avec enable à true, soit donner une valeur non nulle à la variable d'environnement QSG_RHI_PROFILE.
Les API graphiques pour lesquelles on peut s'attendre à ce que cela soit pris en charge sont Direct 3D 11, Direct 3D 12, Vulkan (tant que l'implémentation Vulkan sous-jacente prend en charge les requêtes d'horodatage), Metal, et OpenGL avec un contexte de profil de base ou de compatibilité pour la version 3.3 ou une version plus récente. Les horodatages ne sont pas supportés par OpenGL ES.
Cette fonction a été introduite dans Qt 6.6.
Voir aussi timestampsEnabled() et setDebugMarkers().
[since 6.6] bool QQuickGraphicsConfiguration::timestampsEnabled() const
Retourne true si la collecte de données temporelles du GPU est activée.
Par défaut, la valeur est false.
Cette fonction a été introduite dans Qt 6.6.
Voir aussi 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.