HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
pipeline_vulkan.hpp
1// Copyright Take Vos 2019-2020.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "pipeline.hpp"
8#include <vulkan/vulkan.hpp>
9#include <string>
10#include <vector>
11
12namespace tt {
13class gui_device_vulkan;
14
15class pipeline_vulkan : public pipeline {
16public:
17 vk::Pipeline intrinsic;
18
19 pipeline_vulkan(gui_window const &window);
21
22 pipeline_vulkan(const pipeline_vulkan &) = delete;
23 pipeline_vulkan &operator=(const pipeline_vulkan &) = delete;
25 pipeline_vulkan &operator=(pipeline_vulkan &&) = delete;
26
27 gui_device_vulkan &vulkan_device() const noexcept;
28
29 virtual void drawInCommandBuffer(vk::CommandBuffer commandBuffer);
30
31 void buildForNewDevice();
32 void teardownForDeviceLost();
33 void buildForNewSurface();
34 void teardownForSurfaceLost();
35 void buildForNewSwapchain(vk::RenderPass renderPass, uint32_t renderSubpass, vk::Extent2D extent);
36 void teardownForSwapchainLost();
37 void teardownForWindowLost();
38
39protected:
40 bool buffersInitialized = false;
41 vk::DescriptorSet descriptorSet;
42 ssize_t descriptorSetVersion = 0;
43 vk::Extent2D extent;
44 vk::DescriptorSetLayout descriptorSetLayout;
45 vk::PipelineLayout pipelineLayout;
46 vk::DescriptorPool descriptorPool;
47
48 virtual std::vector<vk::PipelineShaderStageCreateInfo> createShaderStages() const = 0;
49 virtual std::vector<vk::DescriptorSetLayoutBinding> createDescriptorSetLayoutBindings() const = 0;
50 virtual std::vector<vk::WriteDescriptorSet> createWriteDescriptorSet() const = 0;
51 virtual ssize_t getDescriptorSetVersion() const = 0;
52 virtual std::vector<vk::PushConstantRange> createPushConstantRanges() const { return {}; }
53 virtual vk::VertexInputBindingDescription createVertexInputBindingDescription() const { return{}; }
54 virtual std::vector<vk::VertexInputAttributeDescription> createVertexInputAttributeDescriptions() const { return {}; }
55
56 virtual vk::PipelineDepthStencilStateCreateInfo getPipelineDepthStencilStateCreateInfo() const;
57 virtual std::vector<vk::PipelineColorBlendAttachmentState> getPipelineColorBlendAttachmentStates() const;
58
59 virtual void buildvertexBuffers() {};
60 virtual void teardownvertexBuffers() {};
61 virtual void buildDescriptorSets();
62 virtual void teardownDescriptorSets();
63 virtual void buildPipeline(vk::RenderPass renderPass, uint32_t renderSubpass, vk::Extent2D extent);
64 virtual void teardownPipeline();
65};
66
67}
Definition gui_device_vulkan.hpp:23
Definition gui_window.hpp:39
Definition Pipeline.hpp:13
Definition pipeline_vulkan.hpp:15