Auf dieser Seite

ShaderImage QML Type

Bietet Shader-Programmen Zugriff auf „Image“. Mehr…

Import Statement: import Qt3D.Render 2.12
In C++: QShaderImage
Status: Deprecated

Dieser Typ ist veraltet. Wir raten dringend davon ab, ihn in neuem Code zu verwenden.

Eigenschaften

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 ShaderImage bereitgestellt werden. Texturen können aus mehreren Mip-Ebenen, Ebenen und Flächen bestehen. Durch die Deklaration eines ShaderImage lässt sich zusätzlich festlegen, auf welche Ebene, Ebene oder Fläche des Texturinhalts zugegriffen werden soll.

Damit ShaderImage ordnungsgemäß funktioniert, muss es als Wert eines Parameters zugewiesen werden und auf ein gültiges Qt3D.Render.AbstractTexture 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 „ShaderImage“ ist nur in OpenGL 4 und teilweise in OpenGL ES 3.1 und 3.2 vorhanden.

OpenGL 4 unterstützt die folgenden Bildtypen:

GLSL-TypOpenGL-Typ-EnumerationTexturtyp
image1DGL_IMAGE_1DTexture1D
image2DGL_IMAGE_2DTexture2D
Bild3DGL_IMAGE_3DTexture3D
image2DRectGL_IMAGE_2D_RECTTextureRectangle
imageCubeGL_IMAGE_CUBETextureCubeMap
imageBufferGL_IMAGE_BUFFERTextureBuffer
image1DArrayGL_IMAGE_1D_ARRAYTexture1DArray
image2DArrayGL_IMAGE_2D_ARRAYTexture2DArray
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
image2DMSGL_IMAGE_2D_MULTISAMPLETexture2DMultisample
image2DMSArrayGL_IMAGE_2D_MULTISAMPLE_ARRAYTexture2DMultisampleArray
iimage1DGL_INT_IMAGE_1DTexture1D
iimage2DGL_INT_IMAGE_2DTexture2D
iimage3DGL_INT_IMAGE_3DTexture3D
iimage2DRectGL_INT_IMAGE_2D_RECTTextureRectangle
iimageCubeGL_INT_IMAGE_CUBETextureCubeMap
iimageBufferGL_INT_IMAGE_BUFFERTextureBuffer
iimage1DArrayGL_INT_IMAGE_1D_ARRAYTexture1DArray
iimage2DArrayGL_INT_IMAGE_2D_ARRAYTexture2DArray
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
iimage2DMSGL_INT_IMAGE_2D_MULTISAMPLETexture2DMultisample
iimage2DMSArrayGL_INT_IMAGE_2D_MULTISAMPLE_ARRAYTexture2DMultisampleArray
uimage1DGL_UNSIGNED_INT_IMAGE_1DTexture1D
uimage2DGL_UNSIGNED_INT_IMAGE_2DTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DTexture3D
uimage2DRectGL_UNSIGNED_INT_IMAGE_2D_RECTTextureRectangle
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBETextureCubeMap
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERTextureBuffer
uimage1DArrayGL_UNSIGNED_INT_IMAGE_1D_ARRAYTexture1DArray
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYTexture2DArray
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
uimage2DMSGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLETexture2DMultisample
uimage2DMSArrayGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAYTexture2DMultisampleArray

OpenGL ES 3.1 unterstützt die folgenden Bildtypen:

GLSL-TypOpenGL-Typ-EnumerationTexturtyp
image2DGL_IMAGE_2DTexture2D
image3DGL_IMAGE_3DTexture3D
imageCubeGL_IMAGE_CUBETextureCubeMap
image2DArrayGL_IMAGE_2D_ARRAYTexture2DArray
iimage2DGL_INT_IMAGE_2DTexture2D
iimage3DGL_INT_IMAGE_3DTexture3D
iimageCubeGL_INT_IMAGE_CUBETextureCubeMap
iimage2DArrayGL_INT_IMAGE_2D_ARRAYTexture2DArray
uimage2DGL_UNSIGNED_INT_IMAGE_2DTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DTexture3D
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBETextureCubeMap
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYTexture2DArray

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

GLSL-TypOpenGL-Typ-EnumerationTexturtyp
imageBufferGL_IMAGE_BUFFERTextureBuffer
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
iimageBufferGL_IMAGE_BUFFERTextureBuffer
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERTextureBuffer
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray

Die erwartete Verwendung würde wie folgt aussehen:

import Qt3D.Render 2.14

Entity {
...
    Texture2D {
        id: tex2D
        ...
    }

    Material {
        parameters: Parameter {
            name: "imageUniformName"
            value: ShaderImage {
                texture: tex2D
            }
        }
        ...
    }
 ...
}

Dokumentation zu den Eigenschaften

access : enumeration

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.

KonstanteBeschreibung
ShaderImage.ReadOnlySchreibgeschützter Zugriff.
ShaderImage.WriteOnlyNur-Schreib-Zugriff.
ShaderImage.ReadWriteLese- und Schreibzugriff.

Der Standardwert ist „ ShaderImage.ReadWrite“.

format : enumeration

Legt das Bildformat fest, was von entscheidender Bedeutung ist, wenn Werte aus einem Shader im „ ShaderImage “ gespeichert werden.

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 ist „ ShaderImage.Automatic“.

layer : int

Legt fest, welche Ebene der referenzierten Textur für die „ ShaderImage “ 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.

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 – die gesamte Ebene für alle Ebenen gebunden. Wenn auf „false“ gesetzt, wird nur die durch die Eigenschaft „ layer “ angegebene einzelne Ebene gebunden.

Der Standardwert ist „ false “.

mipLevel : int

Legt fest, welches mipLevel der referenzierten Textur für die „ ShaderImage “ verwendet werden soll.

Der Standardwert ist 0.

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