QVulkanWindowRenderer Class
La classe `QVulkanWindowRenderer` sert à implémenter la logique de rendu propre à l'application pour une fenêtre ` QVulkanWindow`. En savoir 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 créent généralement des sous-classes à la fois de ` QVulkanWindow ` et de `QVulkanWindowRenderer`. La première permet de gérer les événements, par exemple les entrées, tandis que la seconde permet de mettre en œuvre la gestion des ressources Vulkan et la construction du tampon de commandes qui constituent le rendu de l’application.
Outre la gestion des événements, la sous-classe d’ QVulkanWindow est également chargée de fournir une implémentation de la méthode ` QVulkanWindow::createRenderer()`. C’est à ce niveau que la fenêtre et le moteur de rendu sont connectés. Une implémentation typique se contentera de créer 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 au moment de créer les ressources graphiques du moteur de rendu.
En fonction du drapeau « QVulkanWindow::PersistentResources », des situations de perte de périphérique, etc., cette fonction peut être appelée plusieurs fois au cours du cycle de vie d’un objet ` QVulkanWindow`. Cependant, les invocations suivantes sont toujours précédées d’un appel à la fonction ` 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é.
L’implémentation par défaut est vide.
[virtual] void QVulkanWindowRenderer::initSwapChainResources()
Cette fonction virtuelle est appelée lorsque l'initialisation liée à la chaîne d'échange (swapchain), au tampon d'image (framebuffer) ou au passage de rendu (renderpass) 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 ; par conséquent, une paire d'appels à ` initResources()` et ` releaseResources()` peut comporter 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 effectivement 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 l’ VK_ERROR_DEVICE_LOST.
L'implémentation par défaut est vide.
Il n’est généralement pas nécessaire d’effectuer une opération particulière dans cette fonction. QVulkanWindow libère automatiquement toutes les ressources (en appelant releaseSwapChainResources() et releaseResources() si nécessaire) et tente de se réinitialiser en acquérant un nouveau périphérique. Lorsque 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 périphérique physique est perdu, ce qui signifie que la création du périphérique logique échoue avec l’erreur « VK_ERROR_DEVICE_LOST ».
L'implémentation par défaut est vide.
Il n’est généralement pas nécessaire d’effectuer une opération particulière dans cette fonction, car ` QVulkanWindow ` réessaiera automatiquement de s’initialiser après un certain délai.
Voir également logicalDeviceLost().
[virtual] void QVulkanWindowRenderer::preInitResources()
Cette fonction virtuelle est appelée juste avant que l’initialisation graphique, qui aboutit à l’appel de ` 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. Celles-ci ne peuvent généralement pas être effectuées avant de rendre la fonction ` QVulkanWindow ` visible, car la surface Vulkan n’est pas accessible à ce stade.
Les applications peuvent donc réimplémenter cette fonction. À ce stade, les fonctions ` QVulkanWindow::physicalDevice()` et ` QVulkanInstance::surfaceForWindow()` sont opérationnelles, mais aucune initialisation logique supplémentaire du périphérique 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 conçue de manière à ce qu'un appel à cette fonction puisse être suivi, ultérieurement, d'un appel à ` initResources()`.
QVulkanWindow Elle se charge d’attendre que le périphérique soit inactif avant et après l’appel de cette fonction.
L'implémentation par défaut est vide.
[virtual] void QVulkanWindowRenderer::releaseSwapChainResources()
Cette fonction virtuelle est appelée lorsqu'il faut libérer des ressources liées à la chaîne d'échange, au tampon d'image ou au passage de rendu.
L'implémentation doit être conçue de manière à ce qu'un appel à cette fonction puisse être suivi, ultérieurement, d'un nouvel appel à ` initSwapChainResources()`.
QVulkanWindow Elle se charge d’attendre que le périphérique soit inactif avant et après l’appel de cette fonction.
L’implémentation par défaut est vide.
Remarque : C’est le dernier moment où l’on peut agir alors que toutes les ressources graphiques sont encore intactes, avant qu’ QVulkanWindow ne commence à les libérer. Il est donc essentiel que les implémentations utilisant une fonction ` startNextFrame()` asynchrone, potentiellement multithread, effectuent une attente bloquante et appellent ` QVulkanWindow::frameReady()` avant de quitter cette fonction, au cas où une soumission d’image serait en attente.
[pure virtual] void QVulkanWindowRenderer::startNextFrame()
Cette fonction virtuelle est appelée lorsque les appels de dessin de l'image suivante doivent être ajoutés au tampon de commandes.
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 des tâches asynchrones, puis de ne mettre à jour le tampon de commandes et de notifier ` QVulkanWindow ` qu’une fois ces tâches terminées.
Toutes les ressources Vulkan sont initialisées et prêtes lorsque cette fonction est appelée. Le tampon de trame 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()`. Pour plus de commodité, l’index d’un périphérique visible par l’hôte et l’index de type de mémoire locale du périphérique sont exposés via les fonctions ` QVulkanWindow::hostVisibleMemoryIndex()` et ` QVulkanWindow::deviceLocalMemoryIndex()`. Tous ces accesseurs peuvent être appelés en toute sécurité depuis 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.