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 类型枚举 | 纹理类型 | 
|---|---|---|
| image1D | GL_IMAGE_1D | Texture1D | 
| image2D | GL_IMAGE_2D | Texture2D | 
| image3D | GL_IMAGE_3D | Texture3D | 
| image2DRect | GL_IMAGE_2D_RECT | TextureRectangle | 
| imageCube | GL_IMAGE_CUBE | TextureCubeMap | 
| imageBuffer | GL_IMAGE_BUFFER | TextureBuffer | 
| image1DArray | GL_IMAGE_1D_ARRAY | Texture1DArray | 
| image2DArray | GL_IMAGE_2D_ARRAY | Texture2DArray | 
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray | 
| image2DMS | GL_IMAGE_2D_MULTISAMPLE | Texture2DMultisample | 
| image2DMSArray | GL_IMAGE_2D_MULTISAMPLE_ARRAY | Texture2DMultisampleArray | 
| iimage1D | GL_INT_IMAGE_1D | Texture1D | 
| iimage2D | GL_INT_IMAGE_2D | Texture2D | 
| iimage3D | GL_INT_IMAGE_3D | Texture3D | 
| iimage2DRect | GL_INT_IMAGE_2D_RECT | TextureRectangle | 
| iimageCube | GL_INT_IMAGE_CUBE | TextureCubeMap | 
| iimageBuffer | GL_INT_IMAGE_BUFFER | TextureBuffer | 
| iimage1DArray | GL_INT_IMAGE_1D_ARRAY | Texture1DArray | 
| iimage2DArray | GL_INT_IMAGE_2D_ARRAY | Texture2DArray | 
| iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray | 
| iimage2DMS | GL_INT_IMAGE_2D_MULTISAMPLE | Texture2DMultisample | 
| iimage2DMSArray | GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY | Texture2DMultisampleArray | 
| uimage1D | GL_UNSIGNED_INT_IMAGE_1D | Texture1D | 
| uimage2D | GL_UNSIGNED_INT_IMAGE_2D | Texture2D | 
| uimage3D | GL_UNSIGNED_INT_IMAGE_3D | Texture3D | 
| uimage2DRect | GL_UNSIGNED_INT_IMAGE_2D_RECT | TextureRectangle | 
| uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | TextureCubeMap | 
| uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | TextureBuffer | 
| uimage1DArray | GL_UNSIGNED_INT_IMAGE_1D_ARRAY | Texture1DArray | 
| uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | Texture2DArray | 
| uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray | 
| uimage2DMS | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE | Texture2DMultisample | 
| uimage2DMSArray | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY | Texture2DMultisampleArray | 
OpenGL ES 3.1 支持以下图像类型
| GLSL 类型 | OpenGL 类型枚举 | 纹理类型 | 
|---|---|---|
| image2D | GL_IMAGE_2D | Texture2D | 
| image3D | GL_IMAGE_3D | Texture3D | 
| imageCube | GL_IMAGE_CUBE | TextureCubeMap | 
| image2DArray | GL_IMAGE_2D_ARRAY | Texture2DArray | 
| iimage2D | GL_INT_IMAGE_2D | Texture2D | 
| iimage3D | GL_INT_IMAGE_3D | Texture3D | 
| iimageCube | GL_INT_IMAGE_CUBE | TextureCubeMap | 
| iimage2DArray | GL_INT_IMAGE_2D_ARRAY | Texture2DArray | 
| uimage2D | GL_UNSIGNED_INT_IMAGE_2D | Texture2D | 
| uimage3D | GL_UNSIGNED_INT_IMAGE_3D | Texture3D | 
| uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | TextureCubeMap | 
| uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | Texture2DArray | 
OpenGL ES 3.2 支持所有 OpenGL ES 3.1 图像类型以及以下类型
| GLSL 类型 | OpenGL 类型枚举 | 纹理类型 | 
|---|---|---|
| imageBuffer | GL_IMAGE_BUFFER | TextureBuffer | 
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray | 
| iimageBuffer | GL_IMAGE_BUFFER | TextureBuffer | 
| iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray | 
| uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | TextureBuffer | 
| uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray | 
预期使用方式如下
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公司有限责任公司的商标。所有其他商标均为其各自所有者的财产。