Commit Graph

24 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 6a7c013e61 Make the hints a uniform instead of a buffer texture.
Saves a good bit of memory traffic during vertex shading.
2017-10-05 19:14:52 -07:00
Patrick Walton d4c7fa74bd Add a feature to save benchmark data as CSV 2017-10-05 11:46:53 -07:00
Patrick Walton 157292175b Use instanced rendering in the 3D demo.
This massively decreases the load time and memory usage in exchange for more draw calls.
2017-10-03 15:24:56 -07:00
Patrick Walton b631fec80f Cache font mesh libraries on the server 2017-10-02 19:58:38 -07:00
Patrick Walton 60ff71be84 Add an experimental implementation of macOS-like font dilation
Following Apple's earlier terminology, this is exposed as "strong"
subpixel AA.
2017-09-29 22:12:24 -07:00
Patrick Walton e8135fbfe0 TSLint the demo 2017-09-28 14:34:48 -07:00
Patrick Walton 1675944dfb Rewrite the text run and glyph store classes for simplicity 2017-09-28 09:48:05 -07:00
Patrick Walton b6c6c70ef0 Benchmark the server-side partitioning 2017-09-26 15:38:50 -07:00
Patrick Walton 6b0c215148 Get ECAA working in the benchmark 2017-09-26 13:32:22 -07:00
Patrick Walton 1c138cc543 Display benchmark results in a dialog box instead of on the console 2017-09-25 19:56:12 -07:00
Patrick Walton 2197896c4f Keep the camera and view in a sensible state when changing fonts in the text demo 2017-09-23 13:09:45 -07:00
Patrick Walton 0e9a59088c Implement bare-bones support for debugging SVG meshes 2017-09-19 20:19:53 -07:00
Patrick Walton a5b0e9bf9a Allow different glyphs to be selected in the mesh debugger 2017-09-19 17:36:12 -07:00
Patrick Walton 0087c1ed50 Add SSAA support to the benchmarking tool 2017-09-13 21:41:33 -07:00
Patrick Walton 299bcd685e Fix scaling of the benchmark 2017-09-13 21:03:10 -07:00
Patrick Walton 6642cc7aa4 Limit how far the user can zoom the camera out 2017-09-13 13:30:26 -07:00
Patrick Walton d64a28c166 Beautify the timings display and make it work with the SVG and 3D demos 2017-09-13 11:56:40 -07:00
Patrick Walton 65eecbf071 Don't allow the user to zoom in so far that we run out of space in the glyph atlas 2017-09-12 22:32:18 -07:00
Patrick Walton 6fec73b2f7 Make sure all glyphs stay in the viewport when running the benchmark 2017-09-12 16:07:04 -07:00
Patrick Walton 2c8c11b303 Get a bare-minimum benchmark up and running 2017-09-12 12:40:14 -07:00
Patrick Walton 3dd1d73f81 Start the camera centered on the text in the text demo 2017-09-11 16:07:11 -07:00
Patrick Walton 068e2bd99e Stub a benchmarking tool, not working yet 2017-09-11 11:22:19 -07:00