diff --git a/README.md b/README.md index 8109053..de86f03 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Drop-in replacement for Allegro_TTF that contains libschrift, instead of using F It is 100% API compatible with the vanilla TrueType addon. Compile Allegro with these files inside of `/addons/ttf`. +![Comparison between FreeType2 and schrift when running Allegro's ex_ttf demo](comparison.png) + Pros: - It doesn't require NT 6 kernel calls - It doesn't dynamically link against hundreds of thousands of lines of ugly corporate-backed C code you can't read @@ -14,4 +16,6 @@ Caveats: - The entire caching system is gone, fonts are baked to textures immediately and no further. This makes supporting some languages with this add-on inconvenient, or impossible. If your usecase doesn't need every fancy rendering feature and can use schrift, you probably aren't supporting enough characters and languages to need on-the-fly caching, so we consider this an acceptable tradeoff. - The `cache_text` setting in allegro5.cfg is now reused to determine what glyphs can be rendered at all. `skip_cache_misses` has no effect. - When `cache_text` is undefined, the English and Romance alphabets will be generated by default. \ No newline at end of file + When `cache_text` is undefined, the [Latin](https://en.wikipedia.org/wiki/ASCII), [Germanic, and Romance](https://en.wikipedia.org/wiki/Latin_Extended-A) alphabets will be generated by default. (not necessarily 32 - 255) + - **TODO** Alternatively, the developer can force a custom range of unicode characters to be generated using a new parameter in the `al_load_ttf_font` function. +- Kerning, per-character advance and offsets, and other features which are exposed by libschrift are not currently implemented, but doing so is possible. See the above comparison screenshot. \ No newline at end of file diff --git a/allegro5/internal/aintern_ttf_cfg.h.cmake b/allegro5/internal/aintern_ttf_cfg.h.cmake deleted file mode 100644 index 48072f2..0000000 --- a/allegro5/internal/aintern_ttf_cfg.h.cmake +++ /dev/null @@ -1 +0,0 @@ -#cmakedefine ALLEGRO_CFG_TTF_FREETYPE diff --git a/allegro_schrift.c b/allegro_schrift.c index d0179df..f3c2e00 100644 --- a/allegro_schrift.c +++ b/allegro_schrift.c @@ -24,6 +24,9 @@ ALLEGRO_DEBUG_CHANNEL("font") #define delimit_blue (unsigned)255 #define delimit_alpha (unsigned)255 #define delimit_color al_map_rgba(delimit_red, delimit_green, delimit_blue, delimit_alpha) +#define wmax (int32_t)2048 // fixed atlas width - 1024 or 2048 are ideal depending on font size +// height is automatically adjusted in powers of two +// todo we should expand this less when the card supports npot textures /* globals */ static bool ttf_inited; @@ -66,7 +69,8 @@ ALLEGRO_FONT *al_load_ttf_font_f(ALLEGRO_FILE *file, al_get_config_value(system_cfg, "ttf", "cache_text"); if (!cache_text_str) { ALLEGRO_ERROR("No characters defined in cache_text! Using defaults\n"); - cache_text_str = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?/()@#$%^&*-_=+<>~`\u007F"; + // todo probably should just store a list of ranges instead, maybe even ditch the config var entirely + cache_text_str = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?/()@#$%^&*-_=+<>~`\u007FĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ"; } // read font file @@ -89,7 +93,6 @@ ALLEGRO_FONT *al_load_ttf_font_f(ALLEGRO_FILE *file, } // convert glyphs into textures - #define wmax (int32_t)1024 int32_t woff = 1, hoff = 1, hmax = 128; // signed to calculate difference at texture edges gtex = al_create_bitmap(wmax, hmax); al_set_target_bitmap(gtex); diff --git a/comparison.png b/comparison.png new file mode 100644 index 0000000..1ed659a Binary files /dev/null and b/comparison.png differ