redefrag SwapchainModule
This commit is contained in:
parent
25be75eefa
commit
64e8410f3f
@ -10,22 +10,22 @@ class SwapchainModule:public GraphModule
|
|||||||
|
|
||||||
RTSwapchain *swapchain_rt=nullptr;
|
RTSwapchain *swapchain_rt=nullptr;
|
||||||
|
|
||||||
|
RenderPass *swapchain_rp=nullptr;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
bool CreateSwapchainFBO();
|
||||||
bool CreateSwapchain();
|
bool CreateSwapchain();
|
||||||
|
|
||||||
bool CreateSwapchainRenderTarget();
|
|
||||||
|
|
||||||
bool CreateSwapchainFBO(Swapchain *);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
GRAPH_MODULE_CONSTRUCT(SwapchainModule)
|
GRAPH_MODULE_CONSTRUCT(SwapchainModule)
|
||||||
virtual ~SwapchainModule()=default;
|
virtual ~SwapchainModule();
|
||||||
|
|
||||||
bool Init() override;
|
bool Init() override;
|
||||||
|
|
||||||
|
RenderPass * GetRenderPass () {return swapchain_rp;}
|
||||||
|
|
||||||
RTSwapchain * GetRenderTarget () {return swapchain_rt;}
|
RTSwapchain * GetRenderTarget () {return swapchain_rt;}
|
||||||
|
|
||||||
const VkExtent2D & GetSwapchainSize()const {return swapchain_rt->GetExtent();}
|
const VkExtent2D & GetSwapchainSize()const {return swapchain_rt->GetExtent();}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
#include<hgl/graph/module/SwapchainModule.h>
|
#include<hgl/graph/module/SwapchainModule.h>
|
||||||
#include<hgl/graph/module/GraphModuleFactory.h>
|
#include<hgl/graph/module/GraphModuleFactory.h>
|
||||||
|
#include<hgl/graph/manager/RenderPassManager.h>
|
||||||
|
#include<hgl/graph/manager/TextureManager.h>
|
||||||
#include<hgl/graph/VKSwapchain.h>
|
#include<hgl/graph/VKSwapchain.h>
|
||||||
#include<hgl/graph/VKDeviceAttribute.h>
|
#include<hgl/graph/VKDeviceAttribute.h>
|
||||||
|
#include<hgl/graph/VKRenderTarget.h>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
namespace
|
namespace
|
||||||
@ -68,7 +71,7 @@ namespace
|
|||||||
if(result!=VK_SUCCESS)
|
if(result!=VK_SUCCESS)
|
||||||
{
|
{
|
||||||
//LOG_ERROR(OS_TEXT("vkCreateSwapchainKHR failed, result = ")+OSString(result));
|
//LOG_ERROR(OS_TEXT("vkCreateSwapchainKHR failed, result = ")+OSString(result));
|
||||||
os_err<<"vkCreateSwapchainKHR failed, result="<<result<<std::endl;
|
// os_err<<"vkCreateSwapchainKHR failed, result="<<result<<std::endl;
|
||||||
|
|
||||||
return(VK_NULL_HANDLE);
|
return(VK_NULL_HANDLE);
|
||||||
}
|
}
|
||||||
@ -82,7 +85,7 @@ namespace
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
bool SwapchainModule::CreateSwapchainFBO(Swapchain *swapchain)
|
bool SwapchainModule::CreateSwapchainFBO()
|
||||||
{
|
{
|
||||||
if(vkGetSwapchainImagesKHR(swapchain->device,swapchain->swap_chain,&(swapchain->color_count),nullptr)!=VK_SUCCESS)
|
if(vkGetSwapchainImagesKHR(swapchain->device,swapchain->swap_chain,&(swapchain->color_count),nullptr)!=VK_SUCCESS)
|
||||||
return(false);
|
return(false);
|
||||||
@ -92,48 +95,47 @@ bool SwapchainModule::CreateSwapchainFBO(Swapchain *swapchain)
|
|||||||
if(vkGetSwapchainImagesKHR(swapchain->device,swapchain->swap_chain,&(swapchain->color_count),sc_images)!=VK_SUCCESS)
|
if(vkGetSwapchainImagesKHR(swapchain->device,swapchain->swap_chain,&(swapchain->color_count),sc_images)!=VK_SUCCESS)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
|
const auto *dev_attr=GetDeviceAttribute();
|
||||||
TextureManager *tex_manager=GetModule<TextureManager>();
|
TextureManager *tex_manager=GetModule<TextureManager>();
|
||||||
|
|
||||||
if(!tex_manager)
|
if(!tex_manager)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
swapchain->sc_depth =tex_manager->CreateTexture2D(new SwapchainDepthTextureCreateInfo(GetPhysicalDevice()->GetDepthFormat(),swapchain->extent));
|
swapchain->sc_depth =tex_manager->CreateTexture2D(new SwapchainDepthTextureCreateInfo(GetPhysicalDevice()->GetDepthFormat(),dev_attr->surface_caps.currentExtent));
|
||||||
|
|
||||||
if(!swapchain->sc_depth)
|
if(!swapchain->sc_depth)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
//#ifdef _DEBUG
|
//#ifdef _DEBUG
|
||||||
// if(attr->debug_utils)
|
// if(dev_attr->debug_utils)
|
||||||
// {
|
// {
|
||||||
// attr->debug_utils->SetImage(swapchain->sc_depth->GetImage(),"SwapchainDepthImage");
|
// dev_attr->debug_utils->SetImage(swapchain->sc_depth->GetImage(),"SwapchainDepthImage");
|
||||||
// attr->debug_utils->SetImageView(swapchain->sc_depth->GetVulkanImageView(),"SwapchainDepthImageView");
|
// dev_attr->debug_utils->SetImageView(swapchain->sc_depth->GetVulkanImageView(),"SwapchainDepthImageView");
|
||||||
// attr->debug_utils->SetDeviceMemory(swapchain->sc_depth->GetDeviceMemory(),"SwapchainDepthMemory");
|
// dev_attr->debug_utils->SetDeviceMemory(swapchain->sc_depth->GetDeviceMemory(),"SwapchainDepthMemory");
|
||||||
// }
|
// }
|
||||||
//#endif//_DEBUG
|
//#endif//_DEBUG
|
||||||
|
|
||||||
swapchain->sc_color =hgl_zero_new<Texture2D *>(swapchain->color_count);
|
swapchain->sc_color =hgl_zero_new<Texture2D *>(swapchain->color_count);
|
||||||
swapchain->sc_fbo =hgl_zero_new<Framebuffer *>(swapchain->color_count);
|
swapchain->sc_fbo =hgl_zero_new<Framebuffer *>(swapchain->color_count);
|
||||||
|
|
||||||
const auto *attr=GetDeviceAttribute();
|
|
||||||
|
|
||||||
for(uint32_t i=0;i<swapchain->color_count;i++)
|
for(uint32_t i=0;i<swapchain->color_count;i++)
|
||||||
{
|
{
|
||||||
swapchain->sc_color[i]=tex_manager->CreateTexture2D(new SwapchainColorTextureCreateInfo(attr->surface_format.format,swapchain->extent,sc_images[i]));
|
swapchain->sc_color[i]=tex_manager->CreateTexture2D(new SwapchainColorTextureCreateInfo(dev_attr->surface_format.format,dev_attr->surface_caps.currentExtent,sc_images[i]));
|
||||||
|
|
||||||
if(!swapchain->sc_color[i])
|
if(!swapchain->sc_color[i])
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
swapchain->sc_fbo[i]=tex_manager->CreateFBO( device_render_pass,
|
swapchain->sc_fbo[i]=tex_manager->CreateFBO( swapchain_rp,
|
||||||
swapchain->sc_color[i]->GetImageView(),
|
swapchain->sc_color[i]->GetImageView(),
|
||||||
swapchain->sc_depth->GetImageView());
|
swapchain->sc_depth->GetImageView());
|
||||||
|
|
||||||
//#ifdef _DEBUG
|
//#ifdef _DEBUG
|
||||||
// if(attr->debug_utils)
|
// if(dev_attr->debug_utils)
|
||||||
// {
|
// {
|
||||||
// attr->debug_utils->SetImage(swapchain->sc_color[i]->GetImage(),"SwapchainColorImage_"+AnsiString::numberOf(i));
|
// dev_attr->debug_utils->SetImage(swapchain->sc_color[i]->GetImage(),"SwapchainColorImage_"+AnsiString::numberOf(i));
|
||||||
// attr->debug_utils->SetImageView(swapchain->sc_color[i]->GetVulkanImageView(),"SwapchainColorImageView_"+AnsiString::numberOf(i));
|
// dev_attr->debug_utils->SetImageView(swapchain->sc_color[i]->GetVulkanImageView(),"SwapchainColorImageView_"+AnsiString::numberOf(i));
|
||||||
|
|
||||||
// attr->debug_utils->SetFramebuffer(swapchain->sc_fbo[i]->GetFramebuffer(),"SwapchainFBO_"+AnsiString::numberOf(i));
|
// dev_attr->debug_utils->SetFramebuffer(swapchain->sc_fbo[i]->GetFramebuffer(),"SwapchainFBO_"+AnsiString::numberOf(i));
|
||||||
// }
|
// }
|
||||||
//#endif//_DEBUG
|
//#endif//_DEBUG
|
||||||
}
|
}
|
||||||
@ -159,7 +161,7 @@ bool SwapchainModule::CreateSwapchain()
|
|||||||
|
|
||||||
if(swapchain->swap_chain)
|
if(swapchain->swap_chain)
|
||||||
{
|
{
|
||||||
if(CreateSwapchainFBO(swapchain))
|
if(CreateSwapchainFBO())
|
||||||
return swapchain;
|
return swapchain;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,11 +170,40 @@ bool SwapchainModule::CreateSwapchain()
|
|||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SwapchainModule::CreateSwapchainRenderTarget()
|
SwapchainModule::~SwapchainModule()
|
||||||
{
|
{
|
||||||
|
if(swapchain_rt)
|
||||||
|
delete swapchain_rt;
|
||||||
|
|
||||||
|
if(swapchain)
|
||||||
|
delete swapchain;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SwapchainModule::Init()
|
||||||
|
{
|
||||||
|
RenderPassManager *rpm=GetModule<RenderPassManager>();
|
||||||
|
|
||||||
|
if(!rpm)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
{
|
||||||
|
auto *dev_attr=GetDeviceAttribute();
|
||||||
|
|
||||||
|
SwapchainRenderbufferInfo rbi(dev_attr->surface_format.format,dev_attr->physical_device->GetDepthFormat());
|
||||||
|
|
||||||
|
swapchain_rp=rpm->AcquireRenderPass(&rbi);
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(dev_attr->debug_utils)
|
||||||
|
dev_attr->debug_utils->SetRenderPass(swapchain_rp->GetVkRenderPass(),"SwapchainRenderPass");
|
||||||
|
#endif//_DEBUG
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(!CreateSwapchain())
|
if(!CreateSwapchain())
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
|
{
|
||||||
GPUDevice *device=GetDevice();
|
GPUDevice *device=GetDevice();
|
||||||
|
|
||||||
DeviceQueue *q=device->CreateQueue(swapchain->color_count,false);
|
DeviceQueue *q=device->CreateQueue(swapchain->color_count,false);
|
||||||
@ -184,8 +215,9 @@ bool SwapchainModule::CreateSwapchainRenderTarget()
|
|||||||
q,
|
q,
|
||||||
render_complete_semaphore,
|
render_complete_semaphore,
|
||||||
present_complete_semaphore,
|
present_complete_semaphore,
|
||||||
device_render_pass
|
swapchain_rp
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user