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

This commit is contained in:
ocornut
2025-04-17 16:53:12 +02:00
parent eb650c468a
commit 7840e453b5
2 changed files with 8 additions and 16 deletions
+2 -10
View File
@@ -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 ImFontAtlasBuildInitFontOutput(ImFontAtlas* atlas, ImFont* font)
{ {
bool ret = true; bool ret = true;
@@ -4157,15 +4158,9 @@ void ImFontAtlasBuildInit(ImFontAtlas* atlas)
if (atlas->TexData == NULL || atlas->TexData->Pixels == NULL) if (atlas->TexData == NULL || atlas->TexData->Pixels == NULL)
ImFontAtlasBuildAddTexture(atlas, ImUpperPowerOfTwo(atlas->TexMinWidth), ImUpperPowerOfTwo(atlas->TexMinHeight)); ImFontAtlasBuildAddTexture(atlas, ImUpperPowerOfTwo(atlas->TexMinWidth), ImUpperPowerOfTwo(atlas->TexMinHeight));
ImFontAtlasBuilder* builder = atlas->Builder; // Do not move above atlas->Builder = IM_NEW(ImFontAtlasBuilder)();
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) if (atlas->FontLoader->LoaderInit)
atlas->FontLoader->LoaderInit(atlas); atlas->FontLoader->LoaderInit(atlas);
}
ImFontAtlasBuildUpdateRendererHasTexturesFromContext(atlas); ImFontAtlasBuildUpdateRendererHasTexturesFromContext(atlas);
@@ -4176,12 +4171,9 @@ void ImFontAtlasBuildInit(ImFontAtlas* atlas)
ImFontAtlasBuildUpdateBasicTexData(atlas); ImFontAtlasBuildUpdateBasicTexData(atlas);
// Register fonts // Register fonts
if (builder_is_new)
{
ImFontAtlasBuildUpdatePointers(atlas); ImFontAtlasBuildUpdatePointers(atlas);
for (ImFontConfig& cfg : atlas->Sources) for (ImFontConfig& cfg : atlas->Sources)
ImFontAtlasBuildAddFont(atlas, &cfg); ImFontAtlasBuildAddFont(atlas, &cfg);
}
// Update UV coordinates etc. stored in bound ImDrawListSharedData instance // Update UV coordinates etc. stored in bound ImDrawListSharedData instance
ImFontAtlasUpdateDrawListsSharedData(atlas); ImFontAtlasUpdateDrawListsSharedData(atlas);
+1 -1
View File
@@ -3753,7 +3753,7 @@ struct ImFontAtlasBuilder
// Cache of all ImFontBaked // Cache of all ImFontBaked
ImStableVector<ImFontBaked,32> BakedPool; ImStableVector<ImFontBaked,32> BakedPool;
ImGuiStorage BakedMap; ImGuiStorage BakedMap; // BakedId --> ImFontBaked*
int BakedDiscardedCount; int BakedDiscardedCount;
// Custom rectangle identifiers // Custom rectangle identifiers