- There has been a large overhaul of the public API.
Most notably the function
sft_char
has been replaced by a set of more fine-grained functions, namelysft_lookup
,sft_gmetrics
, andsft_render
. Explanations of these new functions' semantics can be found in the man page. - struct types are now typedef'd, so you can now drop the
struct
keyword before libschrift's compound types. - The demo program received a complete rewrite courtesy of Andor Badi.
For any user of the library, nothing should have changed at all since v0.9.0, except that performance should be noticeably improved.
- Cleaned up the internals. For example, the struct buffer row pointer array is now gone. Instead, we just use a flat cell array.
- More suitable tesselation heuristic. The old one was based on the distance of the middle control point to the halfway point between the two other control points. The new one is instead based on the area of the triangles that the three points generate.
- A lot of minor performance improvements building up to a relatively significant speedup. Mostly achieved by reducing branch mispredictions and reordering or removing pipeline hazards in the raycaster and the post-processor.
- Improved/fixed glyph positioning calculations.
- Perform less internal heap allocations when rendering small glyphs.
- Hardening against integer overflow bugs.
- Explained the details of
sftdemo
. - Replaced the ill-suited aa-tree in
sftdemo
with a simple bitfield.
- Slightly changed the missing glyph interface (check the man page for details).
- Makefile config for building on OpenBSD.
- Less reliance on undefined behaviour.
- Ported the core libary & stress app to Microsoft Windows / MSVC.
- (Hopefully) correct left side bearing calculations.
- Wrapped the header in extern "C" so the library can be used from C++.
- Pushed quantization to a later phase. Should get rid of any quantization errors (i.e. not quite black backgrounds).
- Overall performance optimizations.
- Fixed a left side bearing issue.
- Fixed a situation where the
assert
indecode_contours
could be triggered. - Fields in
SFT_Char
that are not set bysft_char
will now always be initialized with zeros. - Documented
sft_linemetrics
andsft_kerning
in the man page. - All outlines are now decoded before tesselation and rasterization are done in a single pass each.
- Optimized
clip_points
- Changed the internal outline data-structure to be index-based, which also allowed untangling the
critical path into a series of small data transformations. This has a huge amount of benefits:
- The internal architecture is now much nicer
- Much better debuggability all-round
- Many new optimization possibilities have opened up
- Less memory consumption than before
- A pleasant 15% speed-boost for
sft_char
!
This is the first version to have a changelog.