diff --git a/src/fontcache.cpp b/src/fontcache.cpp --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -279,10 +279,10 @@ void TrueTypeFontCache::SetGlyphPtr(Glyp /* Check if a glyph should be rendered with anti-aliasing. */ -static bool GetFontAAState(FontSize size) +static bool GetFontAAState(FontSize size, bool check_blitter = true) { /* AA is only supported for 32 bpp */ - if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false; + if (check_blitter && BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false; switch (size) { default: NOT_REACHED(); @@ -716,6 +716,19 @@ void UninitFreeType() #endif /* WITH_FREETYPE */ } +/** + * Should any of the active fonts be anti-aliased? + * @return True if any of the loaded fonts want anti-aliased drawing. + */ +bool HasAntialiasedFonts() +{ + for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) { + if (!FontCache::Get(fs)->IsBuiltInFont() && GetFontAAState(fs, false)) return true; + } + + return false; +} + #if !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) && !defined(WITH_COCOA) #ifdef WITH_FREETYPE diff --git a/src/fontcache.h b/src/fontcache.h --- a/src/fontcache.h +++ b/src/fontcache.h @@ -233,5 +233,6 @@ extern FreeTypeSettings _freetype; void InitFreeType(bool monospace); void UninitFreeType(); +bool HasAntialiasedFonts(); #endif /* FONTCACHE_H */ diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -268,6 +268,8 @@ static bool SwitchNewGRFBlitter() if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND || HasBit(c->flags, GCF_INIT_ONLY)) continue; if (c->palette & GRFP_BLT_32BPP) depth_wanted_by_grf = 32; } + /* We need a 32bpp blitter for font anti-alias. */ + if (HasAntialiasedFonts()) depth_wanted_by_grf = 32; /* Search the best blitter. */ static const struct { diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -433,6 +433,7 @@ struct GameOptionsWindow : Window { CheckForMissingGlyphs(); ClearAllCachedNames(); UpdateAllVirtCoords(); + CheckBlitter(); ReInitAllWindows(); break;