refactor: 主渲染改为框架固定行为,派生类渲染扩展走 OnRenderOverlay
原设计 OnRender() 既承载默认渲染又是虚钩子,派生类一 override 主渲染就丢失(钩子语义与框架行为耦合)。现在 Run() 固定调 Renderer.Render(scene),OnRenderOverlay() 只做叠加层(ImGui/ 调试视图/编辑器 UI),不覆写则无叠加层——runtime 零渲染代码, editor 扩展不破坏主渲染。
This commit is contained in:
@@ -5,11 +5,14 @@
|
|||||||
//
|
//
|
||||||
// 分层目标:main 不再知道 Window/Renderer 的存在——
|
// 分层目标:main 不再知道 Window/Renderer 的存在——
|
||||||
// main 只 new 一个派生类并 Run();
|
// main 只 new 一个派生类并 Run();
|
||||||
// 派生类通过生命周期钩子(OnInit/OnUpdate/OnRender/OnShutdown)
|
// 派生类通过生命周期钩子(OnInit/OnUpdate/OnRenderOverlay/OnShutdown)
|
||||||
// 和事件钩子(OnEvent + 类型化事件)定义程序行为;
|
// 和事件钩子(OnEvent + 类型化事件)定义程序行为;
|
||||||
// runtime、editor 等不同程序形态只是不同的派生类。
|
// runtime、editor 等不同程序形态只是不同的派生类。
|
||||||
//
|
//
|
||||||
// 主循环固定为:PollEvents → OnUpdate(dt) → OnRender → 判退出。
|
// 主循环固定为:PollEvents → OnUpdate(dt) → [主渲染 → OnRenderOverlay] → 判退出。
|
||||||
|
// 主渲染(Renderer.Render(scene))是框架行为,派生类不可覆盖也不会丢失;
|
||||||
|
// 派生类的渲染扩展(ImGui/调试视图/编辑器叠加层)走 OnRenderOverlay,
|
||||||
|
// 在主渲染之后、Present 之前执行,不覆写则什么都不发生。
|
||||||
// dt 由框架统一计时(含首帧与卡顿钳制),派生层无需自己管理。
|
// dt 由框架统一计时(含首帧与卡顿钳制),派生层无需自己管理。
|
||||||
//
|
//
|
||||||
|
|
||||||
@@ -60,8 +63,9 @@ namespace Engine {
|
|||||||
// 每帧逻辑更新(输入、动画、物理……)
|
// 每帧逻辑更新(输入、动画、物理……)
|
||||||
virtual void OnUpdate(f32 deltaTime) {}
|
virtual void OnUpdate(f32 deltaTime) {}
|
||||||
|
|
||||||
// 每帧渲染;默认实现驱动 Renderer 主循环,派生类可覆写
|
// 主渲染之后、当帧提交之前的叠加层钩子(ImGui/调试视图/编辑器 UI)。
|
||||||
virtual void OnRender();
|
// 主渲染由框架固定执行;这里只负责"额外的"渲染,不覆写则无叠加层。
|
||||||
|
virtual void OnRenderOverlay() {}
|
||||||
|
|
||||||
// 主循环结束后、析构前(保存、清理场景等)
|
// 主循环结束后、析构前(保存、清理场景等)
|
||||||
virtual void OnShutdown() {}
|
virtual void OnShutdown() {}
|
||||||
|
|||||||
@@ -73,7 +73,9 @@ namespace Engine {
|
|||||||
// 延迟销毁在渲染前统一 flush,保证渲染遍历时池结构不变
|
// 延迟销毁在渲染前统一 flush,保证渲染遍历时池结构不变
|
||||||
m_Scene->FlushDestroyQueue();
|
m_Scene->FlushDestroyQueue();
|
||||||
|
|
||||||
OnRender();
|
// 主渲染是框架行为(不可覆盖);叠加层钩子在提交前执行
|
||||||
|
m_Renderer->Render(*m_Scene, *m_Assets);
|
||||||
|
OnRenderOverlay();
|
||||||
|
|
||||||
++m_FrameCount;
|
++m_FrameCount;
|
||||||
}
|
}
|
||||||
@@ -82,11 +84,6 @@ namespace Engine {
|
|||||||
ENGINE_INFO("Application stopped ({} frames)", m_FrameCount);
|
ENGINE_INFO("Application stopped ({} frames)", m_FrameCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::OnRender()
|
|
||||||
{
|
|
||||||
m_Renderer->Render(*m_Scene, *m_Assets);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::DispatchEvent(const Event& event)
|
void Application::DispatchEvent(const Event& event)
|
||||||
{
|
{
|
||||||
OnEvent(event);
|
OnEvent(event);
|
||||||
|
|||||||
Reference in New Issue
Block a user