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