ShaderEffectSource QML Type
Rend un Qt Quick dans une texture et l'affiche. Plus d'informations...
| Import Statement: | import QtQuick |
| Inherits: |
Propriétés
- format : enumeration
- hideSource : bool
- live : bool
- mipmap : bool
- recursive : bool
- samples : int
- sourceItem : Item
- sourceRect : rect
- textureMirroring : enumeration
- textureSize : size
- wrapMode : enumeration
Méthodes
- void scheduleUpdate()
Description détaillée
Le type ShaderEffectSource rend sourceItem dans une texture et l'affiche dans la scène. sourceItem est dessiné dans la texture comme s'il s'agissait d'un élément racine totalement opaque. Ainsi, sourceItem peut être invisible, mais apparaître dans la texture.
Vous pouvez utiliser le ShaderEffectSource comme :
- une source de texture dans une ShaderEffect. Cela vous permet d'appliquer des effets de shaders personnalisés à n'importe quel élément. Qt Quick élément.
- un cache pour un élément complexe. L'élément complexe peut être rendu une 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é à des éléments en tant que groupe plutôt qu'à chaque élément individuellement.
| 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 sourceItem. Si vous masquez sourceItem en réglant visible sur false ou opacity sur zero, il ne réagira plus aux entrées. Dans les cas où le ShaderEffectSource est destiné à remplacer le sourceItem, vous souhaitez généralement masquer le sourceItem tout en continuant à gérer les entrées. Pour ce faire, vous pouvez utiliser la propriété hideSource.
Vous pouvez combiner les propriétés ShaderEffectSource et MultiEffect:
- Pour utiliser le même élément source dans plusieurs effets et le garder inchangé.
- Pour utiliser une partie de l'élément source, en utilisant ShaderEffectSource.sourceRect.
- Pour diminuer la résolution de l'élément source, par exemple pour améliorer les performances, en utilisant la propriété ShaderEffectSource.textureSize.
Remarque : le ShaderEffectSource repose sur la prise en charge du multi-échantillonnage FBO pour l'antialias des bords. Si le matériel sous-jacent ne prend pas en charge cette fonction, ce qui est le cas de la plupart des puces graphiques intégrées, les bords rendus à l'intérieur d'un ShaderEffectSource ne seront pas anticrénelés. Une façon de remédier à ce problème est de doubler la taille de la source d'effet et de la rendre avec smooth: true (c'est la valeur par défaut de smooth). Cela équivaut à un multi-échantillonnage 4x, au prix d'une baisse des performances et d'une augmentation de l'utilisation de la mémoire.
Attention : Dans la plupart des cas, l'utilisation d'un ShaderEffectSource réduira les performances et, dans tous les cas, augmentera l'utilisation de la mémoire vidéo. Le rendu via un ShaderEffectSource peut également entraîner une baisse de la qualité puisque certaines implémentations OpenGL supportent les objets backbuffer multi-échantillonnés, mais pas les objets framebuffer multi-échantillonnés.
Documentation sur les propriétés
format : enumeration
Cette propriété définit le format de la texture d'accompagnement. La modification de cette propriété prend tout son sens lorsque l'élément est utilisé comme texture source d'un site ShaderEffect.
| Constante | Description |
|---|---|
ShaderEffectSource.RGBA8 | |
ShaderEffectSource.RGBA16F | |
ShaderEffectSource.RGBA32F | |
ShaderEffectSource.Alpha | À partir de Qt 6.0, cette valeur n'est pas utilisée et a le même effet que RGBA8 dans la pratique. |
ShaderEffectSource.RGB | À partir de Qt 6.0, cette valeur n'est pas utilisée et a le même effet que RGBA8 dans la pratique. |
ShaderEffectSource.RGBA | À partir de Qt 6.0, cette valeur n'est pas utilisée et a le même effet que RGBA8 dans la pratique. |
hideSource : bool
Si cette propriété vaut true, le site sourceItem est caché, bien qu'il soit toujours intégré à la texture. Contrairement à ce qui se passe lorsque sourceItem est caché en attribuant à visible la valeur false, le fait d'attribuer la valeur true à cette propriété n'empêchera pas la souris ou les saisies au clavier d'atteindre sourceItem. Cette propriété est utile lorsque la page ShaderEffectSource est ancrée au-dessus de la page sourceItem et qu'elle est censée la remplacer.
live : bool
Si cette propriété est vraie, la texture est mise à jour à chaque fois que le site sourceItem est mis à jour. Sinon, il s'agira d'une image figée, même si un nouvel élément est attribué à sourceItem. La propriété est vraie par défaut.
mipmap : bool
Si cette propriété est vraie, des mipmaps sont générés 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
Attribuez la valeur "true" à cette propriété si le site ShaderEffectSource est dépendant de lui-même. Les ShaderEffectSources forment une chaîne de dépendance, dans laquelle une ShaderEffectSource peut faire partie de la sourceItem d'une autre. S'il y a une boucle dans cette chaîne, une ShaderEffectSource peut finir par essayer de faire 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 que ShaderEffectSource puisse conserver une copie de la texture de l'image précédente. Il peut alors effectuer un rendu dans une texture et utiliser la texture de l'image précédente comme source.
En fixant cette propriété et la valeur de live à true, le graphique de la scène sera rendu en continu. Étant donné que ShaderEffectSource dépend de lui-même, sa mise à jour signifie qu'il redevient immédiatement sale.
samples : int
Cette propriété permet de demander un rendu multi-échantillonné.
Par défaut, le multi-échantillonnage est activé chaque fois que le multi-échantillonnage est activé pour l'ensemble de la fenêtre, en supposant que le moteur de rendu de graphe de scène utilisé et l'API graphique sous-jacente le prennent en charge.
En fixant la valeur à 2, 4, etc., il est possible de demander un rendu multi-échantillonné 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'à un sous-arbre donné, ce qui peut entraîner des gains de performance significatifs puisque le multi-échantillonnage n'est pas appliqué à d'autres parties de la scène.
Remarque : l'activation du multi-échantillonnage peut être potentiellement coûteuse, quelle que soit la taille de la couche, car elle entraîne des coûts de performance et de mémoire qui dépendent du matériel et du pilote.
Remarque : cette propriété n'est fonctionnelle que lorsque la prise en charge des tampons de rendu multi-échantillons et des blits de tampons de trame est disponible. Dans le cas contraire, la valeur est ignorée.
sourceItem : Item
Cette propriété contient l'élément à rendre dans la texture. La définition de cette propriété à null lorsque live est vrai, libère les ressources de la texture.
sourceRect : rect
Cette propriété définit la zone rectangulaire de sourceItem à rendre dans la texture. Le rectangle source peut être plus grand que sourceItem lui-même. Si le rectangle est nul, ce qui est le cas par défaut, l'ensemble de sourceItem est rendu dans la texture.
textureMirroring : enumeration
Cette propriété définit comment la texture OpenGL générée doit être reflétée. La valeur par défaut est ShaderEffectSource.MirrorVertically. La mise en miroir personnalisée peut être utile si la texture générée est directement accessible 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 de l'interface utilisateur de l'élément ShaderEffectSource lui-même.
| Constante | Description |
|---|---|
ShaderEffectSource.NoMirroring | Pas de mise en miroir |
ShaderEffectSource.MirrorHorizontally | La texture générée est retournée le long de l'axe X. |
ShaderEffectSource.MirrorVertically | La texture générée est inversée sur l'axe Y. |
textureSize : size
Cette propriété contient la taille en pixels demandée pour la texture. Si elle est vide, ce qui est le cas par défaut, la taille du rectangle source 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 plates-formes limitent la taille des objets framebuffer, 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 d'habillage OpenGL associés à la texture. La modification de cette propriété prend tout son sens lorsque l'élément est utilisé comme texture source d'un site ShaderEffect.
La valeur par défaut est ShaderEffectSource.ClampToEdge.
| Constante | Description de la constante |
|---|---|
ShaderEffectSource.ClampToEdge | GL_CLAMP_TO_EDGE horizontalement et verticalement |
ShaderEffectSource.RepeatHorizontally | GL_REPEAT horizontalement, GL_CLAMP_TO_EDGE verticalement |
ShaderEffectSource.RepeatVertically | GL_CLAMP_TO_EDGE horizontalement, GL_REPEAT verticalement |
ShaderEffectSource.Repeat | GL_REPEAT horizontalement et verticalement |
Note : Certaines implémentations d'OpenGL ES 2 ne supportent pas le mode d'habillage 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 la prochaine image. Utilisez cette fonction pour mettre à jour la texture lorsque live est faux.
© 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.
