Sur cette page

ShaderEffectSource QML Type

Affiche une Qt Quick élément en une texture et l'affiche. En savoir plus...

Import Statement: import QtQuick
Inherits:

Item

Propriétés

Méthodes

Description détaillée

Le type ShaderEffectSource rend l'sourceItem e en une texture et l'affiche dans la scène. L'sourceItem e est dessinée dans la texture comme s'il s'agissait d'un élément racine entièrement opaque. Ainsi, l'sourceItem e elle-même peut être invisible, tout en apparaissant dans la texture.

Vous pouvez utiliser ShaderEffectSource comme :

  • source de texture dans un ShaderEffect. Cela vous permet d’appliquer des effets de shader personnalisés à n’importe quel Qt Quick élément.
  • un cache pour un élément complexe. L’élément complexe peut être rendu une seule fois dans la texture, qui peut ensuite être animée librement sans qu’il soit nécessaire de rendre à nouveau l’élément complexe à chaque image.
  • une couche d’opacité. ShaderEffectSource vous permet d’appliquer une opacité à un groupe d’éléments plutôt qu’à chaque élément individuellement.

Rectangles colorés qui se chevauchent, rendus à l'aide d'un shader comme source d'effet

import QtQuick 2.0

Rectangle {
    width: 200
    height: 100
    gradient: Gradient {
        GradientStop { position: 0; color: "white" }
        GradientStop { position: 1; color: "black" }
    }
    Row {
        opacity: 0.5
        Item {
            id: foo
            width: 100; height: 100
            Rectangle { x: 5; y: 5; width: 60; height: 60; color: "red" }
            Rectangle { x: 20; y: 20; width: 60; height: 60; color: "orange" }
            Rectangle { x: 35; y: 35; width: 60; height: 60; color: "yellow" }
        }
        ShaderEffectSource {
            width: 100; height: 100
            sourceItem: foo
        }
    }
}

Le type ShaderEffectSource ne redirige aucune entrée de souris ou de clavier vers l’ sourceItem. Si vous masquez l’ sourceItem en définissant visible sur false ou opacity sur zéro, celle-ci ne réagira plus aux entrées. Dans les cas où la ShaderEffectSource est destinée à remplacer l’ sourceItem, vous souhaitez généralement masquer l’ sourceItem tout en continuant à gérer les entrées. Pour cela, vous pouvez utiliser la propriété hideSource.

Vous pouvez combiner l’ ShaderEffectSource et l’ MultiEffect:

  • Pour utiliser le même élément source dans plusieurs effets et le conserver inchangé.
  • Pour utiliser une partie de l’élément source, à l’aide de ShaderEffectSource.sourceRect.
  • Pour réduire la résolution de l’élément source, par exemple afin d’améliorer les performances, à l’aide de la propriété ` ShaderEffectSource.textureSize `.

Remarque : ShaderEffectSource s’appuie sur la prise en charge du multisampling FBO pour l’anticrénelage des contours. Si le matériel sous-jacent ne prend pas en charge cette fonctionnalité, ce qui est le cas de la plupart des puces graphiques embarquées, les contours rendus à l’intérieur d’une ShaderEffectSource ne seront pas anticrénelés. Une solution consiste à doubler la taille de la source d’effet et à la rendre avec ` smooth: true ` (c’est la valeur par défaut de `smooth`). Cela équivaudra à un multisampling 4x, au prix d’une baisse des performances et d’une utilisation plus importante de la mémoire.

Avertissement : dans la plupart des cas, l’utilisation d’un ShaderEffectSource réduira les performances, et dans tous les cas, elle augmentera l’utilisation de la mémoire vidéo. Le rendu via un ShaderEffectSource peut également entraîner une baisse de qualité, car certaines implémentations d’OpenGL prennent en charge le backbuffer multisampling, mais pas les objets framebuffer multisampling.

Documentation des propriétés

format : enumeration

Cette propriété définit le format de la texture d'arrière-plan. La modification de cette propriété est particulièrement utile lorsque l'élément est utilisé comme texture source d'une « ShaderEffect ».

ConstanteDescription
ShaderEffectSource.RGBA8 
ShaderEffectSource.RGBA16F 
ShaderEffectSource.RGBA32F 
ShaderEffectSource.AlphaÀ partir de Qt 6.0, cette valeur n'est plus utilisée et a, dans la pratique, le même effet que ` RGBA8 `.
ShaderEffectSource.RGBÀ partir de Qt 6.0, cette valeur n'est plus utilisée et a, dans la pratique, le même effet que « RGBA8 ».
ShaderEffectSource.RGBAÀ partir de Qt 6.0, cette valeur n'est plus utilisée et a, dans la pratique, le même effet que ` RGBA8 `.

hideSource : bool

Si cette propriété est définie sur « true », l’ sourceItem est masquée, bien qu’elle soit toujours rendue dans la texture. Contrairement au masquage de l’ sourceItem en définissant visible sur « false », le fait de définir cette propriété sur « true » n’empêchera pas les entrées de la souris ou du clavier d’atteindre sourceItem. Cette propriété est utile lorsque l’ ShaderEffectSource est ancrée par-dessus l’ sourceItem et est destinée à la remplacer.

live : bool

Si cette propriété est définie sur « true », la texture est mise à jour à chaque fois que la propriété « sourceItem » est mise à jour. Dans le cas contraire, l'image restera figée, même si un nouvel élément est attribué à la propriété « sourceItem ». Cette propriété est définie sur « true » par défaut.

