QShaderImage Class
class Qt3DRender::QShaderImageBietet Image-Zugriff auf Shader-Programme. Mehr...
Kopfzeile: | #include <QShaderImage> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake: | QT += 3drender |
In QML: | ShaderImage |
Vererbt: | Qt3DCore::QNode |
Status: | Veraltet |
Öffentliche Typen
enum | Access { ReadOnly, WriteOnly, ReadWrite } |
enum | ImageFormat { NoFormat, Automatic, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U } |
Eigenschaften
Öffentliche Funktionen
Qt3DRender::QShaderImage::Access | access() const |
Qt3DRender::QShaderImage::ImageFormat | format() const |
int | layer() const |
bool | layered() const |
int | mipLevel() const |
Qt3DRender::QAbstractTexture * | texture() const |
Öffentliche Slots
void | setAccess(Qt3DRender::QShaderImage::Access access) |
void | setFormat(Qt3DRender::QShaderImage::ImageFormat format) |
void | setLayer(int layer) |
void | setLayered(bool layered) |
void | setMipLevel(int mipLevel) |
void | setTexture(Qt3DRender::QAbstractTexture *texture) |
Signale
void | accessChanged(Qt3DRender::QShaderImage::Access access) |
void | formatChanged(Qt3DRender::QShaderImage::ImageFormat format) |
void | layerChanged(int layer) |
void | layeredChanged(bool layered) |
void | mipLevelChanged(int mipLevel) |
void | textureChanged(Qt3DRender::QAbstractTexture *texture) |
Detaillierte Beschreibung
Um den Inhalt von Texturen für Lese- und Schreiboperationen in einem Shader verfügbar zu machen, müssen sie als QShaderImage dargestellt werden. Texturen können aus mehreren Mip-Ebenen, Layern und Faces zusammengesetzt sein. Durch die Deklaration eines QShaderImage kann zusätzlich angegeben werden, auf welche Ebene, Schicht oder Fläche des Texturinhalts zugegriffen werden soll.
QShaderImage muss als Wert QParameter zugewiesen werden und eine gültige Qt3DRender::QAbstractTexture referenzieren, um korrekt zu funktionieren.
Handelt es sich bei der referenzierten Textur um eine eindimensionale Array-, zweidimensionale Array-, dreidimensionale, Cube-Map-, Cube-Map-Array- oder zweidimensionale Multisample-Array-Textur, ist es möglich, entweder die gesamte Texturebene oder eine einzelne Ebene oder Fläche der Texturebene zu binden. Dies kann mit der Eigenschaft layered gesteuert werden.
Unterstützung für QShaderImage wird nur von OpenGL 4 und teilweise von OpenGL ES 3.1 und 3.2 unterstützt.
OpenGL 4 unterstützt die folgenden Bildtypen:
GLSL-Typ | OpenGL-Typ Enum | Textur-Typ |
---|---|---|
Bild1D | GL_IMAGE_1D | QTexture1D |
Bild2D | GL_IMAGE_2D | QTexture2D |
Bild3D | GL_BILD_3D | QTexture3D |
image2DRect | GL_ABBILDUNG_2D_RECT | QTextureRectangle |
bildWürfel | GL_IMAGE_CUBE | QTextureCubeMap |
bildPuffer | GL_IMAGE_BUFFER | QTextureBuffer |
image1DArray | GL_IMAGE_1D_ARRAY | QTexture1DArray |
image2DArray | GL_IMAGE_2D_ARRAY | QTexture2DArray |
imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
bild2DMS | GL_IMAGE_2D_MULTISAMPLE | QTexture2DMultisample |
image2DMSArray | GL_IMAGE_2D_MULTISAMPLE_ARRAY | QTexture2DMultisampleArray |
iimage1D | GL_INT_BILD_1D | QTexture1D |
iimage2D | GL_INT_BILD_2D | QTexture2D |
iimage3D | GL_INT_BILD_3D | QTexture3D |
iimage2DRect | GL_INT_ABBILDUNG_2D_RECHTECK | QTextureRectangle |
iimageCube | GL_INT_BILD_WÜRFEL | QTextureCubeMap |
iimageBuffer | GL_INT_IMAGE_BUFFER | QTextureBuffer |
iimage1DArray | GL_INT_BILD_1D_ANORDNUNG | QTexture1DArray |
iimage2DArray | GL_INT_IMAGE_2D_ARRAY | QTexture2DArray |
iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
iimage2DMS | GL_INT_IMAGE_2D_MULTISAMPLE | QTexture2DMultisample |
iimage2DMSArray | GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY | QTexture2DMultisampleArray |
uimage1D | GL_UNSIGNED_INT_IMAGE_1D | QTexture1D |
uimage2D | GL_UNSIGNED_INT_IMAGE_2D | QTexture2D |
uimage3D | GL_UNSIGNED_INT_IMAGE_3D | QTexture3D |
uimage2DRect | GL_UNSIGNED_INT_IMAGE_2D_RECT | QTextureRectangle |
uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | QTextureCubeMap |
uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | QTextureBuffer |
uimage1DArray | GL_UNSIGNED_INT_IMAGE_1D_ARRAY | QTexture1DArray |
uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | QTexture2DArray |
uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
uimage2DMS | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE | QTexture2DMultisample |
uimage2DMSArray | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY (UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY) | QTexture2DMultisampleArray |
OpenGL ES 3.1 unterstützt die folgenden Bildtypen:
GLSL-Typ | OpenGL-Typ Enum | Textur-Typ |
---|---|---|
Bild2D | GL_IMAGE_2D | QTexture2D |
image3D | GL_IMAGE_3D | QTexture3D |
bildWürfel | GL_IMAGE_CUBE | QTextureCubeMap |
image2DArray | GL_IMAGE_2D_ARRAY | QTexture2DArray |
iBild2D | GL_INT_BILD_2D | QTexture2D |
iimage3D | GL_INT_ABBILDUNG_3D | QTexture3D |
iimageCube | GL_INT_IMAGE_CUBE | QTextureCubeMap |
iimage2DArray | GL_INT_BILD_2D_ANORDNUNG | QTexture2DArray |
uimage2D | GL_UNSIGNED_INT_IMAGE_2D | QTexture2D |
uimage3D | GL_UNSIGNED_INT_IMAGE_3D | QTexture3D |
uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | QTextureCubeMap |
uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | QTexture2DArray |
OpenGL ES 3.2 unterstützt alle OpenGL ES 3.1 Bildtypen sowie die folgenden:
GLSL-Typ | OpenGL-Typ Enum | Textur-Typ |
---|---|---|
imageBuffer | GL_IMAGE_BUFFER | QTextureBuffer |
imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
iimageBuffer | GL_IMAGE_BUFFER | QTextureBuffer |
iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | QTextureBuffer |
uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
Die erwartete Verwendung würde wie folgt aussehen:
Qt3DRender::QTexture2D *tex2D = new Qt3DRender::QTexture2D(); ... Qt3DRender::QMaterial *material = new Qt3DRender::QMaterial(); ... Qt3DRender::QParameter *imageParameter = new Qt3DRender::QParameter(); Qt3DRender::QShaderImage *shaderImage = new Qt3DRender::QShaderImage(); shaderImage->setTexture(tex2D); imageParameter->setName("imageUniformName"); imageParameter->setValue(QVariant::fromValue(shaderImage)); material->addParameter(imageParamenter);
Member Type Dokumentation
enum QShaderImage::Access
Konstante | Wert | Beschreibung |
---|---|---|
Qt3DRender::QShaderImage::ReadOnly | 0 | Bild wird nur von in Shadern gelesen |
Qt3DRender::QShaderImage::WriteOnly | 1 | Bild wird nur von Shadern in Shader geschrieben |
Qt3DRender::QShaderImage::ReadWrite | 2 | Bild wird nur aus Shadern gelesen und in Shadern geschrieben |
enum QShaderImage::ImageFormat
Diese Liste beschreibt alle möglichen Bildformate
Konstante | Wert | Beschreibung |
---|---|---|
Qt3DRender::QShaderImage::NoFormat | 0 | GL_NONE |
Qt3DRender::QShaderImage::Automatic | 1 | Qt 3D versucht, das Format automatisch anhand der referenzierten Textur zu bestimmen. |
Qt3DRender::QShaderImage::R8_UNorm | 0x8229 | GL_R8 (GLSL Typ r8, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_UNorm | 0x822B | GL_RG8 (GLSL-Typ rg8, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_UNorm | 0x8058 | GL_RGBA8 (GLSL-Typ rgba8, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_UNorm | 0x822A | GL_R16 (GLSL-Typ r16, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_UNorm | 0x822C | GL_RG16 (GLSL-Typ rg16, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_UNorm | 0x805B | GL_RGBA16 (GLSL-Typ rgba16, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8_SNorm | 0x8F94 | GL_R8_SNORM (GLSL-Typ r8_snorm, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_SNorm | 0x8F95 | GL_RG8_SNORM (GLSL-Typ rg8_snorm, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_SNorm | 0x8F97 | GL_RGBA8_SNORM (GLSL-Typ rgba8_snorm, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_SNorm | 0x8F98 | GL_R16_SNORM (GLSL-Typ r16_snorm, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_SNorm | 0x8F99 | GL_RG16_SNORM (GLSL-Typ rg16_snorm, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_SNorm | 0x8F9B | GL_RGBA16_SNORM (GLSL-Typ rgba16_snorm, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8U | 0x8232 | GL_R8UI (GLSL-Typ r8ui, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8U | 0x8238 | GL_RG8UI (GLSL-Typ rg8ui, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8U | 0x8D7C | GL_RGBA8UI (GLSL-Typ rgba8ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16U | 0x8234 | GL_R16UI (GLSL-Typ r16ui, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16U | 0x823A | GL_RG16UI (GLSL-Typ rg16ui, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16U | 0x8D76 | GL_RGBA16UI (GLSL-Typ rgba16ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32U | 0x8236 | GL_R32UI (GLSL-Typ r32ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::RG32U | 0x823C | GL_RG32UI (GLSL-Typ rg32ui, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32U | 0x8D70 | GL_RGBA32UI (GLSL-Typ rgba32ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R8I | 0x8231 | GL_R8I (GLSL-Typ r8i, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8I | 0x8237 | GL_RG8I (GLSL-Typ rg8i, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8I | 0x8D8E | GL_RGBA8I (GLSL-Typ rgba8i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16I | 0x8233 | GL_R16I (GLSL-Typ r16i, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16I | 0x8239 | GL_RG16I (GLSL-Typ rg16i, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16I | 0x8D88 | GL_RGBA16I (GLSL-Typ rgba16i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::R32I | 0x8235 | GL_R32I (GLSL-Typ r32i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32I | 0x823B | GL_RG32I (GLSL-Typ rg32i, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32I | 0x8D82 | GL_RGBA32I (GLSL-Typ rgba32i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16F | 0x822D | GL_R16F (GLSL-Typ r16f, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16F | 0x822F | GL_RG16F (GLSL-Typ rg16f, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16F | 0x881A | GL_RGBA16F (GLSL-Typ rgba16f, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32F | 0x822E | GL_R32F (GLSL-Typ r32f, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32F | 0x8230 | GL_RG32F (GLSL-Typ rg32f, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32F | 0x8814 | GL_RGBA32F (GLSL-Typ rgba32f, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG11B10F | 0x8C3A | GL_R11F_G11F_B10F (GLSL-Typ r11f_g11f_b10f, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2 | 0x8059 | GL_RGB10_A2 (GLSL-Typ rgb10_a2, unterstützt von OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2U | 0x906F | GL_RGB10_A2UI (GLSL-Typ rgb10_a2ui, unterstützt von OpenGL 4.2+) |
Dokumentation der Eigenschaften
access : Access
Gibt die Art des Zugriffs an, den wir von unseren Shader-Instanzen auf das Bild erlauben wollen. Wenn ein Shader versucht, von einem Bild zu schreiben oder zu lesen, das einen inkompatiblen Zugriff hat, ist das Verhalten undefiniert.
Der Standardwert ist QShaderImage::ReadWrite.
Zugriffsfunktionen:
Qt3DRender::QShaderImage::Access | access() const |
void | setAccess(Qt3DRender::QShaderImage::Access access) |
Benachrichtigungssignal:
void | accessChanged(Qt3DRender::QShaderImage::Access access) |
format : ImageFormat
Legt das Bildformat fest, das beim Speichern von Werten im Bild aus einem Shader von wesentlicher Bedeutung ist.
Das Format muss nicht dasselbe sein wie das Format der referenzierten Textur. Es muss jedoch kompatibel sein (übereinstimmend in der Größe, aber nicht unbedingt im Klassentyp). Zum Beispiel könnte eine Textur des Formats R32F (Größe 32bits, Klasse 1x32) mit einem Bild des Formats RGBA8I (Größe 32bits, Klasse 4x8) verwendet werden. Tabelle 8.27 der OpenGL Spezifikationen zeigt die Größe und Klasse für alle unterstützten Bildformate.
Standardmäßig versucht Qt3D, das Bildformat so einzustellen, dass es dem der referenzierten Textur entspricht.
Der Standardwert ist QShaderImage::Automatic.
Zugriffsfunktionen:
Qt3DRender::QShaderImage::ImageFormat | format() const |
void | setFormat(Qt3DRender::QShaderImage::ImageFormat format) |
Notifier Signal:
void | formatChanged(Qt3DRender::QShaderImage::ImageFormat format) |
layer : int
Hält fest, welche Ebene der referenzierten Textur für die QShaderImage verwendet werden soll. Diese Eigenschaft ist wirkungslos, wenn layered auf true gesetzt ist oder wenn der Typ der referenzierten Textur nicht mit Ebenen kompatibel ist.
Hinweis: Wenn die referenzierte Textur vom Typ Cube-Map oder Cube-Map-Array ist und ĺayered auf false gesetzt ist, werden die Fläche und der Layer auf die folgende Weise abgerufen:
cubeMapLayer = layer / 6 cubeMapFace = layer - (cubeMapLayer * 6)
Der Standardwert ist 0.
Zugriffsfunktionen:
int | layer() const |
void | setLayer(int layer) |
Benachrichtigungssignal:
void | layerChanged(int layer) |
layered : bool
*
Wenn die referenzierte Textur eine eindimensionale Array-, zweidimensionale Array-, dreidimensionale, Cube-Map-, Cube-Map-Array- oder zweidimensionale Multisample-Array-Textur ist, wird die gesamte Ebene für alle Ebenen gebunden, wenn sie auf true gesetzt ist. Wird der Wert auf false gesetzt, wird nur die einzelne Ebene, die durch die Eigenschaft layer angegeben ist, gebunden.
Der Standardwert ist false
.
Zugriffsfunktionen:
bool | layered() const |
void | setLayered(bool layered) |
Benachrichtigungssignal:
void | layeredChanged(bool layered) |
mipLevel : int
Hält fest, welcher mipLevel aus der referenzierten Textur für die QShaderImage verwendet werden soll.
Der Standardwert ist 0.
Zugriffsfunktionen:
int | mipLevel() const |
void | setMipLevel(int mipLevel) |
Notifier-Signal:
void | mipLevelChanged(int mipLevel) |
© 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.