class QSGTexture#

QSGTexture 类是场景图中所用纹理的基类。更多信息...

Inheritance diagram of 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()》报告纹理是否包含米柏级别。

与纹理一起工作的Material重新实现了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 - 分数部分。此值自 Qt 5.10 起已引入。

class Filtering#

指定当纹理坐标未对齐到像素时如何过滤 texels 的采样。

常数

描述

QSGTexture.None

不应进行过滤。此值只与 setMipmapFiltering() 一起使用。

QSGTexture.Nearest

采样返回最近的纹素。

QSGTexture.Linear

采样返回相邻纹素的线性插值。

class AnisotropyLevel#

指定当纹理未与屏幕对齐时使用的各向异性过滤级别。

常数

描述

QSGTexture.AnisotropyNone

无各向异性过滤。

QSGTexture.Anisotropy2x

2x各向异性过滤。

QSGTexture.Anisotropy4x

4x各向异性过滤。

QSGTexture.Anisotropy8x

8x各向异性过滤。

QSGTexture.Anisotropy16x

16x各向异性过滤。

__init__()#

构建 QSGTexture 的基础类。

anisotropyLevel()#
返回类型:

AnisotropyLevel

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

另请参见

setAnisotropyLevel()

commitTextureOperations(rhi, resourceUpdates)#
参数:
  • rhiQRhi

  • resourceUpdatesQRhiResourceUpdateBatch

调用此函数以将图像上传操作入队到 resourceUpdates,如果有挂起的操作。如果没有新数据(例如,从上次调用此函数以来没有调用 setImage()),则函数不执行任何操作。

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

警告

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

abstract comparisonKey()#
返回类型:

int

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

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

此函数的实现不应该,也不应创建任何图形资源(原生纹理对象),如果还没有的话。

一个没有原生纹理对象底层的 QSGTexture 通常 不等于 任何其他的 QSGTexture ,因此必须相应地构建返回值。对此有例外,特别是当使用纹理图拼(多个纹理在底层共享相同的纹理图拼)时,那么这取决于子类的实现来适当地处理。

警告

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

convertToNormalizedSourceRect(rect)#
参数:

rectQRectF

返回类型:

QRectF

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

filtering()#
返回类型:

过滤

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

另请参见

setFiltering()

抽象 hasAlphaChannel()#
返回类型:

bool

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

抽象 hasMipmaps()#
返回类型:

bool

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

horizontalWrapMode()#
返回类型:

WrapMode

返回用于此纹理的水平包裹模式。

isAtlasTexture()#
返回类型:

bool

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

默认实现返回 false。

mipmapFiltering()#
返回类型:

过滤

返回在从此纹理采样时是否应该使用 mipmap。

另请参见

setMipmapFiltering()

normalizedTextureSubRect()#
返回类型:

QRectF

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

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

removedFromAtlas([resourceUpdates=None])#
参数:

resourceUpdatesQRhiResourceUpdateBatch

返回类型:

QSGTexture

此函数返回当前纹理的一个副本,该副本已从其纹理组中移除。

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

从纹理组中移除纹理主要在将其传递给在纹理坐标0-1上操作的着色器时有用,而不是纹理组内部的纹理子矩形。

如果纹理不是纹理组的组成部分,此函数返回0。

建议在此函数的实现中,对多次调用返回相同的实例,以限制内存使用。

resourceUpdates是一个可选的资源更新批量,纹理操作(如果有),将在此批量上排队。材料可以从RenderState获取一个实例。当为null时,removedFromAtlas()实现创建自己的批量并立即提交。然而,当指定了一个有效的实例时,此函数将不会提交更新批量。

警告

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

resolveInterface(name, revision)#
参数:
  • name – str

  • revision – int

返回类型:

void

rhiTexture()#
返回类型:

QRhiTexture

返回该QSGTexture的QRhiTexture或null(因为没有QRhiTexture,或者因为该概念不适用于所使用的场景图后端)。

如果不存在QRhiTexture,此函数不期望创建一个新的QRhiTexture。在这种情况下,它应返回null。对渲染器的期望是使用透明、虚拟的纹理。

警告

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

setAnisotropyLevel(level)#
参数:

levelAnisotropyLevel

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

注意

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

另请参见

anisotropyLevel()

setFiltering(filter)#
参数:

filterFiltering

将采样模式设置为filter

另请参见

filtering()

setHorizontalWrapMode(hwrap)#
参数:

hwrapWrapMode

设置水平包装模式为hwrap

另请参见

horizontalWrapMode()

setMipmapFiltering(filter)#
参数:

filterFiltering

设置米普Sampling模式为filter.

如果纹理没有米普,设置米普过滤没有效果。

另请参见

hasMipmaps()

setVerticalWrapMode(vwrap)#
参数:

vwrapWrapMode

设置垂直包装模式为vwrap

另请参见

verticalWrapMode()

抽象 textureSize()#
返回类型:

QSize

返回纹理的像素大小。

verticalWrapMode()#
返回类型:

WrapMode

返回用于此纹理的垂直包装模式。

另请参见

setVerticalWrapMode()