12 #include <QtCore/QCoreApplication>
13 #include <QtGui/QWindow>
14 #include <QtGui/qevent.h>
15 #include <QtCore/QTimer>
16 #include <QtCore/QDebug>
18 #include "Allocation.h"
21 #include "VulkanSwapChain.h"
23 class VKWindow :
public QWindow {
26 VKWindow(QScreen* screen =
nullptr);
29 void createSwapchain();
32 bool event(QEvent *event)
override;
38 friend struct vks::Context;
42 virtual void resizeFramebuffer();
45 void resizeEvent(QResizeEvent* event)
override;
47 void setupRenderPass();
48 void setupDepthStencil();
49 void setupFramebuffers();
50 void createCommandBuffers();
55 vks::Context& _context{ vks::Context::get() };
56 VkRenderPass _renderPass{};
58 VulkanSwapChain _swapchain;
59 VkSemaphore _acquireCompleteSemaphore{};
60 VkSemaphore _renderCompleteSemaphore{};
61 std::vector<VkCommandBuffer> _drawCommandBuffers;
62 struct : vks::Allocation {
63 bool isAllocated {
false};
67 std::vector<VkFramebuffer> _frameBuffers;
68 std::atomic<bool> _isVulkanCleanupComplete{
false };
69 std::atomic<bool> _needsResizing{
true };
70 VkFence _previousFrameFence{ VK_NULL_HANDLE };
71 VkCommandBuffer _previousCommandBuffer{ VK_NULL_HANDLE };
72 VkSemaphore _previousAcquireCompleteSemaphore{ VK_NULL_HANDLE };
73 VkSemaphore _previousRenderCompleteSemaphore{ VK_NULL_HANDLE };