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: |
Propriétés
- format : enumeration
(since 6.12) - fragmentShader : url
(since 6.12) - fragmentShaderCode : string
(since 6.12) - height : int
(since 6.12) - width : int
(since 6.12)
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é | Type | Description |
|---|---|---|
| MAIN | La fonction void MAIN() est le point d'entrée. Cette fonction doit toujours être présente dans le shader de fragment fourni. | |
| INPUT_UV | vec2 | Coordonnées UV du fragment actuel. En haut à droite : [1, 1] et en bas à gauche : [0, 0]. |
| OUTPUT_SIZE | vec2 | Taille 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 QML | Type de shader | Remarques |
|---|---|---|
| real, int, bool | float, int, bool | |
| couleur | vec4 | La conversion sRGB vers linéaire est effectuée implicitement |
| vector2d | vec2 | |
| vecteur3d | vec3 | |
| vector4d | vec4 | |
| matrice4x4 | mat4 | |
| quaternion | vec4 | la valeur scalaire est w |
| rect | vec4 | |
| point, taille | vec2 | |
| TextureInput | sampler2D |
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 :

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.
| Constante | Description |
|---|---|
TexureData.RGBA8 | Le format de couleur est considéré comme un entier de 8 bits dans les canaux R, G, B et alpha. |
TexureData.RGBA16F | Le format de couleur est considéré comme un nombre à virgule flottante de 16 bits dans les canaux R, G, B et alpha. |
TexureData.RGBA32F | Le format de couleur est considéré comme un nombre à virgule flottante de 32 bits dans les canaux R, G, B et alpha. |
TexureData.RGBE8 | Le 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.R8 | Le format de couleur est considéré comme un entier de 8 bits dans le canal R. |
TexureData.R16 | Le format de couleur est considéré comme un entier de 16 bits dans le canal R. |
TexureData.R16F | Le format de couleur est considéré comme un nombre à virgule flottante de 16 bits dans le canal R. |
TexureData.R32F | Le format de couleur est considéré comme un nombre à virgule flottante de 32 bits dans le canal R. Remarque : à l'exception de |
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.