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
+3
View File
@@ -57,6 +57,9 @@ CoreInstance::CoreInstance()
if (glfwInit() == GLFW_FALSE) if (glfwInit() == GLFW_FALSE)
throw std::runtime_error("Fail init glfw"); 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); window_ = glfwCreateWindow(800, 600, main_config_.game_name.c_str(), nullptr, nullptr);
if (window_ == nullptr) if (window_ == nullptr)
{ {
+17 -10
View File
@@ -6,10 +6,9 @@
#include "CoreInstance.h" #include "CoreInstance.h"
#include "Log/Log.h" #include "Log/Log.h"
#ifdef _DEBUG #include "GLFW/glfw3.h"
#include <assert.h>
#define VK_CHECK(res) assert(res == VK_SUCCESS)
#ifdef _DEBUG
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback( static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
VkDebugUtilsMessageTypeFlagsEXT messageType, VkDebugUtilsMessageTypeFlagsEXT messageType,
@@ -23,18 +22,11 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
return VK_FALSE; return VK_FALSE;
} }
bool RenderEngine::QueueFamilyIndices::is_complete()
{
return graphycs_family.has_value();
}
VkResult RenderEngine::enable_layer_validation(VkDebugUtilsMessengerCreateInfoEXT* create_info) VkResult RenderEngine::enable_layer_validation(VkDebugUtilsMessengerCreateInfoEXT* create_info)
{ {
PFN_vkCreateDebugUtilsMessengerEXT debug_creator = reinterpret_cast<PFN_vkCreateDebugUtilsMessengerEXT>(vkGetInstanceProcAddr(instance_, "vkCreateDebugUtilsMessengerEXT")); PFN_vkCreateDebugUtilsMessengerEXT debug_creator = reinterpret_cast<PFN_vkCreateDebugUtilsMessengerEXT>(vkGetInstanceProcAddr(instance_, "vkCreateDebugUtilsMessengerEXT"));
return debug_creator(instance_, create_info, nullptr, &debug_messenger_); 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 #endif
std::vector<const char*> RenderEngine::get_required_extensions() std::vector<const char*> RenderEngine::get_required_extensions()
@@ -49,6 +41,12 @@ std::vector<const char*> RenderEngine::get_required_extensions()
return extensions; return extensions;
} }
bool RenderEngine::QueueFamilyIndices::is_complete()
{
return graphycs_family.has_value();
}
bool RenderEngine::is_device_suitable(VkPhysicalDevice device) bool RenderEngine::is_device_suitable(VkPhysicalDevice device)
{ {
VkPhysicalDeviceProperties device_properties; VkPhysicalDeviceProperties device_properties;
@@ -180,6 +178,11 @@ void RenderEngine::create_logical_device()
vkGetDeviceQueue(device_, indices.graphycs_family.value(), 0, &graphics_queue_); 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): RenderEngine::RenderEngine(CoreInstance& core, GLFWwindow* window):
core_(core), core_(core),
window_(window) window_(window)
@@ -188,6 +191,7 @@ window_(window)
#endif #endif
{ {
create_instance(); create_instance();
create_surface();
pick_physical_device(); pick_physical_device();
create_logical_device(); create_logical_device();
} }
@@ -197,6 +201,9 @@ RenderEngine::~RenderEngine()
if (device_ != VK_NULL_HANDLE) if (device_ != VK_NULL_HANDLE)
vkDestroyDevice(device_, nullptr); vkDestroyDevice(device_, nullptr);
if (surface_ != VK_NULL_HANDLE)
vkDestroySurfaceKHR(instance_, surface_, nullptr);
#ifdef _DEBUG #ifdef _DEBUG
if (debug_messenger_ != nullptr && instance_ != nullptr) { if (debug_messenger_ != nullptr && instance_ != nullptr) {
PFN_vkDestroyDebugUtilsMessengerEXT destroyer_messenger = reinterpret_cast<PFN_vkDestroyDebugUtilsMessengerEXT>(vkGetInstanceProcAddr(instance_, "vkDestroyDebugUtilsMessengerEXT")); PFN_vkDestroyDebugUtilsMessengerEXT destroyer_messenger = reinterpret_cast<PFN_vkDestroyDebugUtilsMessengerEXT>(vkGetInstanceProcAddr(instance_, "vkDestroyDebugUtilsMessengerEXT"));
+14 -4
View File
@@ -1,12 +1,20 @@
#pragma once #pragma once
#define GLFW_INCLUDE_VULKAN
#include <vulkan/vulkan.h>
#include "GLFW/glfw3.h"
#include <vector> #include <vector>
#include <optional> #include <optional>
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#include <vulkan/vulkan.h>
#ifdef _DEBUG
#include <assert.h>
#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 CoreInstance;
class RenderEngine class RenderEngine
@@ -20,6 +28,7 @@ class RenderEngine
CoreInstance& core_; CoreInstance& core_;
GLFWwindow* window_; GLFWwindow* window_;
VkInstance instance_ = VK_NULL_HANDLE; VkInstance instance_ = VK_NULL_HANDLE;
VkSurfaceKHR surface_ = VK_NULL_HANDLE;
VkPhysicalDevice physical_device_ = VK_NULL_HANDLE; VkPhysicalDevice physical_device_ = VK_NULL_HANDLE;
VkDevice device_ = VK_NULL_HANDLE; VkDevice device_ = VK_NULL_HANDLE;
VkQueue graphics_queue_ = VK_NULL_HANDLE; VkQueue graphics_queue_ = VK_NULL_HANDLE;
@@ -34,6 +43,7 @@ class RenderEngine
static QueueFamilyIndices find_queue_family_indices(VkPhysicalDevice device); static QueueFamilyIndices find_queue_family_indices(VkPhysicalDevice device);
void create_instance(); void create_instance();
void create_surface();
void pick_physical_device(); void pick_physical_device();
void create_logical_device(); void create_logical_device();
public: public: