#pragma once #include "boost/core/noncopyable.hpp" #include "vulkan_common.h" #include "vulkan_descriptor_set.h" #include "vulkan_image.h" #include "vulkan_uniform.h" namespace progressia { namespace desktop { class Attachment { public: const char *name; VkFormat format; VkImageAspectFlags aspect; VkImageUsageFlags usage; VkImageLayout workLayout; VkImageLayout finalLayout; VkAttachmentLoadOp loadOp; VkAttachmentStoreOp storeOp; VkClearValue clearValue; std::unique_ptr image; }; class Adapter : public VkObjectWrapper { public: using ViewUniform = Uniform; struct Light { glm::vec4 color; glm::vec4 from; float contrast; float softness; }; using LightUniform = Uniform; private: Vulkan &vulkan; ViewUniform viewUniform; LightUniform lightUniform; std::vector attachments; public: Adapter(Vulkan &); ~Adapter(); std::vector &getAttachments(); VkVertexInputBindingDescription getVertexInputBindingDescription(); std::vector getVertexInputAttributeDescriptions(); std::vector loadVertexShader(); std::vector loadFragmentShader(); ViewUniform::State createView(); LightUniform::State createLight(); std::vector getUsedDSLayouts() const; void onPreFrame(); }; } // namespace desktop } // namespace progressia