refactor: 主渲染改为框架固定行为,派生类渲染扩展走 OnRenderOverlay

原设计 OnRender() 既承载默认渲染又是虚钩子,派生类一 override
主渲染就丢失(钩子语义与框架行为耦合)。现在 Run() 固定调
Renderer.Render(scene),OnRenderOverlay() 只做叠加层(ImGui/
调试视图/编辑器 UI),不覆写则无叠加层——runtime 零渲染代码,
editor 扩展不破坏主渲染。
This commit is contained in:
2026-09-22 16:44:39 +08:00
parent 07a3b87001
commit bc63f76fc1
2 changed files with 11 additions and 10 deletions
+8 -4
View File
@@ -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() {}