From c3522da518de3006019b7e11c4cdbccfdf6b1202 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 23 Oct 2024 01:13:15 +0800 Subject: [PATCH] little codes of RenderFramework/RenderModule --- inc/hgl/graph/RenderFramework.h | 73 +++++------------------------ inc/hgl/graph/module/RenderModule.h | 18 ++++--- src/SceneGraph/RenderFramework.cpp | 17 ++++++- 3 files changed, 36 insertions(+), 72 deletions(-) diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index fbe3213f..a008db92 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -60,12 +60,12 @@ enum class RenderOrder ENUM_CLASS_RANGE(First,Last) };//enum class RenderOrder -class RenderModule; +class GraphModule; /** * 渲染模块工作配置 */ -class RenderModuleWorkConfig +class GraphModuleWorkConfig { /** * 渲染模块名称 @@ -73,7 +73,7 @@ class RenderModuleWorkConfig * 它和RenderModule返回的名称有可能一样,但也有可能不一样。 */ AnsiString render_module_name; - RenderModule *render_module=nullptr; + GraphModule *render_module=nullptr; BlendMode blend_mode; RenderOrder render_order; @@ -82,72 +82,20 @@ public: const AnsiString &GetModuleName()const{return render_module_name;} ///<取得渲染模块名称 - RenderModule *GetModule(){return render_module;} ///<取得渲染模块 + GraphModule *GetModule(){return render_module;} ///<取得渲染模块 public: - RenderModuleWorkConfig(); - virtual ~RenderModuleWorkConfig()=default; -};//class RenderModuleWorkConfig - -/** -* 渲染模式配置 -*/ -class RenderingModeConfig -{ -};//class RenderingModeConfig - -enum class RenderingMode -{ - /** - * 一次性直接渲染出来 - * 这个其实不支持,主要用于一些超简单没啥需求的渲染场景 - */ - Forward, ///<前向渲染 - - /** - * 增加了Early-Z pass以及光线剔除的直接渲染 - */ - ForwardPlus, ///<增强型前向渲染 - - /** - * 传统的延迟渲染 - * 第一个pass生成GBuffer(BaseColor/Normal等),第二个pass渲染渲染透明,第三个 - */ - GBufferDeferred, ///<延迟渲染 - - VisbilityDeferred, ///<可见性延迟渲染 - - ENUM_CLASS_RANGE(Forward,Visbility) -};//enum class RenderingMode - -enum class RenderPhase -{ - PreRender, ///<渲染前 - - Physics, ///<物理 - Anim, ///<动画前 - - Depth, ///<渲染深度(一般用于Early-Z pass) - - GBuffer, ///<生成GBuffer - - Transparent, ///<渲染透明物件 - - PostProcess, ///<后处理 - - Submit, ///<提交指令队列 - Present, ///<呈现 - - ENUM_CLASS_RANGE(PreRender,Present) -};//enum class RenderPhase + GraphModuleWorkConfig(); + virtual ~GraphModuleWorkConfig()=default; +};//class GraphModuleWorkConfig /** * 渲染框架 */ class RenderFramework { - ObjectList module_list; + ObjectList module_list; protected: @@ -165,6 +113,9 @@ protected: private: + double last_time =0; + double cur_time =0; + uint64 frame_count =0; public: @@ -179,6 +130,8 @@ public: RenderFramework(){} virtual ~RenderFramework()=default; + virtual void StartTime(); + /** * @pragma delta_time 本帧时间间隔 */ diff --git a/inc/hgl/graph/module/RenderModule.h b/inc/hgl/graph/module/RenderModule.h index b23ddee1..5cf61a2b 100644 --- a/inc/hgl/graph/module/RenderModule.h +++ b/inc/hgl/graph/module/RenderModule.h @@ -11,6 +11,11 @@ VK_NAMESPACE_BEGIN class RenderModule:public GraphModule { VkExtent2D current_extent; + RenderTarget *render_target; + +public: + + const bool IsRender()const noexcept{return true;} public: @@ -18,15 +23,8 @@ public: RenderModule(const AnsiString &name):GraphModule(name){} virtual ~RenderModule()=default; + + virtual void OnRenderTarget(RenderTarget *rt)override{render_target=rt;} - virtual bool Init()override{return true;} - - virtual void Execute(const double,RenderCmdBuffer *)override{} - - virtual void OnResize(const VkExtent2D &ext){current_extent=ext;} - virtual void OnFocusLost(){} - - virtual void OnPreFrame(){} - virtual void OnPostFrame(){} + virtual void OnResize(const VkExtent2D &ext)override{current_extent=ext;} };//class RenderModule - diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 46e949e6..970c4833 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -1,10 +1,21 @@ #include -#include +#include +#include VK_NAMESPACE_BEGIN +void RenderFramework::StartTime() +{ + last_time=cur_time=GetDoubleTime(); + frame_count++; +} + void RenderFramework::MainLoop() { + cur_time=GetDoubleTime(); + + const double delta_time=cur_time-last_time; + for(auto rm:module_list) { if(rm->IsEnable()) @@ -16,7 +27,7 @@ void RenderFramework::MainLoop() for(auto rm:module_list) { if(rm->IsEnable()) - rm->Execute(0,nullptr); + rm->OnExecute(delta_time,nullptr); } for(auto rm:module_list) @@ -26,6 +37,8 @@ void RenderFramework::MainLoop() } EndFrame(); + last_time=cur_time; + ++frame_count; } VK_NAMESPACE_END