Auf dieser Seite

QVulkanWindowRenderer Class

Die Klasse „QVulkanWindowRenderer“ dient zur Implementierung der anwendungsspezifischen Rendering-Logik für ein „ QVulkanWindow “. Mehr...

Header: #include <QVulkanWindowRenderer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

Öffentliche Funktionen

virtual ~QVulkanWindowRenderer()
virtual void initResources()
virtual void initSwapChainResources()
virtual void logicalDeviceLost()
virtual void physicalDeviceLost()
virtual void preInitResources()
virtual void releaseResources()
virtual void releaseSwapChainResources()
virtual void startNextFrame() = 0

Ausführliche Beschreibung

Anwendungen erstellen in der Regel Unterklassen sowohl von ` QVulkanWindow ` als auch von `QVulkanWindowRenderer`. Ersteres ermöglicht die Verarbeitung von Ereignissen, beispielsweise Eingaben, während Letzteres die Implementierung der Vulkan-Ressourcenverwaltung und des Aufbaus des Befehlspuffers ermöglicht, die das Rendering der Anwendung ausmachen.

Zusätzlich zur Ereignisbehandlung ist die Unterklasse von „ QVulkanWindow “ auch dafür verantwortlich, eine Implementierung für „ QVulkanWindow::createRenderer()“ bereitzustellen. Hier werden das Fenster und der Renderer miteinander verbunden. Eine typische Implementierung erstellt einfach eine neue Instanz einer Unterklasse von „QVulkanWindowRenderer“.

Dokumentation der Mitgliedsfunktionen

[virtual noexcept] QVulkanWindowRenderer::~QVulkanWindowRenderer()

Virtueller Destruktor.

[virtual] void QVulkanWindowRenderer::initResources()

Diese virtuelle Funktion wird aufgerufen, wenn die Grafikressourcen des Renderers erstellt werden sollen.

Je nach dem Flag „ QVulkanWindow::PersistentResources “, bei Geräteverlusten usw. kann diese Funktion während der Lebensdauer eines „ QVulkanWindow “ mehrmals aufgerufen werden. Vor nachfolgenden Aufrufen wird jedoch immer zunächst „ releaseResources()“ aufgerufen.

Zugriffsfunktionen wie `device()`, `graphicsQueue()` und `graphicsCommandPool()` geben nur innerhalb dieser Funktion und danach – bis zum Aufruf von ` releaseResources()` – garantiert gültige Werte zurück.

Die Standardimplementierung ist leer.

[virtual] void QVulkanWindowRenderer::initSwapChainResources()

Diese virtuelle Funktion wird aufgerufen, wenn Initialisierungsschritte im Zusammenhang mit der Swapchain, dem Framebuffer oder dem Renderpass durchgeführt werden können. Die Swapchain und die zugehörigen Ressourcen werden als Reaktion auf Ereignisse zur Fenstergrößenänderung zurückgesetzt und anschließend neu erstellt; daher können zwischen zwei Aufrufen von ` initResources()` und ` releaseResources()` mehrere Aufrufe von `initSwapChainResources()` und ` releaseSwapChainResources()` liegen.

Es ist nur innerhalb dieser Funktion und danach, bis zum Aufruf von ` releaseSwapChainResources()`, gewährleistet, dass Zugriffsfunktionen wie ` QVulkanWindow::swapChainImageSize()` gültige Werte zurückgeben.

Dies ist auch der Ort, an dem größenabhängige Berechnungen (zum Beispiel die Projektionsmatrix) durchgeführt werden sollten, da diese Funktion praktisch bei jeder Größenänderung aufgerufen wird.

Die Standardimplementierung ist leer.

[virtual] void QVulkanWindowRenderer::logicalDeviceLost()

Diese virtuelle Funktion wird aufgerufen, wenn das logische Gerät (VkDevice) verloren geht, d. h., wenn ein Vorgang mit „ VK_ERROR_DEVICE_LOST “ fehlgeschlagen ist.

Die Standardimplementierung ist leer.

In der Regel ist es nicht erforderlich, in dieser Funktion besondere Maßnahmen zu ergreifen. „ QVulkanWindow “ gibt automatisch alle Ressourcen frei (und ruft dabei bei Bedarf „ releaseSwapChainResources()“ und „ releaseResources()“ auf) und versucht, das Gerät neu zu initialisieren, indem es ein neues Gerät anfordert. Wenn auch das physische Gerät verloren gegangen ist, kann dieser Neuinitialisierungsversuch zu „ physicalDeviceLost()“ führen.

Siehe auch physicalDeviceLost().

[virtual] void QVulkanWindowRenderer::physicalDeviceLost()

Diese virtuelle Funktion wird aufgerufen, wenn das physische Gerät verloren geht, d. h., wenn die Erstellung des logischen Geräts mit dem Fehler „ VK_ERROR_DEVICE_LOST “ fehlschlägt.

Die Standardimplementierung ist leer.

