Add create framebuffer

This commit is contained in:
Jiga228
2025-09-28 18:56:12 +07:00
parent a9fa292ef9
commit 958e13c6f5
2 changed files with 28 additions and 3 deletions
+24 -2
View File
@@ -394,7 +394,7 @@ void RenderEngine::create_render_pass()
VK_CHECK(vkCreateRenderPass(device_, &render_pass_info, nullptr, &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); std::ifstream vertex_shader_file("Shaders/vertex.spv", std::ios::binary);
if (!vertex_shader_file.is_open()) if (!vertex_shader_file.is_open())
@@ -531,6 +531,25 @@ void RenderEngine::create_graphycs_pipleline()
vkDestroyShaderModule(device_, fragment_shader, nullptr); 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() void RenderEngine::create_surface()
{ {
VK_CHECK(glfwCreateWindowSurface(instance_, window_, nullptr, &surface_)); VK_CHECK(glfwCreateWindowSurface(instance_, window_, nullptr, &surface_));
@@ -550,11 +569,14 @@ window_(window)
create_swapchain(desired_present_mode); create_swapchain(desired_present_mode);
create_image_views(); create_image_views();
create_render_pass(); create_render_pass();
create_graphycs_pipleline(); create_graphycs_pipeline();
} }
RenderEngine::~RenderEngine() RenderEngine::~RenderEngine()
{ {
for (auto& i : framebuffers_)
vkDestroyFramebuffer(device_, i, nullptr);
if (graphycs_pipeline_ != VK_NULL_HANDLE) if (graphycs_pipeline_ != VK_NULL_HANDLE)
vkDestroyPipeline(device_, graphycs_pipeline_, nullptr); vkDestroyPipeline(device_, graphycs_pipeline_, nullptr);
+4 -1
View File
@@ -51,6 +51,7 @@ class RenderEngine
VkRenderPass render_pass_ = VK_NULL_HANDLE; VkRenderPass render_pass_ = VK_NULL_HANDLE;
VkPipelineLayout pipeline_layout_ = VK_NULL_HANDLE; VkPipelineLayout pipeline_layout_ = VK_NULL_HANDLE;
VkPipeline graphycs_pipeline_ = VK_NULL_HANDLE; VkPipeline graphycs_pipeline_ = VK_NULL_HANDLE;
std::vector<VkFramebuffer> framebuffers_;
#ifdef _DEBUG #ifdef _DEBUG
VkResult enable_layer_validation(VkDebugUtilsMessengerCreateInfoEXT* create_info); VkResult enable_layer_validation(VkDebugUtilsMessengerCreateInfoEXT* create_info);
@@ -74,7 +75,9 @@ class RenderEngine
void create_swapchain(VkPresentModeKHR desired_present_mode); void create_swapchain(VkPresentModeKHR desired_present_mode);
void create_image_views(); void create_image_views();
void create_render_pass(); void create_render_pass();
void create_graphycs_pipleline(); void create_graphycs_pipeline();
void create_framebuffers();
public: public:
// Can throw the exception // Can throw the exception
RenderEngine(CoreInstance& core, GLFWwindow* window, VkPresentModeKHR desired_present_mode = VK_PRESENT_MODE_MAILBOX_KHR); RenderEngine(CoreInstance& core, GLFWwindow* window, VkPresentModeKHR desired_present_mode = VK_PRESENT_MODE_MAILBOX_KHR);