Szenengraph – Metal unter QML
Zeigt, wie unter einer „ Qt Quick “-Szene direkt mit Metal gerendert werden kann.
Qt Quick-Szene mit Textüberlagerung" src="images/metalunderqml-example.jpg" title="Animiertes „Squircle“, gerendert mit Metal in einer Qt Quick-Szene mit Textüberlagerung"/>
Das Beispiel „Metal unter QML“ zeigt, wie eine Anwendung die Signale „ QQuickWindow::beforeRendering()“ und „ QQuickWindow::beforeRenderPassRecording()“ nutzen kann, um benutzerdefinierte Metal-Inhalte in einer „ Qt Quick “-Szene zu zeichnen. Dieses Signal wird zu Beginn jedes Frames ausgegeben, bevor der Szenengraph mit dem Rendern beginnt. Daher werden alle Metal-Draw-Calls, die als Reaktion auf dieses Signal ausgeführt werden, unter den „ Qt Quick “-Elementen gestapelt. Es gibt zwei Signale, da die benutzerdefinierten Metal-Befehle mit demselben Render-Befehls-Encoder, den auch der Szenengraph verwendet, in denselben Befehlspuffer geschrieben werden. „beforeRendering()“ allein reicht hierfür nicht aus, da es zu Beginn des Frames ausgesendet wird, bevor ein „MTLRenderCommandEncoder“ verfügbar ist. Durch die zusätzliche Anbindung an „beforeRenderPassRecording()“ erhält die Anwendung Zugriff auf die erforderlichen nativen Objekte.
Alternativ können Anwendungen, die Metal-Inhalte über die „ Qt Quick “-Szene rendern möchten, dies tun, indem sie eine Verbindung zu den Signalen „ QQuickWindow::afterRendering()“ und „ QQuickWindow::afterRenderPassRecording()“ herstellen.
In diesem Beispiel werden wir außerdem sehen, wie es möglich ist, Werte an QML zu übergeben, die das Metal-Rendering beeinflussen. Wir animieren den Schwellenwert mithilfe eines „ NumberAnimation “ in der QML-Datei, und dieser Wert wird vom Metal-Shader-Programm verwendet, das die „Squircles“ zeichnet.
Das Beispiel entspricht in vielerlei Hinsicht den Beispielen „OpenGL unter QML“, „Direct3D 11 unter QML“ und „Vulkan unter QML“ – sie alle rendern denselben benutzerdefinierten Inhalt, lediglich über unterschiedliche native APIs.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.