optimized SwapchainModule::BeginFrame/EndFrame

This commit is contained in:
2025-01-26 12:13:51 +08:00
parent af03f2967c
commit 768ebde879
8 changed files with 36 additions and 65 deletions

View File

@@ -116,24 +116,21 @@ public:
RenderFramework *rf=GetRenderFramework();
SwapchainModule *sm=rf->GetSwapchainModule();
sm->BeginFrame(); //这里会有AcquireNextImage操作
RenderCmdBuffer *cb=sm->BeginRender(); //这里会有AcquireNextImage操作
if(cb)
{
//这个使用完全不合理录制CMD和推送swapchain是两回事需要分开操作。
//比如场景有的物件分静态和动态
//可能静态物件就全部一次性录制好,而动态物件则是每帧录制
RenderCmdBuffer *cb=sm->RecordCmdBuffer(); //这里会获取当前帧的RenderCmdBuffer、开启cmd录制、绑定FBO
if(cb)
{
cb->SetClearColor(0,clear_color);
cb->SetClearColor(0,clear_color);
Render(cb,render_obj);
Render(cb,render_obj);
cb->End(); //结束cmd录制
}
sm->EndFrame(); //这里会Submit和PresentBackbuffer
sm->EndRender(); //这里会Submit和PresentBackbuffer
}
}
};//class TestApp:public VulkanApplicationFramework

View File

@@ -220,12 +220,12 @@ public:
}
}
bool BuildCommandBuffer(RenderCmdBuffer *cb,RenderPass *rp,Framebuffer *fb,Renderable *ri)
bool BuildCommandBuffer(RenderCmdBuffer *cb,Framebuffer *fbo,Renderable *ri)
{
if(!ri)return(false);
cb->Begin();
cb->BindFramebuffer(rp,fb);
cb->BindFramebuffer(fbo);
cb->SetClearColor(0,clear_color);
cb->BeginRenderPass();
cb->BindPipeline(ri->GetPipeline());
@@ -238,19 +238,12 @@ public:
return(true);
}
void BuildCommandBuffer(RenderCmdBuffer *cb,RenderTarget *rt,Renderable *ri)
{
if(!cb||!rt||!ri)
return;
BuildCommandBuffer(cb,rt->GetRenderPass(),rt->GetFramebuffer(),ri);
}
bool BuildCommandBuffer(uint32_t index,Renderable *ri)
{
if(!ri)return(false);
return BuildCommandBuffer(cmd_buf[index],sc_render_target->GetRenderPass(),sc_render_target->GetFramebuffer(index),ri);
return BuildCommandBuffer(cmd_buf[index],
sc_render_target->GetFramebuffer(),ri);
}
bool BuildCommandBuffer(Renderable *ri)
@@ -277,7 +270,7 @@ public:
RenderCmdBuffer *cb=cmd_buf[index];
cb->Begin();
cb->BindFramebuffer(sc_render_target->GetRenderPass(),sc_render_target->GetFramebuffer(index));
cb->BindFramebuffer(sc_render_target->GetFramebuffer(index));
cb->SetClearColor(0,clear_color);
cb->BeginRenderPass();
rl->Render(cb);