[Milestone] new RenderWorkObject, rf_test run OK!

This commit is contained in:
2025-01-28 20:03:44 +08:00
parent dcefb261ad
commit dd0cf9bf51
11 changed files with 213 additions and 82 deletions

View File

@@ -1,4 +1,4 @@
#ifndef HGL_GRAPH_VULKAN_SUBMIT_QUEUE_INCLUDE
#ifndef HGL_GRAPH_VULKAN_SUBMIT_QUEUE_INCLUDE
#define HGL_GRAPH_VULKAN_SUBMIT_QUEUE_INCLUDE
#include<hgl/graph/VK.h>
@@ -31,8 +31,16 @@ public:
VkResult Present(const VkPresentInfoKHR *pi){return vkQueuePresentKHR(queue,pi);}
/**
* 等待Submit的队列完成操作。这个操作会阻塞当前线程所以在Submit后请不要立即使用它。而是在下一次队列提交前再做这个操作。
*/
bool WaitQueue();
/**
* 等待Queue命令执行完成的fence信号
*/
bool WaitFence(const bool wait_all=true,const uint64_t time_out=HGL_NANO_SEC_PER_SEC);
bool Submit(const VkCommandBuffer *cmd_buf,const uint32_t count,Semaphore *wait_sem,Semaphore *complete_sem);
bool Submit(GPUCmdBuffer *cmd_buf,Semaphore *wait_sem,Semaphore *complete_sem);
};//class DeviceQueue

View File

@@ -7,6 +7,7 @@
#include<hgl/graph/VKQueue.h>
#include<hgl/graph/VKPipeline.h>
#include<hgl/graph/VKCommandBuffer.h>
//#include<iostream>
VK_NAMESPACE_BEGIN
/**
@@ -54,6 +55,9 @@ public: // Command Buffer
virtual bool WaitQueue ()=0;
virtual bool WaitFence ()=0;
virtual RenderCmdBuffer * BeginRender ()=0;
virtual void EndRender ()=0;
};//class IRenderTarget
struct RenderTargetData
@@ -136,6 +140,26 @@ public: // Command Buffer
bool WaitQueue ()override{return data->queue->WaitQueue();}
bool WaitFence ()override{return data->queue->WaitFence();}
public:
virtual RenderCmdBuffer *BeginRender()override
{
if(!data->cmd_buf)
return(nullptr);
data->cmd_buf->Begin();
data->cmd_buf->BindFramebuffer(data->fbo);
return data->cmd_buf;
}
virtual void EndRender() override
{
if(!data->cmd_buf)
return;
data->cmd_buf->End();
}
};//class RenderTarget
/**
@@ -212,6 +236,20 @@ public: // Command Buffer
bool WaitQueue ()override{return rt_list[current_frame]->WaitQueue();}
bool WaitFence ()override{return rt_list[current_frame]->WaitFence();}
public:
virtual RenderCmdBuffer *BeginRender()override
{
//std::cout<<"Begin Render frame="<<current_frame<<std::endl;
return rt_list[current_frame]->BeginRender();
}
virtual void EndRender() override
{
//std::cout<<"End Render frame="<<current_frame<<std::endl;
rt_list[current_frame]->EndRender();
}
};//class MFRenderTarget
/**
@@ -238,13 +276,8 @@ public:
public:
RenderCmdBuffer *AcquireNextImage(); ///<获取下一帧的索引
IRenderTarget *AcquireNextImage(); ///<获取下一帧的索引
bool PresentBackbuffer(); ///<推送后台画面到前台
bool Submit()override
{
return rt_list[current_frame]->Submit(present_complete_semaphore);
}
bool Submit()override; ///<提交当前帧的渲染,交推送到前台
};//class SwapchainRenderTarget:public RenderTarget
VK_NAMESPACE_END

View File

@@ -33,9 +33,9 @@ public:
SwapchainModule(GPUDevice *,TextureManager *tm,RenderTargetManager *rtm,RenderPassManager *rpm);
virtual ~SwapchainModule();
RenderCmdBuffer *BeginRender();
// RenderCmdBuffer *BeginRender();
void EndRender();
//void EndRender();
public:
@@ -44,6 +44,7 @@ public:
const VkExtent2D & GetSwapchainSize()const{return sc_render_target->GetExtent();}
SwapchainRenderTarget * GetRenderTarget ()const{return sc_render_target;}
IRenderTarget * AcquireNextImage()const{return sc_render_target->AcquireNextImage();}
};//class SwapchainModule:public GraphModule
VK_NAMESPACE_END