mirror of
https://github.com/Drezil/imgui.git
synced 2025-07-06 04:58:47 +02:00
Skip missing font glyphs V2 revert changes to stb_truetype.h (
This commit is contained in:
@ -1774,19 +1774,34 @@ bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
|
||||
buf_packedchars_n += range.num_chars;
|
||||
}
|
||||
|
||||
// Pack
|
||||
// Gather the sizes of all rectangle we need
|
||||
tmp.Rects = buf_rects + buf_rects_n;
|
||||
tmp.RectsCount = font_glyphs_count;
|
||||
buf_rects_n += font_glyphs_count;
|
||||
stbtt_PackSetOversampling(&spc, cfg.OversampleH, cfg.OversampleV);
|
||||
int n = stbtt_PackFontRangesGatherRects(&spc, &tmp.FontInfo, tmp.Ranges, tmp.RangesCount, tmp.Rects);
|
||||
IM_ASSERT(n == font_glyphs_count);
|
||||
|
||||
// Detect missing glyphs and replace them with a zero-sized box instead of relying on the default glyphs
|
||||
// This allows us merging overlapping icon fonts more easily.
|
||||
int rect_i = 0;
|
||||
for (int range_i = 0; range_i < tmp.RangesCount; range_i++)
|
||||
for (int char_i = 0; char_i < tmp.Ranges[range_i].num_chars; char_i++, rect_i++)
|
||||
if (stbtt_FindGlyphIndex(&tmp.FontInfo, tmp.Ranges[range_i].first_unicode_codepoint_in_range + char_i) == 0)
|
||||
tmp.Rects[rect_i].w = tmp.Rects[rect_i].h = 0;
|
||||
|
||||
// Pack
|
||||
stbrp_pack_rects((stbrp_context*)spc.pack_info, tmp.Rects, n);
|
||||
|
||||
// Extend texture height
|
||||
// Also mark missing glyphs as non-packed so we don't attempt to render into them
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
if (tmp.Rects[i].w == 0 && tmp.Rects[i].h == 0)
|
||||
tmp.Rects[i].was_packed = 0;
|
||||
if (tmp.Rects[i].was_packed)
|
||||
atlas->TexHeight = ImMax(atlas->TexHeight, tmp.Rects[i].y + tmp.Rects[i].h);
|
||||
}
|
||||
}
|
||||
IM_ASSERT(buf_rects_n == total_glyphs_count);
|
||||
IM_ASSERT(buf_packedchars_n == total_glyphs_count);
|
||||
|
Reference in New Issue
Block a user