Auf dieser Seite

Qt3DRender::QShaderImage Class

class Qt3DRender::QShaderImage

Bietet Shader-Programmen Zugriff auf Bilddaten. Mehr...

Kopfzeile: #include <qshaderimage.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake: QT += 3drender
In QML: ShaderImage
Erbt von: Qt3DCore::QNode
Status: Veraltet

Diese Klasse ist veraltet. Wir raten dringend davon ab, sie in neuem Code zu verwenden.

Ö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)

Ausführliche Beschreibung

Um den Inhalt von Texturen für Lese- und Schreibvorgänge in einem Shader verfügbar zu machen, müssen sie als `QShaderImage` bereitgestellt werden. Texturen können aus mehreren Mip-Ebenen, Ebenen und Flächen bestehen. Durch die Deklaration eines `QShaderImage` lässt sich zudem festlegen, auf welche Ebene, Ebene oder Fläche des Texturinhaltes zugegriffen werden soll.

Damit QShaderImage ordnungsgemäß funktioniert, muss es als Wert eines „ QParameter “ zugewiesen werden und auf ein gültiges „ Qt3DRender::QAbstractTexture “ verweisen.

Handelt es sich bei der referenzierten Textur um ein eindimensionales Array, ein zweidimensionales Array, eine dreidimensionale Textur, eine Cube-Map, ein Cube-Map-Array oder eine zweidimensionale Multisample-Array-Textur, ist es möglich, entweder die gesamte Texturstufe oder eine einzelne Ebene bzw. Fläche der Texturstufe zu binden. Dies lässt sich über die Eigenschaft „ layered “ steuern.

Die Unterstützung für QShaderImage ist nur in OpenGL 4 und teilweise in OpenGL ES 3.1 und 3.2 verfügbar.

OpenGL 4 unterstützt die folgenden Bildtypen:

GLSL-TypOpenGL-Typ-EnumerationTexturtyp
image1DGL_IMAGE_1DQTexture1D
image2DGL_IMAGE_2DQTexture2D
Bild3DGL_IMAGE_3DQTexture3D
image2DRectGL_IMAGE_2D_RECTQTextureRectangle
imageCubeGL_IMAGE_CUBEQTextureCubeMap
imageBufferGL_IMAGE_BUFFERQTextureBuffer
image1DArrayGL_IMAGE_1D_ARRAYQTexture1DArray
image2DArrayGL_IMAGE_2D_ARRAYQTexture2DArray
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
image2DMSGL_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
image2DMSArrayGL_IMAGE_2D_MULTISAMPLE_ARRAYQTexture2DMultisampleArray
iimage1DGL_INT_IMAGE_1DQTexture1D
iimage2DGL_INT_IMAGE_2DQTexture2D
iimage3DGL_INT_IMAGE_3DQTexture3D
iimage2DRectGL_INT_IMAGE_2D_RECTQTextureRectangle
iimageCubeGL_INT_IMAGE_CUBEQTextureCubeMap
iimageBufferGL_INT_IMAGE_BUFFERQTextureBuffer
iimage1DArrayGL_INT_IMAGE_1D_ARRAYQTexture1DArray
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_ARRAYQTexture2DMultisampleArray

OpenGL ES 3.1 unterstützt die folgenden Bildtypen:

GLSL-TypOpenGL-Typ-EnumerationTexturtyp
image2DGL_IMAGE_2DQTexture2D
image3DGL_IMAGE_3DQTexture3D
imageCubeGL_IMAGE_CUBEQTextureCubeMap
image2DArrayGL_IMAGE_2D_ARRAYQTexture2DArray
iimage2DGL_INT_IMAGE_2DQTexture2D
iimage3DGL_INT_IMAGE_3DQTexture3D
iimageCubeGL_INT_IMAGE_CUBEQTextureCubeMap
iimage2DArrayGL_INT_IMAGE_2D_ARRAYQTexture2DArray
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 Bildtypen von OpenGL ES 3.1 sowie die folgenden:

GLSL-TypOpenGL-Typ-EnumerationTexturtyp
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);

Dokumentation zu den Mitgliedstypen

enum QShaderImage::Access

KonstanteWertBeschreibung
Qt3DRender::QShaderImage::ReadOnly0Das Bild wird nur von Shadern gelesen
Qt3DRender::QShaderImage::WriteOnly1Das Bild wird nur von Shadern beschrieben
Qt3DRender::QShaderImage::ReadWrite2Das Bild wird nur von Shadern gelesen und in Shader geschrieben

