Program Listing for File descriptor.hpp

Return to documentation for file (inexor/vulkan-renderer/wrapper/descriptor.hpp)

#pragma once

#include <volk.h>

#include <string>
#include <vector>

namespace inexor::vulkan_renderer::wrapper {

// Forward declaration
class Device;

class ResourceDescriptor {
    std::string m_name;
    const Device &m_device;
    VkDescriptorPool m_descriptor_pool{VK_NULL_HANDLE};
    VkDescriptorSetLayout m_descriptor_set_layout{VK_NULL_HANDLE};
    std::vector<VkDescriptorSetLayoutBinding> m_descriptor_set_layout_bindings;
    std::vector<VkWriteDescriptorSet> m_write_descriptor_sets;
    std::vector<VkDescriptorSet> m_descriptor_sets;

public:
    ResourceDescriptor(const Device &device, std::vector<VkDescriptorSetLayoutBinding> &&layout_bindings,
                       std::vector<VkWriteDescriptorSet> &&descriptor_writes, std::string &&name);

    ResourceDescriptor(const ResourceDescriptor &) = delete;
    ResourceDescriptor(ResourceDescriptor &&) noexcept;
    ~ResourceDescriptor();

    ResourceDescriptor &operator=(const ResourceDescriptor &) = delete;
    ResourceDescriptor &operator=(ResourceDescriptor &&) = delete;

    [[nodiscard]] const auto &descriptor_sets() const {
        return m_descriptor_sets;
    }

    [[nodiscard]] auto descriptor_set_layout() const {
        return m_descriptor_set_layout;
    }

    [[nodiscard]] const auto &descriptor_set_layout_bindings() const {
        return m_descriptor_set_layout_bindings;
    }
};

} // namespace inexor::vulkan_renderer::wrapper