/* Sorry, but you are talking nonsense. FreeType was developed especially to run on embedded systems! In particular, the rasterizers (both the B/W and the A/A one) do work with systems that have just a very small amount of memory. */ So, you're saying the FreeType guys implemented algorithms that trade time for memory. Still not an excuse for how directly finding the area is overcomplicated. Imagine how many calculations would be required to find out what area a given curve has, let alone many curves. /* Well, yes. IIRC, however, rendering B/W at a much larger resolution followed by applying a filter is *slower* than FreeType's approach of directly computing the pixel coverage. */ I wasn't suggesting 256×256 oversampling rates. I was suggesting a 4×4 oversampling. It consists of finding boolean values of whether each of the 16 points are inside the outline (borders also count as in) and then taking the average. It's not what you're making out to be, like applying a filter is some monstrosity when it's really taking the average of sixteen values that are either 0 or 1. How two-dimensional area calculation can be as fast as the average of sixteen single point checks is beyond me. Please, implement the 4×4 oversampling for the peace-of-mind. The way FreeType works really makes me keep using Microsoft Windows with its GDI renderer that I find the best for general-purpose. /* There is no drop-out control in A/A mode, since it's kind-of useless. */ In the theoretical box filter (which should remain theoretical) the drop-out control is a degenerate case, but in 4×4 oversampling, it would do the exact same thing as it does with the bilevel renderer (which is a single point check in the middle of the pixel). /* FreeType doesn't support the (crippled) mode of having A/A only along one axis. */ As classic GDI rendering does not use this, it shouldn't be there by default, however in the ClearType mode (and FreeType appears to have a mode that simulates this) it's an essential part of the renderer. Not as a standalone mode, but only when the fonts specifically disable vertical anti-aliasing. The two modes in the classic GDI renderer: Bilevel renderer - it is 1×1 oversampling Grayscale renderer — 4×4 oversampling The two modes in the ClearType GDI renderer: ClearType with anti-aliasing — 6×5 oversampling, horizontal instructions round to 1÷16, horizontal deltas and vertical post-IUP deltas ignored ClearType with disabled vertical anti-aliasing — 6×1 oversampling, horizontal instructions round to 1÷16, horizontal deltas and vertical post-IUP deltas ignored However, there is also a setting in ClearType that the font may enable, it is called the native ClearType mode and it no longer ignores deltas (the horizontal rounding remains 1÷16). Warning for font creation, for general-purpose hinting making deltas in bilevel and grayscale rendering (obvious main targets as they utilize full hinting) would interfere with ClearType. /* Sigh. Werner */ The 4×4 oversampling renderer is peace-of-mind and the FreeType guys should really add it. /* Thanks, but it is not clear to me what this has to do with FreeType. Ditto for 'Unicode parsing' and the like. What you describe has to be handled (at least) one level higher. For example, FreeType doesn't have any concept of a 'line'. Instead you specify a glyph index for a given font, and the library renders the glyph into a buffer, nothing else. */ This low level handling is also really worrying. Text rendering must probably be collectively handled by many projects. If you don't even give FreeType access to the gasp table (which is pretty much a part of hinting, as it affects rendering and the ttfautohint hinting and dehinting both overwrite it) it means text renderers using FreeType but completely different projects than it then have to themselves know the TrueType format to get to know what render mode to use, which is a real mess. You have to ask a LOT of guys, to then be able to get desired (lack of) features such as scanline rule (lines of text are determined by rounded values of WinAscent and WinDescent and may not overlap) and naive text parsing (the tab character moves to next multiple of 8 of a certain width, the glyph widths are integer, only U+000D U+000A is a newline, all other characters and character combinations are their respective raw glyph). It's really messy, and it will take a while before this behaves in a stable manner. Because of such a community behind Unix text rendering I will probably stay on Microsoft Windows for a really long time to come.