In der Regel sind in dieser Funktion keine besonderen Maßnahmen erforderlich, da „ QVulkanWindow “ nach einer bestimmten Zeit automatisch einen erneuten Versuch unternimmt, sich selbst zu initialisieren.

Siehe auch ` logicalDeviceLost()`.

[virtual] void QVulkanWindowRenderer::preInitResources()

Diese virtuelle Funktion wird unmittelbar vor der Initialisierung der Grafik aufgerufen, die schließlich zum Aufruf von ` initResources()` führt und kurz vor dem Start steht.

Normalerweise ist es nicht erforderlich, diese Funktion neu zu implementieren. Es gibt jedoch Fälle, in denen Entscheidungen getroffen werden müssen, die sowohl vom physischen Gerät als auch von der Oberfläche abhängen. Diese können normalerweise nicht durchgeführt werden, bevor „ QVulkanWindow “ sichtbar gemacht wird, da die Vulkan-Oberfläche zu diesem Zeitpunkt noch nicht abrufbar ist.

Stattdessen können Anwendungen diese Funktion neu implementieren. Zu diesem Zeitpunkt sind sowohl ` QVulkanWindow::physicalDevice()` als auch ` QVulkanInstance::surfaceForWindow()` funktionsfähig, es hat jedoch noch keine weitere logische Geräteinitialisierung stattgefunden.

Die Standardimplementierung ist leer.

[virtual] void QVulkanWindowRenderer::releaseResources()

Diese virtuelle Funktion wird aufgerufen, wenn die Grafikressourcen des Renderers freigegeben werden müssen.

Die Implementierung muss darauf vorbereitet sein, dass auf einen Aufruf dieser Funktion zu einem späteren Zeitpunkt ein Aufruf von ` initResources()` folgen kann.

QVulkanWindow sorgt dafür, dass vor und nach dem Aufruf dieser Funktion gewartet wird, bis das Gerät im Leerlauf ist.

Die Standardimplementierung ist leer.

[virtual] void QVulkanWindowRenderer::releaseSwapChainResources()

Diese virtuelle Funktion wird aufgerufen, wenn Ressourcen im Zusammenhang mit Swapchain, Framebuffer oder Renderpass freigegeben werden müssen.

Die Implementierung muss darauf ausgelegt sein, dass auf einen Aufruf dieser Funktion zu einem späteren Zeitpunkt ein neuer Aufruf von ` initSwapChainResources()` folgen kann.

QVulkanWindow sorgt dafür, dass vor und nach dem Aufruf dieser Funktion abgewartet wird, bis das Gerät im Leerlauf ist.

Die Standardimplementierung ist leer.

Hinweis: Dies ist die letzte Stelle, an der mit allen intakten Grafikressourcen gearbeitet werden kann, bevor ` QVulkanWindow ` beginnt, diese freizugeben. Daher ist es unerlässlich, dass Implementierungen mit einem asynchronen, möglicherweise multithreaded ` startNextFrame()` eine blockierende Wartezeit einlegen und ` QVulkanWindow::frameReady()` aufrufen, bevor sie aus dieser Funktion zurückkehren, falls eine ausstehende Frame-Übermittlung vorliegt.

[pure virtual] void QVulkanWindowRenderer::startNextFrame()

Diese virtuelle Funktion wird aufgerufen, wenn die Zeichenaufrufe für das nächste Bild in den Befehlspuffer eingefügt werden sollen.

Auf jeden Aufruf dieser Funktion muss ein Aufruf von ` QVulkanWindow::frameReady()` folgen. Andernfalls kommt es zu einer Blockierung der Rendering-Schleife. Der Aufruf kann auch zu einem späteren Zeitpunkt erfolgen, nachdem die Funktion zurückkehrt. Das bedeutet, dass es möglich ist, asynchrone Aufgaben zu starten und den Befehlspuffer erst dann zu aktualisieren sowie ` QVulkanWindow ` zu benachrichtigen, wenn diese Aufgaben abgeschlossen sind.

Alle Vulkan-Ressourcen sind initialisiert und bereit, wenn diese Funktion aufgerufen wird. Der aktuelle Framebuffer und der Hauptbefehlspuffer können über ` QVulkanWindow::currentFramebuffer()` und ` QVulkanWindow::currentCommandBuffer()` abgerufen werden. Das logische Gerät und die aktive Grafikwarteschlange sind über ` QVulkanWindow::device()` und ` QVulkanWindow::graphicsQueue()` verfügbar. Implementierungen können zusätzliche Befehlspuffer aus dem von ` QVulkanWindow::graphicsCommandPool()` zurückgegebenen Pool erstellen. Der Einfachheit halber werden der Index eines für den Host sichtbaren Speichers und der Index eines gerätelokalen Speichers über die Funktionen „ QVulkanWindow::hostVisibleMemoryIndex()“ und „ QVulkanWindow::deviceLocalMemoryIndex()“ bereitgestellt. Alle diese Zugriffsfunktionen können sicher von jedem Thread aus aufgerufen werden.

Siehe auch QVulkanWindow::frameReady() und QVulkanWindow.

© 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.