Sur cette page

qt_add_custom_brush_shaders

Prépare des shaders de pinceaux personnalisés et les ajoute au système de ressources Qt

La commande est définie dans le composant « CanvasPainter » du paquet « Qt6 », qui peut être chargé comme suit :

find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)

Cette commande a été introduite dans Qt 6.12.

Synopsis

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]
)

Si les commandes sans version sont désactivées, utilisez plutôt ` qt6_add_custom_brush_shaders() `. Elle prend en charge le même ensemble d'arguments que cette commande.

Description

Lorsque vous utilisez ` qt_add_custom_brush_shaders`, le système de compilation lance automatiquement une étape de prétraitement Qt Canvas Painter suivie de l'outil `qsb`, et les fichiers ` .qsb ` résultants sont ajoutés implicitement au système de ressources. Au moment de l'exécution, l'application accède au fichier ` .qsb ` généré via le système de ressources Qt et transmet son chemin d'accès à un ` QCanvasCustomBrush`.

Exemple

Supposons que nous ayons une application qui souhaite effectuer un rendu à l’aide d’un pinceau personnalisé dont le shader de fragment est implémenté dans brush1.frag. Le fichier QCanvasCustomBrush fait référence à brush1.frag.qsb. Pour garantir que ce fichier .qsb soit généré lors de la compilation :

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
)

Ce qui précède suffit pour permettre à l’application d’accéder à :/shaders/brush1.frag.qsb lors de l’exécution :

QCanvasCustomBrush customBrush(":/shaders/brush1.frag.qsb");

Le code source GLSL d’origine de type Vulkan (brush1.frag) n’est pas inclus dans l’exécutable de l’application et n’a pas besoin d’être fourni. S’il y a des erreurs dans le code du shader, les messages du compilateur s’affichent lors de la compilation et celle-ci échoue. Lorsque vous modifiez le fichier source du shader, les modifications sont automatiquement prises en compte lors de la compilation suivante, comme c’est le cas pour les fichiers C++ et autres fichiers source.

Lien avec qt_add_shaders

qt_add_custom_brush_shaders est dédié aux shaders utilisés avec QCanvasCustomBrush. Il effectue un prétraitement supplémentaire lors de la compilation avant d’appeler en interne la fonction standard qt_add_shaders() du module Qt Shader Tools.

Remarque : les shaders destinés aux pinceaux personnalisés doivent toujours contenir une instruction ` QC_INCLUDE `, qu’elle utilise ` "customfrag.glsl" ` ou ` "customvert.glsl"`, et doivent être ajoutés au projet via ` qt_add_custom_brush_shaders`. La fonction standard ` qt_add_shaders ` n’est pas adaptée aux shaders de pinceaux personnalisés, car elle n’effectue pas le prétraitement spécifique à Qt Canvas Painter.

Consultez qt_add_shaders() pour découvrir les concepts généraux relatifs à l'utilisation du code de shaders multiplateforme dans Qt, et QCanvasCustomBrush pour plus de détails sur la création de shaders de pinceaux personnalisés.

Langages cibles

qt_add_custom_brush_shaders traduit le code de shader vers un ensemble fixe de cibles, adaptées aux API graphiques prises en charge par Qt Canvas Painter :

  • SPIR-V (pour Vulkan)
  • GLSL 300 es (pour OpenGL ES 3.0 et versions ultérieures)
  • GLSL 150 (pour OpenGL 3.2 et versions ultérieures)
  • 130 GLSL (pour OpenGL 3.0, principalement pour prendre en charge les anciens rasteriseurs OpenGL logiciels)
  • 5.0 s HLSL (pour Direct 3D)
  • 1.2 MSL (pour Metal)

Contrairement à qt_add_shaders(), il n'existe actuellement aucune autre option de configuration pour l'ensemble des langages et versions cibles.

Arguments

Le type de shader est déduit de l’extension du fichier, qui doit être .frag pour les shaders de fragments ou .vert pour les shaders de sommets.

Les deux premiers arguments sont positionnels : target correspond à la cible à laquelle les ressources générées sont ajoutées, et resource_name est le nom de la ressource générée. Ce nom doit être unique pour chaque appel à qt_add_custom_brush_shaders au sein du projet.

Remarque : la cible target transmise en premier argument doit exister avant l’appel de qt_add_custom_brush_shaders.

Remarque : plusieurs appels à qt_add_custom_brush_shaders sont pris en charge et chacun doit utiliser un resource_name unique.

Les arguments restants sont des mots-clés :

  • FILES - La liste des fichiers source de shaders (.frag ou .vert) à compiler. Ce mot-clé est obligatoire.
  • PREFIX - Le préfixe de chemin de ressource sous lequel les fichiers .qsb générés sont mis à disposition dans le système de ressources.
  • BASE - Un chemin de base qui est supprimé des alias de ressources générés, de manière analogue à l’argument ` BASE ` de ` qt_add_resources`.
  • OUTPUTS - Lorsque le nom d’un fichier « .qsb » généré doit être différent de celui de la source, cette liste peut contenir une entrée pour chaque élément de ` FILES`, spécifiant le nom du fichier de sortie. Cela est généralement utilisé lorsqu’une source de shader sert d’entrée à plusieurs fichiers « .qsb » qui diffèrent via ` DEFINES`.
  • DEFINES - Définit les macros actives lors de la compilation du shader. La liste se présente sous la forme "name1=value1;name2=value2".
  • OUTPUT_TARGETS - Lors de l'utilisation de ` qt_add_custom_brush_shaders ` avec des bibliothèques statiques, une ou plusieurs cibles spéciales sont générées. Passez ici un nom de variable pour récupérer ces cibles, par exemple afin d'effectuer un traitement supplémentaire sur celles-ci.

Voir également QCanvasCustomBrush et 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.