added InitRenderCmdBuffer/ClearRenderCmdBuffer in SwapchainModule

This commit is contained in:
hyzboy 2024-11-12 01:50:40 +08:00
parent b775ffa920
commit 66b75aceb9
2 changed files with 36 additions and 0 deletions

View File

@ -12,12 +12,17 @@ class SwapchainModule:public GraphModule
RenderPass *swapchain_rp=nullptr; RenderPass *swapchain_rp=nullptr;
RenderCmdBuffer **cmd_buf=nullptr;
protected: protected:
bool CreateSwapchainFBO(); bool CreateSwapchainFBO();
bool CreateSwapchain(); bool CreateSwapchain();
bool CreateSwapchainRenderTarget(); bool CreateSwapchainRenderTarget();
void InitRenderCmdBuffer();
void ClearRenderCmdBuffer();
public: public:
virtual void OnResize(const VkExtent2D &)override; ///<窗口大小改变 virtual void OnResize(const VkExtent2D &)override; ///<窗口大小改变

View File

@ -192,8 +192,33 @@ bool SwapchainModule::CreateSwapchainRenderTarget()
return true; return true;
} }
void SwapchainModule::ClearRenderCmdBuffer()
{
SAFE_CLEAR_OBJECT_ARRAY_OBJECT(cmd_buf,swapchain->image_count);
}
void SwapchainModule::InitRenderCmdBuffer()
{
ClearRenderCmdBuffer();
cmd_buf=hgl_zero_new<RenderCmdBuffer *>(swapchain->image_count);
GPUDevice *device=GetDevice();
AnsiString cmd_buf_name;
for(int32_t i=0;i<swapchain->image_count;i++)
{
cmd_buf_name=device->GetPhysicalDevice()->GetDeviceName()+AnsiString(":RenderCmdBuffer_")+AnsiString::numberOf(i);
cmd_buf[i]=device->CreateRenderCommandBuffer(cmd_buf_name);
}
}
SwapchainModule::~SwapchainModule() SwapchainModule::~SwapchainModule()
{ {
ClearRenderCmdBuffer();
if(swapchain_rt) if(swapchain_rt)
delete swapchain_rt; delete swapchain_rt;
@ -223,16 +248,22 @@ bool SwapchainModule::Init()
if(!CreateSwapchainRenderTarget()) if(!CreateSwapchainRenderTarget())
return(false); return(false);
InitRenderCmdBuffer();
return true; return true;
} }
void SwapchainModule::OnResize(const VkExtent2D &extent) void SwapchainModule::OnResize(const VkExtent2D &extent)
{ {
ClearRenderCmdBuffer();
SAFE_CLEAR(swapchain_rt) SAFE_CLEAR(swapchain_rt)
GetDeviceAttribute()->RefreshSurfaceCaps(); GetDeviceAttribute()->RefreshSurfaceCaps();
CreateSwapchainRenderTarget(); CreateSwapchainRenderTarget();
InitRenderCmdBuffer();
} }
bool SwapchainModule::BeginFrame() bool SwapchainModule::BeginFrame()