diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2022-11-06 21:48:55 +0100 |
|---|---|---|
| committer | Admiral H. Curtiss <pikachu025@gmail.com> | 2022-11-06 21:48:55 +0100 |
| commit | a98df1894705195f7051ef1dfccafffe135149c5 (patch) | |
| tree | cff8eaf076c6f07a006f79a582ca5a74cf977712 /Source/Core/VideoCommon/RenderBase.cpp | |
| parent | e37aa3ed90f064b9095e37584fd04b9ee6555b41 (diff) | |
VideoCommon: Hold ImGui lock while initializing and shutting down ImGui.
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/RenderBase.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index f787ab7dab..c2fdcbaa3d 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -1009,6 +1009,8 @@ void Renderer::RecordVideoMemory() bool Renderer::InitializeImGui() { + std::unique_lock<std::mutex> imgui_lock(m_imgui_mutex); + if (!IMGUI_CHECKVERSION()) { PanicAlertFmt("ImGui version check failed"); @@ -1068,7 +1070,7 @@ bool Renderer::InitializeImGui() return false; m_imgui_last_frame_time = Common::Timer::NowUs(); - BeginImGuiFrame(); + BeginImGuiFrameUnlocked(); // lock is already held return true; } @@ -1129,6 +1131,8 @@ bool Renderer::RecompileImGuiPipeline() void Renderer::ShutdownImGui() { + std::unique_lock<std::mutex> imgui_lock(m_imgui_mutex); + ImGui::EndFrame(); ImGui::DestroyContext(); m_imgui_pipeline.reset(); @@ -1139,7 +1143,11 @@ void Renderer::ShutdownImGui() void Renderer::BeginImGuiFrame() { std::unique_lock<std::mutex> imgui_lock(m_imgui_mutex); + BeginImGuiFrameUnlocked(); +} +void Renderer::BeginImGuiFrameUnlocked() +{ const u64 current_time_us = Common::Timer::NowUs(); const u64 time_diff_us = current_time_us - m_imgui_last_frame_time; const float time_diff_secs = static_cast<float>(time_diff_us / 1000000.0); |
