fix: ImGuiLayer 析构提前到 Logger Shutdown 之前 + UI 计时段收窄

m_ImGuiLayer 在 Application 析构体显式 reset(否则成员析构序在
Logger::Shutdown 之后);UI 计时范围从 Run 循环收窄到实际 ImGui
构建段(ImGui 未启用时不再计零段)。
This commit is contained in:
2026-09-24 13:44:15 +08:00
parent b65856b8a5
commit 08439ed015
+4 -2
View File
@@ -54,6 +54,8 @@ namespace Engine {
m_Renderer->GetDevice().GetDevice().waitIdle(); m_Renderer->GetDevice().GetDevice().waitIdle();
} }
if (m_ImGuiLayer) m_ImGuiLayer.reset();
Logger::Shutdown(); Logger::Shutdown();
} }
@@ -106,16 +108,16 @@ namespace Engine {
m_Scene->FlushDestroyQueue(); m_Scene->FlushDestroyQueue();
m_Scene->UpdateTransforms(); // UE transform-update 阶段:渲染前保证 world 新鲜 m_Scene->UpdateTransforms(); // UE transform-update 阶段:渲染前保证 world 新鲜
const auto uiStart = std::chrono::steady_clock::now();
// ---- UI 构建段:OnRenderOverlay 只"声明"控件,不直接碰 GPU ---- // ---- UI 构建段:OnRenderOverlay 只"声明"控件,不直接碰 GPU ----
if (m_ImGuiLayer && m_ImGuiLayer->IsEnabled()) if (m_ImGuiLayer && m_ImGuiLayer->IsEnabled())
{ {
const auto uiStart = std::chrono::steady_clock::now();
m_ImGuiLayer->NewFrame(); m_ImGuiLayer->NewFrame();
OnRenderOverlay(); OnRenderOverlay();
m_ImGuiLayer->BuildDrawData(); m_ImGuiLayer->BuildDrawData();
const auto uiEnd = std::chrono::steady_clock::now();
} }
const auto uiEnd = std::chrono::steady_clock::now();
// ---- 主渲染(框架行为):RG 顺序 Forward → ImGui(loadOp=Load) → // ---- 主渲染(框架行为):RG 顺序 Forward → ImGui(loadOp=Load) →
// Present,draw data 在 ImGui pass 里才真正提交 GPU ---- // Present,draw data 在 ImGui pass 里才真正提交 GPU ----