Exemple de triangle Vulkan : Bonjour
Présente les principes de base du rendu avec l'QVulkanWindow, et l'API Vulkan.
L'exemple « Hello Vulkan Triangle » crée un pipeline graphique complet, comprenant un shader de sommets et un shader de fragments, afin de rendre un triangle.

Démarrage
Chaque application Qt utilisant Vulkan devra disposer d'une classe ` Vulkan instance ` qui encapsule l'état au niveau de l'application et initialise une bibliothèque Vulkan.
Un objet ` QVulkanWindow ` doit toujours être associé à un objet ` QVulkanInstance ` ; c'est pourquoi, dans l'exemple, la création de l'instance précède celle de la fenêtre. L'objet ` QVulkanInstance ` doit également survivre à la fenêtre.
QVulkanInstance inst;
inst.setLayers({ "VK_LAYER_KHRONOS_validation" });
if (!inst.create())
qFatal("Failed to create Vulkan instance: %d", inst.errorCode());Cet exemple active les couches de validation, lorsqu'elles sont prises en charge. Si les couches demandées ne sont pas présentes, la requête sera ignorée. D'autres couches et extensions peuvent être activées de la même manière.
VulkanWindow w;
w.setVulkanInstance(&inst);
w.resize(1024, 768);
w.show();Une fois l'instance prête, il est temps de créer une fenêtre. Notez que ` w ` réside dans la pile et est déclarée après ` inst`.
La sous-classe QVulkanWindow
Pour ajouter des fonctionnalités personnalisées à une ` QVulkanWindow`, on utilise la sous-classification. Celle-ci suit les modèles existants de ` QOpenGLWindow ` et ` QOpenGLWidget`. Cependant, ` QVulkanWindow ` utilise un objet ` QVulkanWindowRenderer ` distinct.
La sous-classe ` QVulkanWindow ` réimplémente la fonction d'usine ` QVulkanWindow::createRenderer()`. Celle-ci renvoie simplement une nouvelle instance de la sous-classe ` QVulkanWindowRenderer `. Afin de pouvoir accéder à diverses ressources Vulkan via l'objet `window`, un pointeur vers la fenêtre est transmis et stocké via le constructeur.
class VulkanWindow : public QVulkanWindow
{
public:
QVulkanWindowRenderer *createRenderer() override;
};Le rendu proprement dit
QVulkanWindow mettent en file d’attente leurs appels de dessin dans leur réimplémentation de ` QVulkanWindowRenderer::startNextFrame()`. Une fois cette opération terminée, elles doivent appeler ` QVulkanWindow::frameReady()`. L’exemple ne comporte pas de génération de commandes asynchrone ; l’appel à `frameReady()` est donc effectué directement depuis `startNextFrame()`. Pour obtenir des mises à jour continues, l’exemple appelle simplement ` QWindow::requestUpdate()` afin de planifier un rafraîchissement.
L’exemple illustre également l’anticrénelage par échantillonnage multiple. En fonction du nombre d’échantillons pris en charge indiqué par QVulkanWindow::supportedSampleCounts(), l’exemple choisit entre un échantillonnage multiple 8x, 4x ou aucun échantillonnage multiple. Une fois la configuration effectuée via `QVulkanWindow::setSamples()`, ` QVulkanWindow ` se charge du reste : les tampons de couleur multi-échantillonnés supplémentaires sont créés automatiquement, et la résolution dans les tampons de la chaîne d’échange est effectuée à la fin du passage de rendu par défaut pour chaque image.
Exécution de l’exemple
Vous pouvez exécuter l’exemple à partir de :
- Qt Creator
Ouvrez le mode « Welcome » et sélectionnez l’exemple dans « Examples ». Pour plus d’informations, consultez Qt Creator: Tutoriel : Compiler et exécuter.
- Qt Extension for Visual Studio Code
Exécutez la commande « Qt: Open Qt examples » à partir de Command Palette, puis sélectionnez l’exemple dans la liste. Pour plus d’informations, consultez Qt Extension for Visual Studio Code: Tutoriel : Compiler et exécuter.
© 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.