From 7840e453b58f8b0950166e67adce8df15ddebfa2 Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 17 Apr 2025 16:53:12 +0200 Subject: [PATCH] Fonts: ImFontAtlasBuildInit() is always called with atlas->Builder == NULL. --- imgui_draw.cpp | 22 +++++++--------------- imgui_internal.h | 2 +- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/imgui_draw.cpp b/imgui_draw.cpp index f982df4e6..f78ff9901 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -3552,6 +3552,7 @@ static void ImFontAtlasBuildUpdateLinesTexData(ImFontAtlas* atlas) //----------------------------------------------------------------------------------------------------------------------------- +// Was tempted to lazily init FontSrc but wouldn't save much + makes it more complicated to detect invalid data at AddFont() bool ImFontAtlasBuildInitFontOutput(ImFontAtlas* atlas, ImFont* font) { bool ret = true; @@ -4157,15 +4158,9 @@ void ImFontAtlasBuildInit(ImFontAtlas* atlas) if (atlas->TexData == NULL || atlas->TexData->Pixels == NULL) ImFontAtlasBuildAddTexture(atlas, ImUpperPowerOfTwo(atlas->TexMinWidth), ImUpperPowerOfTwo(atlas->TexMinHeight)); - ImFontAtlasBuilder* builder = atlas->Builder; // Do not move above - const bool builder_is_new = (builder == NULL); - if (builder_is_new) - { - IM_ASSERT(atlas->Builder == NULL); - builder = atlas->Builder = IM_NEW(ImFontAtlasBuilder)(); - if (atlas->FontLoader->LoaderInit) - atlas->FontLoader->LoaderInit(atlas); - } + atlas->Builder = IM_NEW(ImFontAtlasBuilder)(); + if (atlas->FontLoader->LoaderInit) + atlas->FontLoader->LoaderInit(atlas); ImFontAtlasBuildUpdateRendererHasTexturesFromContext(atlas); @@ -4176,12 +4171,9 @@ void ImFontAtlasBuildInit(ImFontAtlas* atlas) ImFontAtlasBuildUpdateBasicTexData(atlas); // Register fonts - if (builder_is_new) - { - ImFontAtlasBuildUpdatePointers(atlas); - for (ImFontConfig& cfg : atlas->Sources) - ImFontAtlasBuildAddFont(atlas, &cfg); - } + ImFontAtlasBuildUpdatePointers(atlas); + for (ImFontConfig& cfg : atlas->Sources) + ImFontAtlasBuildAddFont(atlas, &cfg); // Update UV coordinates etc. stored in bound ImDrawListSharedData instance ImFontAtlasUpdateDrawListsSharedData(atlas); diff --git a/imgui_internal.h b/imgui_internal.h index c4e064052..7c615d323 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -3753,7 +3753,7 @@ struct ImFontAtlasBuilder // Cache of all ImFontBaked ImStableVector BakedPool; - ImGuiStorage BakedMap; + ImGuiStorage BakedMap; // BakedId --> ImFontBaked* int BakedDiscardedCount; // Custom rectangle identifiers