PySide6.Qt3DRender.Qt3DRender.QShaderImage

class QShaderImage

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

PySide6.Qt3DRender.Qt3DRender.QShaderImage 的继承图

概要

属性

方法

插槽

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

为了使纹理的内容在着色器中可用于读写操作,它们需要作为QShaderImage暴露出来。纹理可以由多个mip级别、层和面组成。此外,声明一个QShaderImage允许指定我们想要访问的纹理内容的级别、层或面。

QShaderImage 必须被分配为 QParameter 的值,并引用一个有效的 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);
class Access

常量

描述

Qt3DRender.QShaderImage.ReadOnly

图像将仅在着色器中读取

Qt3DRender.QShaderImage.WriteOnly

图像将仅从着色器中写入

Qt3DRender.QShaderImage.ReadWrite

图像将仅从着色器中读取和写入

class ImageFormat

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

常量

描述

Qt3DRender.QShaderImage.NoFormat

GL_NONE

Qt3DRender.QShaderImage.Automatic

Qt 3D 将尝试根据引用的纹理自动确定格式。

Qt3DRender.QShaderImage.R8_UNorm

GL_R8 (GLSL 类型 r8, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG8_UNorm

GL_RG8 (GLSL 类型 rg8, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA8_UNorm

GL_RGBA8 (GLSL类型rgba8,支持OpenGL 4.2+,OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R16_UNorm

GL_R16 (GLSL 类型 r16,支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG16_UNorm

GL_RG16 (GLSL 类型 rg16,支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA16_UNorm

GL_RGBA16 (GLSL类型rgba16,由OpenGL 4.2+支持)

Qt3DRender.QShaderImage.R8_SNorm

GL_R8_SNORM (GLSL类型 r8_snorm, 支持OpenGL 4.2+)

Qt3DRender.QShaderImage.RG8_SNorm

GL_RG8_SNORM (GLSL 类型 rg8_snorm, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA8_SNorm

GL_RGBA8_SNORM (GLSL 类型 rgba8_snorm, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R16_SNorm

GL_R16_SNORM (GLSL 类型 r16_snorm, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG16_SNorm

GL_RG16_SNORM (GLSL 类型 rg16_snorm, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA16_SNorm

GL_RGBA16_SNORM (GLSL 类型 rgba16_snorm, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.R8U

GL_R8UI (GLSL 类型 r8ui, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG8U

GL_RG8UI (GLSL 类型 rg8ui,支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA8U

GL_RGBA8UI (GLSL 类型 rgba8ui, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R16U

GL_R16UI (GLSL 类型 r16ui, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG16U

GL_RG16UI (GLSL 类型 rg16ui,由 OpenGL 4.2+ 支持)

Qt3DRender.QShaderImage.RGBA16U

GL_RGBA16UI (GLSL 类型 rgba16ui, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R32U

GL_R32UI (GLSL 类型 r32ui, 支持 OpenGL 4.2+, OpenGL ES 3.1)

Qt3DRender.QShaderImage.RG32U

GL_RG32UI (GLSL 类型 rg32ui,支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA32U

GL_RGBA32UI (GLSL 类型 rgba32ui, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R8I

GL_R8I (GLSL 类型 r8i, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG8I

GL_RG8I (GLSL 类型 rg8i, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA8I

GL_RGBA8I (GLSL 类型 rgba8i,支持 OpenGL 4.2+,OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R16I

GL_R16I (GLSL 类型 r16i, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG16I

GL_RG16I (GLSL 类型 rg16i, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA16I

GL_RGBA16I (GLSL 类型 rgba16i, 支持 OpenGL 4.2+, OpenGL ES 3.1)

Qt3DRender.QShaderImage.R32I

GL_R32I (GLSL 类型 r32i, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.RG32I

GL_RG32I (GLSL 类型 rg32i,由 OpenGL 4.2+ 支持)

Qt3DRender.QShaderImage.RGBA32I

GL_RGBA32I (GLSL 类型 rgba32i, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R16F

GL_R16F (GLSL 类型 r16f, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RG16F

GL_RG16F (GLSL 类型 rg16f, 支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGBA16F

GL_RGBA16F (GLSL 类型 rgba16f, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.R32F

GL_R32F (GLSL 类型 r32f, 支持 OpenGL 4.2+, OpenGL ES 3.1+)

Qt3DRender.QShaderImage.RG32F

GL_RG32F (GLSL类型rg32f,由OpenGL 4.2+支持)

Qt3DRender.QShaderImage.RGBA32F

GL_RGBA32F (GLSL类型rgba32f,支持OpenGL 4.2+,OpenGL ES 3.1+)

Qt3DRender.QShaderImage.RG11B10F

GL_R11F_G11F_B10F (GLSL 类型 r11f_g11f_b10f,由 OpenGL 4.2+ 支持)

Qt3DRender.QShaderImage.RGB10A2

GL_RGB10_A2 (GLSL 类型 rgb10_a2,支持 OpenGL 4.2+)

Qt3DRender.QShaderImage.RGB10A2U

GL_RGB10_A2UI (GLSL 类型 rgb10_a2ui,支持 OpenGL 4.2+)

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property accessᅟ: Qt3DRender.QShaderImage.Access

指定我们希望允许从着色器实例对图像进行的访问类型。如果着色器尝试从具有不兼容访问权限的图像进行写入或读取,则行为是未定义的。

默认值为 ReadWrite

Access functions:
property formatᅟ: Qt3DRender.QShaderImage.ImageFormat

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

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

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

默认值为Automatic

Access functions:
property layerᅟ: int

确定引用纹理中的哪一层应该用于QShaderImage。如果layered设置为true,或者引用纹理的类型与层不兼容,则此属性无效。

注意

当引用的纹理类型为立方体贴图或立方体贴图数组且ĺayered设置为false时,面和层的获取方式如下:

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

默认值为0。

Access functions:
property layeredᅟ: bool

*

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

默认值为false

Access functions:
property mipLevelᅟ: int

确定应该使用引用纹理中的哪个mipLevel用于QShaderImage

默认值为0。

Access functions:
property textureᅟ: QAbstractTexture
Access functions:
__init__([parent=None])
Parameters:

parentQNode

access()
Return type:

Access

另请参阅

setAccess()

属性 accessᅟ 的获取器。

accessChanged(access)
Parameters:

accessAccess

属性 accessᅟ 的通知信号。

format()
Return type:

ImageFormat

另请参阅

setFormat()

属性 formatᅟ 的获取器。

formatChanged(format)
Parameters:

格式ImageFormat

属性 formatᅟ 的通知信号。

layer()
Return type:

整数

另请参阅

setLayer()

属性 layerᅟ 的获取器。

layerChanged(layer)
Parameters:

layer – 整数

属性 layerᅟ 的通知信号。

layered()
Return type:

布尔

另请参阅

setLayered()

属性 layeredᅟ 的获取器。

layeredChanged(layered)
Parameters:

分层 – 布尔值

属性 layeredᅟ 的通知信号。

mipLevel()
Return type:

整数

另请参阅

setMipLevel()

属性 mipLevelᅟ 的获取器。

mipLevelChanged(mipLevel)
Parameters:

mipLevel – int

属性 mipLevelᅟ 的通知信号。

setAccess(access)
Parameters:

access访问

另请参阅

access()

属性 accessᅟ 的设置器。

setFormat(format)
Parameters:

格式ImageFormat

另请参阅

format()

属性 formatᅟ 的设置器。

setLayer(layer)
Parameters:

layer – 整数

另请参阅

layer()

属性 layerᅟ 的设置器。

setLayered(layered)
Parameters:

分层 – 布尔值

另请参阅

layered()

属性 layeredᅟ 的设置器。

setMipLevel(mipLevel)
Parameters:

mipLevel – int

另请参阅

mipLevel()

属性 mipLevelᅟ 的设置器。

setTexture(texture)
Parameters:

纹理QAbstractTexture

另请参阅

texture()

属性 textureᅟ 的设置器。

texture()
Return type:

QAbstractTexture

另请参阅

setTexture()

属性 textureᅟ 的获取器。

textureChanged(texture)
Parameters:

纹理QAbstractTexture

属性 textureᅟ 的通知信号。