Sur cette page

Qt3DRender::QShaderImage Class

class Qt3DRender::QShaderImage

Fournit un accès par image aux programmes de nuanceurs. Plus d'informations...

En-tête : #include <QShaderImage>
CMake : find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake : QT += 3drender
En QML : ShaderImage
Hérite : Qt3DCore::QNode
Statut : Déclassé

Types publics

enum Access { ReadOnly, WriteOnly, ReadWrite }
enum ImageFormat { NoFormat, Automatic, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U }

Propriétés

Fonctions publiques

Qt3DRender::QShaderImage::Access access() const
Qt3DRender::QShaderImage::ImageFormat format() const
int layer() const
bool layered() const
int mipLevel() const
Qt3DRender::QAbstractTexture *texture() const

Emplacements publics

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)

Signaux

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)

Description détaillée

Pour que le contenu des textures soit disponible pour les opérations de lecture et d'écriture dans un shader, elles doivent être exposées en tant que QShaderImage. Les textures peuvent être composées de plusieurs niveaux de mip, de couches et de faces. En outre, la déclaration d'une QShaderImage permet de spécifier le niveau, la couche ou la face du contenu de la texture auquel nous voulons accéder.

QShaderImage doit être assigné en tant que valeur de QParameter et faire référence à une Qt3DRender::QAbstractTexture valide pour fonctionner correctement.

Si la texture référencée est un tableau unidimensionnel, un tableau bidimensionnel, un tableau tridimensionnel, une carte cubique, un tableau de cartes cubiques ou un tableau bidimensionnel à échantillons multiples, il est possible de lier soit l'ensemble du niveau de texture, soit une seule couche ou une seule face du niveau de texture. Ceci peut être contrôlé à l'aide de la propriété layered.

La prise en charge de QShaderImage n'est possible qu'avec OpenGL 4 et partiellement avec OpenGL ES 3.1 et 3.2.

OpenGL 4 supporte les types d'images suivants :

Type GLSLType OpenGL EnumType de texture
image1DGL_IMAGE_1DQTexture1D
image2DGL_IMAGE_2DQTexture2D
image3DGL_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 supporte les types d'images suivants :

Type GLSLType OpenGL EnumType de texture
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 supporte tous les types d'images OpenGL ES 3.1 ainsi que les suivants :

Type GLSLType OpenGL EnumType de texture
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

L'utilisation prévue ressemblerait à ce qui suit :

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

Membre Type Documentation

enum QShaderImage::Access

ConstanteValeurDescription de l'image
Qt3DRender::QShaderImage::ReadOnly0L'image ne sera lue qu'à partir des nuanceurs.
Qt3DRender::QShaderImage::WriteOnly1L'image ne sera écrite que dans les nuanceurs
Qt3DRender::QShaderImage::ReadWrite2L'image ne sera lue et écrite que dans les shaders

enum QShaderImage::ImageFormat

Cette liste décrit tous les formats d'image possibles

