From 958e13c6f55e11919c0aaf8a6f6b1bc5b397a67c Mon Sep 17 00:00:00 2001 From: Jiga228 Date: Sun, 28 Sep 2025 18:56:12 +0700 Subject: [PATCH] Add create framebuffer --- Core/Core/RenderEngine.cpp | 26 ++++++++++++++++++++++++-- Core/Core/RenderEngine.h | 5 ++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Core/Core/RenderEngine.cpp b/Core/Core/RenderEngine.cpp index 9db638e..752d866 100644 --- a/Core/Core/RenderEngine.cpp +++ b/Core/Core/RenderEngine.cpp @@ -394,7 +394,7 @@ void RenderEngine::create_render_pass() VK_CHECK(vkCreateRenderPass(device_, &render_pass_info, nullptr, &render_pass_)); } -void RenderEngine::create_graphycs_pipleline() +void RenderEngine::create_graphycs_pipeline() { std::ifstream vertex_shader_file("Shaders/vertex.spv", std::ios::binary); if (!vertex_shader_file.is_open()) @@ -531,6 +531,25 @@ void RenderEngine::create_graphycs_pipleline() vkDestroyShaderModule(device_, fragment_shader, nullptr); } +void RenderEngine::create_framebuffers() +{ + framebuffers_.resize(swapchain_images_.size()); + + VkFramebufferCreateInfo framebuffer_info{}; + framebuffer_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; + framebuffer_info.renderPass = render_pass_; + framebuffer_info.attachmentCount = 1; + framebuffer_info.width = swapchain_extent_.width; + framebuffer_info.height = swapchain_extent_.height; + framebuffer_info.layers = 1; + + for (size_t i = 0; i < framebuffers_.size(); ++i) + { + framebuffer_info.pAttachments = &swapchain_image_views_[i]; + VK_CHECK(vkCreateFramebuffer(device_, &framebuffer_info, nullptr, &framebuffers_[i])); + } +} + void RenderEngine::create_surface() { VK_CHECK(glfwCreateWindowSurface(instance_, window_, nullptr, &surface_)); @@ -550,11 +569,14 @@ window_(window) create_swapchain(desired_present_mode); create_image_views(); create_render_pass(); - create_graphycs_pipleline(); + create_graphycs_pipeline(); } RenderEngine::~RenderEngine() { + for (auto& i : framebuffers_) + vkDestroyFramebuffer(device_, i, nullptr); + if (graphycs_pipeline_ != VK_NULL_HANDLE) vkDestroyPipeline(device_, graphycs_pipeline_, nullptr); diff --git a/Core/Core/RenderEngine.h b/Core/Core/RenderEngine.h index aac5ed3..7f4dd0c 100644 --- a/Core/Core/RenderEngine.h +++ b/Core/Core/RenderEngine.h @@ -51,6 +51,7 @@ class RenderEngine VkRenderPass render_pass_ = VK_NULL_HANDLE; VkPipelineLayout pipeline_layout_ = VK_NULL_HANDLE; VkPipeline graphycs_pipeline_ = VK_NULL_HANDLE; + std::vector framebuffers_; #ifdef _DEBUG VkResult enable_layer_validation(VkDebugUtilsMessengerCreateInfoEXT* create_info); @@ -74,7 +75,9 @@ class RenderEngine void create_swapchain(VkPresentModeKHR desired_present_mode); void create_image_views(); void create_render_pass(); - void create_graphycs_pipleline(); + void create_graphycs_pipeline(); + void create_framebuffers(); + public: // Can throw the exception RenderEngine(CoreInstance& core, GLFWwindow* window, VkPresentModeKHR desired_present_mode = VK_PRESENT_MODE_MAILBOX_KHR);