Commit Graph

15 Commits

Author SHA1 Message Date
Patrick Walton 314185684c Implement stem darkening and split ECAA into ECAA and MCAA.
We now implement stem darkening (also known as font dilation) like
macOS and FreeType under certain configurations. This pushes out font
outlines along their normals slightly in order to make small text easier
to read. This is especially important when performing gamma correction,
as otherwise text can end up too light.

Because the stem darkening is implemented in the vertex shader, it can
easily break the mesh. Therefore, I needed to implement a new rendering
mode that does not use the mesh. It's a variant of ECAA, and for
clarity's sake I've renamed the related antialiasing methods:

* MCAA stands for "mesh coverage antialiasing" and is the new name for
what was called "ECAA" prior to this patch.

* ECAA now stands for "edge coverage antialiasing". It does not use the
mesh but rather computes winding numbers from scratch for every pixel.
Surprisingly, despite being worse asymptotically, this usually ends up
being faster than MCAA at small font sizes, presumably because there are
fewer vertices to transform.

* XCAA, "exact coverage antialiasing" is a generic term that refers to
both ECAA and MCAA. References to ECAA have been changed to XCAA as
needed.
2017-10-15 13:28:49 -07:00
Patrick Walton 2a236319d4 Use regular VBOs instead of textures to store vertex positions for ECAA.
This improves performance at small font sizes a bit by reducing vertex
shading load.
2017-10-06 16:42:51 -07:00
Patrick Walton 7bbd02ed85 Send mesh libraries to the client in raw binary instead of Base64 and JSON 2017-10-02 16:31:54 -07:00
Patrick Walton f3f893302a Introduce a simple file format for serializing meshes, and use it in the demo 2017-10-02 15:17:21 -07:00
Patrick Walton 08b9afdca9 Implement subpixel glyph positioning in the text demo 2017-09-29 11:58:16 -07:00
Patrick Walton e8135fbfe0 TSLint the demo 2017-09-28 14:34:48 -07:00
Patrick Walton 6217577674 Stop generating so much garbage during mesh expansion.
Avoids a slow script dialog in the 3D demo.
2017-09-28 10:47:16 -07:00
Patrick Walton 17b34685a1 Factor mesh expansion out of the glyph store 2017-09-26 18:55:47 -07:00
Patrick Walton 914179763d Improve the mesh debugger in various ways 2017-09-19 22:27:31 -07:00
Patrick Walton 0e9a59088c Implement bare-bones support for debugging SVG meshes 2017-09-19 20:19:53 -07:00
Patrick Walton acf2e0be00 Implement mesh expansion so that the 3D demo can actually render strings of text 2017-09-06 14:11:58 -07:00
Patrick Walton 632202e5eb Implement a basic mesh debugger 2017-09-01 22:29:05 -07:00
Patrick Walton 8e2172f06f Start implementing basic SVG rendering. Not working yet. 2017-08-28 22:11:15 -07:00
Patrick Walton 4d16df17db Implement the server-side support for SVG path partitioning in the demo 2017-08-28 16:47:27 -07:00
Patrick Walton 72f5f4ee6d Factor antialiasing strategies out into separate modules 2017-08-26 13:47:18 -07:00