ShaderEffectSource QML Type
Rendert ein Qt Quick Element in eine Textur und zeigt es an. Mehr...
Import Statement: | import QtQuick |
Inherits: |
Eigenschaften
- format : enumeration
- hideSource : bool
- live : bool
- mipmap : bool
- recursive : bool
- samples : int
- sourceItem : Item
- sourceRect : rect
- textureMirroring : enumeration
- textureSize : size
- wrapMode : enumeration
Methoden
Detaillierte Beschreibung
Der ShaderEffectSource-Typ rendert sourceItem in eine Textur und zeigt sie in der Szene an. sourceItem wird in die Textur gezeichnet, als wäre es ein vollständig undurchsichtiges Wurzelelement. So kann sourceItem selbst unsichtbar sein, aber dennoch in der Textur erscheinen.
Sie können die ShaderEffectSource verwenden als:
- eine Texturquelle in einer ShaderEffect. Dies ermöglicht Ihnen, benutzerdefinierte Shader-Effekte auf jedes Qt Quick Element anwenden.
- einen Cache für ein komplexes Element. Das komplexe Element kann einmal in die Textur gerendert werden, die dann frei animiert werden kann, ohne dass das komplexe Element jeden Frame erneut gerendert werden muss.
- eine Deckkraft-Ebene. Mit ShaderEffectSource können Sie eine Deckkraft auf Elemente als Gruppe und nicht auf jedes Element einzeln anwenden.
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 } } } |
Der Typ ShaderEffectSource leitet keine Maus- oder Tastatureingaben an sourceItem weiter. Wenn Sie sourceItem ausblenden, indem Sie visible auf false oder opacity auf null setzen, reagiert es nicht mehr auf Eingaben. In Fällen, in denen die ShaderEffectSource die sourceItem ersetzen soll, möchten Sie normalerweise die sourceItem ausblenden und trotzdem Eingaben verarbeiten. Hierfür können Sie die Eigenschaft hideSource verwenden.
Sie können die ShaderEffectSource und die MultiEffect kombinieren:
- Um dasselbe Quellelement in mehreren Effekten zu verwenden und es unverändert zu lassen.
- Sie können einen Teil des Quellobjekts verwenden, indem Sie ShaderEffectSource.sourceRect verwenden.
- Um die Auflösung des Quellelements zu verringern, zum Beispiel für eine bessere Leistung, indem Sie die Eigenschaft ShaderEffectSource.textureSize verwenden.
Hinweis: Die ShaderEffectSource stützt sich auf die FBO-Multisampling-Unterstützung für die Kantenglättung. Wenn die zugrunde liegende Hardware dies nicht unterstützt, was bei den meisten eingebetteten Grafikchips der Fall ist, werden Kanten, die innerhalb einer ShaderEffectSource gerendert werden, nicht antialiasingfähig sein. Eine Möglichkeit, dies zu beheben, besteht darin, die Größe der Effektquelle zu verdoppeln und sie mit smooth: true
zu rendern (dies ist der Standardwert von smooth). Dies entspricht einem 4-fachen Multisampling, allerdings auf Kosten einer geringeren Leistung und eines höheren Speicherverbrauchs.
Warnung: In den meisten Fällen führt die Verwendung einer ShaderEffectSource zu einer geringeren Leistung und in allen Fällen zu einer höheren Nutzung des Videospeichers. Das Rendern über eine ShaderEffectSource kann auch zu einer geringeren Qualität führen, da einige OpenGL-Implementierungen zwar Backbuffer-Objekte mit Mehrfachabtastung, aber keine Framebuffer-Objekte mit Mehrfachabtastung unterstützen.
Eigenschaft Dokumentation
format : enumeration |
Diese Eigenschaft definiert das Format der Backing-Textur. Das Ändern dieser Eigenschaft ist am sinnvollsten, wenn das Element als Quelltextur einer ShaderEffect verwendet wird.
Konstante | Beschreibung |
---|---|
ShaderEffectSource.RGBA8 | |
ShaderEffectSource.RGBA16F | |
ShaderEffectSource.RGBA32F | |
ShaderEffectSource.Alpha | Ab Qt 6.0 wird dieser Wert nicht mehr verwendet und hat in der Praxis die gleiche Wirkung wie RGBA8 . |
ShaderEffectSource.RGB | Ab Qt 6.0 wird dieser Wert nicht mehr verwendet und hat in der Praxis die gleiche Wirkung wie RGBA8 . |
ShaderEffectSource.RGBA | Ab Qt 6.0 wird dieser Wert nicht mehr verwendet und hat in der Praxis die gleiche Wirkung wie RGBA8 . |
hideSource : bool |
Wenn diese Eigenschaft true ist, wird die sourceItem ausgeblendet, obwohl sie weiterhin in die Textur gerendert wird. Im Gegensatz zum Ausblenden von sourceItem durch Setzen von visible auf false wird durch das Setzen dieser Eigenschaft auf true nicht verhindert, dass Maus- oder Tastatureingaben sourceItem erreichen. Die Eigenschaft ist nützlich, wenn die ShaderEffectSource über der sourceItem verankert ist und diese ersetzen soll.
live : bool |
Wenn diese Eigenschaft wahr ist, wird die Textur bei jeder Aktualisierung von sourceItem aktualisiert. Andernfalls wird das Bild eingefroren, auch wenn sourceItem ein neues Element zugewiesen wird. Die Eigenschaft ist standardmäßig true.
mipmap : bool |
Wenn diese Eigenschaft true ist, werden Mipmaps für die Textur erzeugt.
Hinweis: Einige OpenGL ES 2-Implementierungen unterstützen kein Mipmapping von Nicht-Power-of-Two-Texturen.
recursive : bool |
Setzen Sie diese Eigenschaft auf true, wenn die ShaderEffectSource eine Abhängigkeit von sich selbst hat. ShaderEffectSources bilden eine Abhängigkeitskette, wobei eine ShaderEffectSource Teil der sourceItem einer anderen sein kann. Wenn es eine Schleife in dieser Kette gibt, könnte ein ShaderEffectSource am Ende versuchen, in die gleiche Textur zu rendern, die es als Quelle verwendet, was von OpenGL nicht erlaubt ist. Wenn diese Eigenschaft auf true gesetzt ist, wird eine zusätzliche Textur zugewiesen, so dass ShaderEffectSource eine Kopie der Textur des vorherigen Frames behalten kann. Es kann dann in eine Textur rendern und die Textur des vorherigen Frames als Quelle verwenden.
Wenn sowohl diese Eigenschaft als auch live auf true gesetzt werden, wird der Szenegraph kontinuierlich gerendert. Da die ShaderEffectSource von sich selbst abhängt, bedeutet eine Aktualisierung, dass sie sofort wieder verschmutzt wird.
samples : int |
Diese Eigenschaft ermöglicht das Anfordern von Multisampling-Rendering.
Standardmäßig ist Multisampling immer dann aktiviert, wenn Multisampling für das gesamte Fenster aktiviert ist, vorausgesetzt, der verwendete Szenegrafik-Renderer und die zugrunde liegende Grafik-API unterstützen dies.
Durch Setzen des Wertes auf 2, 4 usw. kann das Multisampling-Rendering für einen Teil der Szene angefordert werden, ohne das Multisampling für die gesamte Szene zu aktivieren. Auf diese Weise wird Multisampling nur auf einen bestimmten Teilbaum angewandt, was zu erheblichen Leistungssteigerungen führen kann, da Multisampling nicht auf andere Teile der Szene angewandt wird.
Hinweis: Das Aktivieren von Multisampling kann unabhängig von der Größe der Ebene potenziell teuer sein, da es hardware- und treiberabhängige Leistungs- und Speicherkosten verursacht.
Hinweis: Diese Eigenschaft ist nur funktionsfähig, wenn Unterstützung für Multisample-Renderbuffer und Framebuffer-Blits verfügbar ist. Andernfalls wird der Wert stillschweigend ignoriert.
sourceItem : Item |
Diese Eigenschaft enthält das Element, das in die Textur gerendert werden soll. Wird diese Eigenschaft auf null gesetzt, während live wahr ist, werden die Texturressourcen freigegeben.
sourceRect : rect |
Diese Eigenschaft legt fest, welcher rechteckige Bereich von sourceItem in die Textur gerendert werden soll. Das Quellrechteck kann größer sein als sourceItem selbst. Wenn das Rechteck null ist, was der Standard ist, wird die gesamte sourceItem in die Textur gerendert.
textureMirroring : enumeration |
Diese Eigenschaft definiert, wie die generierte OpenGL-Textur gespiegelt werden soll. Der Standardwert ist ShaderEffectSource.MirrorVertically
. Die benutzerdefinierte Spiegelung kann nützlich sein, wenn auf die generierte Textur direkt von benutzerdefinierten Shadern zugegriffen wird, wie z.B. von ShaderEffect. Die Spiegelung hat keinen Einfluss auf die UI-Darstellung des Elements ShaderEffectSource selbst.
Konstante | Beschreibung |
---|---|
ShaderEffectSource.NoMirroring | Keine Spiegelung |
ShaderEffectSource.MirrorHorizontally | Die erzeugte Textur wird entlang der X-Achse gespiegelt. |
ShaderEffectSource.MirrorVertically | Die erzeugte Textur wird entlang der Y-Achse gespiegelt. |
textureSize : size |
Diese Eigenschaft enthält die gewünschte Pixelgröße der Textur. Wenn sie leer ist, was der Standard ist, wird die Größe des Quellrechtecks verwendet.
Hinweis: Dieser Wert ist in Pixeln angegeben, da er direkt die Größe eines Texturobjekts steuert.
Hinweis: Einige Plattformen haben eine Begrenzung für die Größe von Framebuffer-Objekten, was bedeutet, dass die tatsächliche Texturgröße größer sein kann als die angeforderte Größe.
wrapMode : enumeration |
Diese Eigenschaft definiert die mit der Textur verbundenen OpenGL-Wrap-Modi. Das Ändern dieser Eigenschaft ist am sinnvollsten, wenn das Objekt als Quelltextur einer ShaderEffect verwendet wird.
Der Standardwert ist ShaderEffectSource.ClampToEdge
.
Konstante | Beschreibung |
---|---|
ShaderEffectSource.ClampToEdge | GL_CLAMP_TO_EDGE sowohl horizontal als auch vertikal |
ShaderEffectSource.RepeatHorizontally | GL_REPEAT horizontal, GL_CLAMP_TO_EDGE vertikal |
ShaderEffectSource.RepeatVertically | GL_CLAMP_TO_EDGE horizontal, GL_REPEAT vertikal |
ShaderEffectSource.Repeat | GL_REPEAT sowohl horizontal als auch vertikal |
Hinweis: Einige OpenGL ES 2-Implementierungen unterstützen den Wrap-Modus GL_REPEAT nicht mit Texturen, die keine Power-of-Two-Texturen sind.
Dokumentation der Methode
scheduleUpdate() |
Plant eine Neudarstellung der Textur für das nächste Bild. Verwenden Sie dies, um die Textur zu aktualisieren, wenn live falsch ist.
© 2025 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.