Hallo – Beispiel für ein Vulkan-Dreieck
Zeigt die Grundlagen des Renderings mit „ QVulkanWindow “ und der Vulkan-API.
Das „Hello Vulkan“-Dreieck-Beispiel erstellt eine vollständige Grafik-Pipeline, einschließlich eines Vertex- und eines Fragment-Shaders, um ein Dreieck zu rendern.

Start
Jede Qt-Anwendung, die Vulkan nutzt, 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; daher wird im Beispiel die Instanz vor dem Fenster erstellt. Das „ QVulkanInstance “-Objekt muss zudem länger bestehen bleiben als das Fenster.
QVulkanInstance inst;
inst.setLayers({ "VK_LAYER_KHRONOS_validation" });
if (!inst.create())
qFatal("Failed to create Vulkan instance: %d", inst.errorCode());Das Beispiel aktiviert Validierungs-Layer, sofern diese unterstützt werden. Sind die angeforderten Layer nicht vorhanden, wird die Anfrage ignoriert. Weitere Layer und Erweiterungen können auf ähnliche Weise aktiviert werden.
VulkanWindow w;
w.setVulkanInstance(&inst);
w.resize(1024, 768);
w.show();Sobald die Instanz bereit ist, ist es an der Zeit, ein Fenster zu erstellen. Beachten Sie, dass „ w “ auf dem Stack verbleibt und nach „ inst “ deklariert wird.
Die Unterklasse „QVulkanWindow“
Um einem ` QVulkanWindow` benutzerdefinierte Funktionen hinzuzufügen, wird eine Unterklasse verwendet. Dies folgt den bestehenden Mustern aus ` QOpenGLWindow ` und ` QOpenGLWidget`. Allerdings verwendet ` QVulkanWindow ` ein separates ` QVulkanWindowRenderer `-Objekt.
Die Unterklasse „ QVulkanWindow “ implementiert die Factory-Funktion „ QVulkanWindow::createRenderer()“ neu. Diese gibt einfach eine neue Instanz der Unterklasse „ QVulkanWindowRenderer “ zurück. Um über das Fensterobjekt auf verschiedene Vulkan-Ressourcen zugreifen zu können, wird ein Zeiger auf das Fenster übergeben und über den Konstruktor gespeichert.
class VulkanWindow : public QVulkanWindow
{
public:
QVulkanWindowRenderer *createRenderer() override;
};Das eigentliche Rendern
QVulkanWindow Unterklassen stellen ihre Zeichenaufrufe in ihrer Neuimplementierung von ` QVulkanWindowRenderer::startNextFrame()` in die Warteschlange. Sobald dies geschehen ist, müssen sie ` QVulkanWindow::frameReady()` zurückrufen. Das Beispiel enthält keine asynchrone Befehlsgenerierung, daher erfolgt der Aufruf von `frameReady()` direkt aus `startNextFrame()`. Um kontinuierliche Aktualisierungen zu erhalten, ruft das Beispiel einfach ` QWindow::requestUpdate()` auf, um eine Neuzeichnung zu planen.
Das Beispiel demonstriert zudem Multisample-Antialiasing. Basierend auf der von ` QVulkanWindow::supportedSampleCounts()` gemeldeten Anzahl unterstützter Samples wählt das Beispiel zwischen 8x, 4x oder keinem Multisampling. Nach der Konfiguration über `QVulkanWindow::setSamples()` übernimmt ` QVulkanWindow ` den Rest: Die zusätzlichen Multisample-Farbpuffer werden automatisch erstellt, und die Übertragung in die Swapchain-Puffer erfolgt am Ende des Standard-Render-Durchlaufs für jedes Bild.
Ausführen des Beispiels
Sie können das Beispiel wie folgt ausführen:
- Qt Creator
Öffnen Sie den Modus „ Welcome “ und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter Qt Creator: Tutorial: Erstellen und Ausführen.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ aus dem Verzeichnis „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
© 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.