Program Listing for File instance.hpp

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

#pragma once

#include <volk.h>

#include <cstdint>
#include <span>
#include <string>

namespace inexor::vulkan_renderer::wrapper {

[[nodiscard]] bool is_instance_extension_supported(const std::string &extension_name);

[[nodiscard]] bool is_instance_layer_supported(const std::string &layer_name);

class Instance {
private:
    VkInstance m_instance{VK_NULL_HANDLE};

public:
    static constexpr std::uint32_t REQUIRED_VK_API_VERSION{VK_API_VERSION_1_2};

    Instance(const std::span<const char *> instance_layers = {},
             const std::span<const char *> instance_extensions = {});

    Instance(const Instance &) = delete;
    Instance(Instance &&) noexcept;

    ~Instance();

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

    [[nodiscard]] VkInstance instance() const {
        return m_instance;
    }
};

} // namespace inexor::vulkan_renderer::wrapper