added SwapchainModule::GetRenderCmdBuffer()

This commit is contained in:
hyzboy 2025-01-26 00:15:54 +08:00
parent 022cc4a2f3
commit 6e12a411b1
3 changed files with 31 additions and 18 deletions

View File

@ -48,6 +48,8 @@ class RenderCmdBuffer:public GPUCmdBuffer
RenderPassBeginInfo rp_begin;
VkPipelineLayout pipeline_layout;
private:
void SetFBO(Framebuffer *);
public:

View File

@ -26,6 +26,8 @@ protected:
bool CreateSwapchain();
bool CreateSwapchainRenderTarget();
RenderCmdBuffer *GetRenderCmdBuffer(int frame_index=-1);
public:
virtual void OnResize(const VkExtent2D &)override; ///<窗口大小改变
@ -40,11 +42,11 @@ public:
public:
RenderPass * GetRenderPass ()const{return sc_render_pass;}
RenderPass * GetRenderPass ()const{return sc_render_pass;}
const VkExtent2D & GetSwapchainSize()const{return sc_render_target->GetExtent();}
const VkExtent2D & GetSwapchainSize()const{return sc_render_target->GetExtent();}
RenderCmdBuffer *RecordCmdBuffer(int frame_index=-1);
RenderCmdBuffer * RecordCmdBuffer (int frame_index=-1);
};//class SwapchainModule:public GraphModule

View File

@ -216,7 +216,7 @@ SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetM
#ifdef _DEBUG
{
if(dev_attr->debug_utils)
dev_attr->debug_utils->SetRenderPass(sc_render_pass->GetVkRenderPass(),"MainDeviceRenderPass");
dev_attr->debug_utils->SetRenderPass(sc_render_pass->GetVkRenderPass(),"SwapchainRenderPass");
}
#endif//_DEBUG
@ -244,19 +244,7 @@ bool SwapchainModule::BeginFrame()
return(true);
}
void SwapchainModule::EndFrame()
{
int index=sc_render_target->GetCurrentFrameIndices();
VkCommandBuffer cb=*(swapchain->sc_image[index].cmd_buf);
sc_render_target->Submit(cb);
sc_render_target->PresentBackbuffer();
sc_render_target->WaitQueue();
sc_render_target->WaitFence();
}
RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index)
RenderCmdBuffer *SwapchainModule::GetRenderCmdBuffer(int frame_index)
{
if(frame_index<0)
frame_index=sc_render_target->GetCurrentFrameIndices();
@ -264,7 +252,28 @@ RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index)
if(frame_index>=swapchain->image_count)
return(nullptr);
RenderCmdBuffer *rcb=swapchain->sc_image[frame_index].cmd_buf;
return swapchain->sc_image[frame_index].cmd_buf;
}
void SwapchainModule::EndFrame()
{
RenderCmdBuffer *rcb=GetRenderCmdBuffer();
if(!rcb)
return;
sc_render_target->Submit(*rcb);
sc_render_target->PresentBackbuffer();
sc_render_target->WaitQueue();
sc_render_target->WaitFence();
}
RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index)
{
RenderCmdBuffer *rcb=GetRenderCmdBuffer(frame_index);
if(!rcb)
return(nullptr);
rcb->Begin();
rcb->BindFramebuffer(sc_render_pass,sc_render_target->GetFramebuffer());