PySide6.QtQuick.QSGTexture¶
- class QSGTexture¶
QSGTexture类是用于场景图中的纹理的基类。更多…继承自:
QSGDynamicTexture概要¶
方法¶
def
__init__()def
filtering()def
setFiltering()
虚拟方法¶
def
comparisonKey()def
hasMipmaps()def
isAtlasTexture()def
rhiTexture()def
textureSize()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
用户可以自由实现自己的纹理类,以支持任意输入纹理,例如YUV视频帧或8位alpha遮罩。场景图提供了RGBA纹理的默认实现。默认实现不是直接实例化的,而是通过工厂函数构造的,例如
createTextureFromImage()。使用默认实现时,每个
QSGTexture都由一个QRhiTexture支持,而QRhiTexture又包含一个本地纹理对象,例如OpenGL纹理或Vulkan图像。像素大小由
textureSize()给出。hasAlphaChannel()报告纹理是否包含不透明度值,hasMipmaps()报告纹理是否包含mipmap级别。Materials与纹理一起工作的材料重新实现了updateSampledImage()以提供逻辑,决定在给定的着色器资源绑定点上应暴露哪个QSGTexture的底层原生纹理。QSGTexture不分离图像(纹理)和采样器对象。过滤和包裹的参数可以通过setMipmapFiltering()、setFiltering()、setHorizontalWrapMode()和setVerticalWrapMode()来指定。场景图和Qt的图形抽象会在适用时负责创建单独的采样器对象。纹理图集¶
一些场景图后端使用纹理图集,将多个小纹理组合成一个大纹理。如果是这种情况,函数
isAtlasTexture()将返回 true。图集用于帮助渲染算法进行更好的排序,从而提高性能。图集对于批处理(合并几何体以减少绘制调用次数)也是必不可少的,因为使用两个不同 QSGTextures 的相同材质的两个实例是不可批处理的,而如果两个 QSGTextures 引用同一个图集,则可以发生批处理,假设材质在其他方面是兼容的。纹理在图集中的位置由
normalizedTextureSubRect()函数给出。如果纹理的使用方式不适合使用图集,可以使用函数
removedFromAtlas()来提取一个非图集的副本。注意
所有带有QSG前缀的类应仅在场景图的渲染线程上使用。有关更多信息,请参见场景图和渲染。
- class WrapMode¶
指定采样器应如何处理纹理坐标。
常量
描述
QSGTexture.Repeat
仅使用纹理坐标的小数部分,导致大于1和小于0的值重复。
QSGTexture.ClampToEdge
大于1的值被限制为1,小于0的值被限制为0。
QSGTexture.MirroredRepeat
当纹理坐标为偶数时,仅使用小数部分。当为奇数时,纹理坐标设置为
1 - fractional part。此值已在Qt 5.10中引入。
- class Filtering¶
指定当纹理坐标未与像素对齐时,应如何过滤纹理元素的采样。
常量
描述
QSGTexture.None
不应进行过滤。此值仅与
setMipmapFiltering()一起使用。QSGTexture.Nearest
采样返回最近的纹理像素。
QSGTexture.Linear
采样返回相邻纹理的线性插值。
- class AnisotropyLevel¶
指定当纹理未与屏幕对齐时使用的各向异性过滤级别。
常量
描述
QSGTexture.AnisotropyNone
无各向异性过滤。
QSGTexture.Anisotropy2x
2倍各向异性过滤。
QSGTexture.Anisotropy4x
4倍各向异性过滤。
QSGTexture.Anisotropy8x
8倍各向异性过滤。
QSGTexture.Anisotropy16x
16倍各向异性过滤。
- __init__()¶
构建
QSGTexture基类。- anisotropyLevel()¶
- Return type:
返回用于过滤此纹理的各向异性级别。
另请参阅
- commitTextureOperations(rhi, resourceUpdates)¶
- Parameters:
rhi –
QRhiresourceUpdates –
QRhiResourceUpdateBatch
调用此函数将图像上传操作加入
resourceUpdates队列,以防有任何待处理的操作。当没有新数据时(例如,因为自上次调用此函数以来没有调用setImage()),该函数不执行任何操作。涉及
rhi纹理的材料应从其updateSampledImage()实现中调用此函数,通常没有任何条件,从RenderState传递state.rhi()和state.resourceUpdateBatch()。警告
此函数只能从渲染线程调用。
- abstract comparisonKey()¶
- Return type:
整数
返回一个适合比较纹理的键。通常用于
compare()的实现中。仅仅比较
QSGTexture指针并不总是足够的,因为两个QSGTexture实例如果引用的是相同的底层原生纹理对象,也应该被视为相等。因此需要这个函数。此函数的实现不应,也不应在尚未存在任何图形资源(本地纹理对象)的情况下创建任何图形资源。
一个没有本地纹理对象在底层的
QSGTexture通常不等于任何其他QSGTexture,因此返回值必须相应地制作。这种情况有例外,特别是在使用图集时(其中多个纹理在底层共享同一个图集纹理),这取决于子类实现来适当地处理。警告
此函数只能从渲染线程调用。
返回转换为归一化坐标的
rect。返回用于此纹理的采样模式。
另请参阅
- abstract hasAlphaChannel()¶
- Return type:
布尔
如果纹理数据包含一个alpha通道,则返回true。
- abstract hasMipmaps()¶
- Return type:
布尔
如果纹理数据包含mipmap级别,则返回true。
返回用于此纹理的水平环绕模式。
- isAtlasTexture()¶
- Return type:
布尔
返回此纹理是否是图集的一部分。
默认实现返回 false。
返回从该纹理采样时是否应使用mipmapping。
另请参阅
返回此纹理在归一化坐标中表示的
textureSize()内的矩形。默认实现返回一个位于位置 (0, 0) 且宽度和高度为 1 的矩形。
- removedFromAtlas([resourceUpdates=None])¶
- Parameters:
resourceUpdates –
QRhiResourceUpdateBatch- Return type:
此函数返回从图集中移除的当前纹理的副本。
当前纹理保持不变,因此不需要更新纹理坐标。
从图集中移除纹理主要是在将其传递给一个在纹理坐标0-1上操作而不是在图集内的纹理子矩形上操作的着色器时有用。
如果纹理不是纹理图集的一部分,此函数返回0。
建议此函数的实现为多次调用返回相同的实例,以限制内存使用。
resourceUpdates是一个可选的资源更新批次,如果有纹理操作,则会在此批次上排队。材料可以从RenderState中获取实例。当为 null 时,removedFromAtlas() 实现会创建自己的批次并立即提交。然而,当指定了有效的实例时,此函数将不会提交更新批次。警告
此函数只能从渲染线程调用。
- resolveInterface(name, revision)¶
- Parameters:
name – str
revision – int
- Return type:
void
- rhiTexture()¶
- Return type:
QRhiTexture
返回此
QSGTexture的QRhiTexture,如果没有则返回null(可能是因为尚未在内部创建有效的纹理,或者因为该概念不适用于当前使用的场景图后端)。此函数预计不会在没有QRhiTexture的情况下创建新的QRhiTexture。在这种情况下,它应返回null。对渲染器的期望是,null纹理会导致使用透明的虚拟纹理。
警告
此函数只能从渲染线程调用。
- setAnisotropyLevel(level)¶
- Parameters:
level –
AnisotropyLevel
设置各向异性过滤的级别为
level。默认值为AnisotropyNone,表示未启用各向异性过滤。将采样模式设置为
filter。另请参阅
将水平换行模式设置为
hwrap另请参阅
将mipmap采样模式设置为
filter。如果纹理没有mipmaps,设置mipmap过滤将无效。
设置垂直换行模式为
vwrap另请参阅
返回纹理的像素大小。
返回用于此纹理的垂直环绕模式。