Aperçu de Qt Shader Tools
Le module Qt Shader Tools s'appuie sur l'écosystème Open Source SPIR-V tel qu'il est décrit sur le site web de Khronos SPIR-V. Pour la compilation en SPIR-V, glslang est utilisé, tandis que la traduction et le reflet sont effectués via SPIRV-Cross.
Pour que le code des shaders soit écrit une seule fois dans les applications et les bibliothèques Qt, tous les shaders doivent être écrits dans un seul langage, qui est ensuite compilé dans SPIR-V. Ce langage d'ombrage est actuellement GLSL, compatible avec Vulkan. Il est différent de ce qu'attend le GLSL de style OpenGL de Qt OpenGL 5.x. Voir la spécification GL_KHR_vulkan_glsls pour une vue d'ensemble des différences.
Le code source pour d'autres langages d'ombrage, tels que GLSL, HLSL et le Metal Shading Language, est alors généré à partir de la traduction du bytecode SPIR-V, ainsi que des informations de réflexion (entrées, sorties, ressources d'ombrage). Pour GLSL en particulier, il s'agit également de générer plusieurs variantes, c'est-à-dire un code source adapté à différentes versions de GLSL, telles que GLSL ES 100, GLSL ES 300 et GLSL 120 et 150. Ce code est ensuite emballé dans des objets conteneurs sérialisables QShader, généralement stockés sur le disque sous la forme de fichiers .qsb. L'interface matérielle de rendu Qt consomme directement les instances QShader, en choisissant la source de shader ou le bytecode qui convient le mieux à l'API graphique utilisée au moment de l'exécution. Un objet QShader est généralement désérialisé à partir de fichiers .qsb livrés avec l'application ou Qt lui-même dans le système de ressources Qt.
Certaines plateformes offrent la possibilité de compiler le code source des shaders dans un format intermédiaire similaire à SPIR-V. Cela implique l'exécution d'outils spécifiques à la plate-forme. Avec Direct 3D, l'outil qsb offre la possibilité d'invoquer l'outil fxc du SDK Windows une fois que le code source HLSL a été généré. Il remplace alors 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 puisqu'elles n'ont plus besoin d'effectuer elles-mêmes la première phase de compilation (du code source HLSL au code 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, cela convient mieux à une utilisation en combinaison avec l'intégration CMake de qsb puisque faire le conditionnement des shaders au moment de la construction de l'application vient implicitement avec les connaissances nécessaires sur la plate-forme cible et quels outils spécifiques à la plate-forme peuvent être invoqués.
Le diagramme suivant décrit les étapes qui se produisent lors de l'invocation de l'outil qsb:

Les principaux composants du système de conditionnement des shaders Qt sont les suivants
- l'outil de ligne de commande
qsb - l'intégration CMake pour l'outil
qsb - QShader (partie du module QtGui )
- QShaderBaker (partie de ce module, la bibliothèque équivalente à l'outil
qsb)
Utilisation typique avec Qt Quick
Les développeurs d'applications travaillent généralement avec du code de nuanceur personnalisé dans les scènes Qt Quick qui présentent l'un des éléments suivants :
- ShaderEffect éléments
- QQuickItem des sous-classes qui utilisent des nœuds de graphe de scène en combinaison avec des matériaux personnalisés construits en sous-classant QSGMaterial.
Prenons par exemple l'extrait QML suivant :
ShaderEffect { width: 100; height: 100 fragmentShader: "myeffect.frag.qsb" }
Ici, l'URL fragmentShader fait référence à un fichier .qsb par rapport à l'emplacement du fichier .qml. L'application est censée envoyer myeffect.frag.qsb à côté du fichier .qml. Pour générer ce fichier à partir de la source GLSL de style Vulkan (qui n'a pas besoin d'être livrée 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 au moment de l'exécution. En outre, il fournit des solutions pour pré-générer les shaders pour les matériaux au moment de la construction, dans le cas où une dépendance au moment de l'exécution aux compilateurs de shaders et à d'autres outils n'est pas considérée comme idéale. Dans les deux cas, les développeurs n'ont pas besoin de travailler directement avec l'outil qsb puisqu'il est encapsulé dans le cadre 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.