QuadTextureProvider QML Type
Wird verwendet, um eine Quad-Textur mithilfe eines benutzerdefinierten Fragment-Shaders zu rendern. Mehr...
| Import Statement: | import QtQuick3D.Helpers |
| Since: | Qt 6.12 |
| Inherits: |
Eigenschaften
- 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)
Ausführliche Beschreibung
Dieser Typ wird verwendet, um Quad-Texturen mithilfe von benutzerdefiniertem Shader-Code zu rendern, was eine bequeme Möglichkeit bietet, programmierbare Texturen zu erhalten. Durch die Angabe eines Fragment-Shaders und der gewünschten Eigenschaften wird ein Pass erstellt und auf Basis der bereitgestellten Daten eine Shader-Pipeline aufgebaut, wobei die Eigenschaften als Uniform-Werte an den Fragment-Shader übergeben werden.
Voreingestellte Schlüsselwörter:
| Schlüsselwort | Typ | Beschreibung |
|---|---|---|
| MAIN | void MAIN() ist der Einstiegspunkt. Diese Funktion muss in dem bereitgestellten Fragment-Shader immer vorhanden sein. | |
| INPUT_UV | vec2 | UV-Koordinaten für das aktuelle Fragment. Oben rechts: [1, 1] und unten links: [0, 0]. |
| OUTPUT_SIZE | vec2 | Größe der Ausgabetextur. |
Benutzerdefinierte Eigenschaften werden auf Uniforms abgebildet. Sobald sich die Werte ändern, wird der aktualisierte Wert im Shader sichtbar. Dieses Konzept ist möglicherweise bereits aus ShaderEffect bekannt.
Der Name der QML-Eigenschaft und der GLSL-Variablen muss übereinstimmen. Es gibt keine separate Deklaration im Shader-Code für die einzelnen Uniforms. Stattdessen kann der Name der QML-Eigenschaft unverändert verwendet werden.
Die folgende Tabelle listet auf, wie die Typen zugeordnet werden:
| QML-Typ | Shader-Typ | Anmerkungen |
|---|---|---|
| real, int, bool | float, int, bool | |
| Farbe | vec4 | Die Konvertierung von sRGB in lineare Werte erfolgt implizit |
| vector2d | vec2 | |
| Vektor3d | vec3 | |
| vector4d | vec4 | |
| Matrix4x4 | mat4 | |
| Quaternion | vec4 | Der Skalarwert ist w |
| Rechteck | vec4 | |
| Punkt, Größe | vec2 | |
| TextureInput | sampler2D |
Ein Beispiel für die Ausgabe einer einfachen roten Textur könnte wie folgt aussehen:
Texture {
textureProvider: QuadTextureProvider {
width: 128
height: 128
fragmentShaderCode: `
void MAIN() {
FRAGCOLOR = vec4(1.0, 0.0, 0.0, 1.0);
}
`
}
}Ein weiteres Beispiel für das Abtasten einer „ Texture “-Eigenschaft und das Mischen mit UV-Farben:
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"
}
}
}Das Ergebnis sieht wie folgt aus:

Hinweis: Die Bereitstellung eines Vertex-Shaders wird nicht unterstützt, nur ein Fragment-Shader.
Hinweis: Wenn „ Texture “-Eigenschaften angegeben werden, erfolgt die Darstellung erst, wenn die abhängigen Texturen verfügbar sind.
Hinweis: Derzeitwird das Hinzufügen oder Entfernen von Eigenschaften zur Laufzeit nicht unterstützt;es können lediglich die ursprünglichen Eigenschaften geändert werden.
Siehe auch „ ShaderEffect “.
Dokumentation zu Eigenschaften
format : enumeration [default: TexureData.RGBA16F, since 6.12]
Diese Eigenschaft legt das Format der Ausgabetextur fest.
| Konstante | Beschreibung |
|---|---|
TexureData.RGBA8 | Das Farbformat wird als 8-Bit-Ganzzahl in den Kanälen R, G, B und Alpha betrachtet. |
TexureData.RGBA16F | Das Farbformat wird als 16-Bit-Float in den R-, G-, B- und Alpha-Kanälen betrachtet. |
TexureData.RGBA32F | Das Farbformat wird als 32-Bit-Float in den R-, G-, B- und Alpha-Kanälen betrachtet. |
TexureData.RGBE8 | Das Farbformat wird als 8-Bit-Mantisse in den R-, G- und B-Kanälen und als gemeinsamer 8-Bit-Exponent betrachtet. |
TexureData.R8 | Das Farbformat wird als 8-Bit-Ganzzahl im R-Kanal behandelt. |
TexureData.R16 | Das Farbformat wird im R-Kanal als 16-Bit-Ganzzahl betrachtet. |
TexureData.R16F | Das Farbformat wird als 16-Bit-Float im R-Kanal betrachtet. |
TexureData.R32F | Das Farbformat wird als 32-Bit-Float im R-Kanal behandelt. Hinweis: Mit Ausnahme von „ |
Diese Eigenschaft wurde in Qt 6.12 eingeführt.
fragmentShader : url [since 6.12]
Gibt die Datei mit dem Ausschnitt des benutzerdefinierten Fragment-Shader-Codes an.
Der Wert ist eine URL und muss entweder eine lokale Datei sein oder das qrc-Schema verwenden, um auf Dateien zuzugreifen, die über das Qt-Ressourcensystem eingebettet sind. Relative Dateipfade (ohne Schema) werden ebenfalls akzeptiert; in diesem Fall wird die Datei als relativ zur Komponente (der Datei „ .qml “) behandelt.
Warnung: Shader-Ausschnitte gelten als vertrauenswürdiger Inhalt. Anwendungsentwicklern wird empfohlen, die möglichen Auswirkungen sorgfältig abzuwägen, bevor sie das Laden von benutzerdefinierten Inhalten zulassen, die nicht Teil der Anwendung sind.
Hinweis: Wenn diese Eigenschaft gesetzt ist, hat „ fragmentShaderCode “ Vorrang vor „fragmentShader“.
Diese Eigenschaft wurde in Qt 6.12 eingeführt.
Siehe auch „ fragmentShaderCode “.
fragmentShaderCode : string [since 6.12]
Gibt einen Ausschnitt aus benutzerdefiniertem Fragment-Shader-Code an.
Wird verwendet, um Shader-Code als Zeichenfolge einzubinden, anstatt eine Datei anzugeben.
Hinweis: Wenn diese Eigenschaft gesetzt ist, hat sie Vorrang vor „ fragmentShader “.
Diese Eigenschaft wurde in Qt 6.12 eingeführt.
Siehe auch „ fragmentShader “.
height : int [default: 128, since 6.12]
Legt die Höhe der Ausgabetextur in Pixeln fest.
Diese Eigenschaft wurde in Qt 6.12 eingeführt.
Siehe auch width.
width : int [default: 128, since 6.12]
Legt die Breite der Ausgabetextur in Pixeln fest.
Diese Eigenschaft wurde in Qt 6.12 eingeführt.
Siehe auch 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.