Auf dieser Seite

Shader Tools Übersicht über das Qt XML-ph-0000@deepl.internal

Shader Tools Das Qt XML-ph-0000@deepl.internal-Modul baut auf dem SPIR-V-Open-Source-Ökosystem auf, wie es auf der Khronos-SPIR-V-Website beschrieben ist. Für die Kompilierung in SPIR-V wird glslang verwendet, während die Übersetzung und Reflexion über SPIRV-Cross erfolgt.

Damit Shader-Code in Qt-Anwendungen und -Bibliotheken nur einmal geschrieben werden muss, sollen alle Shader in einer einzigen Sprache geschrieben werden, die dann in SPIR-V kompiliert wird. Diese Shading-Sprache ist derzeit Vulkan-kompatibles GLSL. Dies unterscheidet sich von dem, was das OpenGL-ähnliche GLSL von Qt 5.x erwartet. Einen Überblick über die Unterschiede finden Sie in der Spezifikation GL_KHR_vulkan_gls.

Der Quellcode für andere Shading-Sprachen wie GLSL, HLSL und die Metal Shading Language wird anschließend durch die Übersetzung des SPIR-V-Bytecodes zusammen mit Reflektionsinformationen (Eingaben, Ausgaben, Shader-Ressourcen) generiert. Insbesondere bei GLSL umfasst dies auch die Generierung mehrerer Varianten, d. h. Quellcode, der für verschiedene GLSL-Versionen geeignet ist, wie z. B. GLSL ES 100, GLSL ES 300 sowie GLSL 120 und 150. Dieser wird anschließend in serialisierbare „ QShader “-Containerobjekte gepackt, die typischerweise auf der Festplatte als „ .qsb “-Dateien gespeichert werden. Die Qt-Rendering-Hardware-Schnittstelle nutzt „ QShader “-Instanzen direkt und wählt dabei den Shader-Quellcode oder Bytecode aus, der für die zur Laufzeit verwendete Grafik-API am besten geeignet ist. Ein „ QShader “-Objekt wird in der Regel aus „ .qsb “-Dateien deserialisiert, die mit der Anwendung oder Qt selbst im Qt-Ressourcensystem ausgeliefert werden.

Einige Plattformen bieten die Möglichkeit, Shader-Quellcode in ein Zwischenformat ähnlich wie SPIR-V zu kompilieren. Dazu müssen plattformspezifische Werkzeuge ausgeführt werden. Bei Direct 3D bietet das Tool „ qsb “ die Option, das fxc-Tool aus dem Windows SDK aufzurufen, sobald der HLSL-Quellcode generiert wurde. Es ersetzt dann den HLSL-Quellcode durch die Binärdatei „ DXBC “, die von „ fxc “ generiert wurde. Dies kann sich positiv auf die Laufzeitleistung von Anwendungen auswirken, da diese die erste Kompilierungsphase (HLSL-Quellcode zu DXBC) nicht mehr selbst durchführen müssen. Für macOS und iOS stellt das XCode-SDK ähnliche Werkzeuge bereit. Der Nachteil dieses Ansatzes besteht darin, dass die Ausführung dieser Tools nur auf den jeweiligen Plattformen möglich ist. Daher eignet sich dieser Ansatz am besten für den Einsatz in Kombination mit der CMake-Integration von qsb, da die Shader-Aufbereitung zum Zeitpunkt des Anwendungsbuilds implizit die erforderlichen Kenntnisse über die Zielplattform und die aufrufbaren plattformspezifischen Tools voraussetzt.

Das folgende Diagramm beschreibt die Schritte, die bei einem Aufruf des Tools „ qsb “ ablaufen:

Flussdiagramm zur Shader-Aufbereitung von der Vulkan-GLSL-Quelle bis zur gepackten QShader-Datei, das die Kompilierung, die Übersetzung und optionale Schritte zeigt

Die Hauptkomponenten des Qt-Shader-Conditioning-Systems sind:

  • das Befehlszeilentool „ qsb “
  • die CMake-Integration für das Tool „ qsb “
  • QShader (Teil des Moduls „ QtGui “)
  • QShaderBaker (Teil dieses Moduls, das Bibliotheksäquivalent zum Tool „ qsb “)

Typische Verwendung mit Qt Quick

Anwendungsentwickler arbeiten in der Regel mit benutzerdefiniertem Shader-Code in „ Qt Quick “-Szenen, die eines der folgenden Elemente enthalten:

  • ShaderEffect Elemente
  • QQuickItem Unterklassen, die Szenengraph-Knoten in Kombination mit benutzerdefinierten Materialien verwenden, die durch Unterklassenbildung von „ QSGMaterial “ erstellt wurden.

Betrachten Sie beispielsweise den folgenden QML-Ausschnitt:

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

Hier verweist die URL „ fragmentShader “ auf eine „ .qsb “-Datei, die relativ zum Speicherort der Datei „ .qml “ liegt. Es wird erwartet, dass die Anwendung „ myeffect.frag.qsb “ neben der Datei „ .qml “ ausliefert. Um diese Datei aus der GLSL-Quelldatei im Vulkan-Stil zu generieren (die selbst nicht mit der Anwendung ausgeliefert werden muss), muss die Anwendung das Tool „ qsb “ entweder direkt oder über CMake verwenden.

Typische Verwendung mit Qt Quick 3D

Qt Quick 3D nutzt das Modul „ Shader Tools “ direkt, um Shader-Konditionierung zur Laufzeit durchzuführen. Darüber hinaus bietet es Lösungen zur Vorabgenerierung von Shadern für Materialien zur Erstellungszeit, falls eine Laufzeitabhängigkeit von Shader-Compilern und anderen Tools als nicht ideal angesehen wird. In beiden Fällen müssen Entwickler nicht direkt mit dem Tool „ qsb “ arbeiten, da dieses durch das eigene Framework und die eigenen Tools von „ Qt Quick 3D “ gekapselt ist.

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