ordered module_list in RenderFramework

This commit is contained in:
hyzboy 2024-11-19 00:20:35 +08:00
parent 5217df7923
commit 4f335f7230
10 changed files with 63 additions and 34 deletions

View File

@ -17,7 +17,7 @@ public:
LOG_INFO(OS_TEXT("Resize: ")+OSString::numberOf(size.width)+OS_TEXT("x")+OSString::numberOf(size.height)); LOG_INFO(OS_TEXT("Resize: ")+OSString::numberOf(size.width)+OS_TEXT("x")+OSString::numberOf(size.height));
} }
void OnExecute(const double,RenderCmdBuffer *cmd) void OnFrameRender(const double,RenderCmdBuffer *cmd) override
{ {
LOG_INFO(OS_TEXT("Execute")); LOG_INFO(OS_TEXT("Execute"));

View File

@ -38,6 +38,9 @@ protected:
ObjectList<GraphModule> module_list; ObjectList<GraphModule> module_list;
List<GraphModule *> per_frame_module_list;
List<RenderModule *> render_module_list;
protected: protected:
SwapchainModule * swapchain_module =nullptr; SwapchainModule * swapchain_module =nullptr;
@ -73,6 +76,12 @@ public: //module
module_list.Add(tm); module_list.Add(tm);
if(tm->IsPerFrame())
per_frame_module_list.Add(tm);
if(tm->IsRender())
render_module_list.Add(tm);
return tm; return tm;
} }

View File

@ -0,0 +1,11 @@
#pragma once
#include<hgl/graph/module/GraphModule.h>
VK_NAMESPACE_BEGIN
class MaterialManager:public GraphModule
{
};//
VK_NAMESPACE_END

View File

@ -70,6 +70,7 @@ protected:
public: public:
virtual const bool IsPerFrame () {return false;} ///<是否每帧运行
virtual const bool IsRender () {return false;} ///<是否为渲染模块 virtual const bool IsRender () {return false;} ///<是否为渲染模块
GraphModuleManager *GetManager () {return module_manager;} ///<取得模块管理器 GraphModuleManager *GetManager () {return module_manager;} ///<取得模块管理器
@ -106,7 +107,6 @@ public: //回调事件
virtual void OnResize(const VkExtent2D &){} ///<窗口大小改变 virtual void OnResize(const VkExtent2D &){} ///<窗口大小改变
virtual void OnPreFrame(){} ///<帧绘制前回调 virtual void OnPreFrame(){} ///<帧绘制前回调
virtual void OnExecute(const double,RenderCmdBuffer *){}
virtual void OnPostFrame(){} ///<帧绘制后回调 virtual void OnPostFrame(){} ///<帧绘制后回调
};//class GraphModule };//class GraphModule

View File

@ -14,7 +14,8 @@ class RenderModule:public GraphModule
public: public:
const bool IsRender()const noexcept{return true;} const bool IsPerFrame ()const noexcept{return true;} ///<每帧运行
const bool IsRender ()const noexcept{return true;} ///<渲染模块
public: public:
@ -25,7 +26,7 @@ public:
virtual void OnResize(const VkExtent2D &ext)override{current_extent=ext;} virtual void OnResize(const VkExtent2D &ext)override{current_extent=ext;}
virtual void OnExecute(const double,RenderCmdBuffer *){} virtual void OnFrameRender(const double,RenderCmdBuffer *)=0; ///<帧绘制回调
};//class RenderModule };//class RenderModule
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -27,8 +27,6 @@ public:
virtual void OnResize(const VkExtent2D &)override; ///<窗口大小改变 virtual void OnResize(const VkExtent2D &)override; ///<窗口大小改变
//virtual void OnExecute(const double,RenderCmdBuffer *);
public: public:
GRAPH_MODULE_CONSTRUCT(SwapchainModule) GRAPH_MODULE_CONSTRUCT(SwapchainModule)

View File

