Qt3DRender::QShaderImage Class
class Qt3DRender::QShaderImageFournit 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 GLSL | Type OpenGL Enum | Type de texture |
|---|---|---|
| image1D | GL_IMAGE_1D | QTexture1D |
| image2D | GL_IMAGE_2D | QTexture2D |
| image3D | 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 supporte les types d'images suivants :
| Type GLSL | Type OpenGL Enum | Type de texture |
|---|---|---|
| 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 supporte tous les types d'images OpenGL ES 3.1 ainsi que les suivants :
| Type GLSL | Type OpenGL Enum | Type de texture |
|---|---|---|
| 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 |
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
| Constante | Valeur | Description de l'image |
|---|---|---|
Qt3DRender::QShaderImage::ReadOnly | 0 | L'image ne sera lue qu'à partir des nuanceurs. |
Qt3DRender::QShaderImage::WriteOnly | 1 | L'image ne sera écrite que dans les nuanceurs |
Qt3DRender::QShaderImage::ReadWrite | 2 | L'image ne sera lue et écrite que dans les shaders |
enum QShaderImage::ImageFormat
Cette liste décrit tous les formats d'image possibles
| Constante | Valeur | Description de la constante |
|---|---|---|
Qt3DRender::QShaderImage::NoFormat | 0 | GL_NONE |
Qt3DRender::QShaderImage::Automatic | 1 | Qt 3D essaiera de déterminer le format automatiquement en se basant sur la texture référencée. |
Qt3DRender::QShaderImage::R8_UNorm | 0x8229 | GL_R8 (type GLSL r8, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_UNorm | 0x822B | GL_RG8 (GLSL type rg8, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_UNorm | 0x8058 | GL_RGBA8 (GLSL type rgba8, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_UNorm | 0x822A | GL_R16 (GLSL type r16, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_UNorm | 0x822C | GL_RG16 (GLSL type rg16, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_UNorm | 0x805B | GL_RGBA16 (GLSL type rgba16, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8_SNorm | 0x8F94 | GL_R8_SNORM (GLSL type r8_snorm, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_SNorm | 0x8F95 | GL_RG8_SNORM (Type GLSL rg8_snorm, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_SNorm | 0x8F97 | GL_RGBA8_SNORM (Type GLSL rgba8_snorm, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_SNorm | 0x8F98 | GL_R16_SNORM (Type GLSL r16_snorm, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_SNorm | 0x8F99 | GL_RG16_SNORM (Type GLSL rg16_snorm, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_SNorm | 0x8F9B | GL_RGBA16_SNORM (Type GLSL rgba16_snorm, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8U | 0x8232 | GL_R8UI (Type GLSL r8ui, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8U | 0x8238 | GL_RG8UI (GLSL type rg8ui, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8U | 0x8D7C | GL_RGBA8UI (GLSL type rgba8ui, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16U | 0x8234 | GL_R16UI (GLSL type r16ui, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16U | 0x823A | GL_RG16UI (GLSL type rg16ui, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16U | 0x8D76 | GL_RGBA16UI (GLSL type rgba16ui, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32U | 0x8236 | GL_R32UI (GLSL type r32ui, supporté par OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::RG32U | 0x823C | GL_RG32UI (GLSL type rg32ui, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32U | 0x8D70 | GL_RGBA32UI (GLSL type rgba32ui, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R8I | 0x8231 | GL_R8I (GLSL type r8i, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8I | 0x8237 | GL_RG8I (GLSL type rg8i, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8I | 0x8D8E | GL_RGBA8I (GLSL type rgba8i, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16I | 0x8233 | GL_R16I (GLSL type r16i, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16I | 0x8239 | GL_RG16I (GLSL type rg16i, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16I | 0x8D88 | GL_RGBA16I (GLSL type rgba16i, supporté par OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::R32I | 0x8235 | GL_R32I (GLSL type r32i, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32I | 0x823B | GL_RG32I (GLSL type rg32i, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32I | 0x8D82 | GL_RGBA32I (GLSL type rgba32i, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16F | 0x822D | GL_R16F (GLSL type r16f, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16F | 0x822F | GL_RG16F (GLSL type rg16f, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16F | 0x881A | GL_RGBA16F (GLSL type rgba16f, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32F | 0x822E | GL_R32F (GLSL type r32f, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32F | 0x8230 | GL_RG32F (GLSL type rg32f, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32F | 0x8814 | GL_RGBA32F (GLSL type rgba32f, supporté par OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG11B10F | 0x8C3A | GL_R11F_G11F_B10F (Type GLSL r11f_g11f_b10f, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2 | 0x8059 | GL_RGB10_A2 (Type GLSL rgb10_a2, supporté par OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2U | 0x906F | GL_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.