From 66b75aceb9f6566caa54a3f514d9fd7a85d22885 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 12 Nov 2024 01:50:40 +0800 Subject: [PATCH] added InitRenderCmdBuffer/ClearRenderCmdBuffer in SwapchainModule --- inc/hgl/graph/module/SwapchainModule.h | 5 ++++ src/SceneGraph/module/SwapchainModule.cpp | 31 +++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/inc/hgl/graph/module/SwapchainModule.h b/inc/hgl/graph/module/SwapchainModule.h index 9ec32679..54264b87 100644 --- a/inc/hgl/graph/module/SwapchainModule.h +++ b/inc/hgl/graph/module/SwapchainModule.h @@ -12,12 +12,17 @@ class SwapchainModule:public GraphModule RenderPass *swapchain_rp=nullptr; + RenderCmdBuffer **cmd_buf=nullptr; + protected: bool CreateSwapchainFBO(); bool CreateSwapchain(); bool CreateSwapchainRenderTarget(); + void InitRenderCmdBuffer(); + void ClearRenderCmdBuffer(); + public: virtual void OnResize(const VkExtent2D &)override; ///<窗口大小改变 diff --git a/src/SceneGraph/module/SwapchainModule.cpp b/src/SceneGraph/module/SwapchainModule.cpp index ab007177..378bd4c5 100644 --- a/src/SceneGraph/module/SwapchainModule.cpp +++ b/src/SceneGraph/module/SwapchainModule.cpp @@ -192,8 +192,33 @@ bool SwapchainModule::CreateSwapchainRenderTarget() return true; } +void SwapchainModule::ClearRenderCmdBuffer() +{ + SAFE_CLEAR_OBJECT_ARRAY_OBJECT(cmd_buf,swapchain->image_count); +} + +void SwapchainModule::InitRenderCmdBuffer() +{ + ClearRenderCmdBuffer(); + + cmd_buf=hgl_zero_new(swapchain->image_count); + + GPUDevice *device=GetDevice(); + + AnsiString cmd_buf_name; + + for(int32_t i=0;iimage_count;i++) + { + cmd_buf_name=device->GetPhysicalDevice()->GetDeviceName()+AnsiString(":RenderCmdBuffer_")+AnsiString::numberOf(i); + + cmd_buf[i]=device->CreateRenderCommandBuffer(cmd_buf_name); + } +} + SwapchainModule::~SwapchainModule() { + ClearRenderCmdBuffer(); + if(swapchain_rt) delete swapchain_rt; @@ -223,16 +248,22 @@ bool SwapchainModule::Init() if(!CreateSwapchainRenderTarget()) return(false); + InitRenderCmdBuffer(); + return true; } void SwapchainModule::OnResize(const VkExtent2D &extent) { + ClearRenderCmdBuffer(); + SAFE_CLEAR(swapchain_rt) GetDeviceAttribute()->RefreshSurfaceCaps(); CreateSwapchainRenderTarget(); + + InitRenderCmdBuffer(); } bool SwapchainModule::BeginFrame()