- class QShaderImage#
提供对着色器程序的图像访问。 更多…
摘要#
属性#
方法#
def
__init__()
def
access()
def
format()
def
layer()
def
layered()
def
mipLevel()
def
texture()
槽#
def
setAccess()
def
setFormat()
def
setLayer()
def
setLayered()
def
setMipLevel()
def
setTexture()
信号#
def
accessChanged()
def
formatChanged()
def
layerChanged()
def
layeredChanged()
注意
本文档可能包含从C++自动翻译为Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,也可以在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告诉我们
详细描述#
要使纹理内容可供着色器进行读写操作,它们需要以
QShaderImage
的形式公布。纹理可以由多个MIP级别、层和面组成。此外,声明一个QShaderImage
允许指定我们要访问纹理内容的哪个级别、层或面。QShaderImage
必须被分配为QParameter
的值,并引用有效的QAbstractTexture
才能正常工作。如果引用的纹理是一维数组、二维数组、三维、立方体贴图、立方体贴图数组或二维多样本数组纹理,可以通过
layered
属性控制绑定整个纹理级别或纹理级别的一个单独的层或面。仅支持OpenGL 4的
QShaderImage
,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
时可以直接使用属性,否则通过访问函数。- 属性 access: Qt3DRender.QShaderImage.Access#
指定我们希望允许从着色器实例到图像的访问类型。如果着色器尝试从一个访问不完全兼容的图像中读写,行为是未定义的。
默认值为
ReadWrite
。- 访问函数
- 属性 format: Qt3DRender.QShaderImage.ImageFormat#
指定图像格式,这在从着色器向图像存储值时非常重要。
格式不必与引用纹理的格式相同。然而,它必须兼容(大小匹配,但不一定是类类型)。例如,格式为R32F(大小32位,类1x32)的纹理可以与格式为RGBA8I(大小32位,类4x8)的图像一起使用。OpenGL规范中的表8.27显示了所有受支持的图像格式的大小和类。
默认情况下,Qt3D会尝试将图像格式设置与引用纹理匹配。
默认值为
Automatic
。- 访问函数
- 属性 layer: int#
包含用于
QShaderImage
的引用纹理中的哪一层应该被使用。如果设置了layered
或引用纹理类型与层不兼容,此属性不执行任何操作。注意
当引用纹理为立方体贴图或立方体贴图数组,并且将
layered
设置为false时,通过以下方式检索面和层:cubeMapLayer = layer / 6 cubeMapFace = layer - (cubeMapLayer * 6)
默认值为0。
- 访问函数
- 属性 layered: bool#
*
如果设置为 true,则当引用的纹理是一维数组、二维数组、三维、立方体贴图、立方体贴图数组或二维多采样数组纹理时,整个级别将绑定到所有层。如果设置为 false,则仅绑定由
layer
属性指定的单个层。默认值为
false
。- 访问函数
- 属性 mipLevel: int#
保留应使用的引用纹理的哪个 mipLevel。
默认值为0。
- 访问函数
- 属性 texture: QAbstractTexture#
- 访问函数
- __init__([parent=None])#
- 参数:
parent –
QNode
- access()#
- 返回类型:
访问权限
另请参阅
setAccess()
属性
access
的获取器。- accessChanged(access)#
- 参数:
access –
Access
属性
access
的通知信号。- format()#
- 返回类型:
图像格式
另请参阅
setFormat()
属性
format
的获取器。- formatChanged(format)#
- 参数:
格式 –
ImageFormat
属性
format
的通知信号。- layer()#
- 返回类型:
int
另请参阅
setLayer()
属性
layer
的获取器。- layerChanged(layer)#
- 参数:
layer – int
属性
layer
的通知信号。- layered()#
- 返回类型:
bool
另请参阅
setLayered()
属性
layered
的获取器。- layeredChanged(layered)#
- 参数:
layered – bool
属性
layered
的通知信号。- mipLevel()#
- 返回类型:
int
另请参阅
setMipLevel()
属性
mipLevel
的获取器。- mipLevelChanged(mipLevel)#
- 参数:
mipLevel – int
属性
mipLevel
的通知信号。- setAccess(access)#
- 参数:
access –
Access
另请参阅
access()
属性
access
的设置器。- setFormat(format)#
- 参数:
格式 –
ImageFormat
另请参阅
format()
属性
format
的设置器。- setLayer(layer)#
- 参数:
layer – int
另请参阅
layer()
属性
layer
的设置器。- setLayered(layered)#
- 参数:
layered – bool
另请参阅
layered()
属性《layered》的设置器。
- setMipLevel(mipLevel)#
- 参数:
mipLevel – int
另请参阅
mipLevel()
属性《mipLevel》的设置器。
- setTexture(texture)#
- 参数:
texture –
QAbstractTexture
另请参阅
texture()
属性《texture》的设置器。
- texture()#
- 返回类型:
QAbstractTexture
另请参阅
setTexture()
属性《texture》的读取器。
- textureChanged(texture)#
- 参数:
texture –
QAbstractTexture
属性《texture》的通知信号。