Patrick Walton
0b179f3a40
Add preliminary DirectWrite support on Windows.
...
This will eventually need to call into GDI to do hinting, but it's good
enough for now.
2017-10-25 13:01:36 -07:00
Patrick Walton
0a4fcb4841
Add a cubic curve command stream.
...
This is a prerequisite for handling CFF fonts.
2017-10-23 20:05:36 -07:00
Patrick Walton
9c470e77c1
Make macOS font rendering not depend on FreeType
2017-10-20 12:10:57 -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
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
8de1970682
Implement stroking ourselves, and rename `PathSegment` to `PathCommand`.
...
This makes Pathfinder no longer use the FreeType stroker.
2017-10-04 18:57:30 -07:00
Patrick Walton
b631fec80f
Cache font mesh libraries on the server
2017-10-02 19:58:38 -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
0bbcf8f1a0
Stop sending path index ranges to the demo client.
...
They're unused.
2017-10-02 15:50:34 -07:00
Patrick Walton
fed528025d
Stop sending glyph metadata to the demo client.
...
It's unused.
2017-10-02 15:45:56 -07:00
Patrick Walton
092b46e056
Reenable early Z optimizations
2017-10-02 15:36:39 -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
475f5dca71
Introduce a new mesh library abstraction for holding meshes.
...
Simplifies the server code and allows avoiding copying indices all the time.
Closes #29 .
2017-10-02 14:03:56 -07:00
Patrick Walton
e78d7ed575
Recursively approximate cubic Béziers with quadratics to an error bound.
...
Gets the tiger rendering properly, as far as I can tell.
2017-09-29 16:30:17 -07:00
Patrick Walton
37a88dfcd9
Use the Inter UI font in the demo
2017-09-28 15:23:52 -07:00
Patrick Walton
b6c6c70ef0
Benchmark the server-side partitioning
2017-09-26 15:38:50 -07:00
Patrick Walton
8c518deebe
Do a better job of approximating cubic Bézier curves with quadratics
...
This still isn't great, but it's a lot better than the old approximation, which was just bogus.
2017-09-22 17:15:19 -07:00
Patrick Walton
88f1d3f108
Fix de Casteljau subdivision when a curve has two inflection points
2017-09-22 13:40:41 -07:00
Patrick Walton
b48b256ab3
Actually reverse indices for early Z!
...
2x performance improvement. I feel silly.
2017-09-14 17:20:54 -07:00
Patrick Walton
a7d75f913c
Split paths into monotonic segments before partitioning them in the demo
2017-09-12 09:35:57 -07:00
Patrick Walton
068e2bd99e
Stub a benchmarking tool, not working yet
2017-09-11 11:22:19 -07:00
Patrick Walton
c36896e337
Implement path stroking using the FreeType stroker.
...
I'm not too happy with this, as I discovered a segfault in FreeType that doesn't give me confidence
in this as a solution for the long term. Additionally, this exposes the problems in the partitioner
with lack of winding fill rule, proper handling of self-intersections, and splitting of paths at
their extrema. (I believe these problems should be fairly straightforward to handle, but we just
don't handle them yet.)
2017-09-08 16:50:27 -07:00
Patrick Walton
3e5b53f13c
Partially refactor the path APIs to be streaming, like Lyon
2017-09-08 13:09:00 -07:00
Patrick Walton
6cbc7dc082
Use some names from the Mozilla Monument in the 3D demo
2017-09-06 22:50:07 -07:00
Patrick Walton
2166f9fa07
Reverse Z order of interior elements for early Z
2017-09-06 18:28:23 -07:00
Patrick Walton
444e7bbf96
Use the Citardauq Formula in the partitioner as well as the shader to avoid precision problems.
...
Addresses the issue with the Nimbus Sans "o" mentioned in #24 .
2017-09-01 23:45:51 -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
a1013de5ba
Expose the Rust API documentation via the server
2017-08-31 19:47:58 -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
d7b606987a
Update to Bootstrap 4 beta
2017-08-30 09:51:15 -07:00
Patrick Walton
7029248610
Stub a 3D demo
2017-08-29 19:46:18 -07:00
Patrick Walton
8d6636b1cf
Add `-demo` to the SVG and text demo files
2017-08-29 18:57:43 -07:00
Patrick Walton
40c0e9b8c5
Use ES6 templates to reduce duplication in the demo HTML
2017-08-29 16:04:40 -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
e5f1f3ccfb
Remove unused dependency
2017-08-27 12:45:05 -07:00
Patrick Walton
01d1382324
Begin splitting up `index.ts`
2017-08-25 20:20:45 -07:00
Patrick Walton
894226e023
Stub an SVG demo page
2017-08-25 19:40:08 -07:00
Patrick Walton
93277c7c11
Allow multiple glyphs to be rendered simultaneously
2017-08-19 16:34:02 -07:00
Patrick Walton
ec78a632dc
Split path IDs and Loop-Blinn data into separate VBOs
2017-08-17 12:47:50 -07:00
Patrick Walton
4b62ec8fa7
Get edge detection working in the demo
2017-08-16 16:37:39 -07:00
Patrick Walton
f8bd405759
Get basic polygons rendering in the demo
2017-08-14 16:08:45 -07:00
Patrick Walton
ee9c1a7998
Download shaders via XHR
2017-08-11 21:26:25 -07:00
Patrick Walton
57ebbf8281
Split out B-vertex positions and info so that they're easier to pack into textures
2017-08-11 15:56:07 -07:00
Patrick Walton
fa1b2390c7
Remove bad `extern crate` directive
2017-08-10 21:02:32 -07:00
Patrick Walton
933e4023ed
Send mesh indices along to the client as well
2017-08-10 21:00:37 -07:00
Patrick Walton
5b84b052a0
Upload the chosen font to the server
2017-08-10 18:38:54 -07:00
Patrick Walton
0ad2f9abfe
Initial implementation of the Rocket-based demo server
2017-08-10 15:26:27 -07:00
Patrick Walton
2ddf95bd70
Initial work on the font renderer component
2017-08-09 15:36:41 -07:00