From bc63f76fc1bb28bfc13484d80ab25d765281390f Mon Sep 17 00:00:00 2001 From: atdunbg Date: Tue, 22 Sep 2026 16:44:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=B8=BB=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=A1=86=E6=9E=B6=E5=9B=BA=E5=AE=9A=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=EF=BC=8C=E6=B4=BE=E7=94=9F=E7=B1=BB=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E8=B5=B0=20OnRenderOverlay?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原设计 OnRender() 既承载默认渲染又是虚钩子,派生类一 override 主渲染就丢失(钩子语义与框架行为耦合)。现在 Run() 固定调 Renderer.Render(scene),OnRenderOverlay() 只做叠加层(ImGui/ 调试视图/编辑器 UI),不覆写则无叠加层——runtime 零渲染代码, editor 扩展不破坏主渲染。 --- Engine/include/Engine/Core/Application.h | 12 ++++++++---- Engine/src/Core/Application.cpp | 9 +++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Engine/include/Engine/Core/Application.h b/Engine/include/Engine/Core/Application.h index 8a20927..5a27dbf 100644 --- a/Engine/include/Engine/Core/Application.h +++ b/Engine/include/Engine/Core/Application.h @@ -5,11 +5,14 @@ // // 分层目标:main 不再知道 Window/Renderer 的存在—— // main 只 new 一个派生类并 Run(); -// 派生类通过生命周期钩子(OnInit/OnUpdate/OnRender/OnShutdown) +// 派生类通过生命周期钩子(OnInit/OnUpdate/OnRenderOverlay/OnShutdown) // 和事件钩子(OnEvent + 类型化事件)定义程序行为; // runtime、editor 等不同程序形态只是不同的派生类。 // -// 主循环固定为:PollEvents → OnUpdate(dt) → OnRender → 判退出。 +// 主循环固定为:PollEvents → OnUpdate(dt) → [主渲染 → OnRenderOverlay] → 判退出。 +// 主渲染(Renderer.Render(scene))是框架行为,派生类不可覆盖也不会丢失; +// 派生类的渲染扩展(ImGui/调试视图/编辑器叠加层)走 OnRenderOverlay, +// 在主渲染之后、Present 之前执行,不覆写则什么都不发生。 // dt 由框架统一计时(含首帧与卡顿钳制),派生层无需自己管理。 // @@ -60,8 +63,9 @@ namespace Engine { // 每帧逻辑更新(输入、动画、物理……) virtual void OnUpdate(f32 deltaTime) {} - // 每帧渲染;默认实现驱动 Renderer 主循环,派生类可覆写 - virtual void OnRender(); + // 主渲染之后、当帧提交之前的叠加层钩子(ImGui/调试视图/编辑器 UI)。 + // 主渲染由框架固定执行;这里只负责"额外的"渲染,不覆写则无叠加层。 + virtual void OnRenderOverlay() {} // 主循环结束后、析构前(保存、清理场景等) virtual void OnShutdown() {} diff --git a/Engine/src/Core/Application.cpp b/Engine/src/Core/Application.cpp index b45b159..994edb3 100644 --- a/Engine/src/Core/Application.cpp +++ b/Engine/src/Core/Application.cpp @@ -73,7 +73,9 @@ namespace Engine { // 延迟销毁在渲染前统一 flush,保证渲染遍历时池结构不变 m_Scene->FlushDestroyQueue(); - OnRender(); + // 主渲染是框架行为(不可覆盖);叠加层钩子在提交前执行 + m_Renderer->Render(*m_Scene, *m_Assets); + OnRenderOverlay(); ++m_FrameCount; } @@ -82,11 +84,6 @@ namespace Engine { ENGINE_INFO("Application stopped ({} frames)", m_FrameCount); } - void Application::OnRender() - { - m_Renderer->Render(*m_Scene, *m_Assets); - } - void Application::DispatchEvent(const Event& event) { OnEvent(event);