From 1ea6db604576d61124a410515fa0ee483e0989e1 Mon Sep 17 00:00:00 2001 From: nnn27 <51850231+nnn27@users.noreply.github.com> Date: Sat, 14 Sep 2024 15:07:34 +0200 Subject: [PATCH] Fix initialization of change_layers (#907) --- src/imgui/renderer/imgui_core.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/imgui/renderer/imgui_core.cpp b/src/imgui/renderer/imgui_core.cpp index ee77499ee..1c6313972 100644 --- a/src/imgui/renderer/imgui_core.cpp +++ b/src/imgui/renderer/imgui_core.cpp @@ -21,7 +21,12 @@ static std::vector layers; // Update layers before rendering to allow layer changes to be applied during rendering. // Using deque to keep the order of changes in case a Layer is removed then added again between // frames. -static std::deque> change_layers; +std::deque>& GetChangeLayers() { + static std::deque>* change_layers = + new std::deque>; + return *change_layers; +} + static std::mutex change_layers_mutex{}; namespace ImGui { @@ -113,15 +118,15 @@ bool ProcessEvent(SDL_Event* event) { void NewFrame() { { std::scoped_lock lock{change_layers_mutex}; - while (!change_layers.empty()) { - const auto [to_be_added, layer] = change_layers.front(); + while (!GetChangeLayers().empty()) { + const auto [to_be_added, layer] = GetChangeLayers().front(); if (to_be_added) { layers.push_back(layer); } else { const auto [begin, end] = std::ranges::remove(layers, layer); layers.erase(begin, end); } - change_layers.pop_front(); + GetChangeLayers().pop_front(); } } @@ -184,12 +189,12 @@ void Render(const vk::CommandBuffer& cmdbuf, ::Vulkan::Frame* frame) { void Layer::AddLayer(Layer* layer) { std::scoped_lock lock{change_layers_mutex}; - change_layers.emplace_back(true, layer); + GetChangeLayers().emplace_back(true, layer); } void Layer::RemoveLayer(Layer* layer) { std::scoped_lock lock{change_layers_mutex}; - change_layers.emplace_back(false, layer); + GetChangeLayers().emplace_back(false, layer); } } // namespace ImGui