#pragma once #include #include VK_NAMESPACE_BEGIN /** * 多帧渲染目标 */ class MultiFrameRenderTarget:public IRenderTarget { protected: uint32_t frame_number; uint32_t current_frame; RenderTargetData *rtd_list; protected: friend class RenderTargetManager; MultiFrameRenderTarget(RenderFramework *rf,const uint32_t fn,RenderTargetData *rtl):IRenderTarget(rf,rtl[0].fbo->GetExtent()) { frame_number=fn; current_frame=0; rtd_list=rtl; } public: virtual ~MultiFrameRenderTarget() override { for(uint32_t i=0;i=frame_number) current_frame=0; return(true); } uint32_t GetCurrentFrameIndices ()const{return current_frame;} uint32_t GetFrameCount ()const{return frame_number;} public: Framebuffer * GetFramebuffer ()override{return rtd_list[current_frame].fbo;} RenderPass * GetRenderPass ()override{return rtd_list[current_frame].fbo->GetRenderPass();} uint32_t GetColorCount ()override{return rtd_list[current_frame].color_count;} 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 rtd_list[current_frame].depth_texture;} public: // Command Buffer 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 rtd_list[index].fbo;} RenderCmdBuffer * GetRenderCmdBuffer (const uint32_t index){return rtd_list[index].cmd_buf;} virtual bool Submit (Semaphore *wait_sem)override{return rtd_list[current_frame].Submit(wait_sem);} 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="<