diff --git a/aurora/lib/aurora.cpp b/aurora/lib/aurora.cpp index 69fbe3962..6df00721b 100644 --- a/aurora/lib/aurora.cpp +++ b/aurora/lib/aurora.cpp @@ -73,6 +73,9 @@ static bool poll_events() noexcept { break; } if (size.scale != g_windowSize.scale) { + if (g_windowSize.scale > 0.f) { + Log.report(logvisor::Info, FMT_STRING("Display scale changed to {}"), size.scale); + } g_AppDelegate->onAppDisplayScaleChanged(size.scale); } g_windowSize = size; diff --git a/aurora/lib/imgui.cpp b/aurora/lib/imgui.cpp index 3174992bb..7dc6e0b33 100644 --- a/aurora/lib/imgui.cpp +++ b/aurora/lib/imgui.cpp @@ -52,11 +52,18 @@ void process_event(const SDL_Event& event) noexcept { } void new_frame(const WindowSize& size) noexcept { + if (g_scale != size.scale) { + if (g_scale > 0.f) { + // TODO wgpu backend bug: doesn't clear bind groups on invalidate + g_resources.ImageBindGroups.Clear(); + ImGui_ImplWGPU_CreateDeviceObjects(); + } + g_scale = size.scale; + } ImGui_ImplWGPU_NewFrame(); ImGui_ImplSDL2_NewFrame(); // Render at full DPI - g_scale = size.scale; ImGui::GetIO().DisplaySize = ImVec2{static_cast(size.fb_width), static_cast(size.fb_height)}; ImGui::NewFrame(); } diff --git a/imgui/ImGuiEngine.cpp b/imgui/ImGuiEngine.cpp index b80b9542d..42098f83e 100644 --- a/imgui/ImGuiEngine.cpp +++ b/imgui/ImGuiEngine.cpp @@ -29,6 +29,7 @@ ImTextureID ImGuiEngine::metaforceIcon; void ImGuiEngine_Initialize(float scale) { ImGui::GetCurrentContext(); ImGuiIO& io = ImGui::GetIO(); + io.Fonts->Clear(); auto* fontData = new uint8_t[NOTO_MONO_FONT_DECOMPRESSED_SZ]; {