#pragma once #include #define VK_NO_STDINT_H #define VK_NO_STDDEF_H #include #include using HINSTANCE = void*; using HWND = void*; #include namespace deimos { class ApiRegistry; struct VulkanApi { #define FN(NAME) PFN_vk##NAME NAME{}; #include "deimos/vulkan/vulkan_bootstrap_functions.inc" #include "deimos/vulkan/vulkan_entry_functions.inc" #include "deimos/vulkan/vulkan_instance_functions.inc" #include "deimos/vulkan/vulkan_device_functions.inc" #undef FN }; class VulkanLoaderApi { public: VulkanLoaderApi() = default; deimos_NO_COPY_MOVE(VulkanLoaderApi); virtual ~VulkanLoaderApi() = default; static constexpr IdName kApiName{"deimos::VulkanLoaderApi"}; virtual VulkanApi* LoadEntry() = 0; virtual void LoadInstance(VulkanApi*, VkInstance) = 0; virtual void LoadDevice(VulkanApi*, VkDevice) = 0; }; void RegisterVulkanLoaderApi(ApiRegistry*); } // namespace deimos