Fonts, Context: assert that ImFontAtlas has no other references when destroying an owned atlas. (#9426)

This commit is contained in:
ocornut
2026-07-02 15:02:59 +02:00
parent 6824e2c2e4
commit 8fc25800e0
2 changed files with 8 additions and 3 deletions

View File

@@ -95,6 +95,7 @@ Other Changes:
calling ClearFonts() during rendering.
- Fixed an issue where passing a manually created ImFontAtlas to CreateContext() would
incorrectly destroy it in DestroyContext() when ref-count gets back to zero. (#9426)
- Destroying an ImGui context using a ImFontAtlas checks that the later has no references.
- Nav:
- Fixed context menu activation with gamepad erroneously testing for _NavEnableKeyboard
instead of _NavEnableGamepad. (#9454, #8803, #9270) [@Clownacy]

View File

@@ -4495,10 +4495,14 @@ void ImGui::Shutdown()
for (ImFontAtlas* atlas : g.FontAtlases)
{
UnregisterFontAtlas(atlas);
if (atlas->RefCount == 0 && atlas->OwnerContext == &g)
if (atlas->OwnerContext == &g)
{
atlas->Locked = false;
IM_DELETE(atlas);
IM_ASSERT(atlas->RefCount == 0 && "Destroying context owning a ImFontAtlas which is still used elsewhere!");
if (atlas->RefCount == 0)
{
atlas->Locked = false;
IM_DELETE(atlas);
}
}
}
g.DrawListSharedData.TempBuffer.clear();