QShaderImage 类
class Qt3DRender::QShaderImage为着色器程序提供图像访问。 更多...
| 头文件 | #include <QShaderImage> | 
| CMake | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) | 
| qmake | QT += 3drender | 
| 由以下类实例化 | ShaderImage | 
| 继承自 | Qt3DCore::QNode | 
公共类型
| 枚举 | Access { ReadOnly, WriteOnly, ReadWrite } | 
| 枚举 | ImageFormat { NoFormat, Automatic, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U } | 
属性
公共函数
| Qt3DRender::QShaderImage::Access | access() const | 
| Qt3DRender::QShaderImage::ImageFormat | format() const | 
| int | layer() const | 
| bool | layered() const | 
| int | mipLevel() const | 
| Qt3DRender::QAbstractTexture * | texture() const | 
公共槽
| 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) | 
信号
| 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) | 
详细描述
为了使纹理内容在着色器中进行读写操作,它们需要被公开为QShaderImage。纹理可以由多个Mip级别、层和面组成。此外,声明QShaderImage允许指定要访问的纹理内容的级别、层或面。
QShaderImage必须作为QParameter的值分配,并引用一个有效的Qt3DRender::QAbstractTexture才能正常工作。
如果引用的纹理是一维数组、二维数组、三维、环境图、环境图数组或二维多采样数组纹理,则可以绑定整个纹理级别或纹理级别的单个层或面。这可以通过layered属性来控制。
QShaderImage的支持仅限于OpenGL 4,部分支持OpenGL ES 3.1和3.2。
OpenGL 4支持以下图像类型
| GLSL类型 | OpenGL类型枚举 | 纹理类型 | 
|---|---|---|
| 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支持以下图像类型
| GLSL类型 | OpenGL类型枚举 | 纹理类型 | 
|---|---|---|
| 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支持OpenGL ES 3.1的所有图像类型以及以下内容
| GLSL类型 | OpenGL类型枚举 | 纹理类型 | 
|---|---|---|
| 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 | 
预期的用法如下
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::ReadOnly | 0 | 图像将在着色器中只读取 | 
| Qt3DRender::QShaderImage::WriteOnly | 1 | 图像将只在着色器中写入 | 
| Qt3DRender::QShaderImage::ReadWrite | 2 | 图像将在着色器中只读取和写入 | 
枚举QShaderImage::ImageFormat
此列表描述了所有可能的图像格式
| 常量 | 值 | 描述 | 
|---|---|---|
| Qt3DRender::QShaderImage::NoFormat | 0 | GL_NONE | 
| Qt3DRender::QShaderImage::Automatic | 1 | Qt 3D将根据引用的纹理自动尝试确定格式。 | 
| Qt3DRender::QShaderImage::R8_UNorm | 0x8229 | GL_R8 (GLSL类型r8,由OpenGL 4.2+支持) | 
| Qt3DRender::QShaderImage::RG8_UNorm | 0x822B | GL_RG8 (GLSL 类型 rg8,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA8_UNorm | 0x8058 | GL_RGBA8 (GLSL 类型 rgba8,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R16_UNorm | 0x822A | GL_R16 (GLSL 类型 r16,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG16_UNorm | 0x822C | GL_RG16 (GLSL 类型 rg16,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA16_UNorm | 0x805B | GL_RGBA16 (GLSL 类型 rgba16,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::R8_SNorm | 0x8F94 | GL_R8_SNORM (GLSL 类型 r8_snorm,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG8_SNorm | 0x8F95 | GL_RG8_SNORM (GLSL 类型 rg8_snorm,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA8_SNorm | 0x8F97 | GL_RGBA8_SNORM (GLSL 类型 rgba8_snorm,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R16_SNorm | 0x8F98 | GL_R16_SNORM (GLSL 类型 r16_snorm,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG16_SNorm | 0x8F99 | GL_RG16_SNORM (GLSL 类型 rg16_snorm,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA16_SNorm | 0x8F9B | GL_RGBA16_SNORM (GLSL 类型 rgba16_snorm,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::R8U | 0x8232 | GL_R8UI (GLSL 类型 r8ui,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG8U | 0x8238 | GL_RG8UI (GLSL 类型 rg8ui,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA8U | 0x8D7C | GL_RGBA8UI (GLSL 类型 rgba8ui,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R16U | 0x8234 | GL_R16UI (GLSL 类型 r16ui,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG16U | 0x823A | GL_RG16UI (GLSL 类型 rg16ui,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA16U | 0x8D76 | GL_RGBA16UI (GLSL 类型 rgba16ui,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R32U | 0x8236 | GL_R32UI (GLSL 类型 r32ui,支持 OpenGL 4.2+,OpenGL ES 3.1) | 
| Qt3DRender::QShaderImage::RG32U | 0x823C | GL_RG32UI (GLSL 类型 rg32ui,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA32U | 0x8D70 | GL_RGBA32UI (GLSL 类型 rgba32ui,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R8I | 0x8231 | GL_R8I (GLSL 类型 r8i,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG8I | 0x8237 | GL_RG8I (GLSL 类型 rg8i,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA8I | 0x8D8E | GL_RGBA8I (GLSL 类型 rgba8i,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R16I | 0x8233 | GL_R16I (GLSL 类型 r16i,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG16I | 0x8239 | GL_RG16I (GLSL 类型 rg16i,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA16I | 0x8D88 | GL_RGBA16I (GLSL 类型 rgba16i,支持 OpenGL 4.2+,OpenGL ES 3.1) | 
| Qt3DRender::QShaderImage::R32I | 0x8235 | GL_R32I (GLSL 类型 r32i,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::RG32I | 0x823B | GL_RG32I (GLSL 类型 rg32i,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA32I | 0x8D82 | GL_RGBA32I (GLSL 类型 rgba32i,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R16F | 0x822D | GL_R16F (GLSL 类型 r16f,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RG16F | 0x822F | GL_RG16F (GLSL 类型 rg16f,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA16F | 0x881A | GL_RGBA16F (GLSL 类型 rgba16f,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::R32F | 0x822E | GL_R32F (GLSL 类型 r32f,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::RG32F | 0x8230 | GL_RG32F (GLSL 类型 rg32f,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGBA32F | 0x8814 | GL_RGBA32F (GLSL 类型 rgba32f,支持 OpenGL 4.2+,OpenGL ES 3.1+) | 
| Qt3DRender::QShaderImage::RG11B10F | 0x8C3A | GL_R11F_G11F_B10F (GLSL 类型 r11f_g11f_b10f,支持 OpenGL 4.2+) | 
| Qt3DRender::QShaderImage::RGB10A2 | 0x8059 | GL_RGB10_A2(GLSL类型rgb10_a2,由OpenGL 4.2+支持) | 
| Qt3DRender::QShaderImage::RGB10A2U | 0x906F | GL_RGB10_A2UI(GLSL类型rgb10_a2ui,由OpenGL 4.2+支持) | 
属性文档
访问 : 访问
指定我们从着色器实例到图像的访问类型。如果着色器尝试从具有不兼容访问权限的图像读取或写入,行为将未定义。
访问函数
| Qt3DRender::QShaderImage::Access | 访问() const | 
| void | setAccess(Qt3DRender::QShaderImage::访问 访问) | 
通知信号
| void | 访问改变(Qt3DRender::QShaderImage::访问 访问) | 
格式 : 图像格式
指定图像格式,这在将值从着色器存储到图像时非常重要。
格式不必与引用纹理的格式相同,但它必须兼容(大小匹配但不必一定由类类型匹配)。例如,可以格式为R32F(大小32位,类1x32)的纹理与旨在格式为RGBA8I(大小32位,类4x8)的图像一起使用。OpenGL规范的第8.27表显示了所有支持的图像格式的大小和类别。
默认情况下,Qt3D将尝试将图像格式设置为与引用纹理的格式匹配。
访问函数
| Qt3DRender::QShaderImage::ImageFormat | 格式() const | 
| void | setFormat(Qt3DRender::QShaderImage::图像格式 格式) | 
通知信号
| void | 格式改变(Qt3DRender::QShaderImage::图像格式 格式) | 
层级 : int
保存应该用于QShaderImage的层级,其中一个引用纹理中的层级。如果分层设置为true或如果引用纹理的类型与分层不兼容,此属性将不起作用。
注意:当引用纹理是立方体贴图或立方体贴图数组且分层设置为false时,将按照以下方式检索面和层级
cubeMapLayer = layer / 6 cubeMapFace = layer - (cubeMapLayer * 6)
默认值为0。
访问函数
| int | 层级() const | 
| void | setLayer(int 层级) | 
通知信号
| void | 层级改变(int 层级) | 
分层 : bool
*
如果设置为true,如果引用的纹理是单维度数组、两维度数组、三维、立方体贴图、立方体贴图数组或二维多采样数组纹理,则整个层级将绑定到所有层级。如果设置为false,则仅绑定由层级属性指定的单个层级。
默认值为false。
访问函数
| bool | 分层() const | 
| void | setLayered(bool 分层) | 
通知信号
| void | 分层改变(bool 分层) | 
mipLevel : int
保存应该用于QShaderImage的mipLevel。
默认值为0。
访问函数
| int | mipLevel() const | 
| void | setMipLevel(int mipLevel) | 
通知信号
| void | mipLevel改变(int mipLevel) | 
© 2024 The Qt Company Ltd. 本文档中包含的贡献物均为各自所有者的版权。提供的文档根据自由软件基金会发布的 GNU自由文档许可证第1.3版 许可。Qt及其相关标志是芬兰及全球其他国家的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。