ShaderEffectSource QML Type
Rendert ein Qt Quick Element in eine Textur um 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
- void scheduleUpdate()
Ausführliche Beschreibung
Der Typ „ShaderEffectSource“ rendert „ sourceItem “ in eine Textur und zeigt diese in der Szene an. „ sourceItem “ wird so in die Textur gezeichnet, als wäre es ein vollständig undurchsichtiges Root-Element. Somit kann „ sourceItem “ selbst unsichtbar sein, aber dennoch in der Textur erscheinen.
Sie können „ShaderEffectSource“ wie folgt verwenden:
- Texturquelle in einem „ ShaderEffect “. Dadurch können Sie benutzerdefinierte Shader-Effekte auf jedes beliebige Qt Quick Objekt anwenden.
- einen Cache für ein komplexes Element. Das komplexe Element kann einmalig in die Textur gerendert werden, die dann frei animiert werden kann, ohne dass das komplexe Element in jedem Frame erneut gerendert werden muss.
- eine Deckkraft-Ebene. Mit „ShaderEffectSource“ kannst du die Deckkraft auf Objekte als Gruppe anwenden, anstatt jedes Objekt einzeln zu bearbeiten.
| |
Der Typ „ShaderEffectSource“ leitet keine Maus- oder Tastatureingaben an „ sourceItem “ weiter. Wenn Sie die „ sourceItem “ ausblenden, indem Sie „ visible “ auf „false“ oder „ opacity “ auf Null setzen, reagiert sie nicht mehr auf Eingaben. In Fällen, in denen die „ShaderEffectSource“ die „ sourceItem “ ersetzen soll, möchten Sie in der Regel die „ sourceItem “ ausblenden, während Sie weiterhin Eingaben verarbeiten. Hierfür können Sie die Eigenschaft „ hideSource “ verwenden.
Sie können den „ ShaderEffectSource “ und den „ MultiEffect “ kombinieren:
- Um dasselbe Quellelement in mehreren Effekten zu verwenden und es unverändert zu belassen.
- Um einen Teil des Quellelements zu verwenden, nutzen Sie „ ShaderEffectSource.sourceRect “.
- Um die Auflösung des Quellelements zu verringern, beispielsweise zur Verbesserung der Leistung, mithilfe der Eigenschaft „ ShaderEffectSource.textureSize “.
Hinweis: Die „ShaderEffectSource“ ist auf die Unterstützung von FBO-Multisampling angewiesen, um Kanten zu glätten. Wenn die zugrunde liegende Hardware dies nicht unterstützt – was bei den meisten eingebetteten Grafikchips der Fall ist –, werden die innerhalb einer „ShaderEffectSource“ gerenderten Kanten nicht geglättet. 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 „smooth“). Dies entspricht einem 4-fachen Multisampling, geht jedoch zu Lasten der Leistung und führt zu einem höheren Speicherverbrauch.
Warnung: In den meisten Fällen führt die Verwendung einer „ShaderEffectSource“ zu einer Verringerung der Leistung, und in jedem Fall erhöht sich der Videospeicherverbrauch. Das Rendern über eine „ShaderEffectSource“ kann zudem zu einer geringeren Qualität führen, da einige OpenGL-Implementierungen zwar Multisampling für den Backbuffer, nicht jedoch für Framebuffer-Objekte unterstützen.
Dokumentation der Eigenschaften
format : enumeration
Diese Eigenschaft legt das Format der Hintergrundtextur fest. Eine Änderung dieser Eigenschaft ist vor allem dann sinnvoll, wenn das Element als Quelltextur für ein „ 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 dieselbe Wirkung wie „ RGBA8 “. |
ShaderEffectSource.RGB | Ab Qt 6.0 wird dieser Wert nicht mehr verwendet und hat in der Praxis dieselbe Wirkung wie „ RGBA8 “. |
ShaderEffectSource.RGBA | Ab Qt 6.0 wird dieser Wert nicht mehr verwendet und hat in der Praxis dieselbe Wirkung wie „ RGBA8 “. |
hideSource : bool
Ist diese Eigenschaft auf „true“ gesetzt, wird die „ sourceItem “ ausgeblendet, wird jedoch weiterhin in die Textur gerendert. Im Gegensatz zum Ausblenden der „ sourceItem “ durch Setzen von „ visible “ auf „false“ verhindert das Setzen dieser Eigenschaft auf „true“ nicht, dass Maus- oder Tastatureingaben an „ sourceItem “ weitergeleitet werden. Die Eigenschaft ist nützlich, wenn die „ ShaderEffectSource “ über der „ sourceItem “ verankert ist und diese ersetzen soll.
live : bool
Ist diese Eigenschaft auf „true“ gesetzt, wird die Textur aktualisiert, sobald „ sourceItem “ aktualisiert wird. Andernfalls bleibt es bei einem statischen Bild, selbst wenn „ sourceItem “ ein neues Element zugewiesen wird. Die Eigenschaft ist standardmäßig auf „true“ gesetzt.
mipmap : bool
Wenn diese Eigenschaft auf „true“ gesetzt ist, werden für die Textur Mipmaps generiert.
Hinweis: Einige OpenGL ES 2-Implementierungen unterstützen kein Mipmapping für Texturen, deren Größe keine Zweipotenz ist.
recursive : bool
Setzen Sie diese Eigenschaft auf „true“, wenn die „ ShaderEffectSource “ eine Abhängigkeit von sich selbst aufweist. „ShaderEffectSources“ bilden eine Abhängigkeitskette, in der eine „ ShaderEffectSource “ Teil der „ sourceItem “ einer anderen sein kann. Wenn in dieser Kette eine Schleife vorliegt, könnte ein „ ShaderEffectSource “ versuchen, in dieselbe Textur zu rendern, die er als Quelle verwendet, was von OpenGL nicht zugelassen wird. Wenn diese Eigenschaft auf „true“ gesetzt ist, wird eine zusätzliche Textur zugewiesen, sodass „ ShaderEffectSource “ eine Kopie der Textur aus dem vorherigen Frame behalten kann. So kann es in eine Textur rendern und dabei die Textur aus dem vorherigen Frame als Quelle verwenden.
Werden sowohl diese Eigenschaft als auch „ live “ auf „true“ gesetzt, wird der Szenenbaum kontinuierlich gerendert. Da der „ ShaderEffectSource “ von sich selbst abhängt, bedeutet eine Aktualisierung, dass er sofort wieder als „dirty“ markiert wird.
samples : int
Diese Eigenschaft ermöglicht die Anforderung einer Multisampling-Darstellung.
Standardmäßig ist Multisampling immer dann aktiviert, wenn es für das gesamte Fenster aktiviert ist, vorausgesetzt, der verwendete Szenengraph-Renderer und die zugrunde liegende Grafik-API unterstützen dies.
Durch Setzen des Werts auf 2, 4 usw. kann Multisampling-Rendering für einen Teil der Szene angefordert werden, ohne Multisampling für die gesamte Szene zu aktivieren. Auf diese Weise wird Multisampling nur auf einen bestimmten Teilbaum angewendet, was zu erheblichen Leistungssteigerungen führen kann, da Multisampling nicht auf andere Teile der Szene angewendet wird.
Hinweis: Die Aktivierung von Multisampling kann unabhängig von der Größe der Ebene potenziell ressourcenintensiv sein, da sie 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. Wenn dieser Wert auf „null“ gesetzt wird, während „ live “ auf „true“ gesetzt ist, werden die Texturressourcen freigegeben.
sourceRect : rect
Diese Eigenschaft legt fest, welcher rechteckige Bereich des „ sourceItem “ in die Textur gerendert werden soll. Das Quellrechteck kann größer sein als das „ sourceItem “ selbst. Ist das Rechteck null (Standardeinstellung), wird das gesamte „ sourceItem “ in die Textur gerendert.
textureMirroring : enumeration
Diese Eigenschaft legt fest, wie die generierte OpenGL-Textur gespiegelt werden soll. Der Standardwert ist „ ShaderEffectSource.MirrorVertically “. Eine benutzerdefinierte Spiegelung kann nützlich sein, wenn auf die generierte Textur direkt von benutzerdefinierten Shadern zugegriffen wird, wie beispielsweise den unter ShaderEffect angegebenen. Die Spiegelung hat keine Auswirkungen auf die Darstellung des Elements „ ShaderEffectSource “ in der Benutzeroberfläche.
| Konstante | Beschreibung |
|---|---|
ShaderEffectSource.NoMirroring | Keine Spiegelung |
ShaderEffectSource.MirrorHorizontally | Die generierte Textur wird entlang der X-Achse gespiegelt. |
ShaderEffectSource.MirrorVertically | Die generierte Textur wird entlang der Y-Achse gespiegelt. |
textureSize : size
Diese Eigenschaft enthält die angeforderte Pixelgröße der Textur. Ist sie leer (was der Standard ist), wird die Größe des Quellrechtecks verwendet.
Hinweis: Dieser Wert wird in Pixeln angegeben, da er direkt die Größe eines Texturobjekts bestimmt.
Hinweis: Aufeinigen Plattformen gibt es eine Untergrenze für die Größe von Framebuffer-Objekten, was bedeutet, dass die tatsächliche Texturgröße möglicherweise größer ist als die angeforderte Größe.
wrapMode : enumeration
Diese Eigenschaft definiert die mit der Textur verbundenen OpenGL-Wrap-Modi. Eine Änderung dieser Eigenschaft ist vor allem dann sinnvoll, wenn das Element als Quelltextur für ein „ 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 GL_REPEAT-Wrap-Modus nicht bei Texturen, deren Größe keine Zweierpotenz ist. |
Methodendokumentation
void scheduleUpdate()
Plant eine Neu-Rendering der Textur für das nächste Bild ein. Verwenden Sie diese Funktion, um die Textur zu aktualisieren, wenn „ live “ auf „false“ gesetzt ist.
© 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.
