Fix: Don't rely on static initialization to set up sprite font caches.

The order of static initialization is undefined, so this can cause initalization
before relevant caches are initializations.

(cherry picked from commit f454ec8d63)
This commit is contained in:
Peter Nelson
2023-05-17 14:54:14 +01:00
committed by Jonathan G Rennison
parent dd94b087c4
commit b505805bfe
2 changed files with 13 additions and 1 deletions

View File

@@ -54,7 +54,6 @@ int FontCache::GetDefaultFontHeight(FontSize fs)
return _default_font_height[fs];
}
/* static */ FontCache *FontCache::caches[FS_END] = { new SpriteFontCache(FS_NORMAL), new SpriteFontCache(FS_SMALL), new SpriteFontCache(FS_LARGE), new SpriteFontCache(FS_MONO) };
int font_height_cache[FS_END];
void UpdateFontHeightCache()
@@ -64,6 +63,15 @@ void UpdateFontHeightCache()
}
}
/* static */ FontCache *FontCache::caches[FS_END];
/* static */ void FontCache::InitializeFontCaches()
{
for (FontSize fs = FS_BEGIN; fs != FS_END; fs++) {
if (FontCache::caches[fs] == nullptr) new SpriteFontCache(fs); /* FontCache inserts itself into to the cache. */
}
}
/* Check if a glyph should be rendered with anti-aliasing. */
bool GetFontAAState(FontSize size, bool check_blitter)
{
@@ -131,6 +139,8 @@ extern void LoadCoreTextFont(FontSize fs);
*/
void InitFontCache(bool monospace)
{
FontCache::InitializeFontCaches();
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
if (monospace != (fs == FS_MONO)) continue;