@ -296,10 +296,14 @@ SOURCE_GROUP("Render Framework\\Module" FILES ${GRAPH_MODULE_HEADER}
SET(SG_MANAGER_HEADER_PATH ${SG_INCLUDE_PATH}/manager) SET(SG_MANAGER_HEADER_PATH ${SG_INCLUDE_PATH}/manager)
SET(GRAPH_MANAGER_HEADER ${SG_MANAGER_HEADER_PATH}/TextureManager.h SET(GRAPH_MANAGER_HEADER ${SG_MANAGER_HEADER_PATH}/TextureManager.h
${SG_MANAGER_HEADER_PATH}/RenderPassManager.h) ${SG_MANAGER_HEADER_PATH}/RenderPassManager.h
${SG_MANAGER_HEADER_PATH}/MaterialManager.h
)
SET(GRAPH_MANAGER_SOURCE manager/TextureManager.cpp SET(GRAPH_MANAGER_SOURCE manager/TextureManager.cpp
manager/RenderPassManager.cpp) manager/RenderPassManager.cpp
manager/MaterialManager.cpp
)
SOURCE_GROUP("Render Framework\\Manager" FILES ${GRAPH_MANAGER_HEADER} ${GRAPH_MANAGER_SOURCE}) SOURCE_GROUP("Render Framework\\Manager" FILES ${GRAPH_MANAGER_HEADER} ${GRAPH_MANAGER_SOURCE})

View File

@ -54,6 +54,12 @@ void RenderFramework::BeginFrame()
{ {
cur_time=GetDoubleTime(); cur_time=GetDoubleTime();
for(GraphModule *rm:per_frame_module_list)
{
if(rm->IsEnable())
rm->OnPreFrame();
}
swapchain_module->BeginFrame(); swapchain_module->BeginFrame();
} }
@ -61,6 +67,12 @@ void RenderFramework::EndFrame()
{ {
swapchain_module->EndFrame(); swapchain_module->EndFrame();
for(GraphModule *rm:per_frame_module_list)
{
if(rm->IsEnable())
rm->OnPostFrame();
}
last_time=cur_time; last_time=cur_time;
++frame_count; ++frame_count;
} }
@ -69,12 +81,6 @@ void RenderFramework::MainLoop()
{ {
const double delta_time=cur_time-last_time; const double delta_time=cur_time-last_time;
for(auto rm:module_list)
{
if(rm->IsEnable())
rm->OnPreFrame();
}
BeginFrame(); BeginFrame();
RenderCmdBuffer *rcb=swapchain_module->GetRenderCmdBuffer(); RenderCmdBuffer *rcb=swapchain_module->GetRenderCmdBuffer();
@ -84,22 +90,16 @@ void RenderFramework::MainLoop()
rcb->Begin(); rcb->Begin();
rcb->BindFramebuffer(swapchain_module->GetRenderPass(),swapchain_module->GetRenderTarget()->GetFramebuffer()); rcb->BindFramebuffer(swapchain_module->GetRenderPass(),swapchain_module->GetRenderTarget()->GetFramebuffer());
for(auto rm:module_list) for(RenderModule *rm:render_module_list)
{ {
if(rm->IsEnable()) if(rm->IsEnable())
rm->OnExecute(delta_time,rcb); rm->OnFrameRender(delta_time,rcb);
} }
rcb->End(); rcb->End();
} }
EndFrame(); EndFrame();
for(auto rm:module_list)
{
if(rm->IsEnable())
rm->OnPostFrame();
}
} }
void RenderFramework::Run() void RenderFramework::Run()

View File

@ -101,10 +101,14 @@ bool SwapchainModule::CreateSwapchainFBO()
if(!tex_manager) if(!tex_manager)
return(false); return(false);
swapchain->sc_depth =tex_manager->CreateTexture2D(new SwapchainDepthTextureCreateInfo(GetPhysicalDevice()->GetDepthFormat(),swapchain->extent)); {
auto sc_depth_tci=new SwapchainDepthTextureCreateInfo(GetPhysicalDevice()->GetDepthFormat(),swapchain->extent);
swapchain->sc_depth =tex_manager->CreateTexture2D(sc_depth_tci);
if(!swapchain->sc_depth) if(!swapchain->sc_depth)
return(false); return(false);
}
//#ifdef _DEBUG //#ifdef _DEBUG
// if(dev_attr->debug_utils) // if(dev_attr->debug_utils)
@ -120,7 +124,9 @@ bool SwapchainModule::CreateSwapchainFBO()
for(uint32_t i=0;i<swapchain->image_count;i++) for(uint32_t i=0;i<swapchain->image_count;i++)
{ {
swapchain->sc_color[i]=tex_manager->CreateTexture2D(new SwapchainColorTextureCreateInfo(swapchain->surface_format.format,swapchain->extent,sc_images[i])); auto sc_color_tci=new SwapchainColorTextureCreateInfo(swapchain->surface_format.format,swapchain->extent,sc_images[i]);
swapchain->sc_color[i]=tex_manager->CreateTexture2D(sc_color_tci);
if(!swapchain->sc_color[i]) if(!swapchain->sc_color[i])
return(false); return(false);