ShaderImage QML 类型

提供对着色器程序的图像访问。 更多信息...

导入声明import Qt3D.Render 2.7
实例化 QShaderImage

属性

详细描述

为实现着色器程序中的纹理内容的读取和写入操作而提供,它们需要作为 ShaderImage 进行暴露。纹理可以由多个多级层、层和面组成。此外,声明 ShaderImage 允许指定要访问的纹理内容中的哪个级别、层或面。

ShaderImage 必须作为参数的值分配,并引用有效的 Qt3D.Render.AbstractTexture 才能正常工作。

如果引用的纹理是一维数组、二维数组、三维数组、立方体贴图、立方体贴图数组或二维多采样数组纹理,可以使用 layered 属性来控制绑定整个纹理级别或单个纹理级别层或面。

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

OpenGL 4 支持以下图像类型

GLSL 类型OpenGL 类型枚举纹理类型
image1DGL_IMAGE_1DTexture1D
image2DGL_IMAGE_2DTexture2D
image3DGL_IMAGE_3DTexture3D
image2DRectGL_IMAGE_2D_RECTTextureRectangle
imageCubeGL_IMAGE_CUBETextureCubeMap
imageBufferGL_IMAGE_BUFFERTextureBuffer
image1DArrayGL_IMAGE_1D_ARRAYTexture1DArray
image2DArrayGL_IMAGE_2D_ARRAYTexture2DArray
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
image2DMSGL_IMAGE_2D_MULTISAMPLETexture2DMultisample
image2DMSArrayGL_IMAGE_2D_MULTISAMPLE_ARRAYTexture2DMultisampleArray
iimage1DGL_INT_IMAGE_1DTexture1D
iimage2DGL_INT_IMAGE_2DTexture2D
iimage3DGL_INT_IMAGE_3DTexture3D
iimage2DRectGL_INT_IMAGE_2D_RECTTextureRectangle
iimageCubeGL_INT_IMAGE_CUBETextureCubeMap
iimageBufferGL_INT_IMAGE_BUFFERTextureBuffer
iimage1DArrayGL_INT_IMAGE_1D_ARRAYTexture1DArray
iimage2DArrayGL_INT_IMAGE_2D_ARRAYTexture2DArray
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
iimage2DMSGL_INT_IMAGE_2D_MULTISAMPLETexture2DMultisample
iimage2DMSArrayGL_INT_IMAGE_2D_MULTISAMPLE_ARRAYTexture2DMultisampleArray
uimage1DGL_UNSIGNED_INT_IMAGE_1DTexture1D
uimage2DGL_UNSIGNED_INT_IMAGE_2DTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DTexture3D
uimage2DRectGL_UNSIGNED_INT_IMAGE_2D_RECTTextureRectangle
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBETextureCubeMap
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERTextureBuffer
uimage1DArrayGL_UNSIGNED_INT_IMAGE_1D_ARRAYTexture1DArray
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYTexture2DArray
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
uimage2DMSGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLETexture2DMultisample
uimage2DMSArrayGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAYTexture2DMultisampleArray

OpenGL ES 3.1 支持以下图像类型

GLSL 类型OpenGL 类型枚举纹理类型
image2DGL_IMAGE_2DTexture2D
image3DGL_IMAGE_3DTexture3D
imageCubeGL_IMAGE_CUBETextureCubeMap
image2DArrayGL_IMAGE_2D_ARRAYTexture2DArray
iimage2DGL_INT_IMAGE_2DTexture2D
iimage3DGL_INT_IMAGE_3DTexture3D
iimageCubeGL_INT_IMAGE_CUBETextureCubeMap
iimage2DArrayGL_INT_IMAGE_2D_ARRAYTexture2DArray
uimage2DGL_UNSIGNED_INT_IMAGE_2DTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DTexture3D
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBETextureCubeMap
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYTexture2DArray

OpenGL ES 3.2 支持所有 OpenGL ES 3.1 图像类型以及以下类型

GLSL 类型OpenGL 类型枚举纹理类型
imageBufferGL_IMAGE_BUFFERTextureBuffer
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
iimageBufferGL_IMAGE_BUFFERTextureBuffer
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERTextureBuffer
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYTextureCubeMapArray

预期使用方式如下

import Qt3D.Render 2.14

Entity {
...
    Texture2D {
        id: tex2D
        ...
    }

    Material {
        parameters: Parameter {
            name: "imageUniformName"
            value: ShaderImage {
                texture: tex2D
            }
        }
        ...
    }
 ...
}

属性文档

access : 枚举

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

常量描述
ShaderImage.ReadOnly只读访问。
ShaderImage.WriteOnly只写访问。
ShaderImage.ReadWrite读写访问。

默认值是 ShaderImage.ReadWrite。


format : 枚举

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

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

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

默认值是 ShaderImage.Automatic。


layer : int

包含应使用的引用纹理中的哪一层来创建 ShaderImage。如果将 layered 设置为 true 或引用的纹理类型不兼容层,则此属性不执行任何操作。

注意: 当引用的纹理是立方图或立方图数组类型,且 被设置为 false 时,可以使用以下方式检索面和层

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

默认值是 0。


layered : bool

*

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

默认值是 false


mipLevel : int

包含应使用的引用纹理中的哪个mip级别来创建 ShaderImage

默认值是 0。


© 2024 Qt 公司有限。此处包含的文档贡献是相关所有者的版权。此处提供的文档受自由软件基金会发布的GNU自由文档许可证版本1.3条款许可。Qt及其相应标志是芬兰及/或世界其他地区的Qt公司有限责任公司的商标。所有其他商标均为其各自所有者的财产。