- class QSGTexture#
QSGTexture
类是场景图中所用纹理的基类。更多信息...继承自:
QSGDynamicTexture
概述#
方法#
def
__init__()
def
filtering()
def
setFiltering()
虚方法#
注意
本文档可能包含从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()#
- 返回类型:
返回用于过滤此纹理的各向异性级别。
另请参见
- commitTextureOperations(rhi, resourceUpdates)#
- 参数:
rhi –
QRhi
resourceUpdates –
QRhiResourceUpdateBatch
调用此函数以将图像上传操作入队到
resourceUpdates
,如果有挂起的操作。如果没有新数据(例如,从上次调用此函数以来没有调用 setImage()),则函数不执行任何操作。包含
rhi
纹理的材料应从其updateSampledImage()
实现中调用此函数,通常没有任何条件,通过从RenderState
获取state.rhi()
和state.resourceUpdateBatch()
传递。警告
此函数只能在渲染线程中调用。
- abstract comparisonKey()#
- 返回类型:
int
返回一个适合比较纹理的有效键。通常用于
compare()
实现中。仅仅比较
QSGTexture
指针并不总是足够,因为底层指向同一原生纹理对象的两个QSGTexture
实例也应该被认为是相等的。因此,需要这个函数。此函数的实现不应该,也不应创建任何图形资源(原生纹理对象),如果还没有的话。
一个没有原生纹理对象底层的
QSGTexture
通常 不等于 任何其他的QSGTexture
,因此必须相应地构建返回值。对此有例外,特别是当使用纹理图拼(多个纹理在底层共享相同的纹理图拼)时,那么这取决于子类的实现来适当地处理。警告
此函数只能在渲染线程中调用。
返回转换为归一化坐标的
rect
。返回用于此纹理的采样模式。
另请参见
- 抽象 hasAlphaChannel()#
- 返回类型:
bool
如果在纹理数据中包含 alpha 通道,则返回 true。
- 抽象 hasMipmaps()#
- 返回类型:
bool
如果纹理数据包含 mipmap 级别,则返回 true。
返回用于此纹理的水平包裹模式。
- isAtlasTexture()#
- 返回类型:
bool
返回此纹理是否是纹理图拼的一部分。
默认实现返回 false。
返回在从此纹理采样时是否应该使用 mipmap。
另请参见
返回在
textureSize()
内表示此纹理的坐标系中的矩形。默认实现返回一个位置在 (0, 0)、宽度和高度为 1 的矩形。
- removedFromAtlas([resourceUpdates=None])#
- 参数:
resourceUpdates –
QRhiResourceUpdateBatch
- 返回类型:
此函数返回当前纹理的一个副本,该副本已从其纹理组中移除。
当前纹理保持不变,因此不需要更新纹理坐标。
从纹理组中移除纹理主要在将其传递给在纹理坐标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)#
- 参数:
level –
AnisotropyLevel
将各向异性过滤级别设置为
level
。默认值为AnisotropyNone
,表示没有启用各向异性过滤。将采样模式设置为
filter
。另请参见
设置水平包装模式为
hwrap
另请参见
设置米普Sampling模式为
filter
.如果纹理没有米普,设置米普过滤没有效果。
另请参见
设置垂直包装模式为
vwrap
另请参见
返回纹理的像素大小。
返回用于此纹理的垂直包装模式。