Hallo Vulkan-Dreieck Beispiel
Zeigt die Grundlagen des Renderings mit QVulkanWindow und der Vulkan-API.
Das Hello Vulkan Triangle-Beispiel erstellt eine vollständige Grafikpipeline, einschließlich eines Vertex- und Fragment-Shaders, zum Rendern eines Dreiecks.
Starten
Jede Qt-Anwendung, die Vulkan verwendet, muss über eine Vulkan instance
verfügen, die den Zustand auf Anwendungsebene kapselt und eine Vulkan-Bibliothek initialisiert.
Ein QVulkanWindow muss immer mit einem QVulkanInstance verknüpft sein und daher führt das Beispiel die Instanzerstellung vor dem Fenster durch. Das QVulkanInstance Objekt muss auch das Fenster überdauern.
QVulkanInstance inst; inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); if (!inst.create()) qFatal("Failed to create Vulkan instance: %d", inst.errorCode());
Das Beispiel aktiviert Validierungsebenen, sofern sie unterstützt werden. Wenn die angeforderten Ebenen nicht vorhanden sind, wird die Anfrage ignoriert. Weitere Ebenen und Erweiterungen können auf ähnliche Weise aktiviert werden.
VulkanWindow w; w.setVulkanInstance(&inst); w.resize(1024, 768); w.show();
Sobald die Instanz fertig ist, ist es an der Zeit, ein Fenster zu erstellen. Beachten Sie, dass w
auf dem Stack liegt und nach inst
deklariert wird.
Die Unterklasse QVulkanWindow
Um einem QVulkanWindow benutzerdefinierte Funktionen hinzuzufügen, wird eine Subklasse verwendet. Dies folgt den bestehenden Mustern von QOpenGLWindow und QOpenGLWidget. QVulkanWindow verwendet jedoch ein separates QVulkanWindowRenderer Objekt.
Die Subklasse QVulkanWindow implementiert die Fabrikfunktion QVulkanWindow::createRenderer() neu. Diese gibt einfach eine neue Instanz der Unterklasse QVulkanWindowRenderer zurück. Um über das Window-Objekt auf verschiedene Vulkan-Ressourcen zugreifen zu können, wird über den Konstruktor ein Zeiger auf das Fenster übergeben und gespeichert.
class VulkanWindow : public QVulkanWindow { public: QVulkanWindowRenderer *createRenderer() override; };
Das eigentliche Rendering
QVulkanWindow Unterklassen stellen ihre Zeichenaufrufe in ihrer Neuimplementierung von QVulkanWindowRenderer::startNextFrame() in eine Warteschlange. Sobald sie fertig sind, müssen sie QVulkanWindow::frameReady() zurückrufen. Das Beispiel hat keine asynchrone Befehlsgenerierung, so dass der frameReady()-Aufruf direkt aus startNextFrame() erfolgt. Um kontinuierliche Aktualisierungen zu erhalten, ruft das Beispiel einfach QWindow::requestUpdate() auf, um eine Neuzeichnung zu planen.
Das Beispiel demonstriert auch Multisample-Antialiasing. Basierend auf den unterstützten Samples, die von QVulkanWindow::supportedSampleCounts() gemeldet werden, wählt das Beispiel zwischen 8x, 4x oder keinem Multisampling. Nach der Konfiguration über QVulkanWindow::setSamples() kümmert sich QVulkanWindow um den Rest: Die zusätzlichen Multisample-Farbpuffer werden automatisch erstellt und die Auflösung in die Swapchain-Puffer erfolgt am Ende des Standard-Rendering-Passes für jedes Bild.
Ausführen des Beispiels
Zum Ausführen des Beispiels von Qt Creatorzu starten, öffnen Sie den Modus Welcome und wählen Sie das Beispiel unter Examples aus. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.
© 2025 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.