#pragma once #include #include #include "device.hpp" namespace sophia { class DescriptorPool { public: DescriptorPool(const DescriptorPool&) = delete; DescriptorPool& operator=(const DescriptorPool&) = delete; class Builder { public: Builder(Device& device) : device{device} {} Builder& addPoolSize(vk::DescriptorType descriptorType, u32 count); Builder& setPoolFlags(vk::DescriptorPoolCreateFlags flags); Builder& setMaxSets(u32 count); std::unique_ptr build() const; private: Device& device; std::vector poolSizes{}; u32 maxSets = 1000; vk::DescriptorPoolCreateFlags poolFlags{}; }; DescriptorPool(Device& device, u32 maxSets, vk::DescriptorPoolCreateFlags poolFlags, const std::vector& poolSizes); ~DescriptorPool(); bool allocateDescriptorSet(const vk::DescriptorSetLayout descriptorSetLayout, vk::DescriptorSet& descriptor) const; void freeDescriptors(std::vector& descriptors) const; void resetPool(); const vk::DescriptorPool& get() { return this->descriptorPool; } private: Device& device; vk::DescriptorPool descriptorPool; friend class DescriptorWriter; }; } // namespace sophia