summaryrefslogtreecommitdiffstats
path: root/src/gui/doc/snippets/code/src_gui_vulkan_qvulkanwindow.cpp
blob: 7f9abb638e1ec6c9b0041f41d3c943d7fed7ef6a (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
// Copyright (C) 2018 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause#include <QGuiApplication>#include <QVulkanDeviceFunctions>#include <QVulkanWindow>namespace src_gui_vulkan_qvulkanwindow { VkCommandBuffer commandBuffer;const VkRenderPassBeginInfo *renderPassBegin =nullptr; VkSubpassContents contents;//! [0]class VulkanRenderer :public QVulkanWindowRenderer {public:VulkanRenderer(QVulkanWindow *w) :m_window(w),m_devFuncs(nullptr) { }voidinitResources() override { m_devFuncs = m_window->vulkanInstance()->deviceFunctions(m_window->device());// ..}voidinitSwapChainResources() override {/* ... */}voidreleaseSwapChainResources() override {/* ... */}voidreleaseResources() override {/* ... */}voidstartNextFrame() override { VkCommandBuffer cmdBuf = m_window->currentCommandBuffer();// ... m_devFuncs->vkCmdBeginRenderPass(commandBuffer, renderPassBegin, contents);// ... m_window->frameReady();}private: QVulkanWindow *m_window; QVulkanDeviceFunctions *m_devFuncs;};class VulkanWindow :public QVulkanWindow {public: QVulkanWindowRenderer *createRenderer() override {return newVulkanRenderer(this);}};intmain(int argc,char*argv[]){ QGuiApplication app(argc, argv); QVulkanInstance inst;// enable the standard validation layers, when available inst.setLayers({"VK_LAYER_KHRONOS_validation"});if(!inst.create())qFatal("Failed to create Vulkan instance: %d", inst.errorCode()); VulkanWindow w; w.setVulkanInstance(&inst); w.showMaximized();return app.exec();}//! [0]//! [1]class Renderer {voidstartNextFrame();// ... VkDescriptorBufferInfo m_uniformBufInfo[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT]; QVulkanWindow *m_window =nullptr;};voidRenderer::startNextFrame(){ VkDescriptorBufferInfo &uniformBufInfo(m_uniformBufInfo[m_window->currentFrame()]);// ...}//! [1]}// src_gui_vulkan_qvulkanwindownamespace src_gui_vulkan_qvulkanwindow2 {//! [2]class Renderer {voidstartNextFrame();// ... VkDescriptorBufferInfo m_uniformBufInfo[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT]; QVulkanWindow *m_window =nullptr;};voidRenderer::startNextFrame(){const int count = m_window->concurrentFrameCount();// for (int i = 0; i < count; ++i)// m_uniformBufInfo[i] = ...// ...}//! [2]}// src_gui_vulkan_qvulkanwindow2
close