- Added the possibility to specify asymmetrical distance range (
-arange
,-apxrange
) - Added the ability to export the shape into an SVG file (
-exportsvg
) - Edge coloring no longer colors smooth contours white, which has been found suboptimal
- Fixed incorrect scaling of font glyph coordinates. To preserve backwards compatibility, the user has to enable the fix with an explicit additional argument:
-emnormalize
in standalone,FONT_SCALING_EM_NORMALIZED
in API for coordinates in ems-noemnormalize
in standalone,FONT_SCALING_NONE
in API for raw integer coordinates- The default (backwards-compatible) behavior will change in a future version; a warning will be displayed if neither option is set
- Added two new developer-friendly export image formats: RGBA and FL32
-size
parameter renamed to-dimensions
for clarity (old one will be kept for compatibility)generate*SDF
functions now combine projection and range into a single argument (SDFTransformation
)- Conversion of floating point color values to 8-bit integers adjusted to match graphics hardware
- Improved edge deconvergence procedure and made sure that calling
Shape::normalize
a second time has no effect - Fixed certain edge cases where Skia geometry preprocessing wouldn't make the geometry fully compliant
- The term "perpendicular distance" now used instead of "pseudo-distance" (PSDF instead of PseudoSDF in API)
- Fixed a bug in
savePng
wherefclose
could be called on null pointer - Minor code improvements
- Reworked SVG parser, which now supports multiple paths and other shapes - requires Skia
- Major performance improvements due to inlining certain low-level classes
- A limited version of the standalone executable can now be built without any dependencies
- Fixed
listFontVariationAxes
which previously reported incorrectly scaled values - Fixed potential crash when generating SDF from an empty
Shape
- Fixed a small bug in the error correction routine
- Errors now reported to
stderr
rather thanstdout
- All command line arguments can now also be passed with two dashes instead of one
- Added
-version
argument to print the program's version Shape
can now be loaded from a pointer to FreeType'sFT_Outline
- Added hidden CMake options to selectively disable PNG, SVG, or variable font support
- Added CMake presets
- Other minor bug fixes
- Switched to vcpkg as the primary dependency management system
- Switched to libpng as the primary PNG file encoder
- Parameters of variable fonts can be specified
- Fixed a bug that prevented glyph 0 to be specified in a glyphset
- Improved detection of numerical errors in cubic equation solver
- Added -windingpreprocess option
- Fixed edge coloring not restored if lost during preprocessing
- Fixed an edge case bug in the new MSDF error correction algorithm
- Error correction of multi-channel distance fields has been completely reworked
- Added new edge coloring strategy that optimizes colors based on distances between edges
- Added some minor functions for the library API
- Minor code refactor and optimizations
- Integrated the Skia library into the project, which is used to preprocess the shape geometry and eliminate any self-intersections and other irregularities previously unsupported by the software
- The scanline pass and overlapping contour mode is made obsolete by this step and has been disabled by default. The preprocess step can be disabled by the new
-nopreprocess
switch and the former enabled by-scanline
and-overlap
respectively. - The project can be built without the Skia library, forgoing the geometry preprocessing feature. This is controlled by the macro definition
MSDFGEN_USE_SKIA
- The scanline pass and overlapping contour mode is made obsolete by this step and has been disabled by default. The preprocess step can be disabled by the new
- Significantly improved performance of the core algorithm by reusing results from previously computed pixels
- Introduced an additional error correction routine which eliminates MSDF artifacts by analytically predicting results of bilinear interpolation
- Added the possibility to load font glyphs by their index rather than a Unicode value (use the prefix
g
before the character code in-font
argument) - Added
-distanceshift
argument that can be used to adjust the center of the distance range in the output distance field - Fixed several errors in the evaluation of curve distances
- Fixed an issue with paths containing convergent corners (those whose inner angle is zero)
- The algorithm for pseudo-distance computation slightly changed, fixing certain rare edge cases and improving consistency
- Added the ability to supply own
FT_Face
handle to the msdfgen library - Minor refactor of the core algorithm
- Fixed an edge case bug in scanline rasterization
- Added
mtsdf
mode - a combination ofmsdf
withsdf
in the alpha channel - Distance fields can now be stored as uncompressed TIFF image files with floating point precision
- Bitmap class refactor - template argument split into data type and number of channels, bitmap reference classes introduced
- Added a secondary "ink trap" edge coloring heuristic, can be selected using
-coloringstrategy inktrap
- Added computation of estimated rendering error for a given SDF
- Added computation of bounding box that includes sharp mitered corners
- The API for bounds computation of the
Shape
class changed for clarity - Fixed several edge case bugs
- Core algorithm rewritten to split up advanced edge selection logic into modular template arguments.
- Pseudo-distance evaluation reworked to eliminate discontinuities at the midpoint between edges.
- MSDF error correction reworked to also fix distances away from edges and consider diagonal pairs. Code simplified.
- Added scanline rasterization support for
Shape
. - Added a scanline pass in the standalone version, which corrects the signs in the distance field according to the selected fill rule (
-fillrule
). Can be disabled using-noscanline
. - Fixed autoframe scaling, which previously caused the output to have unnecessary empty border.
-guessorder
switch no longer enabled by default, as the functionality is now provided by the scanline pass.- Updated FreeType and other libraries, changed to static linkage
- Added 64-bit and static library builds to the Visual Studio solution
- Fixed rounding error in cubic curve splitting.
- SVG parser fixes and support for additional path commands.
- Added CMake build script.
- Reworked contour combining logic to support overlapping contours. Original algorithm preserved in functions with
_legacy
suffix, which are invoked by the new-legacy
switch. - Fixed a severe bug in cubic curve distance computation, where a control point lies at the endpoint.
- Standalone version now automatically detects if the input has the wrong orientation and adjusts the distance field accordingly. Can be disabled by
-keeporder
or-reverseorder
switch. - SVG parser fixes and improvements.
- Fixed
-reverseorder
switch. - Fixed glyph loading to use the proper method of acquiring outlines from FreeType.
- Added option to specify that shape vertices are listed in reverse order (
-reverseorder
). - Added option to set a seed for the edge coloring heuristic (-seed <n>), which can be used to adjust the output.
- Fixed parsing of glyph contours that start with a curve control point.
- Switched to MIT license due to popular demand.
- Fixed SDF rendering anti-aliasing when the output is smaller than the distance field.
- Project published.