Fonts: ClearOutputData() doesn't need to clear FallbackChar, EllipsisChar. Fixed crash changing font loader.

This commit is contained in:
ocornut
2025-12-05 19:12:50 +01:00
parent 7f78f52243
commit a726bded11
2 changed files with 9 additions and 7 deletions

View File

@@ -43,11 +43,14 @@ Breaking Changes:
Other Changes: Other Changes:
- Fonts: fixed handling of `ImFontConfig::FontDataOwnedByAtlas = false` which - Fonts:
- Fixed handling of `ImFontConfig::FontDataOwnedByAtlas = false` which
did erroneously make a copy of the font data, essentially defeating the purpose did erroneously make a copy of the font data, essentially defeating the purpose
of this flag and wasting memory. of this flag and wasting memory.
Undetected since July 2015 and now spotted by @TellowKrinkle, this is perhaps Undetected since July 2015 and now spotted by @TellowKrinkle, this is perhaps
the oldest bug in Dear ImGui history (albeit for a rarely used feature)! (#9086) the oldest bug in Dear ImGui history (albeit for a rarely used feature)! (#9086)
- Fixed an issue related to EllipsisChar handling, while changing
font loader or font loader flags dynamically in Style->Fonts menus.
- Textures: - Textures:
- Fixed a building issue when ImTextureID is defined as a struct. - Fixed a building issue when ImTextureID is defined as a struct.
- Fixed displaying texture # in Metrics/Debugger window. - Fixed displaying texture # in Metrics/Debugger window.

View File

@@ -3230,7 +3230,6 @@ void ImFontAtlasBuildNotifySetFont(ImFontAtlas* atlas, ImFont* old_font, ImFont*
void ImFontAtlas::RemoveFont(ImFont* font) void ImFontAtlas::RemoveFont(ImFont* font)
{ {
IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas!"); IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas!");
font->ClearOutputData();
ImFontAtlasFontDestroyOutput(this, font); ImFontAtlasFontDestroyOutput(this, font);
for (ImFontConfig* src : font->Sources) for (ImFontConfig* src : font->Sources)
@@ -5106,7 +5105,7 @@ void ImFont::ClearOutputData()
{ {
if (ImFontAtlas* atlas = OwnerAtlas) if (ImFontAtlas* atlas = OwnerAtlas)
ImFontAtlasFontDiscardBakes(atlas, this, 0); ImFontAtlasFontDiscardBakes(atlas, this, 0);
FallbackChar = EllipsisChar = 0; //FallbackChar = EllipsisChar = 0;
memset(Used8kPagesMap, 0, sizeof(Used8kPagesMap)); memset(Used8kPagesMap, 0, sizeof(Used8kPagesMap));
LastBaked = NULL; LastBaked = NULL;
} }