PySide6.QtQuick.QSGTexture

class QSGTexture

QSGTexture 类是用于场景图中的纹理的基类。更多

PySide6.QtQuick.QSGTexture 的继承图

继承自: QSGDynamicTexture

概要

方法

虚拟方法

注意

本文档可能包含从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:

AnisotropyLevel

返回用于过滤此纹理的各向异性级别。

另请参阅

setAnisotropyLevel()

commitTextureOperations(rhi, resourceUpdates)
Parameters:
  • rhiQRhi

  • resourceUpdatesQRhiResourceUpdateBatch

调用此函数将图像上传操作加入resourceUpdates队列,以防有任何待处理的操作。当没有新数据时(例如,因为自上次调用此函数以来没有调用setImage()),该函数不执行任何操作。

涉及rhi纹理的材料应从其updateSampledImage()实现中调用此函数,通常没有任何条件,从RenderState传递state.rhi()state.resourceUpdateBatch()

警告

此函数只能从渲染线程调用。

abstract comparisonKey()
Return type:

整数

返回一个适合比较纹理的键。通常用于compare()的实现中。

仅仅比较QSGTexture指针并不总是足够的,因为两个QSGTexture实例如果引用的是相同的底层原生纹理对象,也应该被视为相等。因此需要这个函数。

此函数的实现不应,也不应在尚未存在任何图形资源(本地纹理对象)的情况下创建任何图形资源。

一个没有本地纹理对象在底层的QSGTexture通常等于任何其他QSGTexture,因此返回值必须相应地制作。这种情况有例外,特别是在使用图集时(其中多个纹理在底层共享同一个图集纹理),这取决于子类实现来适当地处理。

警告

此函数只能从渲染线程调用。

convertToNormalizedSourceRect(rect)
Parameters:

矩形QRectF

Return type:

QRectF

返回转换为归一化坐标的rect

filtering()
Return type:

过滤

返回用于此纹理的采样模式。

另请参阅

setFiltering()

abstract hasAlphaChannel()
Return type:

布尔

如果纹理数据包含一个alpha通道,则返回true。

abstract hasMipmaps()
Return type:

布尔

如果纹理数据包含mipmap级别,则返回true。

horizontalWrapMode()
Return type:

WrapMode

返回用于此纹理的水平环绕模式。

isAtlasTexture()
Return type:

布尔

返回此纹理是否是图集的一部分。

默认实现返回 false。

mipmapFiltering()
Return type:

过滤

返回从该纹理采样时是否应使用mipmapping。

另请参阅

setMipmapFiltering()

normalizedTextureSubRect()
Return type:

QRectF

返回此纹理在归一化坐标中表示的textureSize()内的矩形。

默认实现返回一个位于位置 (0, 0) 且宽度和高度为 1 的矩形。

removedFromAtlas([resourceUpdates=None])
Parameters:

resourceUpdatesQRhiResourceUpdateBatch

Return type:

QSGTexture

此函数返回从图集中移除的当前纹理的副本。

当前纹理保持不变,因此不需要更新纹理坐标。

从图集中移除纹理主要是在将其传递给一个在纹理坐标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:

levelAnisotropyLevel

设置各向异性过滤的级别为level。默认值为AnisotropyNone,表示未启用各向异性过滤。

注意

根据使用的图形API,请求可能会被忽略。无法保证在运行时支持各向异性过滤。

另请参阅

anisotropyLevel()

setFiltering(filter)
Parameters:

filter过滤

将采样模式设置为filter

另请参阅

filtering()

setHorizontalWrapMode(hwrap)
Parameters:

hwrapWrapMode

将水平换行模式设置为 hwrap

另请参阅

horizontalWrapMode()

setMipmapFiltering(filter)
Parameters:

filter过滤

将mipmap采样模式设置为filter

如果纹理没有mipmaps,设置mipmap过滤将无效。

setVerticalWrapMode(vwrap)
Parameters:

vwrapWrapMode

设置垂直换行模式为 vwrap

另请参阅

verticalWrapMode()

abstract textureSize()
Return type:

QSize

返回纹理的像素大小。

verticalWrapMode()
Return type:

WrapMode

返回用于此纹理的垂直环绕模式。

另请参阅

setVerticalWrapMode()