Moved render_cmd_buffer to SwapchainImage from VulkanAppFramework
This commit is contained in:
parent
c9b99dd125
commit
d73966b1d0
@ -54,15 +54,10 @@ protected:
|
|||||||
protected:
|
protected:
|
||||||
|
|
||||||
GPUDevice * device =nullptr;
|
GPUDevice * device =nullptr;
|
||||||
RenderPass * device_render_pass =nullptr;
|
|
||||||
RTSwapchain * sc_render_target =nullptr;
|
RTSwapchain * sc_render_target =nullptr;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
int32_t swap_chain_count =0;
|
|
||||||
|
|
||||||
RenderCmdBuffer ** cmd_buf =nullptr;
|
|
||||||
|
|
||||||
Color4f clear_color;
|
Color4f clear_color;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -91,7 +86,6 @@ public:
|
|||||||
win->Unjoin(this);
|
win->Unjoin(this);
|
||||||
|
|
||||||
SAFE_CLEAR(db);
|
SAFE_CLEAR(db);
|
||||||
SAFE_CLEAR_OBJECT_ARRAY_OBJECT(cmd_buf,swap_chain_count);
|
|
||||||
|
|
||||||
SAFE_CLEAR(device);
|
SAFE_CLEAR(device);
|
||||||
SAFE_CLEAR(win);
|
SAFE_CLEAR(win);
|
||||||
@ -146,14 +140,12 @@ public:
|
|||||||
|
|
||||||
if(!device)
|
if(!device)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
|
sc_render_target=device->GetSwapchainRT();
|
||||||
}
|
}
|
||||||
|
|
||||||
device_render_pass=device->GetRenderPass();
|
|
||||||
|
|
||||||
db=new RenderResource(device);
|
db=new RenderResource(device);
|
||||||
|
|
||||||
InitCommandBuffer();
|
|
||||||
|
|
||||||
win->Join(this);
|
win->Join(this);
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -198,26 +190,9 @@ public:
|
|||||||
if(w>0&&h>0)
|
if(w>0&&h>0)
|
||||||
device->Resize(w,h);
|
device->Resize(w,h);
|
||||||
|
|
||||||
InitCommandBuffer();
|
|
||||||
Resize(w,h);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitCommandBuffer()
|
|
||||||
{
|
|
||||||
if(cmd_buf)
|
|
||||||
SAFE_CLEAR_OBJECT_ARRAY_OBJECT(cmd_buf,swap_chain_count);
|
|
||||||
|
|
||||||
sc_render_target=device->GetSwapchainRT();
|
sc_render_target=device->GetSwapchainRT();
|
||||||
|
|
||||||
swap_chain_count=sc_render_target->GetImageCount();
|
Resize(w,h);
|
||||||
{
|
|
||||||
const VkExtent2D extent=sc_render_target->GetExtent();
|
|
||||||
|
|
||||||
cmd_buf=hgl_zero_new<RenderCmdBuffer *>(swap_chain_count);
|
|
||||||
|
|
||||||
for(int32_t i=0;i<swap_chain_count;i++)
|
|
||||||
cmd_buf[i]=device->CreateRenderCommandBuffer(device->GetPhysicalDevice()->GetDeviceName()+AnsiString(":RenderCmdBuffer_")+AnsiString::numberOf(i));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BuildCommandBuffer(RenderCmdBuffer *cb,RenderPass *rp,Framebuffer *fb,Renderable *ri)
|
bool BuildCommandBuffer(RenderCmdBuffer *cb,RenderPass *rp,Framebuffer *fb,Renderable *ri)
|
||||||
@ -250,14 +225,16 @@ public:
|
|||||||
{
|
{
|
||||||
if(!ri)return(false);
|
if(!ri)return(false);
|
||||||
|
|
||||||
return BuildCommandBuffer(cmd_buf[index],sc_render_target->GetRenderPass(),sc_render_target->GetFramebuffer(index),ri);
|
return BuildCommandBuffer(sc_render_target->GetRenderCmdBuffer(index),
|
||||||
|
sc_render_target->GetRenderPass(),
|
||||||
|
sc_render_target->GetFramebuffer(index),ri);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BuildCommandBuffer(Renderable *ri)
|
bool BuildCommandBuffer(Renderable *ri)
|
||||||
{
|
{
|
||||||
if(!ri)return(false);
|
if(!ri)return(false);
|
||||||
|
|
||||||
for(int32_t i=0;i<swap_chain_count;i++)
|
for(int32_t i=0;i<sc_render_target->GetImageCount();i++)
|
||||||
BuildCommandBuffer(i,ri);
|
BuildCommandBuffer(i,ri);
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
@ -274,7 +251,7 @@ public:
|
|||||||
{
|
{
|
||||||
if(!rl)return;
|
if(!rl)return;
|
||||||
|
|
||||||
RenderCmdBuffer *cb=cmd_buf[index];
|
RenderCmdBuffer *cb=sc_render_target->GetRenderCmdBuffer(index);
|
||||||
|
|
||||||
cb->Begin();
|
cb->Begin();
|
||||||
cb->BindFramebuffer(sc_render_target->GetRenderPass(),sc_render_target->GetFramebuffer(index));
|
cb->BindFramebuffer(sc_render_target->GetRenderPass(),sc_render_target->GetFramebuffer(index));
|
||||||
@ -287,7 +264,7 @@ public:
|
|||||||
|
|
||||||
void BuildCommandBuffer(RenderList *rl)
|
void BuildCommandBuffer(RenderList *rl)
|
||||||
{
|
{
|
||||||
for(int32_t i=0;i<swap_chain_count;i++)
|
for(int32_t i=0;i<sc_render_target->GetImageCount();i++)
|
||||||
BuildCommandBuffer(i,rl);
|
BuildCommandBuffer(i,rl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,7 +276,7 @@ public:
|
|||||||
template<typename ...ARGS>
|
template<typename ...ARGS>
|
||||||
Pipeline *CreatePipeline(ARGS...args)
|
Pipeline *CreatePipeline(ARGS...args)
|
||||||
{
|
{
|
||||||
Pipeline *p=device_render_pass->CreatePipeline(args...);
|
Pipeline *p=sc_render_target->GetRenderPass()->CreatePipeline(args...);
|
||||||
|
|
||||||
if(!p)
|
if(!p)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
@ -323,7 +300,7 @@ public:
|
|||||||
|
|
||||||
virtual void SubmitDraw(int index)
|
virtual void SubmitDraw(int index)
|
||||||
{
|
{
|
||||||
VkCommandBuffer cb=*cmd_buf[index];
|
VkCommandBuffer cb=*(sc_render_target->GetRenderCmdBuffer(index));
|
||||||
|
|
||||||
sc_render_target->Submit(cb);
|
sc_render_target->Submit(cb);
|
||||||
sc_render_target->PresentBackbuffer();
|
sc_render_target->PresentBackbuffer();
|
||||||
@ -335,7 +312,7 @@ public:
|
|||||||
{
|
{
|
||||||
int index=AcquireNextImage();
|
int index=AcquireNextImage();
|
||||||
|
|
||||||
if(index<0||index>=swap_chain_count)return;
|
if(index<0||index>=sc_render_target->GetImageCount())return;
|
||||||
|
|
||||||
SubmitDraw(index);
|
SubmitDraw(index);
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,6 @@ public:
|
|||||||
~RTSwapchain();
|
~RTSwapchain();
|
||||||
|
|
||||||
const uint32_t GetColorCount ()const override {return 1;} ///Swapchain的FBO颜色成份只有一个
|
const uint32_t GetColorCount ()const override {return 1;} ///Swapchain的FBO颜色成份只有一个
|
||||||
|
|
||||||
const uint32_t GetImageCount ()const {return swapchain->image_count;}
|
const uint32_t GetImageCount ()const {return swapchain->image_count;}
|
||||||
|
|
||||||
Framebuffer * GetFramebuffer ()override {return swapchain->sc_image[current_frame].fbo;}
|
Framebuffer * GetFramebuffer ()override {return swapchain->sc_image[current_frame].fbo;}
|
||||||
@ -89,6 +88,11 @@ public:
|
|||||||
virtual Texture2D * GetColorTexture (const int index=0) override{return swapchain->sc_image[current_frame].color;}
|
virtual Texture2D * GetColorTexture (const int index=0) override{return swapchain->sc_image[current_frame].color;}
|
||||||
virtual Texture2D * GetDepthTexture () override{return swapchain->sc_image[current_frame].depth;}
|
virtual Texture2D * GetDepthTexture () override{return swapchain->sc_image[current_frame].depth;}
|
||||||
|
|
||||||
|
RenderCmdBuffer *GetRenderCmdBuffer(const int index)
|
||||||
|
{
|
||||||
|
return swapchain->sc_image[index].cmd_buf;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
const uint32_t GetCurrentFrameIndices ()const {return current_frame;}
|
const uint32_t GetCurrentFrameIndices ()const {return current_frame;}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include<hgl/graph/VKTexture.h>
|
#include<hgl/graph/VKTexture.h>
|
||||||
#include<hgl/type/List.h>
|
#include<hgl/type/List.h>
|
||||||
#include<hgl/graph/VKFramebuffer.h>
|
#include<hgl/graph/VKFramebuffer.h>
|
||||||
|
#include<hgl/graph/VKCommandBuffer.h>
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
struct SwapchainImage
|
struct SwapchainImage
|
||||||
@ -13,10 +14,13 @@ struct SwapchainImage
|
|||||||
|
|
||||||
Framebuffer * fbo =nullptr;
|
Framebuffer * fbo =nullptr;
|
||||||
|
|
||||||
|
RenderCmdBuffer * cmd_buf =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
~SwapchainImage()
|
~SwapchainImage()
|
||||||
{
|
{
|
||||||
|
delete cmd_buf;
|
||||||
delete fbo;
|
delete fbo;
|
||||||
delete depth;
|
delete depth;
|
||||||
delete color;
|
delete color;
|
||||||
|
@ -95,6 +95,9 @@ bool GPUDevice::CreateSwapchainFBO(Swapchain *swapchain)
|
|||||||
|
|
||||||
swapchain->sc_image=hgl_zero_new<SwapchainImage>(swapchain->image_count);
|
swapchain->sc_image=hgl_zero_new<SwapchainImage>(swapchain->image_count);
|
||||||
|
|
||||||
|
AnsiString num_string;
|
||||||
|
|
||||||
|
|
||||||
for(uint32_t i=0;i<swapchain->image_count;i++)
|
for(uint32_t i=0;i<swapchain->image_count;i++)
|
||||||
{
|
{
|
||||||
swapchain->sc_image[i].color=CreateTexture2D(new SwapchainColorTextureCreateInfo(swapchain->surface_format.format,swapchain->extent,sc_images[i]));
|
swapchain->sc_image[i].color=CreateTexture2D(new SwapchainColorTextureCreateInfo(swapchain->surface_format.format,swapchain->extent,sc_images[i]));
|
||||||
@ -111,15 +114,19 @@ bool GPUDevice::CreateSwapchainFBO(Swapchain *swapchain)
|
|||||||
swapchain->sc_image[i].color->GetImageView(),
|
swapchain->sc_image[i].color->GetImageView(),
|
||||||
swapchain->sc_image[i].depth->GetImageView());
|
swapchain->sc_image[i].depth->GetImageView());
|
||||||
|
|
||||||
|
AnsiString num_string=AnsiString::numberOf(i);
|
||||||
|
|
||||||
|
swapchain->sc_image[i].cmd_buf=CreateRenderCommandBuffer(AnsiString("Swapchain_RenderCmdBuffer_")+num_string);
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
if(attr->debug_utils)
|
if(attr->debug_utils)
|
||||||
{
|
{
|
||||||
AnsiString num=AnsiString::numberOf(i);
|
AnsiString num=AnsiString::numberOf(i);
|
||||||
|
|
||||||
attr->debug_utils->SetTexture(swapchain->sc_image[i].color,"SwapchainColor_"+num);
|
attr->debug_utils->SetTexture(swapchain->sc_image[i].color,"SwapchainColor_"+num_string);
|
||||||
attr->debug_utils->SetTexture(swapchain->sc_image[i].depth,"SwapchainDepth_"+num);
|
attr->debug_utils->SetTexture(swapchain->sc_image[i].depth,"SwapchainDepth_"+num_string);
|
||||||
|
|
||||||
attr->debug_utils->SetFramebuffer(swapchain->sc_image[i].fbo->GetFramebuffer(),"SwapchainFBO_"+num);
|
attr->debug_utils->SetFramebuffer(swapchain->sc_image[i].fbo->GetFramebuffer(),"SwapchainFBO_"+num_string);
|
||||||
}
|
}
|
||||||
#endif//_DEBUG
|
#endif//_DEBUG
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user