Qt3DRender::QShaderImage Class
class Qt3DRender::QShaderImageProporciona acceso de imagen a los programas de sombreado. Más...
| Cabecera: | #include <QShaderImage> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender)target_link_libraries(mytarget PRIVATE Qt6::3drender) |
| qmake: | QT += 3drender |
| En QML: | ShaderImage |
| Hereda: | Qt3DCore::QNode |
| Status: | Obsoleto |
Tipos públicos
| enum | Access { ReadOnly, WriteOnly, ReadWrite } |
| enum | ImageFormat { NoFormat, Automatic, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U } |
Propiedades
Funciones públicas
| Qt3DRender::QShaderImage::Access | access() const |
| Qt3DRender::QShaderImage::ImageFormat | format() const |
| int | layer() const |
| bool | layered() const |
| int | mipLevel() const |
| Qt3DRender::QAbstractTexture * | texture() const |
Ranuras públicas
| 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) |
Señales
| 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) |
Descripción Detallada
Para que el contenido de las texturas esté disponible para operaciones de lectura y escritura en un shader, es necesario exponerlas como QShaderImage. Las texturas pueden estar compuestas de varios niveles mip, capas y caras. Adicionalmente declarar un QShaderImage permite especificar a que nivel, capa o cara del contenido de la textura queremos acceder.
QShaderImage tiene que ser asignado como un valor de QParameter's y hacer referencia a un Qt3DRender::QAbstractTexture válido para que funcione correctamente.
Si la textura referenciada es un array unidimensional, un array bidimensional, una textura tridimensional, un mapa cúbico, un array de mapa cúbico o un array multimuestra bidimensional, es posible enlazar el nivel de textura completo o una sola capa o cara del nivel de textura. Esto puede controlarse con la propiedad layered.
QShaderImage sólo es compatible con OpenGL 4 y parcialmente con OpenGL ES 3.1 y 3.2.
OpenGL 4 soporta los siguientes tipos de imagen:
| Tipo GLSL | Tipo OpenGL Enum | Tipo de textura |
|---|---|---|
| imagen1D | GL_IMAGE_1D | QTexture1D |
| imagen2D | GL_IMAGE_2D | QTexture2D |
| imagen3D | 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 admite los siguientes tipos de imagen:
| Tipo GLSL | Tipo OpenGL Enum | Tipo de textura |
|---|---|---|
| imagen2D | GL_IMAGE_2D | QTexture2D |
| imagen3D | 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 admite todos los tipos de imagen de OpenGL ES 3.1, así como los siguientes:
| Tipo GLSL | Tipo OpenGL Enum | Tipo de textura |
|---|---|---|
| imageBuffer | GL_IMAGE_BUFFER | QTextureBuffer |
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
| iimageBuffer | BÚFER_IMAGEN_GL | 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 |
El uso esperado sería el siguiente
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);Miembro Tipo Documentación
enum QShaderImage::Access
| Constante | Valor | Descripción |
|---|---|---|
Qt3DRender::QShaderImage::ReadOnly | 0 | La imagen sólo se leerá en los shaders |
Qt3DRender::QShaderImage::WriteOnly | 1 | La imagen sólo se escribirá en shaders desde |
Qt3DRender::QShaderImage::ReadWrite | 2 | La imagen sólo se leerá y escribirá en los shaders |
enum QShaderImage::ImageFormat
Esta lista describe todos los formatos de imagen posibles
| Constante | Valor | Descripción |
|---|---|---|
Qt3DRender::QShaderImage::NoFormat | 0 | GL_NONE |
Qt3DRender::QShaderImage::Automatic | 1 | Qt 3D intentará determinar el formato automáticamente basándose en la textura referenciada. |
Qt3DRender::QShaderImage::R8_UNorm | 0x8229 | GL_R8 (GLSL tipo r8, soportado por OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_UNorm | 0x822B | GL_RG8 (GLSL tipo rg8, soportado por OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_UNorm | 0x8058 | GL_RGBA8 (GLSL tipo rgba8, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_UNorm | 0x822A | GL_R16 (GLSL tipo r16, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_UNorm | 0x822C | GL_RG16 (GLSL tipo rg16, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_UNorm | 0x805B | GL_RGBA16 (GLSL tipo rgba16, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8_SNorm | 0x8F94 | GL_R8_SNORM (tipo GLSL r8_snorm, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_SNorm | 0x8F95 | GL_RG8_SNORM (GLSL tipo rg8_snorm, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_SNorm | 0x8F97 | GL_RGBA8_SNORM (GLSL tipo rgba8_snorm, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_SNorm | 0x8F98 | GL_R16_SNORM (GLSL tipo r16_snorm, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_SNorm | 0x8F99 | GL_RG16_SNORM (GLSL tipo rg16_snorm, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_SNorm | 0x8F9B | GL_RGBA16_SNORM (GLSL tipo rgba16_snorm, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8U | 0x8232 | GL_R8UI (GLSL tipo r8ui, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8U | 0x8238 | GL_RG8UI (GLSL tipo rg8ui, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8U | 0x8D7C | GL_RGBA8UI (GLSL tipo rgba8ui, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16U | 0x8234 | GL_R16UI (GLSL tipo r16ui, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16U | 0x823A | GL_RG16UI (GLSL tipo rg16ui, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16U | 0x8D76 | GL_RGBA16UI (GLSL tipo rgba16ui, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32U | 0x8236 | GL_R32UI (GLSL tipo r32ui, compatible con OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::RG32U | 0x823C | GL_RG32UI (GLSL tipo rg32ui, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32U | 0x8D70 | GL_RGBA32UI (GLSL tipo rgba32ui, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R8I | 0x8231 | GL_R8I (GLSL tipo r8i, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8I | 0x8237 | GL_RG8I (GLSL tipo rg8i, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8I | 0x8D8E | GL_RGBA8I (GLSL tipo rgba8i, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16I | 0x8233 | GL_R16I (GLSL tipo r16i, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16I | 0x8239 | GL_RG16I (GLSL tipo rg16i, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16I | 0x8D88 | GL_RGBA16I (GLSL tipo rgba16i, compatible con OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::R32I | 0x8235 | GL_R32I (GLSL tipo r32i, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32I | 0x823B | GL_RG32I (GLSL tipo rg32i, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32I | 0x8D82 | GL_RGBA32I (GLSL tipo rgba32i, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16F | 0x822D | GL_R16F (GLSL tipo r16f, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16F | 0x822F | GL_RG16F (GLSL tipo rg16f, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16F | 0x881A | GL_RGBA16F (GLSL tipo rgba16f, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32F | 0x822E | GL_R32F (GLSL tipo r32f, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32F | 0x8230 | GL_RG32F (GLSL tipo rg32f, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32F | 0x8814 | GL_RGBA32F (tipo GLSL rgba32f, compatible con OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG11B10F | 0x8C3A | GL_R11F_G11F_B10F (tipo GLSL r11f_g11f_b10f, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2 | 0x8059 | GL_RGB10_A2 (tipo GLSL rgb10_a2, compatible con OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2U | 0x906F | GL_RGB10_A2UI (tipo GLSL rgb10_a2ui, compatible con OpenGL 4.2+) |
Documentación de propiedades
access : Access
Especifica el tipo de acceso que queremos permitir desde nuestras instancias de sombreado a la imagen. Si un sombreador intenta escribir o leer de una imagen que tiene un acceso incompatible, el comportamiento es indefinido.
El valor por defecto es QShaderImage::ReadWrite.
Funciones de acceso:
| Qt3DRender::QShaderImage::Access | access() const |
| void | setAccess(Qt3DRender::QShaderImage::Access access) |
Señal notificadora:
| void | accessChanged(Qt3DRender::QShaderImage::Access access) |
format : ImageFormat
Especifica el formato de la imagen, que es esencialmente importante cuando se almacenan valores en la Imagen desde un shader.
El formato no tiene que ser el mismo que el de la textura referenciada. Sin embargo tiene que ser compatible (coincidir en tamaño pero no necesariamente por tipo de clase). Por ejemplo una textura de formato R32F (tamaño 32bits, clase 1x32) podría ser usada con una imagen de formato RGBA8I (tamaño 32bits, clase 4x8). La tabla 8.27 de las especificaciones OpenGL muestra el tamaño y la clase para todos los formatos de imagen soportados.
Por defecto Qt3D intentará establecer el formato de imagen para que coincida con el de la textura referenciada.
El valor por defecto es QShaderImage::Automatic.
Funciones de acceso:
| Qt3DRender::QShaderImage::ImageFormat | format() const |
| void | setFormat(Qt3DRender::QShaderImage::ImageFormat format) |
Señal notificadora:
| void | formatChanged(Qt3DRender::QShaderImage::ImageFormat format) |
layer : int
Indica qué capa de la textura referenciada debe utilizarse para QShaderImage. Esta propiedad no hace nada si layered es igual a true o si el tipo de la textura de referencia no es compatible con las capas.
Nota: Cuando la textura referenciada es de tipo cube map o cube map array y ĺayered está establecido a false, la cara y la capa se recuperan de la siguiente manera:
cubeMapLayer = layer / 6 cubeMapFace = layer - (cubeMapLayer * 6)
El valor por defecto es 0.
Funciones de acceso:
| int | layer() const |
| void | setLayer(int layer) |
Señal del notificador:
| void | layerChanged(int layer) |
layered : bool
*
Si se establece a true, si la textura referenciada es una matriz unidimensional, matriz bidimensional, tridimensional, mapa cúbico, matriz de mapa cúbico, o textura de matriz multi-muestra bidimensional, todo el nivel será enlazado para todas las capas. Si se establece a false, sólo se vinculará la capa especificada por la propiedad layer.
El valor por defecto es false.
Funciones de acceso:
| bool | layered() const |
| void | setLayered(bool layered) |
Señal notificadora:
| void | layeredChanged(bool layered) |
mipLevel : int
Mantiene qué mipLevel de la textura referenciada debe usarse para QShaderImage.
El valor por defecto es 0.
Funciones de acceso:
| int | mipLevel() const |
| void | setMipLevel(int mipLevel) |
Señal notificadora:
| void | mipLevelChanged(int mipLevel) |
texture : Qt3DRender::QAbstractTexture*
Contiene la textura que utilizará la imagen de sombreado.
Funciones de acceso:
| Qt3DRender::QAbstractTexture * | texture() const |
| void | setTexture(Qt3DRender::QAbstractTexture *texture) |
Señal notificadora:
| 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.