From fb965991beb5bdb98bafd59b440fc54494956fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Wed, 22 Oct 2025 21:48:21 -0700 Subject: [PATCH] ImGui: Fixed texture leak. --- examples/common/imgui/imgui.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/examples/common/imgui/imgui.cpp b/examples/common/imgui/imgui.cpp index a6101a4e5..a0a9af39e 100644 --- a/examples/common/imgui/imgui.cpp +++ b/examples/common/imgui/imgui.cpp @@ -242,9 +242,9 @@ struct OcornutImguiContext const uint16_t xx = uint16_t(bx::max(clipRect.x, 0.0f) ); const uint16_t yy = uint16_t(bx::max(clipRect.y, 0.0f) ); encoder->setScissor(xx, yy - , uint16_t(bx::min(clipRect.z, 65535.0f)-xx) - , uint16_t(bx::min(clipRect.w, 65535.0f)-yy) - ); + , uint16_t(bx::min(clipRect.z, 65535.0f)-xx) + , uint16_t(bx::min(clipRect.w, 65535.0f)-yy) + ); encoder->setState(state); encoder->setTexture(0, s_tex, th); @@ -446,11 +446,11 @@ struct OcornutImguiContext const FontRangeMerge& frm = s_fontRangeMerge[ii]; io.Fonts->AddFontFromMemoryTTF( (void*)frm.data - , (int)frm.size - , _fontSize-3.0f - , &config - , frm.ranges - ); + , (int)frm.size + , _fontSize-3.0f + , &config + , frm.ranges + ); } } @@ -459,6 +459,17 @@ struct OcornutImguiContext void destroy() { + for (ImTextureData* texData : ImGui::GetPlatformIO().Textures) + { + if (1 == texData->RefCount) + { + ImGui::TextureBgfx tex = bx::bitCast(texData->GetTexID() ); + bgfx::destroy(tex.handle); + texData->SetTexID(ImTextureID_Invalid); + texData->SetStatus(ImTextureStatus_Destroyed); + } + } + ImGui::ShutdownDockContext(); ImGui::DestroyContext(m_imgui);