Commit Graph

55 Commits

Author SHA1 Message Date
Patrick Walton 70201bb29c Draw distant glyphs as prerendered images in the 3D demo.
This has known performance problems, but it's a good first cut.
2017-10-18 16:19:19 -07:00
Patrick Walton 024b00e479 Decouple text renderers from the text demo's layout 2017-10-17 13:37:36 -07:00
Patrick Walton 32de1d3441 Decouple text renderers from HTML canvas elements.
This allows for offscreen rendering of text.
2017-10-17 12:10:20 -07:00
Patrick Walton 9278a4e0e3 Move the text rendering and atlas code out of the text demo so that it
can be reused elsewhere
2017-10-17 11:54:13 -07:00
Patrick Walton 03ee672787 Separate the GPU rendering component of views from the view objects
themselves in the demo.

This (mostly) enables rendering outside a view.
2017-10-16 22:26:25 -07:00
Patrick Walton 81787f4750 Remove `MonochromeDemoView` 2017-10-16 16:11:00 -07:00
Patrick Walton cc16158a91 Decouple antialiasing strategies from views in the demo 2017-10-16 13:36:22 -07:00
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 1846ebd861 Use sRGB color textures where available 2017-10-06 19:18:34 -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 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 99f6f2a104 Snap stems up to the nearest pixel when hinting 2017-09-29 18:02:33 -07:00
Patrick Walton 190c9fb35f Tweak the maximum and minimum zoom parameters for the text demo 2017-09-29 17:00:34 -07:00
Patrick Walton 08b9afdca9 Implement subpixel glyph positioning in the text demo 2017-09-29 11:58:16 -07:00
Patrick Walton 7e4308d52e Key glyphs in the atlas off "glyph keys" rather than raw glyph IDs 2017-09-28 16:02:08 -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 17b34685a1 Factor mesh expansion out of the glyph store 2017-09-26 18:55:47 -07:00
Patrick Walton b6c6c70ef0 Benchmark the server-side partitioning 2017-09-26 15:38:50 -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 83cfb1d9d5 Make glyphs transparent.
Avoids cutting off the bottom of the "g" in the text demo.
2017-09-19 13:57:56 -07:00
Patrick Walton 22d2a6590b Blend when compositing in the text demo 2017-09-19 11:42:37 -07:00
Patrick Walton 0087c1ed50 Add SSAA support to the benchmarking tool 2017-09-13 21:41:33 -07:00
Patrick Walton a21afa9bb7 Fix the interaction between the camera and SSAA in the SVG demo 2017-09-13 20:41:04 -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 f68da75c75 Implement SSAA for the 3D demo.
This commit additionally refactors transforms to be resolution-independent as much as possible throughout all the demos.
2017-09-12 19:43:43 -07:00
Patrick Walton 2c8c11b303 Get a bare-minimum benchmark up and running 2017-09-12 12:40:14 -07:00
Patrick Walton 94c5ea181f Initially zoom the text to fit in the text demo 2017-09-11 16:57:53 -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 65e3278e94 Add zoom in and zoom out buttons for those without scale gestures 2017-09-10 13:17:24 -07:00
Patrick Walton eb9c0ceb4d Implement "slight" hinting by rounding x-heights up to the nearest pixel 2017-09-09 13:12:51 -07:00
Patrick Walton 43513da957 Add a simple model of the Mozilla Monument to the 3D scene 2017-09-09 00:04:35 -07:00
Patrick Walton 57374e9f30 Add all four sides of the Mozilla Monument to the 3D demo 2017-09-07 19:01:55 -07:00
Patrick Walton e34ca3d3e4 Stub support for multiple text frames 2017-09-07 16:13:55 -07:00
Patrick Walton 7de664e4a9 Implement some rudimentary text layout for the 3D demo 2017-09-06 22:11:32 -07:00
Patrick Walton 82d2f076d7 Add basic subpixel AA support for SSAA.
No LCD filter is implemented yet, so the color fringing is currently fairly extreme.
2017-09-06 16:32:11 -07:00
Patrick Walton 4b7ac0182c Implement basic working 3D support 2017-09-05 19:47:19 -07:00
Patrick Walton 4ab917b79b Snap baselines to the nearest pixel 2017-09-03 16:35:10 -07:00
Patrick Walton 24cfb03c66 Don't count the padding between glyphs as part of the atlas rect.
This was causing nasty aliasing artefacts.
2017-09-03 13:12:33 -07:00
Patrick Walton f968a4ac20 Don't do server-side hinting 2017-09-03 13:03:45 -07:00
Patrick Walton 7360a41a60 Factor camera logic into a separate object in preparation for the 3D demo 2017-09-02 12:14:10 -07:00
Patrick Walton 632202e5eb Implement a basic mesh debugger 2017-09-01 22:29:05 -07:00
Patrick Walton 1eb1bb5343 Stub a mesh debugger app 2017-09-01 18:11:44 -07:00
Patrick Walton a43a09b9d3 Allow the demo text to be changed by double-clicking 2017-09-01 16:31:40 -07:00
Patrick Walton f182686ba8 Do some more refactoring in preparation for the 3D view 2017-08-31 17:08:22 -07:00
Patrick Walton b75c327017 Factor out text layout into a separate class so it can be used by the text and 3D demos 2017-08-31 16:33:21 -07:00
Patrick Walton e448ba7b30 Switch from ES6 interpolation to Handlebars and add a simple landing page 2017-08-30 23:25:58 -07:00
Patrick Walton d6767219ff Automatically load some built-in fonts and SVGs 2017-08-30 19:48:18 -07:00
Patrick Walton 58b558de64 Make the demo UI less cluttered 2017-08-30 17:01:28 -07:00
Patrick Walton 8d6636b1cf Add `-demo` to the SVG and text demo files 2017-08-29 18:57:43 -07:00
Renamed from demo/client/src/text.ts (Browse further)