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.
This commit is contained in:
Peter Nelson 2023-05-17 14:54:14 +01:00 committed by PeterN
parent 418888ac23
commit f454ec8d63
2 changed files with 11 additions and 2 deletions

View File

@ -65,9 +65,14 @@ int GetCharacterHeight(FontSize size)
}
/* static */ FontCache *FontCache::caches[FS_END] = { new SpriteFontCache(FS_NORMAL), new SpriteFontCache(FS_SMALL), new SpriteFontCache(FS_LARGE), new SpriteFontCache(FS_MONO) };
/* 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)
@ -136,6 +141,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;

View File

@ -33,6 +33,8 @@ public:
FontCache(FontSize fs);
virtual ~FontCache();
static void InitializeFontCaches();
static int GetDefaultFontHeight(FontSize fs);
/**