En esta página

Qt3DRender::QShaderImage Class

class Qt3DRender::QShaderImage

Proporciona 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 GLSLTipo OpenGL EnumTipo de textura
imagen1DGL_IMAGE_1DQTexture1D
imagen2DGL_IMAGE_2DQTexture2D
imagen3DGL_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 admite los siguientes tipos de imagen:

Tipo GLSLTipo OpenGL EnumTipo de textura
imagen2DGL_IMAGE_2DQTexture2D
imagen3DGL_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 admite todos los tipos de imagen de OpenGL ES 3.1, así como los siguientes:

Tipo GLSLTipo OpenGL EnumTipo de textura
imageBufferGL_IMAGE_BUFFERQTextureBuffer
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
iimageBufferBÚFER_IMAGEN_GLQTextureBuffer
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERQTextureBuffer
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray

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

ConstanteValorDescripción
Qt3DRender::QShaderImage::ReadOnly0La imagen sólo se leerá en los shaders
Qt3DRender::QShaderImage::WriteOnly1La imagen sólo se escribirá en shaders desde
Qt3DRender::QShaderImage::ReadWrite2La imagen sólo se leerá y escribirá en los shaders

enum QShaderImage::ImageFormat

Esta lista describe todos los formatos de imagen posibles

ConstanteValorDescripción
Qt3DRender::QShaderImage::NoFormat0GL_NONE
Qt3DRender::QShaderImage::Automatic1Qt 3D intentará determinar el formato automáticamente basándose en la textura referenciada.
Qt3DRender::QShaderImage::R8_UNorm0x8229GL_R8 (GLSL tipo r8, soportado por OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_UNorm0x822BGL_RG8 (GLSL tipo rg8, soportado por OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_UNorm0x8058GL_RGBA8 (GLSL tipo rgba8, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_UNorm0x822AGL_R16 (GLSL tipo r16, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_UNorm0x822CGL_RG16 (GLSL tipo rg16, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_UNorm0x805BGL_RGBA16 (GLSL tipo rgba16, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::R8_SNorm0x8F94GL_R8_SNORM (tipo GLSL r8_snorm, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_SNorm0x8F95GL_RG8_SNORM (GLSL tipo rg8_snorm, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_SNorm0x8F97GL_RGBA8_SNORM (GLSL tipo rgba8_snorm, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_SNorm0x8F98GL_R16_SNORM (GLSL tipo r16_snorm, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_SNorm0x8F99GL_RG16_SNORM (GLSL tipo rg16_snorm, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_SNorm0x8F9BGL_RGBA16_SNORM (GLSL tipo rgba16_snorm, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::R8U0x8232GL_R8UI (GLSL tipo r8ui, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8U0x8238GL_RG8UI (GLSL tipo rg8ui, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8U0x8D7CGL_RGBA8UI (GLSL tipo rgba8ui, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16U0x8234GL_R16UI (GLSL tipo r16ui, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16U0x823AGL_RG16UI (GLSL tipo rg16ui, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16U0x8D76GL_RGBA16UI (GLSL tipo rgba16ui, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32U0x8236GL_R32UI (GLSL tipo r32ui, compatible con OpenGL 4.2+, OpenGL ES 3.1)
Qt3DRender::QShaderImage::RG32U0x823CGL_RG32UI (GLSL tipo rg32ui, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32U0x8D70GL_RGBA32UI (GLSL tipo rgba32ui, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R8I0x8231GL_R8I (GLSL tipo r8i, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8I0x8237GL_RG8I (GLSL tipo rg8i, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8I0x8D8EGL_RGBA8I (GLSL tipo rgba8i, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16I0x8233GL_R16I (GLSL tipo r16i, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16I0x8239GL_RG16I (GLSL tipo rg16i, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16I0x8D88GL_RGBA16I (GLSL tipo rgba16i, compatible con OpenGL 4.2+, OpenGL ES 3.1)
Qt3DRender::QShaderImage::R32I0x8235GL_R32I (GLSL tipo r32i, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32I0x823BGL_RG32I (GLSL tipo rg32i, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32I0x8D82GL_RGBA32I (GLSL tipo rgba32i, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16F0x822DGL_R16F (GLSL tipo r16f, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16F0x822FGL_RG16F (GLSL tipo rg16f, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16F0x881AGL_RGBA16F (GLSL tipo rgba16f, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32F0x822EGL_R32F (GLSL tipo r32f, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32F0x8230GL_RG32F (GLSL tipo rg32f, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32F0x8814GL_RGBA32F (tipo GLSL rgba32f, compatible con OpenGL 4.2+, OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG11B10F0x8C3AGL_R11F_G11F_B10F (tipo GLSL r11f_g11f_b10f, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGB10A20x8059GL_RGB10_A2 (tipo GLSL rgb10_a2, compatible con OpenGL 4.2+)
Qt3DRender::QShaderImage::RGB10A2U0x906FGL_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.