4 ms·
Correct me if I’m wrong, but aren’t fonts rendered from vector graphics already? TTF and OTF are vector formats, correct?
by Zamiel_Snawley 3y ago
Correct me if I’m wrong, but aren’t fonts rendered from vector graphics already? TTF and OTF are vector formats, correct?
- Aurornis 3y agoFonts begin as vector graphics, but every single character on your screen isn't rendered as a tiny, individual vector graphic. Text rendering libraries use a lot of optimizations to cache rasterized glyphs because they're reused all over your screen. It also gets extraordinarily complex when you have to handle text layout, kerning, languages that read in different directions, styles, and all of the other complications that come with font rendering. TrueType fonts even support a small virtual machine to process tiny code programs related to font rendering. It's an incredibly deep topic.
- Zamiel_Snawley 3y agoThank you for your insight!
- CryZe 3y ago> small virtual machine to process tiny code programs Or even WebAssembly (though more of an experiment than anything): https://github.com/harfbuzz/harfbuzz/blob/main/docs/wasm-shaper.md https://github.com/harfbuzz/harfbuzz/blob/main/docs/wasm-sha...
- a1o 3y agoThis, but see also Text Rendering Hates You https://faultlore.com/blah/text-hates-you/ https://faultlore.com/blah/text-hates-you/
- Const-me 3y agoThese glyphs are indeed defined in terms of vector paths (quadratic or cubic Bezier splines depending on the font format), but it’s rarely a good idea to directly render these shapes to display text. Performance optimizations mentioned in the other comments is not the sole reason. Another one is visual quality. Direct rendering of these vector glyphs would look good on high DPI displays and/or for very large font sizes. For normal-looking text on typical displays you won’t achieve great results without hinting: https://en.wikipedia.org/wiki/Font_hinting https://en.wikipedia.org/wiki/Font_hinting Another quality related problem is subpixel rendering https://en.wikipedia.org/wiki/Subpixel_rendering https://en.wikipedia.org/wiki/Subpixel_rendering Just like hinting, hard to solve while directly rendering vector shapes.