场景图 - QML 下的 Metal#

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

../_images/metalunderqml-example.jpg

在 QML 下的 Metal 示例演示了一个应用程序如何使用 beforeRendering()beforeRenderPassRecording() 信号来在 Qt Quick 场景下绘制自定义 Metal 内容。该信号在每帧的开始处发出,在场景图开始渲染之前,因此对响应此信号的 Metal 绘制调用将堆叠在 Qt Quick 项目下。有两个信号,因为自定义 Metal 命令是用与场景图相同的渲染命令编码器记录到相同的命令缓冲区中的。仅使用 beforeRendering() 对于此目的是不够的,因为它在有可用 MTLRenderCommandEncoder 之前就已经在帧的开始处发出了。通过连接到 beforeRenderPassRecording(),应用程序可以访问必要的原生对象。

作为替代,希望在与 Qt Quick 场景顶部渲染 Metal 内容的应用程序可以通过连接到 afterRendering()afterRenderPassRecording() 信号来做到。

在此示例中,我们还将看到如何让 QML 能访问到影响 Metal 渲染的值。我们使用 QML 文件中的 NumberAnimation 动画来调整阈值值,这个值将由绘制 squircles 的 Metal 着色程序使用。

在大多数方式上,该示例与 OpenGL Under QMLDirect3D 11 Under QML ,和 Vulkan Under QML 示例相等,它们都渲染相同的自定义内容,只是通过不同的原生 API。

示例项目 @ code.qt.io