Add create window surface

This commit is contained in:
Jiga228
2025-09-20 19:38:17 +07:00
parent f334d723f4
commit 5c9436a892
3 changed files with 34 additions and 14 deletions
+17 -10
View File
@@ -6,10 +6,9 @@
#include "CoreInstance.h"
#include "Log/Log.h"
#ifdef _DEBUG
#include <assert.h>
#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<PFN_vkCreateDebugUtilsMessengerEXT>(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<const char*> RenderEngine::get_required_extensions()
@@ -49,6 +41,12 @@ std::vector<const char*> 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<PFN_vkDestroyDebugUtilsMessengerEXT>(vkGetInstanceProcAddr(instance_, "vkDestroyDebugUtilsMessengerEXT"));