QShaderImage Class

class Qt3DRender::QShaderImage

Bietet 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-TypOpenGL-Typ EnumTextur-Typ
Bild1DGL_IMAGE_1DQTexture1D
Bild2DGL_IMAGE_2DQTexture2D
Bild3DGL_BILD_3DQTexture3D
image2DRectGL_ABBILDUNG_2D_RECTQTextureRectangle
bildWürfelGL_IMAGE_CUBEQTextureCubeMap
bildPufferGL_IMAGE_BUFFERQTextureBuffer
image1DArrayGL_IMAGE_1D_ARRAYQTexture1DArray
image2DArrayGL_IMAGE_2D_ARRAYQTexture2DArray
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
bild2DMSGL_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
image2DMSArrayGL_IMAGE_2D_MULTISAMPLE_ARRAYQTexture2DMultisampleArray
iimage1DGL_INT_BILD_1DQTexture1D
iimage2DGL_INT_BILD_2DQTexture2D
iimage3DGL_INT_BILD_3DQTexture3D
iimage2DRectGL_INT_ABBILDUNG_2D_RECHTECKQTextureRectangle
iimageCubeGL_INT_BILD_WÜRFELQTextureCubeMap
iimageBufferGL_INT_IMAGE_BUFFERQTextureBuffer
iimage1DArrayGL_INT_BILD_1D_ANORDNUNGQTexture1DArray
iimage2DArrayGL_INT_IMAGE_2D_ARRAYQTexture2DArray
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
iimage2DMSGL_INT_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
iimage2DMSArrayGL_INT_IMAGE_2D_MULTISAMPLE_ARRAYQTexture2DMultisampleArray
uimage1DGL_UNSIGNED_INT_IMAGE_1DQTexture1D
uimage2DGL_UNSIGNED_INT_IMAGE_2DQTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DQTexture3D
uimage2DRectGL_UNSIGNED_INT_IMAGE_2D_RECTQTextureRectangle
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBEQTextureCubeMap
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERQTextureBuffer
uimage1DArrayGL_UNSIGNED_INT_IMAGE_1D_ARRAYQTexture1DArray
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYQTexture2DArray
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
uimage2DMSGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
uimage2DMSArrayGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY (UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY)QTexture2DMultisampleArray

OpenGL ES 3.1 unterstützt die folgenden Bildtypen:

GLSL-TypOpenGL-Typ EnumTextur-Typ
Bild2DGL_IMAGE_2DQTexture2D
image3DGL_IMAGE_3DQTexture3D
bildWürfelGL_IMAGE_CUBEQTextureCubeMap
image2DArrayGL_IMAGE_2D_ARRAYQTexture2DArray
iBild2DGL_INT_BILD_2DQTexture2D
iimage3DGL_INT_ABBILDUNG_3DQTexture3D
iimageCubeGL_INT_IMAGE_CUBEQTextureCubeMap
iimage2DArrayGL_INT_BILD_2D_ANORDNUNGQTexture2DArray
uimage2DGL_UNSIGNED_INT_IMAGE_2DQTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DQTexture3D
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBEQTextureCubeMap
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYQTexture2DArray

OpenGL ES 3.2 unterstützt alle OpenGL ES 3.1 Bildtypen sowie die folgenden:

GLSL-TypOpenGL-Typ EnumTextur-Typ
imageBufferGL_IMAGE_BUFFERQTextureBuffer
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
iimageBufferGL_IMAGE_BUFFERQTextureBuffer
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERQTextureBuffer
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray

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

KonstanteWertBeschreibung
Qt3DRender::QShaderImage::ReadOnly0Bild wird nur von in Shadern gelesen
Qt3DRender::QShaderImage::WriteOnly1Bild wird nur von Shadern in Shader geschrieben
Qt3DRender::QShaderImage::ReadWrite2Bild wird nur aus Shadern gelesen und in Shadern geschrieben

enum QShaderImage::ImageFormat

Diese Liste beschreibt alle möglichen Bildformate

KonstanteWertBeschreibung
Qt3DRender::QShaderImage::NoFormat0GL_NONE
Qt3DRender::QShaderImage::Automatic1Qt 3D versucht, das Format automatisch anhand der referenzierten Textur zu bestimmen.
Qt3DRender::QShaderImage::R8_UNorm0x8229GL_R8 (GLSL Typ r8, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_UNorm0x822BGL_RG8 (GLSL-Typ rg8, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_UNorm0x8058GL_RGBA8 (GLSL-Typ rgba8, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_UNorm0x822AGL_R16 (GLSL-Typ r16, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_UNorm0x822CGL_RG16 (GLSL-Typ rg16, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_UNorm0x805BGL_RGBA16 (GLSL-Typ rgba16, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::R8_SNorm0x8F94GL_R8_SNORM (GLSL-Typ r8_snorm, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_SNorm0x8F95GL_RG8_SNORM (GLSL-Typ rg8_snorm, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_SNorm0x8F97GL_RGBA8_SNORM (GLSL-Typ rgba8_snorm, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_SNorm0x8F98GL_R16_SNORM (GLSL-Typ r16_snorm, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_SNorm0x8F99GL_RG16_SNORM (GLSL-Typ rg16_snorm, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_SNorm0x8F9BGL_RGBA16_SNORM (GLSL-Typ rgba16_snorm, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::R8U0x8232GL_R8UI (GLSL-Typ r8ui, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8U0x8238GL_RG8UI (GLSL-Typ rg8ui, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8U0x8D7CGL_RGBA8UI (GLSL-Typ rgba8ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16U0x8234GL_R16UI (GLSL-Typ r16ui, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16U0x823AGL_RG16UI (GLSL-Typ rg16ui, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16U0x8D76GL_RGBA16UI (GLSL-Typ rgba16ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32U0x8236GL_R32UI (GLSL-Typ r32ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1)
Qt3DRender::QShaderImage::RG32U0x823CGL_RG32UI (GLSL-Typ rg32ui, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32U0x8D70GL_RGBA32UI (GLSL-Typ rgba32ui, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R8I0x8231GL_R8I (GLSL-Typ r8i, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8I0x8237GL_RG8I (GLSL-Typ rg8i, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8I0x8D8EGL_RGBA8I (GLSL-Typ rgba8i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16I0x8233GL_R16I (GLSL-Typ r16i, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16I0x8239GL_RG16I (GLSL-Typ rg16i, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16I0x8D88GL_RGBA16I (GLSL-Typ rgba16i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1)
Qt3DRender::QShaderImage::R32I0x8235GL_R32I (GLSL-Typ r32i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32I0x823BGL_RG32I (GLSL-Typ rg32i, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32I0x8D82GL_RGBA32I (GLSL-Typ rgba32i, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16F0x822DGL_R16F (GLSL-Typ r16f, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16F0x822FGL_RG16F (GLSL-Typ rg16f, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16F0x881AGL_RGBA16F (GLSL-Typ rgba16f, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32F0x822EGL_R32F (GLSL-Typ r32f, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32F0x8230GL_RG32F (GLSL-Typ rg32f, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32F0x8814GL_RGBA32F (GLSL-Typ rgba32f, unterstützt von OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG11B10F0x8C3AGL_R11F_G11F_B10F (GLSL-Typ r11f_g11f_b10f, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGB10A20x8059GL_RGB10_A2 (GLSL-Typ rgb10_a2, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RGB10A2U0x906FGL_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.