summaryrefslogtreecommitdiffstats
path: root/src/gui/doc/snippets/code/src_gui_vulkan_qvulkaninstance.cpp
blob: bfb7c7c3a4019ac358d25637b131d725dbc830bc (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
// Copyright (C) 2018 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause#include <QGuiApplication>#include <QVulkanFunctions>#include <QVulkanInstance>#include <QWindow>namespace src_gui_vulkan_qvulkaninstance {struct Window {voidsetVulkanInstance(QVulkanInstance *instance) {Q_UNUSED(instance); }voidshow();}; Window *window =nullptr;//! [0]intmain(int argc,char**argv){ QGuiApplication app(argc, argv); QVulkanInstance inst;if(!inst.create())return1;// ... window->setVulkanInstance(&inst); window->show();return app.exec();}//! [0]voidwrapper0() {//! [1] QVulkanInstance inst;// Enable validation layer, if supported. Messages go to qDebug by default. inst.setLayers({"VK_LAYER_KHRONOS_validation"});bool ok = inst.create();if(!ok) {// ... Vulkan not available}if(!inst.layers().contains("VK_LAYER_KHRONOS_validation")) {// ... validation layer not available}//! [1]}voidwrapper1() {//! [2] QVulkanInstance inst;if(inst.supportedLayers().contains("VK_LAYER_KHRONOS_validation")) {// ...}bool ok = inst.create();// ...//! [2]Q_UNUSED(ok);}// wrapper1}// src_gui_vulkan_qvulkaninstancenamespace src_gui_vulkan_qvulkaninstance2 {//! [3]class VulkanWindow :public QWindow {public:VulkanWindow() {setSurfaceType(VulkanSurface);}voidexposeEvent(QExposeEvent *) {if(isExposed()) {if(!m_initialized) { m_initialized =true;// initialize device, swapchain, etc. QVulkanInstance *inst =vulkanInstance(); QVulkanFunctions *f = inst->functions();uint32_t devCount =0; f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount,nullptr);// ...// build the first framerender();}}}boolevent(QEvent *e) {if(e->type() ==QEvent::UpdateRequest)render();returnQWindow::event(e);}voidrender() {// ...requestUpdate();// render continuously}private:bool m_initialized =false;};intmain(int argc,char**argv){ QGuiApplication app(argc, argv); QVulkanInstance inst;if(!inst.create()) {qWarning("Vulkan not available");return1;} VulkanWindow window; window.showMaximized();return app.exec();}//! [3]}// src_gui_vulkan_qvulkaninstance2
close