mirror of https://github.com/ocornut/imgui
Make font atlas packing padding configurable
This commit is contained in:
parent
01b99bbe09
commit
718f00d651
1
imgui.h
1
imgui.h
|
@ -1382,6 +1382,7 @@ struct ImFontAtlas
|
||||||
int TexWidth; // Texture width calculated during Build().
|
int TexWidth; // Texture width calculated during Build().
|
||||||
int TexHeight; // Texture height calculated during Build().
|
int TexHeight; // Texture height calculated during Build().
|
||||||
int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
|
int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
|
||||||
|
int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1.
|
||||||
ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
|
ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
|
||||||
ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
|
ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
|
||||||
|
|
||||||
|
|
|
@ -1061,6 +1061,7 @@ ImFontAtlas::ImFontAtlas()
|
||||||
TexPixelsAlpha8 = NULL;
|
TexPixelsAlpha8 = NULL;
|
||||||
TexPixelsRGBA32 = NULL;
|
TexPixelsRGBA32 = NULL;
|
||||||
TexWidth = TexHeight = TexDesiredWidth = 0;
|
TexWidth = TexHeight = TexDesiredWidth = 0;
|
||||||
|
TexGlyphPadding = 1;
|
||||||
TexUvWhitePixel = ImVec2(0, 0);
|
TexUvWhitePixel = ImVec2(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1314,13 +1315,13 @@ bool ImFontAtlas::Build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start packing. We need a known width for the skyline algorithm. Using a cheap heuristic here to decide of width. User can override TexDesiredWidth if they wish.
|
// Start packing. We need a known width for the skyline algorithm. Using a cheap heuristic here to decide of width. User can override TexDesiredWidth and TexGlyphPadding if they wish.
|
||||||
// After packing is done, width shouldn't matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
|
// After packing is done, width shouldn't matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
|
||||||
TexWidth = (TexDesiredWidth > 0) ? TexDesiredWidth : (total_glyph_count > 4000) ? 4096 : (total_glyph_count > 2000) ? 2048 : (total_glyph_count > 1000) ? 1024 : 512;
|
TexWidth = (TexDesiredWidth > 0) ? TexDesiredWidth : (total_glyph_count > 4000) ? 4096 : (total_glyph_count > 2000) ? 2048 : (total_glyph_count > 1000) ? 1024 : 512;
|
||||||
TexHeight = 0;
|
TexHeight = 0;
|
||||||
const int max_tex_height = 1024*32;
|
const int max_tex_height = 1024*32;
|
||||||
stbtt_pack_context spc;
|
stbtt_pack_context spc;
|
||||||
stbtt_PackBegin(&spc, NULL, TexWidth, max_tex_height, 0, 1, NULL);
|
stbtt_PackBegin(&spc, NULL, TexWidth, max_tex_height, 0, TexGlyphPadding, NULL);
|
||||||
|
|
||||||
// Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
|
// Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
|
||||||
ImVector<stbrp_rect> extra_rects;
|
ImVector<stbrp_rect> extra_rects;
|
||||||
|
|
Loading…
Reference in New Issue