Jelajahi Sumber

Fonts: ImFontAtlasBuildInit() is always called with atlas->Builder == NULL.

ocornut 3 bulan lalu
induk
melakukan
7840e453b5
2 mengubah file dengan 8 tambahan dan 16 penghapusan
  1. 7 15
      imgui_draw.cpp
  2. 1 1
      imgui_internal.h

+ 7 - 15
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);

+ 1 - 1
imgui_internal.h

@@ -3753,7 +3753,7 @@ struct ImFontAtlasBuilder
 
     // Cache of all ImFontBaked
     ImStableVector<ImFontBaked,32> BakedPool;
-    ImGuiStorage                BakedMap;
+    ImGuiStorage                BakedMap;               // BakedId --> ImFontBaked*
     int                         BakedDiscardedCount;
 
     // Custom rectangle identifiers