update wmax, update README.md

This commit is contained in:
2026-09-22 18:43:20 -05:00
parent 02eb8fc160
commit 07395f7777
4 changed files with 10 additions and 4 deletions

View File

@@ -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.
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.

View File

@@ -1 +0,0 @@
#cmakedefine ALLEGRO_CFG_TTF_FREETYPE

View File

@@ -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);

BIN
comparison.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB