Sur cette page

QuadTextureProvider QML Type

Permet de rendre une texture quadrangulaire à l'aide d'un shader de fragment personnalisé. En savoir plus...

Import Statement: import QtQuick3D.Helpers
Since: Qt 6.12
Inherits:

TextureProviderExtension

Propriétés

Description détaillée

Ce type est utilisé pour rendre des textures quadri-dimensions à l'aide d'un code de shader personnalisé, ce qui offre un moyen pratique d'obtenir des textures programmables. En fournissant un shader de fragment et les propriétés souhaitées, un passage est créé et un pipeline de shader est construit à partir des données fournies, en transmettant les propriétés sous forme de valeurs uniformes au shader de fragment.

Fonctions intégrées fournies :

Mot-cléTypeDescription
MAINLa fonction void MAIN() est le point d'entrée. Cette fonction doit toujours être présente dans le shader de fragment fourni.
INPUT_UVvec2Coordonnées UV du fragment actuel. En haut à droite : [1, 1] et en bas à gauche : [0, 0].
OUTPUT_SIZEvec2Taille de la texture de sortie.

Les propriétés personnalisées sont mappées à des uniformes. Chaque fois que les valeurs changent, la valeur mise à jour devient visible dans le shader. Ce concept vous est peut-être déjà familier grâce à ShaderEffect.

Le nom de la propriété QML et celui de la variable GLSL doivent correspondre. Il n’y a pas de déclaration distincte dans le code du shader pour les uniformes individuels. Le nom de la propriété QML peut plutôt être utilisé tel quel.

Le tableau suivant répertorie les correspondances entre les types :

Type QMLType de shaderRemarques
real, int, boolfloat, int, bool
couleurvec4La conversion sRGB vers linéaire est effectuée implicitement
vector2dvec2
vecteur3dvec3
vector4dvec4
matrice4x4mat4
quaternionvec4la valeur scalaire est w
rectvec4
point, taillevec2
TextureInputsampler2D

Voici un exemple illustrant comment générer une texture rouge simple :

Texture {
    textureProvider: QuadTextureProvider {
        width: 128
        height: 128
        fragmentShaderCode: `
            void MAIN() {
                FRAGCOLOR = vec4(1.0, 0.0, 0.0, 1.0);
            }
        `
    }
}

Autre exemple d'échantillonnage à partir d'une propriété « Texture » et de mélange avec des couleurs UV :

Texture {
    textureProvider: QuadTextureProvider {
        fragmentShaderCode: `
        void MAIN() {
            vec2 uv = INPUT_UV;
            vec4 c = texture(checkers, uv);
            FRAGCOLOR = mix(c, vec4(uv, 1, 1), 0.5);
        }`

        property Texture checkers : Texture {
            source: "../shared/maps/checkers2.png"
        }
    }
}

Le résultat est le suivant :

Grille 2x2 composée de cellules remplies d'un dégradé de couleurs : bleu sarcelle, blanc, bleu et magenta

Remarque : la fourniture d'un shader de sommets n'est pas prise en charge, seul un shader de fragments est autorisé.

Remarque : si des propriétés « Texture » sont fournies, le rendu n’aura lieu que lorsque les textures dépendantes seront disponibles.

Remarque : il n’est actuellement pas possible d’ajouter ou de supprimer des propriétés à l’exécution ; seules les propriétés d’origine peuvent être modifiées.

Voir également ShaderEffect.

Documentation sur les propriétés

format : enumeration [default: TexureData.RGBA16F, since 6.12]

Cette propriété définit le format de la texture de sortie.

ConstanteDescription
TexureData.RGBA8Le format de couleur est considéré comme un entier de 8 bits dans les canaux R, G, B et alpha.
TexureData.RGBA16FLe format de couleur est considéré comme un nombre à virgule flottante de 16 bits dans les canaux R, G, B et alpha.
TexureData.RGBA32FLe format de couleur est considéré comme un nombre à virgule flottante de 32 bits dans les canaux R, G, B et alpha.
TexureData.RGBE8Le format de couleur est considéré comme une mantisse de 8 bits dans les canaux R, G et B et un exposant partagé de 8 bits.
TexureData.R8Le format de couleur est considéré comme un entier de 8 bits dans le canal R.
TexureData.R16Le format de couleur est considéré comme un entier de 16 bits dans le canal R.
TexureData.R16FLe format de couleur est considéré comme un nombre à virgule flottante de 16 bits dans le canal R.
TexureData.R32FLe format de couleur est considéré comme un nombre à virgule flottante de 32 bits dans le canal R.

Remarque : à l'exception de TexureData.RGBA8, tous les formats ne sont pas pris en charge lors de l'exécution, car cela dépend du backend utilisé ainsi que du matériel utilisé.

Cette propriété a été introduite dans Qt 6.12.

fragmentShader : url [since 6.12]

Spécifie le fichier contenant l'extrait de code du shader de fragment personnalisé.

La valeur est une URL et doit correspondre soit à un fichier local, soit utiliser le schéma qrc pour accéder à des fichiers intégrés via le système de ressources Qt. Les chemins d'accès relatifs (sans schéma) sont également acceptés ; dans ce cas, le fichier est considéré comme relatif au composant (le fichier .qml ).

Avertissement : les extraitsde shader sont considérés comme du contenu fiable. Il est conseillé aux développeurs d'applications d'évaluer soigneusement les implications potentielles avant d'autoriser le chargement de contenu fourni par l'utilisateur qui ne fait pas partie de l'application.

Remarque : s’il est défini, fragmentShaderCode aura la priorité sur fragmentShader.

Cette propriété a été introduite dans Qt 6.12.

Voir également fragmentShaderCode.

fragmentShaderCode : string [since 6.12]

Spécifie un extrait de code de shader de fragment personnalisé.

Permet d'intégrer le code du shader sous forme de chaîne de caractères au lieu de fournir un fichier.

Remarque : si elle est définie, cette propriété prévaudra sur fragmentShader.

Cette propriété a été introduite dans Qt 6.12.

Voir également fragmentShader.

height : int [default: 128, since 6.12]

Spécifie la hauteur en pixels de la texture de sortie.

Cette propriété a été introduite dans Qt 6.12.

Voir aussi width.

width : int [default: 128, since 6.12]

Spécifie la largeur en pixels de la texture de sortie.

Cette propriété a été introduite dans Qt 6.12.

Voir également height.

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