Completely clear font when rebuilding atlas.

Previously, IndexLookup was not cleared on each font, causing FindGlyph to return old glyphs when using MergeMode.
This commit is contained in:
Anthony Pesch 2017-10-01 23:40:29 -04:00
parent 9912f7eef8
commit c38526d14b

View File

@ -1540,7 +1540,6 @@ bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
const float off_x = cfg.GlyphOffset.x; const float off_x = cfg.GlyphOffset.x;
const float off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f); const float off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f);
dst_font->FallbackGlyph = NULL; // Always clear fallback so FindGlyph can return NULL. It will be set again in BuildLookupTable()
for (int i = 0; i < tmp.RangesCount; i++) for (int i = 0; i < tmp.RangesCount; i++)
{ {
stbtt_pack_range& range = tmp.Ranges[i]; stbtt_pack_range& range = tmp.Ranges[i];
@ -1582,14 +1581,16 @@ void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* f
{ {
if (!font_config->MergeMode) if (!font_config->MergeMode)
{ {
font->ContainerAtlas = atlas; ImVec2 display_offset = font->DisplayOffset;
font->ConfigData = font_config;
font->ConfigDataCount = 0; font->Clear();
font->FontSize = font_config->SizePixels; font->FontSize = font_config->SizePixels;
font->DisplayOffset = display_offset;
font->ConfigData = font_config;
font->ContainerAtlas = atlas;
font->Ascent = ascent; font->Ascent = ascent;
font->Descent = descent; font->Descent = descent;
font->Glyphs.resize(0);
font->MetricsTotalSurface = 0;
} }
font->ConfigDataCount++; font->ConfigDataCount++;
} }