场景图 - QML 下的 Metal

展示如何在 Qt Quick 场景下直接使用 Metal 进行渲染。

QML 下的 Metal 示例显示了一个应用程序如何利用 QQuickWindow::beforeRendering() 和 QQuickWindow::beforeRenderPassRecording() 信号,在 Qt Quick 场景下绘制自定义 Metal 内容。此信号在每个帧的开始时发出,在场景图开始渲染之前,因此任何响应此信号的 Metal 绘制调用都将堆叠在 Qt Quick 对象之下。由于自定义 Metal 命令记录在场景图使用的相同命令缓冲区和相同的渲染命令编码器中,因此仅使用 beforeRendering() 是不够的,因为它在帧开始时发出,在获得 MTLRenderCommandEncoder 之前。通过同时连接到 beforeRenderPassRecording(),应用程序可以获得必要的本地对象。

作为替代,希望希望在 Qt Quick 场景上方渲染 Metal 内容的应用程序可以通过连接到 QQuickWindow::afterRendering() 和 QQuickWindow::afterRenderPassRecording() 信号来实现。

在这个示例中,我们还将展示如何使 QML 暴露的值影响 Metal 渲染。我们在 QML 文件中使用 NumberAnimation 动画 threshold 值,此值由绘制 squircles 的 Metal 着色器程序使用。

这个示例从大多数方面来看与 OpenGL Under QMLDirect3D 11 Under QMLVulkan Under QML 示例相似,它们都渲染相同的功能,只是通过不同的本地 API。

示例项目 @ code.qt.io

© 2024 The Qt Company Ltd. 本文档的贡献者是各自版权的所有者。本提供的文档是在自由软件基金会出版的 GNU 自由文档许可证版本 1.3 条件下授权的。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为各自所有者的财产。