#pragma once #include #include class Instance; class Buffer; struct UniformBufferObject { alignas(16) glm::mat4 model; glm::mat4 view; glm::mat4 projection; }; class Pipeline { public: explicit Pipeline(); explicit Pipeline(VkRenderPass renderPass); ~Pipeline(); VkPipeline handle = VK_NULL_HANDLE; VkPipelineLayout layout = VK_NULL_HANDLE; VkDescriptorSet descriptorSet = VK_NULL_HANDLE; void createDescriptorSet(Buffer* buffer, VkDescriptorType type); protected: VkShaderModule createShaderModule(const std::vector &code); VkDescriptorPool descriptorPool = VK_NULL_HANDLE; VkDescriptorSetLayout descriptorSetLayout = VK_NULL_HANDLE; void createDescriptorSetLayout(); void createDescriptorPool(VkDescriptorType type); }; class ComputePipeline : public Pipeline { public: explicit ComputePipeline(Buffer* buffer); };