diff --git a/CMCore b/CMCore index 11e32b77..e475de16 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 11e32b77f1136bcb552abb406cf73db799720e11 +Subproject commit e475de1692f5554f8e8c7e1a8f4eb73f8a297d55 diff --git a/inc/hgl/graph/VKSwapchain.h b/inc/hgl/graph/VKSwapchain.h index 38f89149..10782bc8 100644 --- a/inc/hgl/graph/VKSwapchain.h +++ b/inc/hgl/graph/VKSwapchain.h @@ -1,8 +1,6 @@ #pragma once #include -#include -#include #include #include VK_NAMESPACE_BEGIN @@ -40,8 +38,6 @@ public: VkSurfaceFormatKHR surface_format {}; VkFormat depth_format =VK_FORMAT_UNDEFINED; - RenderPass * render_pass =nullptr; - uint32_t image_count =0; SwapchainImage * sc_image =nullptr; diff --git a/inc/hgl/graph/module/SwapchainModule.h b/inc/hgl/graph/module/SwapchainModule.h index 968c2c23..b68fa124 100644 --- a/inc/hgl/graph/module/SwapchainModule.h +++ b/inc/hgl/graph/module/SwapchainModule.h @@ -6,16 +6,19 @@ VK_NAMESPACE_BEGIN class RenderTargetManager; class RenderPassManager; +class RenderPass; GRAPH_MODULE_CLASS(SwapchainModule) { - Swapchain *swapchain=nullptr; + Swapchain * swapchain =nullptr; - TextureManager *tex_manager=nullptr; - RenderTargetManager *rt_manager=nullptr; - RenderPassManager *rp_manager=nullptr; + TextureManager * tex_manager =nullptr; + RenderTargetManager * rt_manager =nullptr; + RenderPassManager * rp_manager =nullptr; - RTSwapchain *swapchain_rt=nullptr; + RenderPass * sc_render_pass =nullptr; + + RTSwapchain * sc_render_target=nullptr; protected: @@ -37,9 +40,9 @@ public: public: - RenderPass * GetRenderPass ()const{return swapchain_rt->GetRenderPass();} + RenderPass * GetRenderPass ()const{return sc_render_pass;} - const VkExtent2D & GetSwapchainSize()const{return swapchain_rt->GetExtent();} + const VkExtent2D & GetSwapchainSize()const{return sc_render_target->GetExtent();} RenderCmdBuffer *RecordCmdBuffer(int frame_index=-1); diff --git a/src/SceneGraph/module/SwapchainModule.cpp b/src/SceneGraph/module/SwapchainModule.cpp index fb0d08e6..4398b696 100644 --- a/src/SceneGraph/module/SwapchainModule.cpp +++ b/src/SceneGraph/module/SwapchainModule.cpp @@ -114,7 +114,7 @@ bool SwapchainModule::CreateSwapchainFBO() if(!swapchain->sc_image[i].depth) return(false); - swapchain->sc_image[i].fbo=rt_manager->CreateFBO( swapchain->render_pass, + swapchain->sc_image[i].fbo=rt_manager->CreateFBO( sc_render_pass, swapchain->sc_image[i].color->GetImageView(), swapchain->sc_image[i].depth->GetImageView()); @@ -150,15 +150,6 @@ bool SwapchainModule::CreateSwapchain() swapchain->transform =dev_attr->surface_caps.currentTransform; swapchain->surface_format =dev_attr->surface_format; swapchain->depth_format =dev_attr->physical_device->GetDepthFormat(); - - SwapchainRenderbufferInfo rbi(swapchain->surface_format.format,swapchain->depth_format); - - swapchain->render_pass =rp_manager->AcquireRenderPass(&rbi); - - #ifdef _DEBUG - if(dev_attr->debug_utils) - dev_attr->debug_utils->SetRenderPass(swapchain->render_pass->GetVkRenderPass(),"MainDeviceRenderPass"); - #endif//_DEBUG swapchain->swap_chain=CreateVulkanSwapChain(dev_attr); @@ -184,20 +175,20 @@ bool SwapchainModule::CreateSwapchainRenderTarget() Semaphore *render_complete_semaphore=device->CreateGPUSemaphore(); Semaphore *present_complete_semaphore=device->CreateGPUSemaphore(); - swapchain_rt=new RTSwapchain( device->GetDevice(), - swapchain, - q, - render_complete_semaphore, - present_complete_semaphore, - swapchain->render_pass - ); + sc_render_target=new RTSwapchain( device->GetDevice(), + swapchain, + q, + render_complete_semaphore, + present_complete_semaphore, + sc_render_pass + ); return true; } SwapchainModule::~SwapchainModule() { - SAFE_CLEAR(swapchain_rt); + SAFE_CLEAR(sc_render_target); } SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetManager *rtm,RenderPassManager *rpm):GraphModuleInherit(dev,"SwapchainModule") @@ -205,12 +196,19 @@ SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetM tex_manager=tm; rt_manager=rtm; rp_manager=rpm; + + auto *dev_attr=GetDeviceAttribute(); + SwapchainRenderbufferInfo rbi(dev_attr->surface_format.format,dev_attr->physical_device->GetDepthFormat()); - //#ifdef _DEBUG - // if(dev_attr->debug_utils) - // dev_attr->debug_utils->SetRenderPass(swapchain_rp->GetVkRenderPass(),"SwapchainRenderPass"); - //#endif//_DEBUG + sc_render_pass=rp_manager->AcquireRenderPass(&rbi); + + #ifdef _DEBUG + { + if(dev_attr->debug_utils) + dev_attr->debug_utils->SetRenderPass(sc_render_pass->GetVkRenderPass(),"MainDeviceRenderPass"); + } + #endif//_DEBUG if(!CreateSwapchainRenderTarget()) return; @@ -218,7 +216,7 @@ SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetM void SwapchainModule::OnResize(const VkExtent2D &extent) { - SAFE_CLEAR(swapchain_rt) + SAFE_CLEAR(sc_render_target) swapchain=nullptr; GetDeviceAttribute()->RefreshSurfaceCaps(); @@ -228,7 +226,7 @@ void SwapchainModule::OnResize(const VkExtent2D &extent) bool SwapchainModule::BeginFrame() { - uint32_t index=swapchain_rt->AcquireNextImage(); + uint32_t index=sc_render_target->AcquireNextImage(); if(index>=swapchain->image_count) return(false); @@ -238,20 +236,20 @@ bool SwapchainModule::BeginFrame() void SwapchainModule::EndFrame() { - int index=swapchain_rt->GetCurrentFrameIndices(); + int index=sc_render_target->GetCurrentFrameIndices(); VkCommandBuffer cb=*(swapchain->sc_image[index].cmd_buf); - swapchain_rt->Submit(cb); - swapchain_rt->PresentBackbuffer(); - swapchain_rt->WaitQueue(); - swapchain_rt->WaitFence(); + sc_render_target->Submit(cb); + sc_render_target->PresentBackbuffer(); + sc_render_target->WaitQueue(); + sc_render_target->WaitFence(); } RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index) { if(frame_index<0) - frame_index=swapchain_rt->GetCurrentFrameIndices(); + frame_index=sc_render_target->GetCurrentFrameIndices(); if(frame_index>=swapchain->image_count) return(nullptr); @@ -259,7 +257,7 @@ RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index) RenderCmdBuffer *rcb=swapchain->sc_image[frame_index].cmd_buf; rcb->Begin(); - rcb->BindFramebuffer(swapchain->render_pass,swapchain_rt->GetFramebuffer()); + rcb->BindFramebuffer(sc_render_pass,sc_render_target->GetFramebuffer()); return rcb; }