From 5c9436a892072feb429ba7b1d2eab1fd99b440af Mon Sep 17 00:00:00 2001 From: Jiga228 Date: Sat, 20 Sep 2025 19:38:17 +0700 Subject: [PATCH] Add create window surface --- Core/Core/CoreInstance.cpp | 3 +++ Core/Core/RenderEngine.cpp | 27 +++++++++++++++++---------- Core/Core/RenderEngine.h | 18 ++++++++++++++---- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/Core/Core/CoreInstance.cpp b/Core/Core/CoreInstance.cpp index 518705f..e6fb345 100644 --- a/Core/Core/CoreInstance.cpp +++ b/Core/Core/CoreInstance.cpp @@ -57,6 +57,9 @@ CoreInstance::CoreInstance() if (glfwInit() == GLFW_FALSE) throw std::runtime_error("Fail init glfw"); + + glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); window_ = glfwCreateWindow(800, 600, main_config_.game_name.c_str(), nullptr, nullptr); if (window_ == nullptr) { diff --git a/Core/Core/RenderEngine.cpp b/Core/Core/RenderEngine.cpp index decf4fe..49954f9 100644 --- a/Core/Core/RenderEngine.cpp +++ b/Core/Core/RenderEngine.cpp @@ -6,10 +6,9 @@ #include "CoreInstance.h" #include "Log/Log.h" -#ifdef _DEBUG -#include -#define VK_CHECK(res) assert(res == VK_SUCCESS) +#include "GLFW/glfw3.h" +#ifdef _DEBUG static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, @@ -23,18 +22,11 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback( return VK_FALSE; } -bool RenderEngine::QueueFamilyIndices::is_complete() -{ - return graphycs_family.has_value(); -} - VkResult RenderEngine::enable_layer_validation(VkDebugUtilsMessengerCreateInfoEXT* create_info) { PFN_vkCreateDebugUtilsMessengerEXT debug_creator = reinterpret_cast(vkGetInstanceProcAddr(instance_, "vkCreateDebugUtilsMessengerEXT")); return debug_creator(instance_, create_info, nullptr, &debug_messenger_); } -#else -#define VK_CHECK(res) if ((res) != VK_SUCCESS) throw std::runtime_error("Vulkan error: " + std::to_string(res)) #endif std::vector RenderEngine::get_required_extensions() @@ -49,6 +41,12 @@ std::vector RenderEngine::get_required_extensions() return extensions; } + +bool RenderEngine::QueueFamilyIndices::is_complete() +{ + return graphycs_family.has_value(); +} + bool RenderEngine::is_device_suitable(VkPhysicalDevice device) { VkPhysicalDeviceProperties device_properties; @@ -180,6 +178,11 @@ void RenderEngine::create_logical_device() vkGetDeviceQueue(device_, indices.graphycs_family.value(), 0, &graphics_queue_); } +void RenderEngine::create_surface() +{ + VK_CHECK(glfwCreateWindowSurface(instance_, window_, nullptr, &surface_)); +} + RenderEngine::RenderEngine(CoreInstance& core, GLFWwindow* window): core_(core), window_(window) @@ -188,6 +191,7 @@ window_(window) #endif { create_instance(); + create_surface(); pick_physical_device(); create_logical_device(); } @@ -197,6 +201,9 @@ RenderEngine::~RenderEngine() if (device_ != VK_NULL_HANDLE) vkDestroyDevice(device_, nullptr); + if (surface_ != VK_NULL_HANDLE) + vkDestroySurfaceKHR(instance_, surface_, nullptr); + #ifdef _DEBUG if (debug_messenger_ != nullptr && instance_ != nullptr) { PFN_vkDestroyDebugUtilsMessengerEXT destroyer_messenger = reinterpret_cast(vkGetInstanceProcAddr(instance_, "vkDestroyDebugUtilsMessengerEXT")); diff --git a/Core/Core/RenderEngine.h b/Core/Core/RenderEngine.h index fe7476c..5508c66 100644 --- a/Core/Core/RenderEngine.h +++ b/Core/Core/RenderEngine.h @@ -1,12 +1,20 @@ #pragma once -#define GLFW_INCLUDE_VULKAN -#include -#include "GLFW/glfw3.h" - #include #include +#define GLFW_INCLUDE_VULKAN +#include + +#include + +#ifdef _DEBUG +#include +#define VK_CHECK(res) assert(res == VK_SUCCESS) +#else +#define VK_CHECK(res) if ((res) != VK_SUCCESS) throw std::runtime_error("Vulkan error: " + std::to_string(res)) +#endif + class CoreInstance; class RenderEngine @@ -20,6 +28,7 @@ class RenderEngine CoreInstance& core_; GLFWwindow* window_; VkInstance instance_ = VK_NULL_HANDLE; + VkSurfaceKHR surface_ = VK_NULL_HANDLE; VkPhysicalDevice physical_device_ = VK_NULL_HANDLE; VkDevice device_ = VK_NULL_HANDLE; VkQueue graphics_queue_ = VK_NULL_HANDLE; @@ -34,6 +43,7 @@ class RenderEngine static QueueFamilyIndices find_queue_family_indices(VkPhysicalDevice device); void create_instance(); + void create_surface(); void pick_physical_device(); void create_logical_device(); public: