qt_add_custom_brush_shaders
Bereitet benutzerdefinierte Pinsel-Shader vor und fügt sie dem Qt-Ressourcensystem hinzu
Der Befehl ist in der Komponente „ CanvasPainter “ des Pakets „ Qt6 “ definiert, das wie folgt geladen werden kann:
find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)Dieser Befehl wurde in Qt 6.12 eingeführt.
Übersicht
qt_add_custom_brush_shaders(target resource_name
FILES file1 [file2 ...]
[PREFIX resource_path]
[BASE base_path]
[OUTPUTS output1 [output2 ...]]
[DEFINES "name1=value1;name2=value2"]
[OUTPUT_TARGETS out_targets_var]
)Wenn versionsunabhängige Befehle deaktiviert sind, verwenden Sie stattdessen „ qt6_add_custom_brush_shaders() “. Dieser Befehl unterstützt dieselben Argumente wie der vorliegende Befehl.
Beschreibung
Bei Verwendung von ` qt_add_custom_brush_shaders` führt das Build-System automatisch einen Vorverarbeitungsschritt mit dem Qt Canvas Painter durch, gefolgt vom qsb-Tool, und die resultierenden ` .qsb `-Dateien werden implizit dem Ressourcensystem hinzugefügt. Zur Laufzeit greift die Anwendung über das Qt-Ressourcensystem auf die generierte ` .qsb `-Datei zu und übergibt deren Pfad an einen ` QCanvasCustomBrush`.
Beispiel
Angenommen, wir haben eine Anwendung, die mit einem benutzerdefinierten Pinsel rendern möchte, dessen Fragment-Shader in „ brush1.frag “ implementiert ist. Die Datei „ QCanvasCustomBrush “ verweist auf „ brush1.frag.qsb “. Um sicherzustellen, dass diese „ .qsb “-Datei zur Erstellungszeit generiert wird:
find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
qt_add_executable(exampleapp
main.cpp
)
qt_add_custom_brush_shaders(exampleapp "exampleapp_custombrush_shaders"
PREFIX
"/shaders"
FILES
brush1.frag
)Das oben Genannte reicht aus, damit die Anwendung zur Laufzeit auf „ :/shaders/brush1.frag.qsb “ zugreifen kann:
QCanvasCustomBrush customBrush(":/shaders/brush1.frag.qsb");Der ursprüngliche GLSL-Quellcode im Vulkan-Stil (brush1.frag) ist nicht in der ausführbaren Datei der Anwendung enthalten und muss nicht mitgeliefert werden. Falls der Shader-Code Fehler enthält, werden die Compiler-Meldungen bereits beim Erstellen ausgegeben und der Build schlägt fehl. Wenn die Shader-Quelldatei geändert wird, werden die Änderungen beim nächsten Kompilieren automatisch übernommen, genau wie bei C++- und anderen Quelldateien.
Bezug zu qt_add_shaders
qt_add_custom_brush_shaders ist für Shader vorgesehen, die mit ` QCanvasCustomBrush` verwendet werden. Es führt bei der Kompilierung eine zusätzliche Vorverarbeitung durch, bevor intern die Standardfunktion `qt_add_shaders() ` aus dem Qt-Modul ` Shader Tools ` aufgerufen wird.
Hinweis: Shader für benutzerdefinierte Pinsel müssen immer eine ` QC_INCLUDE `-Anweisung enthalten, entweder mit ` "customfrag.glsl" ` oder ` "customvert.glsl"`, und müssen über ` qt_add_custom_brush_shaders` zum Projekt hinzugefügt werden. Die Standardfunktion ` qt_add_shaders ` ist für benutzerdefinierte Pinsel-Shader nicht geeignet, da sie die für den Qt Canvas Painter spezifische Vorverarbeitung nicht durchführt.
Siehe qt_add_shaders() für die allgemeinen Konzepte zur Arbeit mit plattformübergreifendem Shader-Code in Qt und QCanvasCustomBrush für Details zur Erstellung benutzerdefinierter Pinsel-Shader.
Zielsprachen
qt_add_custom_brush_shaders übersetzt den Shader-Code in einen festen Satz von Zielformaten, die für die von Qt Canvas Painter unterstützten Grafik-APIs geeignet sind:
- SPIR-V (für Vulkan)
- GLSL
300 es(für OpenGL ES 3.0 und neuer) - GLSL
150(für OpenGL 3.2 und neuer) - GLSL-
130(für OpenGL 3.0, hauptsächlich zur Unterstützung älterer OpenGL-Rasterisierer) - HLSL-
5.0(für Direct 3D) - MSL-
1.2en (für Metal)
Im Gegensatz zu ` qt_add_shaders()` gibt es derzeit keine weiteren Konfigurationsmöglichkeiten für die Auswahl der Zielsprachen und -versionen.
Argumente
Der Shader-Typ wird aus der Dateiendung abgeleitet, die für Fragment-Shader „ .frag “ und für Vertex-Shader „ .vert “ lauten muss.
Die ersten beiden Argumente sind positionell: „ target “ ist das Ziel, dem die generierten Ressourcen hinzugefügt werden, und „ resource_name “ ist ein Name für die generierte Ressource. Der Name muss für jeden Aufruf von „ qt_add_custom_brush_shaders “ innerhalb des Projekts eindeutig sein.
Hinweis: Das als erstes Argument übergebene target muss bereits vorhanden sein, bevor qt_add_custom_brush_shaders aufgerufen wird.
Hinweis: Es werdenmehrere Aufrufe von ` qt_add_custom_brush_shaders ` unterstützt, wobei jeder einen eindeutigen ` resource_name` verwenden muss.
Die übrigen Argumente sind schlüsselwortbasiert:
FILES- Die Liste der zu kompilierenden Shader-Quelldateien (.fragoder.vert). Dieses Schlüsselwort ist obligatorisch.PREFIX- Das Ressourcenpfadpräfix, unter dem die generierten „.qsb“-Dateien im Ressourcensystem zur Verfügung gestellt werden.BASE- Ein Basispfad, der aus den generierten Ressourcenaliasen entfernt wird, analog zum Argument „BASE“ von „qt_add_resources“.OUTPUTS- Wenn der Name einer generierten „.qsb“-Datei vom Quellnamen abweichen soll, kann diese Liste für jedes Element in „FILES“ einen Eintrag enthalten, der den Namen der Ausgabedatei angibt. Dies wird typischerweise verwendet, wenn eine Shader-Quelle als Eingabe für mehrere „.qsb“-Dateien dient, die sich über „DEFINES“ unterscheiden.DEFINES- Definiert Makros, die während der Shader-Kompilierung aktiv sind. Die Liste hat das Format „"name1=value1;name2=value2"“.OUTPUT_TARGETS- Bei der Verwendung von `qt_add_custom_brush_shaders` mit statischen Bibliotheken werden ein oder mehrere spezielle Ziele generiert. Übergeben Sie hier einen Variablennamen, um diese Ziele abzurufen, beispielsweise um sie zusätzlich zu verarbeiten.
Siehe auch „ QCanvasCustomBrush “ und „qt_add_shaders()“.
© 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.