Sur cette page

QVulkanWindowRenderer Class

La classe QVulkanWindowRenderer est utilisée pour implémenter la logique de rendu spécifique à l'application pour une fenêtre QVulkanWindow. Plus....

En-tête : #include <QVulkanWindowRenderer>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

Fonctions publiques

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

Description détaillée

Les applications sous-classent généralement QVulkanWindow et QVulkanWindowRenderer. La première permet de gérer les événements, par exemple les entrées, tandis que la seconde permet d'implémenter la gestion des ressources Vulkan et la construction du tampon de commande qui constituent le rendu de l'application.

Outre la gestion des événements, la sous-classe QVulkanWindow est chargée de fournir une implémentation pour QVulkanWindow::createRenderer(). C'est ici que la fenêtre et le moteur de rendu sont connectés. Une implémentation typique crée simplement une nouvelle instance d'une sous-classe de QVulkanWindowRenderer.

Documentation des fonctions membres

[virtual noexcept] QVulkanWindowRenderer::~QVulkanWindowRenderer()

Destructeur virtuel.

[virtual] void QVulkanWindowRenderer::initResources()

Cette fonction virtuelle est appelée lorsqu'il est temps de créer les ressources graphiques du moteur de rendu.

En fonction de l'indicateur QVulkanWindow::PersistentResources, des situations de perte de périphérique, etc. cette fonction peut être appelée plus d'une fois pendant la durée de vie d'un QVulkanWindow. Cependant, les invocations suivantes sont toujours précédées d'un appel à releaseResources().

Les accesseurs tels que device(), graphicsQueue() et graphicsCommandPool() ne sont garantis de renvoyer des valeurs valides qu'à l'intérieur de cette fonction et par la suite, jusqu'à ce que releaseResources() soit appelée.

L'implémentation par défaut est vide.

[virtual] void QVulkanWindowRenderer::initSwapChainResources()

Cette fonction virtuelle est appelée lorsque l'initialisation de la chaîne d'échange, du framebuffer ou de la passe de rendu peut être effectuée. La chaîne d'échange et les ressources associées sont réinitialisées puis recréées en réponse aux événements de redimensionnement de la fenêtre, et donc une paire d'appels à initResources() et releaseResources() peut avoir plusieurs appels à initSwapChainResources() et releaseSwapChainResources() entre les deux.

Les accesseurs tels que QVulkanWindow::swapChainImageSize() ne sont garantis de renvoyer des valeurs valides qu'à l'intérieur de cette fonction et par la suite, jusqu'à ce que releaseSwapChainResources() soit appelé.

C'est également à cet endroit que les calculs dépendant de la taille (par exemple, la matrice de projection) doivent être effectués, car cette fonction est appelée à chaque redimensionnement.

L'implémentation par défaut est vide.

[virtual] void QVulkanWindowRenderer::logicalDeviceLost()

Cette fonction virtuelle est appelée lorsque le périphérique logique (VkDevice) est perdu, ce qui signifie qu'une opération a échoué avec VK_ERROR_DEVICE_LOST.

L'implémentation par défaut est vide.

Il n'est généralement pas nécessaire d'effectuer quoi que ce soit de spécial dans cette fonction. QVulkanWindow libère automatiquement toutes les ressources (en invoquant releaseSwapChainResources() et releaseResources() si nécessaire) et tente de se réinitialiser en acquérant un nouveau périphérique. Si le périphérique physique a également été perdu, cette tentative de réinitialisation peut alors aboutir à physicalDeviceLost().

Voir également physicalDeviceLost().

[virtual] void QVulkanWindowRenderer::physicalDeviceLost()

Cette fonction virtuelle est appelée lorsque le dispositif physique est perdu, ce qui signifie que la création du dispositif logique échoue avec VK_ERROR_DEVICE_LOST.

L'implémentation par défaut est vide.

Il n'est généralement pas nécessaire d'effectuer quoi que ce soit de spécial dans cette fonction, car QVulkanWindow réessayera automatiquement de s'initialiser après un certain temps.

