Sur cette page

Qt3DRender::QShaderImage Class

class Qt3DRender::QShaderImage

Permet aux programmes de shaders d'accéder à Image. En savoir plus...

En-tête : #include <qshaderimage.h>
CMake : find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake : QT += 3drender
En QML : ShaderImage
Hérite de : Qt3DCore::QNode
Statut : Obsolète

Cette classe est obsolète. Nous déconseillons fortement de l'utiliser dans du nouveau code.

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 accessible aux opérations de lecture et d'écriture dans un shader, celles-ci doivent être exposées sous la forme d'un QShaderImage. Les textures peuvent être composées de plusieurs niveaux de mip, couches et faces. De plus, la déclaration d'un QShaderImage permet de spécifier le niveau, la couche ou la face du contenu de la texture auquel on souhaite accéder.

Pour fonctionner correctement, QShaderImage doit être attribué comme valeur d’un objet « QParameter » et faire référence à un objet « Qt3DRender::QAbstractTexture » valide.

Si la texture référencée est un tableau unidimensionnel, bidimensionnel ou tridimensionnel, une carte cubique, un tableau de cartes cubiques ou une texture bidimensionnelle à échantillonnage multiple, il est possible de lier soit le niveau de texture entier, soit un seul calque ou une seule face de ce niveau. Ce comportement peut être contrôlé à l’aide de la propriété ` layered `.

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

OpenGL 4 prend en charge les types d’images suivants :

Type GLSLÉnumération de type OpenGLType 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 prend en charge les types d'images suivants :

Type GLSLÉnumération de type OpenGLType 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 prend en charge tous les types d'images d'OpenGL ES 3.1 ainsi que les suivants :

Type GLSLÉnumération de type OpenGLType 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 à ceci :

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

Documentation sur les types de membres

enum QShaderImage::Access

ConstanteValeurDescription
Qt3DRender::QShaderImage::ReadOnly0L'image ne sera lue que par les shaders
Qt3DRender::QShaderImage::WriteOnly1L'image ne sera écrite qu'à partir des shaders
Qt3DRender::QShaderImage::ReadWrite2L'image ne sera lue et écrite qu'à partir des shaders

enum QShaderImage::ImageFormat

Cette liste répertorie tous les formats d'image possibles

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

Documentation sur les propriétés

access : Access

Spécifie le type d'accès que nous souhaitons autoriser à nos instances de shader sur l'image. Si un shader tente d'écrire ou de lire dans 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 de notification :

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

format : ImageFormat

Spécifie le format d'image, ce qui revêt une importance capitale lors du stockage de valeurs dans l'objet `Image` à partir d'un shader.

Le format ne doit pas nécessairement être identique à celui de la texture référencée. Il doit toutefois être compatible (de taille identique, mais pas nécessairement de type de classe identique). Par exemple, une texture au format R32F (taille 32 bits, classe 1x32) pourrait être utilisée avec une image au format RGBA8I (taille 32 bits, classe 4x8). Le tableau 8.27 des spécifications OpenGL indique la taille et la classe de tous les formats d’image pris en charge.

Par défaut, Qt3D tentera de définir le format de l’image de manière à ce 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 de notification :

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

layer : int

Détermine quelle couche de la texture référencée doit être utilisée pour l'QShaderImage. Cette propriété n'a aucun effet si l'option « layered » est définie sur « true » ou si le type de la texture référencée n'est pas compatible avec les couches.

Remarque : lorsque la texture référencée est de type « cube map » ou « cube map array » et que la propriété ` ĺayered ` est définie sur `false`, la face et la couche sont récupérées 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 cette option est définie sur « true », et 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 une texture bidimensionnelle à échantillonnage multiple, le niveau entier sera lié pour toutes les couches. Si cette option est définie sur « false », seule la couche 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

Spécifie quel niveau de mip (mipLevel) de la texture référencée doit être utilisé pour l'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 le 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.