mirror of
https://github.com/ocornut/imgui.git
synced 2026-06-01 01:34:57 +08:00
Fonts: Exposed CompactCache(). Hide ClearCache().
This commit is contained in:
@@ -15688,14 +15688,14 @@ void ImGui::ShowFontAtlas(ImFontAtlas* atlas)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SeparatorText("Font Atlas");
|
SeparatorText("Font Atlas");
|
||||||
if (Button("Clear Cache"))
|
if (Button("Compact"))
|
||||||
atlas->ClearCache();
|
atlas->CompactCache();
|
||||||
SameLine();
|
SameLine();
|
||||||
if (Button("Grow"))
|
if (Button("Grow"))
|
||||||
ImFontAtlasBuildGrowTexture(atlas);
|
ImFontAtlasBuildGrowTexture(atlas);
|
||||||
SameLine();
|
SameLine();
|
||||||
if (Button("Compact"))
|
if (Button("Clear Output"))
|
||||||
ImFontAtlasBuildCompactTexture(atlas);
|
ImFontAtlasBuildClearTexture(atlas);
|
||||||
|
|
||||||
for (int tex_n = 0; tex_n < atlas->TexList.Size; tex_n++)
|
for (int tex_n = 0; tex_n < atlas->TexList.Size; tex_n++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3521,7 +3521,7 @@ struct ImFontAtlas
|
|||||||
IMGUI_API void RemoveFont(ImFont* font);
|
IMGUI_API void RemoveFont(ImFont* font);
|
||||||
|
|
||||||
IMGUI_API void Clear(); // Clear everything (input fonts, output glyphs/textures)
|
IMGUI_API void Clear(); // Clear everything (input fonts, output glyphs/textures)
|
||||||
IMGUI_API void ClearCache(); // Clear cached glyphs and textures. Invalidates all AddCustomRectXXX return values.
|
IMGUI_API void CompactCache(); // Compact cached glyphs and texture.
|
||||||
|
|
||||||
// As we are transitioning toward a new font system, we expect to obsolete those soon:
|
// As we are transitioning toward a new font system, we expect to obsolete those soon:
|
||||||
IMGUI_API void ClearInputData(); // [OBSOLETE] Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts.
|
IMGUI_API void ClearInputData(); // [OBSOLETE] Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts.
|
||||||
|
|||||||
+20
-11
@@ -2457,7 +2457,7 @@ void ImTextureData::DestroyPixels()
|
|||||||
// - Default texture data encoded in ASCII
|
// - Default texture data encoded in ASCII
|
||||||
// - ImFontAtlas()
|
// - ImFontAtlas()
|
||||||
// - ImFontAtlas::Clear()
|
// - ImFontAtlas::Clear()
|
||||||
// - ImFontAtlas::ClearCache()
|
// - ImFontAtlas::CompactCache()
|
||||||
// - ImFontAtlas::ClearInputData()
|
// - ImFontAtlas::ClearInputData()
|
||||||
// - ImFontAtlas::ClearTexData()
|
// - ImFontAtlas::ClearTexData()
|
||||||
// - ImFontAtlas::ClearFonts()
|
// - ImFontAtlas::ClearFonts()
|
||||||
@@ -2499,7 +2499,7 @@ void ImTextureData::DestroyPixels()
|
|||||||
// - ImFontAtlasBuildAddFont()
|
// - ImFontAtlasBuildAddFont()
|
||||||
// - ImFontAtlasBuildSetupFontCreateEllipsisFromDot()
|
// - ImFontAtlasBuildSetupFontCreateEllipsisFromDot()
|
||||||
// - ImFontAtlasBuildSetupFontSpecialGlyphs()
|
// - ImFontAtlasBuildSetupFontSpecialGlyphs()
|
||||||
// - ImFontAtlasBuildDiscardUnusedBakes()
|
// - ImFontAtlasBuildDiscardBakes()
|
||||||
// - ImFontAtlasBuildDiscardFontBakedGlyph()
|
// - ImFontAtlasBuildDiscardFontBakedGlyph()
|
||||||
// - ImFontAtlasBuildDiscardFontBaked()
|
// - ImFontAtlasBuildDiscardFontBaked()
|
||||||
// - ImFontAtlasBuildDiscardFont()
|
// - ImFontAtlasBuildDiscardFont()
|
||||||
@@ -2615,15 +2615,14 @@ void ImFontAtlas::Clear()
|
|||||||
bool backup_renderer_has_textures = RendererHasTextures;
|
bool backup_renderer_has_textures = RendererHasTextures;
|
||||||
RendererHasTextures = false; // Full Clear() is supported, but ClearTexData() only isn't.
|
RendererHasTextures = false; // Full Clear() is supported, but ClearTexData() only isn't.
|
||||||
ClearTexData();
|
ClearTexData();
|
||||||
|
if (Builder != NULL)
|
||||||
|
ImFontAtlasBuildClearTexture(this);
|
||||||
RendererHasTextures = backup_renderer_has_textures;
|
RendererHasTextures = backup_renderer_has_textures;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImFontAtlas::ClearCache()
|
void ImFontAtlas::CompactCache()
|
||||||
{
|
{
|
||||||
ImVec2i new_tex_size = ImFontAtlasBuildGetTextureSizeEstimate(this);
|
ImFontAtlasBuildCompactTexture(this);
|
||||||
ImFontAtlasBuildDestroy(this);
|
|
||||||
ImFontAtlasBuildAddTexture(this, new_tex_size.x, new_tex_size.y);
|
|
||||||
ImFontAtlasBuildInit(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImFontAtlas::ClearInputData()
|
void ImFontAtlas::ClearInputData()
|
||||||
@@ -3682,13 +3681,14 @@ void ImFontAtlasBuildDiscardFont(ImFontAtlas* atlas, ImFont* font)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImFontAtlasBuildDiscardUnusedBakes(ImFontAtlas* atlas, int gc_frames)
|
// use unused_frames==0 to discard everything.
|
||||||
|
void ImFontAtlasBuildDiscardBakes(ImFontAtlas* atlas, int unused_frames)
|
||||||
{
|
{
|
||||||
ImFontAtlasBuilder* builder = atlas->Builder;
|
ImFontAtlasBuilder* builder = atlas->Builder;
|
||||||
for (int baked_n = 0; baked_n < builder->BakedPool.Size; baked_n++)
|
for (int baked_n = 0; baked_n < builder->BakedPool.Size; baked_n++)
|
||||||
{
|
{
|
||||||
ImFontBaked* baked = &builder->BakedPool[baked_n];
|
ImFontBaked* baked = &builder->BakedPool[baked_n];
|
||||||
if (baked->LastUsedFrame + gc_frames < atlas->Builder->FrameCount && !baked->WantDestroy)
|
if (baked->LastUsedFrame + unused_frames <= atlas->Builder->FrameCount && !baked->WantDestroy)
|
||||||
ImFontAtlasBuildDiscardFontBaked(atlas, baked->ContainerFont, baked);
|
ImFontAtlasBuildDiscardFontBaked(atlas, baked->ContainerFont, baked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3909,7 +3909,7 @@ void ImFontAtlasBuildMakeSpace(ImFontAtlas* atlas)
|
|||||||
// Can some baked contents be ditched?
|
// Can some baked contents be ditched?
|
||||||
//IMGUI_DEBUG_LOG_FONT("[font] ImFontAtlasBuildMakeSpace()\n");
|
//IMGUI_DEBUG_LOG_FONT("[font] ImFontAtlasBuildMakeSpace()\n");
|
||||||
ImFontAtlasBuilder* builder = atlas->Builder;
|
ImFontAtlasBuilder* builder = atlas->Builder;
|
||||||
ImFontAtlasBuildDiscardUnusedBakes(atlas, 2);
|
ImFontAtlasBuildDiscardBakes(atlas, 2);
|
||||||
|
|
||||||
// Currently using a heuristic for repack without growing.
|
// Currently using a heuristic for repack without growing.
|
||||||
if (builder->RectsDiscardedSurface < builder->RectsPackedSurface * 0.20f)
|
if (builder->RectsDiscardedSurface < builder->RectsPackedSurface * 0.20f)
|
||||||
@@ -3952,12 +3952,21 @@ ImVec2i ImFontAtlasBuildGetTextureSizeEstimate(ImFontAtlas* atlas)
|
|||||||
return ImVec2i(new_tex_w, new_tex_h);
|
return ImVec2i(new_tex_w, new_tex_h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear all output. Invalidates all AddCustomRectXXX return values.
|
||||||
|
void ImFontAtlasBuildClearTexture(ImFontAtlas* atlas)
|
||||||
|
{
|
||||||
|
ImVec2i new_tex_size = ImFontAtlasBuildGetTextureSizeEstimate(atlas);
|
||||||
|
ImFontAtlasBuildDestroy(atlas);
|
||||||
|
ImFontAtlasBuildAddTexture(atlas, new_tex_size.x, new_tex_size.y);
|
||||||
|
ImFontAtlasBuildInit(atlas);
|
||||||
|
}
|
||||||
|
|
||||||
// You should not need to call this manually!
|
// You should not need to call this manually!
|
||||||
// If you think you do, let us know and we can advise about policies auto-compact.
|
// If you think you do, let us know and we can advise about policies auto-compact.
|
||||||
void ImFontAtlasBuildCompactTexture(ImFontAtlas* atlas)
|
void ImFontAtlasBuildCompactTexture(ImFontAtlas* atlas)
|
||||||
{
|
{
|
||||||
ImFontAtlasBuilder* builder = atlas->Builder;
|
ImFontAtlasBuilder* builder = atlas->Builder;
|
||||||
ImFontAtlasBuildDiscardUnusedBakes(atlas, 1);
|
ImFontAtlasBuildDiscardBakes(atlas, 0);
|
||||||
|
|
||||||
ImTextureData* old_tex = atlas->TexData;
|
ImTextureData* old_tex = atlas->TexData;
|
||||||
ImVec2i old_tex_size = ImVec2i(old_tex->Width, old_tex->Height);
|
ImVec2i old_tex_size = ImVec2i(old_tex->Width, old_tex->Height);
|
||||||
|
|||||||
+2
-1
@@ -3761,13 +3761,14 @@ IMGUI_API void ImFontAtlasBuildRenderBitmapFromString(ImFontAtlas*
|
|||||||
IMGUI_API ImTextureData* ImFontAtlasBuildAddTexture(ImFontAtlas* atlas, int w, int h);
|
IMGUI_API ImTextureData* ImFontAtlasBuildAddTexture(ImFontAtlas* atlas, int w, int h);
|
||||||
IMGUI_API void ImFontAtlasBuildMakeSpace(ImFontAtlas* atlas);
|
IMGUI_API void ImFontAtlasBuildMakeSpace(ImFontAtlas* atlas);
|
||||||
IMGUI_API void ImFontAtlasBuildRepackTexture(ImFontAtlas* atlas, int w, int h);
|
IMGUI_API void ImFontAtlasBuildRepackTexture(ImFontAtlas* atlas, int w, int h);
|
||||||
|
IMGUI_API void ImFontAtlasBuildClearTexture(ImFontAtlas* atlas);
|
||||||
IMGUI_API void ImFontAtlasBuildGrowTexture(ImFontAtlas* atlas, int old_w = -1, int old_h = -1);
|
IMGUI_API void ImFontAtlasBuildGrowTexture(ImFontAtlas* atlas, int old_w = -1, int old_h = -1);
|
||||||
IMGUI_API void ImFontAtlasBuildCompactTexture(ImFontAtlas* atlas);
|
IMGUI_API void ImFontAtlasBuildCompactTexture(ImFontAtlas* atlas);
|
||||||
IMGUI_API ImVec2i ImFontAtlasBuildGetTextureSizeEstimate(ImFontAtlas* atlas);
|
IMGUI_API ImVec2i ImFontAtlasBuildGetTextureSizeEstimate(ImFontAtlas* atlas);
|
||||||
|
|
||||||
IMGUI_API bool ImFontAtlasBuildAddFont(ImFontAtlas* atlas, ImFontConfig* src);
|
IMGUI_API bool ImFontAtlasBuildAddFont(ImFontAtlas* atlas, ImFontConfig* src);
|
||||||
IMGUI_API void ImFontAtlasBuildSetupFontSpecialGlyphs(ImFontAtlas* atlas, ImFont* font, ImFontConfig* src);
|
IMGUI_API void ImFontAtlasBuildSetupFontSpecialGlyphs(ImFontAtlas* atlas, ImFont* font, ImFontConfig* src);
|
||||||
IMGUI_API void ImFontAtlasBuildDiscardUnusedBakes(ImFontAtlas* atlas, int gc_frames);
|
IMGUI_API void ImFontAtlasBuildDiscardBakes(ImFontAtlas* atlas, int unused_frames);
|
||||||
IMGUI_API void ImFontAtlasBuildDiscardFont(ImFontAtlas* atlas, ImFont* font);
|
IMGUI_API void ImFontAtlasBuildDiscardFont(ImFontAtlas* atlas, ImFont* font);
|
||||||
IMGUI_API void ImFontAtlasBuildDiscardFontBaked(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked);
|
IMGUI_API void ImFontAtlasBuildDiscardFontBaked(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked);
|
||||||
IMGUI_API void ImFontAtlasBuildDiscardFontBakedGlyph(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked, ImFontGlyph* glyph);
|
IMGUI_API void ImFontAtlasBuildDiscardFontBakedGlyph(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked, ImFontGlyph* glyph);
|
||||||
|
|||||||
Reference in New Issue
Block a user