Changeset - r27382:d2aa3dbe2d4a
[Not reviewed]
master
0 2 0
Peter Nelson - 13 months ago 2023-05-17 13:54:14
peter1138@openttd.org
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.
2 files changed with 11 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/fontcache.cpp
Show inline comments
 
@@ -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;
 

	
src/fontcache.h
Show inline comments
 
@@ -33,6 +33,8 @@ public:
 
	FontCache(FontSize fs);
 
	virtual ~FontCache();
 

	
 
	static void InitializeFontCaches();
 

	
 
	static int GetDefaultFontHeight(FontSize fs);
 

	
 
	/**
0 comments (0 inline, 0 general)