#include "Context.hpp" namespace vkcv { Context::Context(vk::Instance instance, vk::PhysicalDevice physicalDevice, vk::Device device) : m_instance(instance), m_physicalDevice(physicalDevice), m_device(device) {} Context::~Context() { m_device.destroy(); m_instance.destroy(); } Context Context::create(const char* applicationName, uint32_t applicationVersion) { const vk::ApplicationInfo applicationInfo ( applicationName, applicationVersion, "vkCV", VK_MAKE_VERSION(0, 0, 1), VK_HEADER_VERSION_COMPLETE ); // TODO: enable validation layers in debug build and add required extensions const vk::InstanceCreateInfo instanceCreateInfo ( vk::InstanceCreateFlags(), &applicationInfo, 0, nullptr, 0, nullptr ); vk::Instance instance = vk::createInstance(instanceCreateInfo); // TODO: search for the best physical device (discrete GPU) vk::PhysicalDevice physicalDevice = instance.enumeratePhysicalDevices()[0]; // TODO: create required queues, add validation layers and required extensions const vk::DeviceCreateInfo deviceCreateInfo ( vk::DeviceCreateFlags(), 0, nullptr, 0, nullptr, 0, nullptr, nullptr ); vk::Device device = physicalDevice.createDevice(deviceCreateInfo); return Context(instance, physicalDevice, device); } const vk::Instance& Context::getInstance() const { return m_instance; } const vk::PhysicalDevice& Context::getPhysicalDevice() const { return m_physicalDevice; } const vk::Device& Context::getDevice() const { return m_device; } }