ConstanteValeurDescription de la constante
Qt3DRender::QShaderImage::NoFormat0GL_NONE
Qt3DRender::QShaderImage::Automatic1Qt 3D essaiera de déterminer le format automatiquement en se basant sur la texture référencée.
Qt3DRender::QShaderImage::R8_UNorm0x8229GL_R8 (type GLSL r8, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_UNorm0x822BGL_RG8 (GLSL type rg8, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_UNorm0x8058GL_RGBA8 (GLSL type rgba8, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_UNorm0x822AGL_R16 (GLSL type r16, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_UNorm0x822CGL_RG16 (GLSL type rg16, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_UNorm0x805BGL_RGBA16 (GLSL type rgba16, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::R8_SNorm0x8F94GL_R8_SNORM (GLSL type r8_snorm, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_SNorm0x8F95GL_RG8_SNORM (Type GLSL rg8_snorm, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_SNorm0x8F97GL_RGBA8_SNORM (Type GLSL rgba8_snorm, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_SNorm0x8F98GL_R16_SNORM (Type GLSL r16_snorm, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_SNorm0x8F99GL_RG16_SNORM (Type GLSL rg16_snorm, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_SNorm0x8F9BGL_RGBA16_SNORM (Type GLSL rgba16_snorm, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::R8U0x8232GL_R8UI (Type GLSL r8ui, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8U0x8238GL_RG8UI (GLSL type rg8ui, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8U0x8D7CGL_RGBA8UI (GLSL type rgba8ui, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16U0x8234GL_R16UI (GLSL type r16ui, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16U0x823AGL_RG16UI (GLSL type rg16ui, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16U0x8D76GL_RGBA16UI (GLSL type rgba16ui, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32U0x8236GL_R32UI (GLSL type r32ui, supporté par OpenGL 4.2+, OpenGL ES 3.1)
Qt3DRender::QShaderImage::RG32U0x823CGL_RG32UI (GLSL type rg32ui, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32U0x8D70GL_RGBA32UI (GLSL type rgba32ui, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R8I0x8231GL_R8I (GLSL type r8i, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8I0x8237GL_RG8I (GLSL type rg8i, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8I0x8D8EGL_RGBA8I (GLSL type rgba8i, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16I0x8233GL_R16I (GLSL type r16i, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16I0x8239GL_RG16I (GLSL type rg16i, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16I0x8D88GL_RGBA16I (GLSL type rgba16i, supporté par OpenGL 4.2+, OpenGL ES 3.1)
Qt3DRender::QShaderImage::R32I0x8235GL_R32I (GLSL type r32i, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32I0x823BGL_RG32I (GLSL type rg32i, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32I0x8D82GL_RGBA32I (GLSL type rgba32i, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16F0x822DGL_R16F (GLSL type r16f, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16F0x822FGL_RG16F (GLSL type rg16f, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16F0x881AGL_RGBA16F (GLSL type rgba16f, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32F0x822EGL_R32F (GLSL type r32f, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32F0x8230GL_RG32F (GLSL type rg32f, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32F0x8814GL_RGBA32F (GLSL type rgba32f, supporté par OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG11B10F0x8C3AGL_R11F_G11F_B10F (Type GLSL r11f_g11f_b10f, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGB10A20x8059GL_RGB10_A2 (Type GLSL rgb10_a2, supporté par OpenGL 4.2+)
Qt3DRender::QShaderImage::RGB10A2U0x906FGL_RGB10_A2UI (Type GLSL rgb10_a2ui, supporté par OpenGL 4.2+)

Documentation sur les propriétés

access : Access

Spécifie le type d'accès à l'image que nous voulons autoriser pour nos instances de shaders. Si un shader tente d'écrire ou de lire une image dont l'accès est incompatible, le comportement est indéfini.

La valeur par défaut est QShaderImage::ReadWrite.

Fonctions d'accès :

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

Signal Notificateur :

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

format : ImageFormat

Spécifie le format de l'image, ce qui est essentiellement important lorsque l'on stocke des valeurs dans l'image à partir d'un shader.

Le format n'a pas besoin d'être le même que celui de la texture référencée. Il doit cependant être compatible (correspondre en taille mais pas nécessairement en type de classe). Par exemple, une texture de format R32F (taille 32bits, classe 1x32) peut être utilisée avec une image de format RGBA8I (taille 32bits, classe 4x8). Le tableau 8.27 des spécifications OpenGL indique la taille et la classe de tous les formats d'image supportés.

Par défaut, Qt3D essaiera de définir le format de l'image pour qu'il corresponde à celui de la texture référencée.

La valeur par défaut est QShaderImage::Automatic.

Fonctions d'accès :

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

Signal Notificateur :

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

layer : int

Indique quel calque de la texture référencée doit être utilisé pour l'image QShaderImage. Cette propriété n'a aucun effet si layered vaut true ou si le type de la texture référencée n'est pas compatible avec les calques.

Remarque : lorsque la texture référencée est de type cube map ou cube map array et que ĺayered vaut false, la face et le calque sont récupérés de la manière suivante :

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

La valeur par défaut est 0.

Fonctions d'accès :

int layer() const
void setLayer(int layer)

Signal de notification :

void layerChanged(int layer)

layered : bool

*

Si la valeur vaut true, si la texture référencée est un tableau unidimensionnel, un tableau bidimensionnel, un tableau tridimensionnel, un tableau de cubes, un tableau de cubes ou un tableau bidimensionnel à échantillons multiples, l'ensemble du niveau sera lié pour toutes les couches. Si la valeur est fixée à false, seule la couche unique spécifiée par la propriété layer sera liée.

La valeur par défaut est false.

Fonctions d'accès :

bool layered() const
void setLayered(bool layered)

Signal de notification :

void layeredChanged(bool layered)

mipLevel : int

Détient le mipLevel de la texture référencée qui doit être utilisé pour QShaderImage.

La valeur par défaut est 0.

Fonctions d'accès :

int mipLevel() const
void setMipLevel(int mipLevel)

Signal de notification :

void mipLevelChanged(int mipLevel)

texture : Qt3DRender::QAbstractTexture*

Contient la texture à utiliser par l'image du shader.

Fonctions d'accès :

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

Signal de notification :

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.