QShaderImage 类

class Qt3DRender::QShaderImage

为着色器程序提供图像访问。 更多...

头文件 #include <QShaderImage>
CMakefind_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmakeQT += 3drender
由以下类实例化 ShaderImage
继承自 Qt3DCore::QNode

公共类型

枚举Access { ReadOnly, WriteOnly, ReadWrite }
枚举ImageFormat { NoFormat, Automatic, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U }

属性

公共函数

Qt3DRender::QShaderImage::Accessaccess() const
Qt3DRender::QShaderImage::ImageFormatformat() const
intlayer() const
boollayered() const
intmipLevel() const
Qt3DRender::QAbstractTexture *texture() const

公共槽

voidsetAccess(Qt3DRender::QShaderImage::Access access)
voidsetFormat(Qt3DRender::QShaderImage::ImageFormat format)
voidsetLayer(int layer)
voidsetLayered(bool layered)
voidsetMipLevel(int mipLevel)
voidsetTexture(Qt3DRender::QAbstractTexture *texture)

信号

voidaccessChanged(Qt3DRender::QShaderImage::Access access)
voidformatChanged(Qt3DRender::QShaderImage::ImageFormat format)
voidlayerChanged(int layer)
voidlayeredChanged(bool layered)
voidmipLevelChanged(int mipLevel)
voidtextureChanged(Qt3DRender::QAbstractTexture *texture)

详细描述

为了使纹理内容在着色器中进行读写操作,它们需要被公开为QShaderImage。纹理可以由多个Mip级别、层和面组成。此外,声明QShaderImage允许指定要访问的纹理内容的级别、层或面。

QShaderImage必须作为QParameter的值分配,并引用一个有效的Qt3DRender::QAbstractTexture才能正常工作。

如果引用的纹理是一维数组、二维数组、三维、环境图、环境图数组或二维多采样数组纹理,则可以绑定整个纹理级别或纹理级别的单个层或面。这可以通过layered属性来控制。

QShaderImage的支持仅限于OpenGL 4,部分支持OpenGL ES 3.1和3.2。

OpenGL 4支持以下图像类型

GLSL类型OpenGL类型枚举纹理类型
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支持以下图像类型

GLSL类型OpenGL类型枚举纹理类型
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支持OpenGL ES 3.1的所有图像类型以及以下内容

GLSL类型OpenGL类型枚举纹理类型
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

预期的用法如下

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

成员类型文档

枚举QShaderImage::Access

常量描述
Qt3DRender::QShaderImage::ReadOnly0图像将在着色器中只读取
Qt3DRender::QShaderImage::WriteOnly1图像将只在着色器中写入
Qt3DRender::QShaderImage::ReadWrite2图像将在着色器中只读取和写入

枚举QShaderImage::ImageFormat

此列表描述了所有可能的图像格式

