Sur cette page

Présentation de l'Shader Tools Qt XML

Le module Shader Tools Qt s'appuie sur l'écosystème open source SPIR-V, tel que décrit sur le site web SPIR-V de Khronos. La compilation en SPIR-V s'effectue à l'aide de glslang, tandis que la traduction et la réflexion sont gérées par SPIRV-Cross.

Pour que le code des shaders ne soit écrit qu'une seule fois dans les applications et bibliothèques Qt, tous les shaders doivent être écrits dans un langage unique, qui est ensuite compilé en SPIR-V. Ce langage de shader est actuellement le GLSL compatible Vulkan. Cela diffère de ce qu'attend le GLSL de type OpenGL de Qt 5.x. Consultez la spécification GL_KHR_vulkan_gls pour un aperçu des différences.

Le code source pour d’autres langages de shader, tels que GLSL, HLSL et le Metal Shading Language, est ensuite généré à partir de la traduction du bytecode SPIR-V, ainsi que des informations de réflexion (entrées, sorties, ressources de shader). Pour le GLSL en particulier, cela implique également la génération de plusieurs variantes, c’est-à-dire un code source adapté à différentes versions de GLSL, telles que GLSL ES 100, GLSL ES 300, ainsi que GLSL 120 et 150. Ce code est ensuite regroupé dans des objets conteneurs sérialisables de type « QShader », généralement stockés sur le disque sous forme de fichiers « .qsb ». L’interface matérielle de rendu Qt utilise directement des instances d’ QShader, en sélectionnant le code source ou le bytecode du shader le mieux adapté à l’API graphique utilisée lors de l’exécution. Un objet QShader est généralement désérialisé à partir de fichiers .qsb fournis avec l’application ou avec Qt lui-même dans le système de ressources Qt.

Certaines plateformes offrent la possibilité de compiler le code source du shader dans un format intermédiaire similaire à SPIR-V. Cela implique l’exécution d’outils spécifiques à la plateforme. Avec Direct 3D, l’outil qsb permet d’appeler l’outil fxc du SDK Windows une fois que le code source HLSL a été généré. Il remplace ensuite le code source HLSL par le binaire « DXBC » généré par fxc. Cela peut avoir un effet positif sur les performances d’exécution des applications, car celles-ci n’ont plus besoin d’effectuer elles-mêmes la première phase de compilation (du code source HLSL vers DXBC). Pour macOS et iOS, le SDK XCode fournit des outils similaires. L’inconvénient de cette approche est que l’exécution de ces outils n’est possible que sur leurs plateformes respectives. Par conséquent, cette méthode est particulièrement adaptée à une utilisation en combinaison avec l’intégration CMake de qsb, car le conditionnement des shaders au moment de la compilation de l’application implique de disposer des connaissances nécessaires sur la plateforme cible et sur les outils spécifiques à celle-ci pouvant être invoqués.

Le schéma suivant décrit les étapes qui se déroulent lors de l’exécution de l’outil « qsb » :

Organigramme du traitement des shaders, depuis le code source GLSL de Vulkan jusqu'au fichier QShader final, illustrant les étapes de compilation, de traduction et les étapes facultatives

Les principaux composants du système de conditionnement des shaders Qt sont :

  • l'outil en ligne de commande ` qsb `
  • l'intégration CMake de l'outil qsb
  • QShader (qui fait partie du module « QtGui »)
  • QShaderBaker (qui fait partie de ce module, l’équivalent sous forme de bibliothèque de l’outil ` qsb `)

Utilisation type avec Qt Quick

Les développeurs d'applications travaillent généralement avec du code de shader personnalisé dans des scènes d'Qt Quick comportant l'un des éléments suivants :

  • ShaderEffect des
  • QQuickItem des sous-classes qui utilisent des nœuds de graphe de scène en combinaison avec des matériaux personnalisés créés en sous-classant QSGMaterial.

Prenons par exemple l’extrait de code QML suivant :

ShaderEffect {
    width: 100; height: 100
    fragmentShader: "myeffect.frag.qsb"
}

Ici, l’URL ` fragmentShader ` fait référence à un fichier ` .qsb ` relatif à l’emplacement du fichier ` .qml `. L’application doit être fournie avec le fichier ` myeffect.frag.qsb ` à côté du fichier ` .qml `. Pour générer ce fichier à partir du code source GLSL de type Vulkan (qui n’a pas besoin d’être fourni avec l’application), l’application doit utiliser l’outil ` qsb `, soit directement, soit via CMake.

Utilisation typique avec Qt Quick 3D

Qt Quick 3D utilise directement le module Shader Tools pour effectuer le conditionnement des shaders lors de l'exécution. De plus, il propose des solutions pour pré-générer des shaders pour les matériaux lors de la compilation, au cas où une dépendance à l’exécution vis-à-vis des compilateurs de shaders et d’autres outils ne serait pas jugée idéale. Dans les deux cas, les développeurs n’ont pas besoin d’utiliser directement l’outil qsb, car celui-ci est encapsulé par le framework et les outils propres à Qt Quick 3D.

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