enum QShaderImage::ImageFormat

Diese Liste enthält alle möglichen Bildformate

KonstanteWertBeschreibung
Qt3DRender::QShaderImage::NoFormat0GL_NONE
Qt3DRender::QShaderImage::Automatic1Qt 3D Es wird versucht, das Format automatisch anhand der referenzierten Textur zu ermitteln.
Qt3DRender::QShaderImage::R8_UNorm0x8229GL_R8 (GLSL-Typ r8, unterstützt von OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_UNorm0x822BGL_RG8 (GLSL-Typ rg8, unterstützt ab 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 ab OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_UNorm0x822CGL_RG16 (GLSL-Typ rg16, unterstützt ab 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 ab 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 ab OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_SNorm0x8F99GL_RG16_SNORM (GLSL-Typ rg16_snorm, unterstützt ab 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 ab OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8U0x8238GL_RG8UI (GLSL-Typ rg8ui, unterstützt ab 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 ab 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 zu den Eigenschaften

access : Access

Legt fest, welche Art von Zugriff wir unseren Shader-Instanzen auf das Bild gewähren möchten. Wenn ein Shader versucht, in ein Bild zu schreiben oder daraus zu lesen, dessen Zugriffsrechte nicht kompatibel sind, ist das Verhalten undefiniert.

Der Standardwert lautet „ QShaderImage::ReadWrite “.

Zugriffsfunktionen:

Qt3DRender::QShaderImage::Access access() const
void setAccess(Qt3DRender::QShaderImage::Access access)

Notifier-Signal:

void accessChanged(Qt3DRender::QShaderImage::Access access)

format : ImageFormat

Legt das Bildformat fest, was bei der Speicherung von Werten im Bild durch einen Shader von entscheidender Bedeutung ist.

Das Format muss nicht mit dem Format der referenzierten Textur übereinstimmen. Es muss jedoch kompatibel sein (in der Größe übereinstimmen, aber nicht unbedingt hinsichtlich des Klassentyps). Beispielsweise könnte eine Textur im Format R32F (Größe 32 Bit, Klasse 1x32) mit einem Bild im Format RGBA8I (Größe 32 Bit, 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 mit dem der referenzierten Textur übereinstimmt.

Der Standardwert lautet „ QShaderImage::Automatic “.

Zugriffsfunktionen:

Qt3DRender::QShaderImage::ImageFormat format() const
void setFormat(Qt3DRender::QShaderImage::ImageFormat format)

Notifier-Signal:

void formatChanged(Qt3DRender::QShaderImage::ImageFormat format)

layer : int

Legt fest, welche Ebene der referenzierten Textur für die „ QShaderImage “ verwendet werden soll. Diese Eigenschaft hat keine Auswirkung, 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 die Ebene wie folgt abgerufen:

cubeMapLayer = layer / 6
cubeMapFace = layer - (cubeMapLayer * 6)

Der Standardwert ist 0.

Zugriffsfunktionen:

int layer() const
void setLayer(int layer)

Notifier-Signal:

void layerChanged(int layer)

layered : bool

*

Wenn auf „true“ gesetzt, wird – sofern es sich bei der referenzierten Textur um ein eindimensionales Array, ein zweidimensionales Array, eine dreidimensionale Textur, eine Cube-Map, ein Cube-Map-Array oder eine zweidimensionale Multisample-Array-Textur handelt – das gesamte Level für alle Ebenen gebunden. Wenn auf „false“ gesetzt, wird nur die durch die Eigenschaft „ layer “ angegebene einzelne Ebene gebunden.

Der Standardwert ist „ false “.

Zugriffsfunktionen:

bool layered() const
void setLayered(bool layered)

Notifier-Signal:

void layeredChanged(bool layered)

mipLevel : int

Legt fest, welches mipLevel 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)

texture : Qt3DRender::QAbstractTexture*

Enthält das Bild der Textur, die vom Shader verwendet werden soll.

Zugriffsfunktionen:

Qt3DRender::QAbstractTexture *texture() const
void setTexture(Qt3DRender::QAbstractTexture *texture)

Notifier-Signal:

void textureChanged(Qt3DRender::QAbstractTexture *texture)

© 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.