常量描述
Qt3DRender::QShaderImage::NoFormat0GL_NONE
Qt3DRender::QShaderImage::Automatic1Qt 3D将根据引用的纹理自动尝试确定格式。
Qt3DRender::QShaderImage::R8_UNorm0x8229GL_R8 (GLSL类型r8,由OpenGL 4.2+支持)
Qt3DRender::QShaderImage::RG8_UNorm0x822BGL_RG8 (GLSL 类型 rg8,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_UNorm0x8058GL_RGBA8 (GLSL 类型 rgba8,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_UNorm0x822AGL_R16 (GLSL 类型 r16,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_UNorm0x822CGL_RG16 (GLSL 类型 rg16,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_UNorm0x805BGL_RGBA16 (GLSL 类型 rgba16,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::R8_SNorm0x8F94GL_R8_SNORM (GLSL 类型 r8_snorm,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8_SNorm0x8F95GL_RG8_SNORM (GLSL 类型 rg8_snorm,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8_SNorm0x8F97GL_RGBA8_SNORM (GLSL 类型 rgba8_snorm,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16_SNorm0x8F98GL_R16_SNORM (GLSL 类型 r16_snorm,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16_SNorm0x8F99GL_RG16_SNORM (GLSL 类型 rg16_snorm,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16_SNorm0x8F9BGL_RGBA16_SNORM (GLSL 类型 rgba16_snorm,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::R8U0x8232GL_R8UI (GLSL 类型 r8ui,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8U0x8238GL_RG8UI (GLSL 类型 rg8ui,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8U0x8D7CGL_RGBA8UI (GLSL 类型 rgba8ui,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16U0x8234GL_R16UI (GLSL 类型 r16ui,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16U0x823AGL_RG16UI (GLSL 类型 rg16ui,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16U0x8D76GL_RGBA16UI (GLSL 类型 rgba16ui,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32U0x8236GL_R32UI (GLSL 类型 r32ui,支持 OpenGL 4.2+,OpenGL ES 3.1)
Qt3DRender::QShaderImage::RG32U0x823CGL_RG32UI (GLSL 类型 rg32ui,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32U0x8D70GL_RGBA32UI (GLSL 类型 rgba32ui,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R8I0x8231GL_R8I (GLSL 类型 r8i,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG8I0x8237GL_RG8I (GLSL 类型 rg8i,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA8I0x8D8EGL_RGBA8I (GLSL 类型 rgba8i,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16I0x8233GL_R16I (GLSL 类型 r16i,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16I0x8239GL_RG16I (GLSL 类型 rg16i,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16I0x8D88GL_RGBA16I (GLSL 类型 rgba16i,支持 OpenGL 4.2+,OpenGL ES 3.1)
Qt3DRender::QShaderImage::R32I0x8235GL_R32I (GLSL 类型 r32i,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32I0x823BGL_RG32I (GLSL 类型 rg32i,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32I0x8D82GL_RGBA32I (GLSL 类型 rgba32i,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R16F0x822DGL_R16F (GLSL 类型 r16f,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RG16F0x822FGL_RG16F (GLSL 类型 rg16f,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA16F0x881AGL_RGBA16F (GLSL 类型 rgba16f,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::R32F0x822EGL_R32F (GLSL 类型 r32f,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG32F0x8230GL_RG32F (GLSL 类型 rg32f,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGBA32F0x8814GL_RGBA32F (GLSL 类型 rgba32f,支持 OpenGL 4.2+,OpenGL ES 3.1+)
Qt3DRender::QShaderImage::RG11B10F0x8C3AGL_R11F_G11F_B10F (GLSL 类型 r11f_g11f_b10f,支持 OpenGL 4.2+)
Qt3DRender::QShaderImage::RGB10A20x8059GL_RGB10_A2(GLSL类型rgb10_a2,由OpenGL 4.2+支持)
Qt3DRender::QShaderImage::RGB10A2U0x906FGL_RGB10_A2UI(GLSL类型rgb10_a2ui,由OpenGL 4.2+支持)

属性文档

访问 : 访问

指定我们从着色器实例到图像的访问类型。如果着色器尝试从具有不兼容访问权限的图像读取或写入,行为将未定义。

默认值为QShaderImage::ReadWrite

访问函数

Qt3DRender::QShaderImage::Access访问() const
voidsetAccess(Qt3DRender::QShaderImage::访问 访问)

通知信号

void访问改变(Qt3DRender::QShaderImage::访问 访问)

格式 : 图像格式

指定图像格式,这在将值从着色器存储到图像时非常重要。

格式不必与引用纹理的格式相同,但它必须兼容(大小匹配但不必一定由类类型匹配)。例如,可以格式为R32F(大小32位,类1x32)的纹理与旨在格式为RGBA8I(大小32位,类4x8)的图像一起使用。OpenGL规范的第8.27表显示了所有支持的图像格式的大小和类别。

默认情况下,Qt3D将尝试将图像格式设置为与引用纹理的格式匹配。

默认值为QShaderImage::Automatic

访问函数

Qt3DRender::QShaderImage::ImageFormat格式() const
voidsetFormat(Qt3DRender::QShaderImage::图像格式 格式)

通知信号

void格式改变(Qt3DRender::QShaderImage::图像格式 格式)

层级 : int

保存应该用于QShaderImage的层级,其中一个引用纹理中的层级。如果分层设置为true或如果引用纹理的类型与分层不兼容,此属性将不起作用。

注意:当引用纹理是立方体贴图或立方体贴图数组且分层设置为false时,将按照以下方式检索面和层级

cubeMapLayer = layer / 6
cubeMapFace = layer - (cubeMapLayer * 6)

默认值为0。

访问函数

int层级() const
voidsetLayer(int 层级)

通知信号

void层级改变(int 层级)

分层 : bool

*

如果设置为true,如果引用的纹理是单维度数组、两维度数组、三维、立方体贴图、立方体贴图数组或二维多采样数组纹理,则整个层级将绑定到所有层级。如果设置为false,则仅绑定由层级属性指定的单个层级。

默认值为false

访问函数

bool分层() const
voidsetLayered(bool 分层)

通知信号

void分层改变(bool 分层)

mipLevel : int

保存应该用于QShaderImage的mipLevel。

默认值为0。

访问函数

intmipLevel() const
voidsetMipLevel(int mipLevel)

通知信号

voidmipLevel改变(int mipLevel)

© 2024 The Qt Company Ltd. 本文档中包含的贡献物均为各自所有者的版权。提供的文档根据自由软件基金会发布的 GNU自由文档许可证第1.3版 许可。Qt及其相关标志是芬兰及全球其他国家的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。