diff --git a/include/vk.h b/include/vk.h index 1bb1f45..9ff39ab 100644 --- a/include/vk.h +++ b/include/vk.h @@ -9,13 +9,14 @@ class Vulkan { public: - void init(); // инициализация + void init(GLFWwindow* window); // инициализация void destroy(); // завершение работы private: VkInstance instance; // Экземпляр Vulkan PhysicalDevice physicalDevice; // Физическое устройство VkDevice logicalDevice; // логическое устройство VkQueue graphicalQueue; // очередь для работы с графикой + VkSurfaceKHR surface; // Поверхность окна // Структура для хранения флагов struct { @@ -26,6 +27,7 @@ class Vulkan void createInstance(); // Создание экземпяра Vulkan void selectPhysicalDevice(std::vector &deviceExtensions); // Выбор физического устройства void createLogicalDevice(std::vector &deviceExtensions); // Создание логического устройства + void createWindowSurface(GLFWwindow* window); // Создание поверхности окна }; #endif // VK_H \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 07e7fc1..846b86d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,7 +24,7 @@ int main(int argc, char* argv[]) { GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr); // Инициализация Vulkan API - vulkan.init(); + vulkan.init(window); // Жизненный цикл while(!glfwWindowShouldClose(window)) { diff --git a/src/vk.cpp b/src/vk.cpp index bb84eb8..583ccf4 100644 --- a/src/vk.cpp +++ b/src/vk.cpp @@ -5,18 +5,20 @@ #include // инициализация -void Vulkan::init() +void Vulkan::init(GLFWwindow* window) { createInstance(); // Создание экземпяра // Расширения для устройства: имена задаются внутри фигурных скобок в кавычках std::vector deviceExtensions({}); selectPhysicalDevice(deviceExtensions); // Выбор физического устройства createLogicalDevice(deviceExtensions); // Создание физического устройства + createWindowSurface(window); } // завершение работы void Vulkan::destroy() { + vkDestroySurfaceKHR(instance, surface, nullptr); vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства vkDestroyInstance(instance, nullptr); // Уничтожение экземпляра Vulkan } @@ -285,3 +287,12 @@ void Vulkan::createLogicalDevice(std::vector &deviceExtensions) // Получим дескриптор очереди логического устройства vkGetDeviceQueue(logicalDevice, queueCreateInfo.queueFamilyIndex, 0, &graphicalQueue); } + +// Создание поверхности окна +void Vulkan::createWindowSurface(GLFWwindow* window) +{ + if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) + { + throw std::runtime_error("Unable to create window surface"); + } +}