mipmap : bool

Si cette propriété est définie sur « true », des mipmaps sont générées pour la texture.

Remarque : certaines implémentations d'OpenGL ES 2 ne prennent pas en charge le mipmapping des textures qui ne sont pas des puissances de deux.

recursive : bool

Définissez cette propriété sur « true » si l’ ShaderEffectSource e dépend d’elle-même. Les ShaderEffectSources forment une chaîne de dépendances, dans laquelle une ShaderEffectSource peut faire partie de l’ sourceItem d’une autre. S’il existe une boucle dans cette chaîne, une ShaderEffectSource pourrait finir par tenter d’effectuer un rendu dans la même texture qu’elle utilise comme source, ce qui n’est pas autorisé par OpenGL. Lorsque cette propriété est définie sur « true », une texture supplémentaire est allouée afin qu’ ShaderEffectSource puisse conserver une copie de la texture de l’image précédente. Il peut alors effectuer le rendu dans une texture tout en utilisant la texture de l’image précédente comme source.

Si vous définissez à la fois cette propriété et « live » sur « true », le graphe de scène s’affichera en continu. Comme la « ShaderEffectSource » dépend d’elle-même, sa mise à jour entraîne immédiatement sa réévaluation.

samples : int

Cette propriété permet de demander un rendu avec échantillonnage multiple.

Par défaut, le multisampling est activé dès lors qu’il est activé pour l’ensemble de la fenêtre, à condition que le moteur de rendu de l’arborescence de scène utilisé et l’API graphique sous-jacente prennent en charge cette fonctionnalité.

En définissant la valeur sur 2, 4, etc., le rendu multi-échantillonné peut être demandé pour une partie de la scène sans activer le multi-échantillonnage pour l'ensemble de la scène. De cette manière, le multi-échantillonnage n'est appliqué qu'à une sous-arborescence donnée, ce qui peut entraîner des gains de performances significatifs puisque le multi-échantillonnage n'est pas appliqué aux autres parties de la scène.

Remarque : l’activation du multisampling peut s’avérer coûteuse, quelle que soit la taille de la couche, car elle entraîne un coût en termes de performances et de mémoire qui dépend du matériel et du pilote.

Remarque : cette propriété ne fonctionne que si la prise en charge des buffers de rendu multisampling et des transferts de framebuffer est disponible. Dans le cas contraire, la valeur est ignorée sans message d’erreur.

sourceItem : Item

Cette propriété contient l'élément à afficher dans la texture. Si vous lui attribuez la valeur « null » alors que la propriété « live » est définie sur « true », les ressources de texture seront libérées.

sourceRect : rect

Cette propriété définit la zone rectangulaire de l'sourceItem qui doit être rendue dans la texture. Le rectangle source peut être plus grand que l'sourceItem elle-même. Si le rectangle est nul (ce qui est la valeur par défaut), l'sourceItem entière est rendue dans la texture.

textureMirroring : enumeration

Cette propriété définit la manière dont la texture OpenGL générée doit être mise en miroir. La valeur par défaut est « ShaderEffectSource.MirrorVertically ». Une mise en miroir personnalisée peut s’avérer utile si la texture générée est directement utilisée par des shaders personnalisés, tels que ceux spécifiés par ShaderEffect. La mise en miroir n’a aucun effet sur la représentation dans l’interface utilisateur de l’élément « ShaderEffectSource » lui-même.

ConstanteDescription
ShaderEffectSource.NoMirroringPas de symétrie
ShaderEffectSource.MirrorHorizontallyLa texture générée est inversée selon l’axe X.
ShaderEffectSource.MirrorVerticallyLa texture générée est inversée le long de l’axe Y.

textureSize : size

Cette propriété contient la taille en pixels demandée pour la texture. Si elle est vide (ce qui correspond à la valeur par défaut), c'est la taille du rectangle source qui est utilisée.

Remarque : cette valeur est exprimée en pixels, car elle contrôle directement la taille d'un objet de texture.

Remarque : certaines plateformes imposent une limite minimale à la taille des objets de tampon de trame, ce qui signifie que la taille réelle de la texture peut être supérieure à la taille demandée.

wrapMode : enumeration

Cette propriété définit les modes de bouclage OpenGL associés à la texture. La modification de cette propriété est particulièrement utile lorsque l'élément est utilisé comme texture source d'un « ShaderEffect ».

La valeur par défaut est « ShaderEffectSource.ClampToEdge ».

ConstanteDescription
ShaderEffectSource.ClampToEdgeGL_CLAMP_TO_EDGE à la fois horizontalement et verticalement
ShaderEffectSource.RepeatHorizontallyGL_REPEAT horizontalement, GL_CLAMP_TO_EDGE verticalement
ShaderEffectSource.RepeatVerticallyGL_CLAMP_TO_EDGE horizontalement, GL_REPEAT verticalement
ShaderEffectSource.RepeatGL_REPEAT à la fois horizontalement et verticalement

Remarque : certaines implémentations d'OpenGL ES 2 ne prennent pas en charge le mode de bouclage GL_REPEAT avec des textures qui ne sont pas des puissances de deux.

Documentation de la méthode

void scheduleUpdate()

Planifie un nouveau rendu de la texture pour l'image suivante. Utilisez cette fonction pour mettre à jour la texture lorsque la propriété « live » est définie sur « false ».

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