QSGMaterial 类
QSGMaterial 类封装了着色器程序的渲染状态。 更多信息...
头文件 | #include <QSGMaterial> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake | QT += quick |
继承自 | QSGFlatColorMaterial、QSGOpaqueTextureMaterial、以及 QSGVertexColorMaterial |
- 所有成员的列表,包括继承的成员
- QSGMaterial 是 Qt Quick Scene Graph 材料类 的一部分。
公共类型
枚举 | Flag { Blending, RequiresDeterminant, RequiresFullMatrixExceptTranslate, RequiresFullMatrix, NoBatching, CustomCompileStep } |
标志 | 标志 |
公共函数
virtual int | compare(const QSGMaterial *other) const |
virtual QSGMaterialShader * | createShader(QSGRendererInterface::RenderMode renderMode) const = 0 |
QSGMaterial::Flags | flags() const |
void | setFlag(QSGMaterial::Flags flags, bool on = true) |
virtual QSGMaterialType * | type() const = 0 |
详细描述
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 和自定义材料的实现方法。
注意:每个createShader() 仅在每个 QSGMaterialType 调用一次,以减少着色器准备过程中的冗余工作。如果一个 QSGMaterial 由多个顶点着色器和片断着色器组合支持,则 type() 的实现必须为每个着色器组合返回一个不同、唯一的 QSGMaterialType 指针。
注意:所有以 QSG 为前缀的类应该在场景图渲染线程上单独使用。有关更多信息,请参见 场景图和渲染。
另请参阅 QSGMaterialShader,场景图 - 自定义材料,场景图 - 两个纹理提供者,和 场景图 - 图。
成员类型文档
枚举 QSGMaterial::Flag
标志 QSGMaterial::Flags
常数 | 值 | 描述 |
---|---|---|
QSGMaterial::Blending | 0x0001 | 将此标志设置为 true,如果材料在渲染期间需要启用混合。 |
QSGMaterial::RequiresDeterminant | 0x0002 | 将此标志设置为 true,如果材料在渲染上依赖于几何节点矩阵的行列式。 |
QSGMaterial::RequiresFullMatrixExceptTranslate | 0x0004 | RequiresDeterminant | 将此标志设置为 true,如果材料在渲染上依赖于几何节点的完整矩阵,除了平移部分。 |
QSGMaterial::RequiresFullMatrix | 0x0008 | RequiresFullMatrixExceptTranslate | 将此标志设置为 true,如果材料在渲染上依赖于几何节点的完整矩阵。 |
QSGMaterial::NoBatching | 0x0010 | 如果材料使用与场景图的批处理机制不兼容的着色器,将此标志设置为 true。这适用于某些高级用法,例如在顶点着色器中直接操作 gl_Position.z 。这种解决方案通常与特定的场景结构相关联,并且很可能不安全地与场景中任意内容一起使用。因此,应在适当调查后设置此标志,并且对于大多数材料来说,永远不会需要它。设置此标志可能导致由于需要发出更多绘制调用而性能降低。此标志是在 Qt 6.3 中引入的。 |
QSGMaterial::CustomCompileStep | NoBatching | 在 Qt 6 中,此标志与 NoBatching 相同。建议使用 NoBatching。 |
Flags 类型是 QFlags
成员函数文档
[virtual]
int QSGMaterial::compare(const QSGMaterial *other) const
将此材料与 other 进行比较,如果它们相同则返回 0;如果 other 应在 other 前排序则返回 -1,反之亦然。
场景图可以重新排列几何节点以最小化状态变化。比较函数在排序过程中被调用,以便将材料排序,以使每次调用 QSGMaterialShader::updateState() 时的状态更改最小化。
此指针和 other 保证具有相同的 type()。
[pure virtual]
QSGMaterialShader *QSGMaterial::createShader(QSGRendererInterface::RenderMode renderMode) const
此函数返回一个用于渲染特定 QSGMaterial 实现几何图形的 QSGMaterialShader 实现的新实例。
该函数会为每种材料类型和 渲染模式 的组合调用一次,并且会在内部进行缓存。
对于大多数材料,可以忽略 渲染模式。一些材料可能需要针对特定渲染模式进行自定义处理。例如,如果材料以在 RenderMode3D 使用时需要考虑透视变换的方式实现抗锯齿。
QSGMaterial::Flags QSGMaterial::flags() const
返回材料的标志。
void QSGMaterial::setFlag(QSGMaterial::Flags flags, bool on = true)
on 为 true 时,在此材料上设置标志 flags,否则清除该属性。
[纯虚函数]
QSGMaterialType *QSGMaterial::type() const
此函数由场景图调用,以查询由 createShader() 实例化的 QSGMaterialShader 的唯一标识符。
对于许多材料,典型的方法是返回一个指向静态和全局可用的 QSGMaterialType 实例的指针。QSGMaterialType 是一个不可见对象。它的目的是作为一个类型安全、简单的方式来生成唯一的材料标识符。
QSGMaterialType *type() const override { static QSGMaterialType type; return &type; }
© 2024 The Qt Company Ltd. 本文件中的文档贡献权属于各自的拥有者。本文件提供的文档受 GNU 自由文档许可证版本 1.3 的条款许可,由自由软件基金会发布。Qt 及其相关标志是 The Qt Company Ltd 在芬兰和/或其他国家/地区的商标。所有其他商标均为其各自所有者的财产。