Voir également logicalDeviceLost().

[virtual] void QVulkanWindowRenderer::preInitResources()

Cette fonction virtuelle est appelée juste avant que l'initialisation des graphiques, qui se termine par l'appel à initResources(), ne commence.

Normalement, il n'est pas nécessaire de réimplémenter cette fonction. Cependant, certains cas impliquent des décisions basées à la fois sur le périphérique physique et sur la surface. Ces décisions ne peuvent normalement pas être prises avant de rendre QVulkanWindow visible, car la surface Vulkan n'est pas récupérable à ce stade.

Les applications peuvent donc réimplémenter cette fonction. Ici, QVulkanWindow::physicalDevice() et QVulkanInstance::surfaceForWindow() sont tous deux fonctionnels, mais aucune autre initialisation du périphérique logique n'a encore eu lieu.

L'implémentation par défaut est vide.

[virtual] void QVulkanWindowRenderer::releaseResources()

Cette fonction virtuelle est appelée lorsque les ressources graphiques du moteur de rendu doivent être libérées.

L'implémentation doit être préparée à ce qu'un appel à cette fonction puisse être suivi d'un initResources() à un moment ultérieur.

QVulkanWindow prend en charge l'attente de l'inactivité du périphérique avant et après l'invocation de cette fonction.

L'implémentation par défaut est vide.

[virtual] void QVulkanWindowRenderer::releaseSwapChainResources()

Cette fonction virtuelle est appelée lorsque les ressources liées à la swapchain, au framebuffer ou au renderpass doivent être libérées.

L'implémentation doit être préparée à ce qu'un appel à cette fonction puisse être suivi d'un nouvel appel à initSwapChainResources() à un moment ultérieur.

QVulkanWindow prend en charge l'attente de l'inactivité du périphérique avant et après l'invocation de cette fonction.

L'implémentation par défaut est vide.

Remarque : il s'agit du dernier endroit où l'on peut agir en conservant toutes les ressources graphiques intactes avant que QVulkanWindow ne commence à les libérer. Il est donc essentiel que les implémentations avec une fonction asynchrone, potentiellement multithread startNextFrame() effectuent une attente bloquante et appellent QVulkanWindow::frameReady() avant de revenir de cette fonction au cas où il y aurait une soumission de trame en attente.

[pure virtual] void QVulkanWindowRenderer::startNextFrame()

Cette fonction virtuelle est appelée lorsque les appels de dessin pour la trame suivante doivent être ajoutés au tampon de commande.

Chaque appel à cette fonction doit être suivi d'un appel à QVulkanWindow::frameReady(). Si ce n'est pas le cas, la boucle de rendu sera bloquée. L'appel peut également être effectué ultérieurement, après le retour de cette fonction. Cela signifie qu'il est possible de lancer un travail asynchrone et de ne mettre à jour le tampon de commande et de ne notifier QVulkanWindow que lorsque ce travail est terminé.

Toutes les ressources Vulkan sont initialisées et prêtes lorsque cette fonction est invoquée. Le framebuffer actuel et le tampon de commande principal peuvent être récupérés via QVulkanWindow::currentFramebuffer() et QVulkanWindow::currentCommandBuffer(). Le périphérique logique et la file d'attente graphique active sont disponibles via QVulkanWindow::device() et QVulkanWindow::graphicsQueue(). Les implémentations peuvent créer des tampons de commande supplémentaires à partir du pool renvoyé par QVulkanWindow::graphicsCommandPool(). Par commodité, l'index d'un hôte visible et l'index du type de mémoire locale du périphérique sont exposés via QVulkanWindow::hostVisibleMemoryIndex() et QVulkanWindow::deviceLocalMemoryIndex(). Tous ces accesseurs peuvent être appelés en toute sécurité à partir de n'importe quel thread.

Voir également QVulkanWindow::frameReady() et 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.