lsfg-vk/src/instance.cpp
2025-06-29 05:05:29 +02:00

46 lines
1.4 KiB
C++

#include "instance.hpp"
#include "utils/exceptions.hpp"
#include <vector>
using namespace Vulkan;
const std::vector<const char*> requiredExtensions = {
};
const std::vector<const char*> requiredLayers = {
"VK_LAYER_KHRONOS_validation"
};
Instance::Instance() {
// create Vulkan instance
const VkApplicationInfo appInfo{
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pApplicationName = "lsfg-vk-base",
.applicationVersion = VK_MAKE_VERSION(0, 0, 1),
.pEngineName = "lsfg-vk-base",
.engineVersion = VK_MAKE_VERSION(0, 0, 1),
.apiVersion = VK_API_VERSION_1_4
};
const VkInstanceCreateInfo createInfo{
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pApplicationInfo = &appInfo,
.enabledLayerCount = static_cast<uint32_t>(requiredLayers.size()),
.ppEnabledLayerNames = requiredLayers.data(),
.enabledExtensionCount = static_cast<uint32_t>(requiredExtensions.size()),
.ppEnabledExtensionNames = requiredExtensions.data()
};
VkInstance instanceHandle{};
auto res = vkCreateInstance(&createInfo, nullptr, &instanceHandle);
if (res != VK_SUCCESS)
throw ls::vulkan_error(res, "Failed to create Vulkan instance");
// store in shared ptr
this->instance = std::shared_ptr<VkInstance>(
new VkInstance(instanceHandle),
[](VkInstance* instance) {
vkDestroyInstance(*instance, nullptr);
}
);
}