- class QSGMaterial#
QSGMaterial
类封装了着色程序渲染状态。更多...继承自:
QSGVertexColorMaterial
,QSGFlatColorMaterial
,QSGOpaqueTextureMaterial
,QSGTextureMaterial
概述#
方法#
def
__init__()
def
flags()
def
setFlag()
虚拟方法#
def
compare()
def
createShader()
def
type()
说明
本文档可能包含从C++自动转换到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译中存在问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告知我们。
详细说明#
QSGMaterial
类和QSGMaterialShader
子类之间形成紧密的关系。对于每个场景图(包括嵌套图),都存在一个唯一的QSGMaterialShader
实例,它封装了场景图用于渲染该材料所需的着色器,例如用于几何体平涂色的着色器。每个QSGGeometryNode
都可以有一个独特的QSGMaterial
,包含在绘制该节点时如何配置着色器,例如用于渲染几何体的实际颜色。QSGMaterial
有两个需要实现的虚拟函数。函数type()
应返回所有特定子类实例的唯一实例。函数createShader()
应返回特定于该QSGMaterial
子类的QSGMaterialShader
的新实例。一个最小的
QSGMaterial
实现可能如下所示class Material : public QSGMaterial { public: QSGMaterialType *type() const override { static QSGMaterialType type; return &type; } QSGMaterialShader *createShader(QSGRendererInterface::RenderMode) const override { return new Shader; } };
请参阅 自定义材料示例,了解如何实现一个由
QQuickItem
子类、QSGGeometryNode
和自定义材料支持的QQuickItem
子类。说明
createShader()
仅在每个QSGMaterialType
的生命周期中调用一次,以减少着色器准备的冗余工作。如果一个QSGMaterial
支持多个顶点和片段着色器组合,则type()
的实现必须为每个着色器组合返回不同、唯一的QSGMaterialType
指针。说明
所有以QSG前缀的类都应该仅用于场景图渲染线程。有关更多信息,请参阅场景图和渲染。
- class Flag#
常量
描述
QSGMaterial.Blending
(继承自
enum.Flag
) 将此标志设置为true,如果材质需要在渲染时启用混合。QSGMaterial.RequiresDeterminant
将此标志设置为true,如果材质依赖于几何节点矩阵的行列式进行渲染。
QSGMaterial.RequiresFullMatrixExceptTranslate
将此标志设置为true,如果材质依赖于几何节点的完整矩阵进行渲染,除了平移部分。
QSGMaterial.RequiresFullMatrix
将此标志设置为true,如果材质依赖于几何节点的完整矩阵进行渲染。
QSGMaterial.NoBatching
将此标志设置为true,如果材质使用与场景图的批处理机制 不兼容的着色器。这在某些高级用法中是相关的,例如,直接在顶点着色器中操作
gl_Position.z
。此类解决方案通常与特定的场景结构相关联,并且在场景中使用的任意内容可能不安全。因此,应在适当的调查后才能设置此标志,并且对于绝大多数材质来说永远都不需要。设置此标志可能导致由于需要发出更多的绘制调用而性能降低。此标志是在Qt 6.3中引入的。QSGMaterial.CustomCompileStep
在Qt 6中,此标志与NoBatching相同。请优先使用NoBatching。
- __init__()#
- compare(other)#
- 参数::
other –
QSGMaterial
- 返回类型::
int
比较此材质与
other
,如果它们相等则返回0;如果此材质应该在other
之前排序则返回-1,如果other
应该在排序之前则返回1。场景图可以重新排序几何节点以最小化状态变化。在排序过程中调用比较函数,以便对材质进行排序,以在每个调用QSGMaterialShader::updateState()时最小化状态变化。
此指针和其他的保证具有相同的
type()
类型。- 抽象createShader(renderMode)#
- 参数::
renderMode –
RenderMode
- 返回类型::
此函数返回用于为
QSGMaterial
的具体实现渲染几何形状的QSGMaterialShader
实现的新实例。该函数仅对每种材料类型和
renderMode
组合调用一次,并且将在内部缓存。对于大多数材料,可以忽略
renderMode
。有些材料可能需要针对特定渲染模式进行自定义处理。例如,如果该材料实现了抗锯齿,在使用RenderMode3D时需要考虑透视变换。返回材料的标志。
如果
on
为true,则在此材料上设置标志flags
;否则清除属性。- 抽象type()#
- 返回类型::
此函数由场景图调用以查询
createShader()
实例化的QSGMaterialShader
的唯一标识符。对于许多材料,典型的做法是返回对静态的指针,即全局可用的
QSGMaterialType
实例的指针。该QSGMaterialType
是一个不可透明对象。其目的是仅作为类型安全的、简单的方式来生成唯一的材料标识符。QSGMaterialType *type() const override { static QSGMaterialType type; return &type; }