class QSGMaterial#

QSGMaterial 类封装了着色程序渲染状态。更多...

继承自:QSGVertexColorMaterialQSGFlatColorMaterialQSGOpaqueTextureMaterialQSGTextureMaterial

概述#

方法#

  • 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)#
参数::

otherQSGMaterial

返回类型::

int

比较此材质与other,如果它们相等则返回0;如果此材质应该在other之前排序则返回-1,如果other应该在排序之前则返回1。

场景图可以重新排序几何节点以最小化状态变化。在排序过程中调用比较函数,以便对材质进行排序,以在每个调用QSGMaterialShader::updateState()时最小化状态变化。

此指针和其他的保证具有相同的 type() 类型。

抽象createShader(renderMode)#
参数::

renderModeRenderMode

返回类型::

QSGMaterialShader

此函数返回用于为QSGMaterial的具体实现渲染几何形状的QSGMaterialShader实现的新实例。

该函数仅对每种材料类型和renderMode组合调用一次,并且将在内部缓存。

对于大多数材料,可以忽略renderMode。有些材料可能需要针对特定渲染模式进行自定义处理。例如,如果该材料实现了抗锯齿,在使用RenderMode3D时需要考虑透视变换。

flags()#
返回类型::

Flag的组合

返回材料的标志。

setFlag(flags[, on=true])#
参数::
  • flagsFlag的组合

  • on – bool

如果on为true,则在此材料上设置标志flags;否则清除属性。

抽象type()#
返回类型::

QSGMaterialType

此函数由场景图调用以查询createShader()实例化的QSGMaterialShader的唯一标识符。

对于许多材料,典型的做法是返回对静态的指针,即全局可用的QSGMaterialType实例的指针。该QSGMaterialType是一个不可透明对象。其目的是仅作为类型安全的、简单的方式来生成唯一的材料标识符。

QSGMaterialType *type() const override
{
    static QSGMaterialType type;
    return &type;
}