I moved a RenderPass to SwapchainModule from SwapchainImage; RenderPass isn't recreated after recreating the swapchain.
This commit is contained in:
parent
7326765057
commit
0a072d846b
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit 11e32b77f1136bcb552abb406cf73db799720e11
|
Subproject commit e475de1692f5554f8e8c7e1a8f4eb73f8a297d55
|
@ -1,8 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include<hgl/graph/VK.h>
|
#include<hgl/graph/VK.h>
|
||||||
#include<hgl/graph/VKTexture.h>
|
|
||||||
#include<hgl/type/List.h>
|
|
||||||
#include<hgl/graph/VKFramebuffer.h>
|
#include<hgl/graph/VKFramebuffer.h>
|
||||||
#include<hgl/graph/VKCommandBuffer.h>
|
#include<hgl/graph/VKCommandBuffer.h>
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
@ -40,8 +38,6 @@ public:
|
|||||||
VkSurfaceFormatKHR surface_format {};
|
VkSurfaceFormatKHR surface_format {};
|
||||||
VkFormat depth_format =VK_FORMAT_UNDEFINED;
|
VkFormat depth_format =VK_FORMAT_UNDEFINED;
|
||||||
|
|
||||||
RenderPass * render_pass =nullptr;
|
|
||||||
|
|
||||||
uint32_t image_count =0;
|
uint32_t image_count =0;
|
||||||
|
|
||||||
SwapchainImage * sc_image =nullptr;
|
SwapchainImage * sc_image =nullptr;
|
||||||
|
@ -6,6 +6,7 @@ VK_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
class RenderTargetManager;
|
class RenderTargetManager;
|
||||||
class RenderPassManager;
|
class RenderPassManager;
|
||||||
|
class RenderPass;
|
||||||
|
|
||||||
GRAPH_MODULE_CLASS(SwapchainModule)
|
GRAPH_MODULE_CLASS(SwapchainModule)
|
||||||
{
|
{
|
||||||
@ -15,7 +16,9 @@ GRAPH_MODULE_CLASS(SwapchainModule)
|
|||||||
RenderTargetManager * rt_manager =nullptr;
|
RenderTargetManager * rt_manager =nullptr;
|
||||||
RenderPassManager * rp_manager =nullptr;
|
RenderPassManager * rp_manager =nullptr;
|
||||||
|
|
||||||
RTSwapchain *swapchain_rt=nullptr;
|
RenderPass * sc_render_pass =nullptr;
|
||||||
|
|
||||||
|
RTSwapchain * sc_render_target=nullptr;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -37,9 +40,9 @@ public:
|
|||||||
|
|
||||||
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);
|
RenderCmdBuffer *RecordCmdBuffer(int frame_index=-1);
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ bool SwapchainModule::CreateSwapchainFBO()
|
|||||||
if(!swapchain->sc_image[i].depth)
|
if(!swapchain->sc_image[i].depth)
|
||||||
return(false);
|
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].color->GetImageView(),
|
||||||
swapchain->sc_image[i].depth->GetImageView());
|
swapchain->sc_image[i].depth->GetImageView());
|
||||||
|
|
||||||
@ -151,15 +151,6 @@ bool SwapchainModule::CreateSwapchain()
|
|||||||
swapchain->surface_format =dev_attr->surface_format;
|
swapchain->surface_format =dev_attr->surface_format;
|
||||||
swapchain->depth_format =dev_attr->physical_device->GetDepthFormat();
|
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);
|
swapchain->swap_chain=CreateVulkanSwapChain(dev_attr);
|
||||||
|
|
||||||
if(swapchain->swap_chain)
|
if(swapchain->swap_chain)
|
||||||
@ -184,12 +175,12 @@ bool SwapchainModule::CreateSwapchainRenderTarget()
|
|||||||
Semaphore *render_complete_semaphore=device->CreateGPUSemaphore();
|
Semaphore *render_complete_semaphore=device->CreateGPUSemaphore();
|
||||||
Semaphore *present_complete_semaphore=device->CreateGPUSemaphore();
|
Semaphore *present_complete_semaphore=device->CreateGPUSemaphore();
|
||||||
|
|
||||||
swapchain_rt=new RTSwapchain( device->GetDevice(),
|
sc_render_target=new RTSwapchain( device->GetDevice(),
|
||||||
swapchain,
|
swapchain,
|
||||||
q,
|
q,
|
||||||
render_complete_semaphore,
|
render_complete_semaphore,
|
||||||
present_complete_semaphore,
|
present_complete_semaphore,
|
||||||
swapchain->render_pass
|
sc_render_pass
|
||||||
);
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -197,7 +188,7 @@ bool SwapchainModule::CreateSwapchainRenderTarget()
|
|||||||
|
|
||||||
SwapchainModule::~SwapchainModule()
|
SwapchainModule::~SwapchainModule()
|
||||||
{
|
{
|
||||||
SAFE_CLEAR(swapchain_rt);
|
SAFE_CLEAR(sc_render_target);
|
||||||
}
|
}
|
||||||
|
|
||||||
SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetManager *rtm,RenderPassManager *rpm):GraphModuleInherit<SwapchainModule,GraphModule>(dev,"SwapchainModule")
|
SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetManager *rtm,RenderPassManager *rpm):GraphModuleInherit<SwapchainModule,GraphModule>(dev,"SwapchainModule")
|
||||||
@ -206,11 +197,18 @@ SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetM
|
|||||||
rt_manager=rtm;
|
rt_manager=rtm;
|
||||||
rp_manager=rpm;
|
rp_manager=rpm;
|
||||||
|
|
||||||
|
auto *dev_attr=GetDeviceAttribute();
|
||||||
|
|
||||||
//#ifdef _DEBUG
|
SwapchainRenderbufferInfo rbi(dev_attr->surface_format.format,dev_attr->physical_device->GetDepthFormat());
|
||||||
// if(dev_attr->debug_utils)
|
|
||||||
// dev_attr->debug_utils->SetRenderPass(swapchain_rp->GetVkRenderPass(),"SwapchainRenderPass");
|
sc_render_pass=rp_manager->AcquireRenderPass(&rbi);
|
||||||
//#endif//_DEBUG
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
{
|
||||||
|
if(dev_attr->debug_utils)
|
||||||
|
dev_attr->debug_utils->SetRenderPass(sc_render_pass->GetVkRenderPass(),"MainDeviceRenderPass");
|
||||||
|
}
|
||||||
|
#endif//_DEBUG
|
||||||
|
|
||||||
if(!CreateSwapchainRenderTarget())
|
if(!CreateSwapchainRenderTarget())
|
||||||
return;
|
return;
|
||||||
@ -218,7 +216,7 @@ SwapchainModule::SwapchainModule(GPUDevice *dev,TextureManager *tm,RenderTargetM
|
|||||||
|
|
||||||
void SwapchainModule::OnResize(const VkExtent2D &extent)
|
void SwapchainModule::OnResize(const VkExtent2D &extent)
|
||||||
{
|
{
|
||||||
SAFE_CLEAR(swapchain_rt)
|
SAFE_CLEAR(sc_render_target)
|
||||||
swapchain=nullptr;
|
swapchain=nullptr;
|
||||||
|
|
||||||
GetDeviceAttribute()->RefreshSurfaceCaps();
|
GetDeviceAttribute()->RefreshSurfaceCaps();
|
||||||
@ -228,7 +226,7 @@ void SwapchainModule::OnResize(const VkExtent2D &extent)
|
|||||||
|
|
||||||
bool SwapchainModule::BeginFrame()
|
bool SwapchainModule::BeginFrame()
|
||||||
{
|
{
|
||||||
uint32_t index=swapchain_rt->AcquireNextImage();
|
uint32_t index=sc_render_target->AcquireNextImage();
|
||||||
|
|
||||||
if(index>=swapchain->image_count)
|
if(index>=swapchain->image_count)
|
||||||
return(false);
|
return(false);
|
||||||
@ -238,20 +236,20 @@ bool SwapchainModule::BeginFrame()
|
|||||||
|
|
||||||
void SwapchainModule::EndFrame()
|
void SwapchainModule::EndFrame()
|
||||||
{
|
{
|
||||||
int index=swapchain_rt->GetCurrentFrameIndices();
|
int index=sc_render_target->GetCurrentFrameIndices();
|
||||||
|
|
||||||
VkCommandBuffer cb=*(swapchain->sc_image[index].cmd_buf);
|
VkCommandBuffer cb=*(swapchain->sc_image[index].cmd_buf);
|
||||||
|
|
||||||
swapchain_rt->Submit(cb);
|
sc_render_target->Submit(cb);
|
||||||
swapchain_rt->PresentBackbuffer();
|
sc_render_target->PresentBackbuffer();
|
||||||
swapchain_rt->WaitQueue();
|
sc_render_target->WaitQueue();
|
||||||
swapchain_rt->WaitFence();
|
sc_render_target->WaitFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index)
|
RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index)
|
||||||
{
|
{
|
||||||
if(frame_index<0)
|
if(frame_index<0)
|
||||||
frame_index=swapchain_rt->GetCurrentFrameIndices();
|
frame_index=sc_render_target->GetCurrentFrameIndices();
|
||||||
|
|
||||||
if(frame_index>=swapchain->image_count)
|
if(frame_index>=swapchain->image_count)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
@ -259,7 +257,7 @@ RenderCmdBuffer *SwapchainModule::RecordCmdBuffer(int frame_index)
|
|||||||
RenderCmdBuffer *rcb=swapchain->sc_image[frame_index].cmd_buf;
|
RenderCmdBuffer *rcb=swapchain->sc_image[frame_index].cmd_buf;
|
||||||
|
|
||||||
rcb->Begin();
|
rcb->Begin();
|
||||||
rcb->BindFramebuffer(swapchain->render_pass,swapchain_rt->GetFramebuffer());
|
rcb->BindFramebuffer(sc_render_pass,sc_render_target->GetFramebuffer());
|
||||||
|
|
||||||
return rcb;
|
return rcb;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user