#pragma once

#include <vector>

#ifdef IMGUI_IMPL_VULKAN_USE_VOLK
#include <volk.h>
#else
#include <vulkan/vulkan_core.h>
#endif

struct VulkanContext {
    VkAllocationCallbacks* allocator = nullptr;
    VkInstance instance = VK_NULL_HANDLE;
    VkPhysicalDevice physical_device = VK_NULL_HANDLE;
    VkDevice logical_device = VK_NULL_HANDLE;
    uint32_t queue_family = UINT32_MAX;
    VkQueue queue = VK_NULL_HANDLE;
    VkDescriptorPool descriptor_pool = VK_NULL_HANDLE;

    explicit VulkanContext(std::vector<const char*> instance_extensions) noexcept;
};
