Qt3DRender::QShaderImage Class
class Qt3DRender::QShaderImageBietet 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-Typ | OpenGL-Typ-Enumeration | Texturtyp |
|---|---|---|
| image1D | GL_IMAGE_1D | QTexture1D |
| image2D | GL_IMAGE_2D | QTexture2D |
| Bild3D | GL_IMAGE_3D | QTexture3D |
| image2DRect | GL_IMAGE_2D_RECT | QTextureRectangle |
| imageCube | GL_IMAGE_CUBE | QTextureCubeMap |
| imageBuffer | GL_IMAGE_BUFFER | QTextureBuffer |
| image1DArray | GL_IMAGE_1D_ARRAY | QTexture1DArray |
| image2DArray | GL_IMAGE_2D_ARRAY | QTexture2DArray |
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
| image2DMS | GL_IMAGE_2D_MULTISAMPLE | QTexture2DMultisample |
| image2DMSArray | GL_IMAGE_2D_MULTISAMPLE_ARRAY | QTexture2DMultisampleArray |
| iimage1D | GL_INT_IMAGE_1D | QTexture1D |
| iimage2D | GL_INT_IMAGE_2D | QTexture2D |
| iimage3D | GL_INT_IMAGE_3D | QTexture3D |
| iimage2DRect | GL_INT_IMAGE_2D_RECT | QTextureRectangle |
| iimageCube | GL_INT_IMAGE_CUBE | QTextureCubeMap |
| iimageBuffer | GL_INT_IMAGE_BUFFER | QTextureBuffer |
| iimage1DArray | GL_INT_IMAGE_1D_ARRAY | 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 | QTexture2DMultisampleArray |
OpenGL ES 3.1 unterstützt die folgenden Bildtypen:
| GLSL-Typ | OpenGL-Typ-Enumeration | Texturtyp |
|---|---|---|
| image2D | GL_IMAGE_2D | QTexture2D |
| image3D | GL_IMAGE_3D | QTexture3D |
| imageCube | GL_IMAGE_CUBE | QTextureCubeMap |
| image2DArray | GL_IMAGE_2D_ARRAY | QTexture2DArray |
| iimage2D | GL_INT_IMAGE_2D | QTexture2D |
| iimage3D | GL_INT_IMAGE_3D | QTexture3D |
| iimageCube | GL_INT_IMAGE_CUBE | QTextureCubeMap |
| iimage2DArray | GL_INT_IMAGE_2D_ARRAY | 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 Bildtypen von OpenGL ES 3.1 sowie die folgenden:
| GLSL-Typ | OpenGL-Typ-Enumeration | Texturtyp |
|---|---|---|
| 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);Dokumentation zu den Mitgliedstypen
enum QShaderImage::Access
| Konstante | Wert | Beschreibung |
|---|---|---|
Qt3DRender::QShaderImage::ReadOnly | 0 | Das Bild wird nur von Shadern gelesen |
Qt3DRender::QShaderImage::WriteOnly | 1 | Das Bild wird nur von Shadern beschrieben |
Qt3DRender::QShaderImage::ReadWrite | 2 | Das Bild wird nur von Shadern gelesen und in Shader geschrieben |
enum QShaderImage::ImageFormat
Diese Liste enthält alle möglichen Bildformate
| Konstante | Wert | Beschreibung |
|---|---|---|
Qt3DRender::QShaderImage::NoFormat | 0 | GL_NONE |
Qt3DRender::QShaderImage::Automatic | 1 | Qt 3D Es wird versucht, das Format automatisch anhand der referenzierten Textur zu ermitteln. |
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 ab 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 ab OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_UNorm | 0x822C | GL_RG16 (GLSL-Typ rg16, unterstützt ab 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 ab 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 ab OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_SNorm | 0x8F99 | GL_RG16_SNORM (GLSL-Typ rg16_snorm, unterstützt ab 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 ab OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8U | 0x8238 | GL_RG8UI (GLSL-Typ rg8ui, unterstützt ab 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 ab 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 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.