- 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; }