diff --git a/inc/hgl/graph/VKCommandBuffer.h b/inc/hgl/graph/VKCommandBuffer.h index e5d77631..db2a9a0f 100644 --- a/inc/hgl/graph/VKCommandBuffer.h +++ b/inc/hgl/graph/VKCommandBuffer.h @@ -48,6 +48,8 @@ class RenderCmdBuffer:public GPUCmdBuffer RenderPassBeginInfo rp_begin; VkPipelineLayout pipeline_layout; +private: + void SetFBO(Framebuffer *); public: diff --git a/inc/hgl/graph/module/SwapchainModule.h b/inc/hgl/graph/module/SwapchainModule.h index b68fa124..1e0125dc 100644 --- a/inc/hgl/graph/module/SwapchainModule.h +++ b/inc/hgl/graph/module/SwapchainModule.h @@ -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 diff --git a/src/SceneGraph/module/SwapchainModule.cpp b/src/SceneGraph/module/SwapchainModule.cpp index 3d6de680..73fbfccd 100644 --- a/src/SceneGraph/module/SwapchainModule.cpp +++ b/src/SceneGraph/module/SwapchainModule.cpp @@ -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());