From edf8c19af68a008a73de023b983dec0310a82967 Mon Sep 17 00:00:00 2001 From: InkSoul Date: Mon, 19 Feb 2024 16:30:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=AE=9E=E4=BE=8B=E5=88=9B?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VulkanTutorial.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++ VulkanTutorial.h | 10 +++++++--- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/VulkanTutorial.cpp b/VulkanTutorial.cpp index e371821..dbc87db 100644 --- a/VulkanTutorial.cpp +++ b/VulkanTutorial.cpp @@ -13,6 +13,52 @@ GLFWwindow* HelloTriangleApplication::initWindow(int Width, int Height) { return window; } +void HelloTriangleApplication::createInstance() { + VkApplicationInfo appInfo = {}; + appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + appInfo.pApplicationName = "Hello Triangle"; + appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); + appInfo.pEngineName = "No_Engine"; + appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); + appInfo.apiVersion = VK_API_VERSION_1_0; + + VkInstanceCreateInfo createInfo = {}; + createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + createInfo.pApplicationInfo = &appInfo; + + uint32_t glfwExtentionCount = 0; + const char** glfwExtensions; + glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtentionCount); + + createInfo.enabledExtensionCount = glfwExtentionCount; + createInfo.ppEnabledExtensionNames = glfwExtensions; + createInfo.enabledLayerCount = 0; + + + if (vkCreateInstance(&createInfo, nullptr, &instance)!=VK_SUCCESS) + { + throw std::runtime_error("failed to create instance"); + } + + uint32_t extensionCount = 0; + vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr); + + std::vector extensions(extensionCount); + + vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, extensions.data()); + + std::cout << "available extensions :" << std::endl; + + for (const auto& extension : extensions) + { + std::cout << "\t" << extension.extensionName << " version:" << extension.specVersion << std::endl; + } +} + +void HelloTriangleApplication::initVulkan() { + createInstance(); +} + void HelloTriangleApplication::mainLoop(GLFWwindow* window){ while (!glfwWindowShouldClose(window)) @@ -23,6 +69,9 @@ void HelloTriangleApplication::mainLoop(GLFWwindow* window){ } void HelloTriangleApplication::cleanup(GLFWwindow* window) { + + vkDestroyInstance(instance, nullptr); + glfwDestroyWindow(window); glfwTerminate(); diff --git a/VulkanTutorial.h b/VulkanTutorial.h index d0842c1..aa0e553 100644 --- a/VulkanTutorial.h +++ b/VulkanTutorial.h @@ -27,10 +27,14 @@ public: cleanup(window); } private: - GLFWwindow* initWindow(int Width, int Height); - void initVulkan() { - } + VkInstance instance; + + GLFWwindow* initWindow(int Width, int Height); + + void createInstance(); + + void initVulkan(); void mainLoop(GLFWwindow* window);