example 0/1 run OK on newly RenderTarget
This commit is contained in:
@@ -35,6 +35,8 @@ struct VertexAttribDataPtr
|
||||
using BindingMap =Map<AnsiString,int>;
|
||||
using BindingMapArray =BindingMap[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
|
||||
|
||||
class DescriptorBinding;
|
||||
|
||||
class GraphModule;
|
||||
class RenderFramework;
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/graph/VKFramebuffer.h>
|
||||
#include<hgl/graph/VK.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
@@ -26,6 +26,12 @@ public:
|
||||
return color_textures[index];
|
||||
}
|
||||
|
||||
bool Submit(Semaphore *wait_sem);
|
||||
|
||||
RenderCmdBuffer *BeginRender(DescriptorBinding *);
|
||||
|
||||
void EndRender();
|
||||
|
||||
virtual void Clear();
|
||||
};//struct RenderTargetData
|
||||
|
||||
|
@@ -31,64 +31,66 @@ protected:
|
||||
|
||||
public:
|
||||
|
||||
virtual ~MultiFrameRenderTarget() override;
|
||||
virtual ~MultiFrameRenderTarget() override
|
||||
{
|
||||
for(uint32_t i=0;i<frame_number;i++)
|
||||
rtd_list[i].Clear();
|
||||
|
||||
virtual void NextFrame()
|
||||
delete[] rtd_list;
|
||||
}
|
||||
|
||||
virtual bool NextFrame()
|
||||
{
|
||||
++current_frame;
|
||||
|
||||
if(current_frame>=frame_number)
|
||||
current_frame=0;
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
uint32_t GetCurrentFrameIndices ()const{return current_frame;}
|
||||
uint32_t GetFrameCount ()const{return frame_number;}
|
||||
RenderTarget * GetCurrentFrameRenderTarget (){return rt_list[current_frame];}
|
||||
|
||||
public:
|
||||
|
||||
Framebuffer * GetFramebuffer ()override{return rt_list[current_frame]->GetFramebuffer();}
|
||||
RenderPass * GetRenderPass ()override{return rt_list[current_frame]->GetRenderPass();}
|
||||
Framebuffer * GetFramebuffer ()override{return rtd_list[current_frame].fbo;}
|
||||
RenderPass * GetRenderPass ()override{return rtd_list[current_frame].fbo->GetRenderPass();}
|
||||
|
||||
uint32_t GetColorCount ()override{return rt_list[current_frame]->GetColorCount();}
|
||||
uint32_t GetColorCount ()override{return rtd_list[current_frame].color_count;}
|
||||
|
||||
Texture2D * GetColorTexture (const int index=0) override{return rt_list[current_frame]->GetColorTexture(index);}
|
||||
Texture2D * GetDepthTexture () override{return rt_list[current_frame]->GetDepthTexture();}
|
||||
Texture2D * GetColorTexture (const int index=0) override{return rtd_list[current_frame].GetColorTexture(index);}
|
||||
Texture2D * GetDepthTexture () override{return rtd_list[current_frame].depth_texture;}
|
||||
|
||||
|
||||
bool hasDepth ()override{return rt_list[current_frame]->hasDepth();}
|
||||
bool hasDepth ()override{return rtd_list[current_frame].depth_texture;}
|
||||
|
||||
public: // Command Buffer
|
||||
|
||||
DeviceQueue * GetQueue ()override{return rt_list[current_frame]->GetQueue();}
|
||||
Semaphore * GetRenderCompleteSemaphore()override{return rt_list[current_frame]->GetRenderCompleteSemaphore();}
|
||||
RenderCmdBuffer * GetRenderCmdBuffer ()override{return rt_list[current_frame]->GetRenderCmdBuffer();}
|
||||
DeviceQueue * GetQueue ()override{return rtd_list[current_frame].queue;}
|
||||
Semaphore * GetRenderCompleteSemaphore ()override{return rtd_list[current_frame].render_complete_semaphore;}
|
||||
RenderCmdBuffer * GetRenderCmdBuffer ()override{return rtd_list[current_frame].cmd_buf;}
|
||||
|
||||
Framebuffer * GetFramebuffer (const uint32_t index){return rt_list[index]->GetFramebuffer();}
|
||||
RenderCmdBuffer * GetRenderCmdBuffer (const uint32_t index){return rt_list[index]->GetRenderCmdBuffer();}
|
||||
Framebuffer * GetFramebuffer (const uint32_t index){return rtd_list[index].fbo;}
|
||||
RenderCmdBuffer * GetRenderCmdBuffer (const uint32_t index){return rtd_list[index].cmd_buf;}
|
||||
|
||||
virtual bool Submit ()override{return rt_list[current_frame]->Submit(nullptr);}
|
||||
virtual bool Submit (Semaphore *wait_sem)override{return rtd_list[current_frame].Submit(wait_sem);}
|
||||
|
||||
virtual bool Submit (Semaphore *wait_sem) override
|
||||
{
|
||||
return rt_list[current_frame]->Submit(wait_sem);
|
||||
}
|
||||
|
||||
bool WaitQueue ()override{return rt_list[current_frame]->WaitQueue();}
|
||||
bool WaitFence ()override{return rt_list[current_frame]->WaitFence();}
|
||||
bool WaitQueue ()override{return rtd_list[current_frame].queue->WaitQueue();}
|
||||
bool WaitFence ()override{return rtd_list[current_frame].queue->WaitFence();}
|
||||
|
||||
public:
|
||||
|
||||
virtual RenderCmdBuffer *BeginRender()override
|
||||
{
|
||||
//std::cout<<"Begin Render frame="<<current_frame<<std::endl;
|
||||
return rt_list[current_frame]->BeginRender();
|
||||
return rtd_list[current_frame].BeginRender(GetDescriptorBinding());
|
||||
}
|
||||
|
||||
virtual void EndRender() override
|
||||
{
|
||||
//std::cout<<"End Render frame="<<current_frame<<std::endl;
|
||||
rt_list[current_frame]->EndRender();
|
||||
rtd_list[current_frame].EndRender();
|
||||
}
|
||||
};//class MultiFrameRenderTarget
|
||||
|
||||
|
@@ -57,7 +57,7 @@ public: // Command Buffer
|
||||
if(!data)
|
||||
return(false);
|
||||
|
||||
return data->queue->Submit(data->cmd_buf,wait_sem,data->render_complete_semaphore);
|
||||
return data->Submit(wait_sem);
|
||||
}
|
||||
|
||||
bool WaitQueue ()override{return data->queue->WaitQueue();}
|
||||
@@ -67,21 +67,18 @@ public:
|
||||
|
||||
virtual RenderCmdBuffer *BeginRender()override
|
||||
{
|
||||
if(!data->cmd_buf)
|
||||
if(!data)
|
||||
return(nullptr);
|
||||
|
||||
data->cmd_buf->Begin();
|
||||
data->cmd_buf->SetDescriptorBinding(GetDescriptorBinding());
|
||||
data->cmd_buf->BindFramebuffer(data->fbo);
|
||||
return data->cmd_buf;
|
||||
return data->BeginRender(GetDescriptorBinding());
|
||||
}
|
||||
|
||||
virtual void EndRender() override
|
||||
{
|
||||
if(!data->cmd_buf)
|
||||
if(!data)
|
||||
return;
|
||||
|
||||
data->cmd_buf->End();
|
||||
data->EndRender();
|
||||
}
|
||||
};//class RenderTarget
|
||||
|
||||
|
@@ -16,7 +16,7 @@ class SwapchainRenderTarget:public MultiFrameRenderTarget
|
||||
|
||||
private:
|
||||
|
||||
SwapchainRenderTarget(RenderFramework *rf,Swapchain *sc,Semaphore *pcs,RenderTarget **rtl);
|
||||
SwapchainRenderTarget(RenderFramework *rf,Swapchain *sc,Semaphore *pcs,RenderTargetData *rtdl);
|
||||
|
||||
friend class SwapchainModule;
|
||||
friend class RenderTargetManager;
|
||||
@@ -27,9 +27,9 @@ public:
|
||||
|
||||
public:
|
||||
|
||||
IRenderTarget *AcquireNextImage(); ///<获取下一帧的索引
|
||||
bool NextFrame ()override; ///<获取下一帧的索引
|
||||
|
||||
bool Submit()override; ///<提交当前帧的渲染,交推送到前台
|
||||
bool Submit ()override; ///<提交当前帧的渲染,交推送到前台
|
||||
};//class SwapchainRenderTarget:public MultiFrameRenderTarget
|
||||
|
||||
VK_NAMESPACE_END
|
||||
|
@@ -40,7 +40,7 @@ public:
|
||||
bool GetSwapchainSize(VkExtent2D *)const;
|
||||
|
||||
SwapchainRenderTarget * GetRenderTarget ()const{return sc_render_target;}
|
||||
IRenderTarget * AcquireNextImage()const;
|
||||
bool AcquireNextImage()const;
|
||||
};//class SwapchainModule:public GraphModule
|
||||
|
||||
VK_NAMESPACE_END
|
||||
|
Reference in New Issue
Block a user