Patrick Walton
2717ac12cc
Merge pull request #44 from mbebenita/zoom
...
Cursor fixes.
2017-10-30 15:31:27 -07:00
Patrick Walton
2604151521
Replace the multicolor (SVG) XCAA with a multipass compositing algorithm
2017-10-30 15:28:35 -07:00
Michael Bebenita
55f964001b
Toggle layers in mesh debugger.
...
Also, stroke and fill vertices after drawing lines.
2017-10-29 16:25:50 -07:00
Michael Bebenita
45755816c8
Draw segment hull.
2017-10-29 15:13:55 -07:00
Michael Bebenita
a7056460d0
Fix cursor icon in Chrome.
2017-10-29 14:46:33 -07:00
Michael Bebenita
6fbfa60f68
Fix grabbing cursor on mesh debugger.
2017-10-29 14:46:21 -07:00
Patrick Walton
b87d4126b0
Merge pull request #42 from Bobo1239/master
...
Make tests compile again (but not pass)
2017-10-27 23:26:27 -07:00
Boris-Chengbiao Zhou
90144e6755
Make tests compile again (but not pass)
2017-10-28 04:16:54 +02:00
Patrick Walton
bf3779bf89
Calculate normals for B-vertices.
...
I'm planning to use this for fixing hairlines in XCAA.
2017-10-27 15:12:33 -07:00
Patrick Walton
e4b531f3a0
Do some work on shader documentation
2017-10-26 20:30:47 -07:00
Patrick Walton
0506365cc7
Fix blending in the text demo.
...
As a nice added cleanup, this commit standardizes on the red channel for
all monochrome textures.
2017-10-26 20:15:51 -07:00
Patrick Walton
77fa297380
Change the animated zoom icon to a play icon
2017-10-26 18:15:28 -07:00
Patrick Walton
591e6b780c
Merge pull request #40 from mbebenita/pulse
...
Zoom Pulse Mode
2017-10-26 17:57:33 -07:00
Patrick Walton
775ee2b526
Add basic native rasterization for Core Graphics and match the WebRender
...
`FontContext` API more
2017-10-26 17:55:17 -07:00
Michael Bebenita
70390915ab
Add Pulse Zoom button.
2017-10-26 11:32:30 -07:00
Patrick Walton
f8c950d39a
Stop calling `getParameter` and `getBufferParameter`.
...
They're incredibly slow in Chrome.
2017-10-25 19:38:41 -07:00
Patrick Walton
77f135a4ba
Fix memory safety problem resulting in missing glyphs on macOS
2017-10-25 17:02:57 -07:00
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
1c693d5029
Approximate cubic curves with quadratics in the Core Graphics backend
2017-10-23 20:28:45 -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
2b5dea3263
Merge pull request #37 from Bobo1239/master
...
Fix compilation on non-macos
2017-10-21 09:13:02 -07:00
Boris-Chengbiao Zhou
ebfe5d0dbd
Fix compilation on non-macos
2017-10-21 15:07:51 +02:00
Patrick Walton
9d93cebca6
Stop using multiple render targets.
...
We don't need them anymore, so let's lower our hardware requirements!
2017-10-20 22:04:53 -07:00
Patrick Walton
048c261f6c
Add a working experimental implementation of XCAA for SVG.
...
This has known performance problems and artefacts due to working at
sample level only, but it's a decent first cut.
2017-10-20 19:41:18 -07:00
Patrick Walton
9c470e77c1
Make macOS font rendering not depend on FreeType
2017-10-20 12:10:57 -07:00
Patrick Walton
a523d71e3c
Stop leaking buffer textures
2017-10-18 19:47:44 -07:00
Patrick Walton
03b4ec2cc6
Stop leaking VAOs
2017-10-18 19:16:56 -07:00
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
d66bff9768
Remove useless null check
2017-10-17 12:11:49 -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
562851fd6e
Lint against long lines
2017-10-17 11:58:03 -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
976b924842
Decouple mesh-specific data from GL-context-wide data in the demo
2017-10-16 16:48:02 -07:00
Patrick Walton
81787f4750
Remove `MonochromeDemoView`
2017-10-16 16:11:00 -07:00
Patrick Walton
7a0ade99e2
Support subpixel AA in the benchmark
2017-10-16 16:08:05 -07:00
Patrick Walton
30356400fd
Merge pull request #35 from Bobo1239/master
...
Fix demo client compilation on Windows
2017-10-16 15:04:00 -07:00
Patrick Walton
cc16158a91
Decouple antialiasing strategies from views in the demo
2017-10-16 13:36:22 -07:00
Patrick Walton
d8713f214c
Use the Rust benchmarking algorithm for less noisy results
2017-10-15 14:37:44 -07:00
Boris-Chengbiao Zhou
dec99769f1
Fix demo client compilation on Windows
2017-10-15 23:23:09 +02: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
3352f869f0
Remove Pathfinder 1 now that Pathfinder 2 supports all its features and
...
more
2017-10-06 20:03:59 -07:00
Patrick Walton
c8284e18b2
Mention advanced font rendering features
2017-10-06 20:03:18 -07:00
Patrick Walton
c2368bb71e
Rewrite the README.
...
Closes #26 .
2017-10-06 19:55:28 -07:00
Patrick Walton
1846ebd861
Use sRGB color textures where available
2017-10-06 19:18:34 -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
28837f72a6
Fetch and transform fewer vertices in the ECAA cover shader
2017-10-05 13:30:32 -07:00
Patrick Walton
d4c7fa74bd
Add a feature to save benchmark data as CSV
2017-10-05 11:46:53 -07:00
Patrick Walton
b6a60ef987
Make FreeType no longer a dependency of `path-utils`
2017-10-04 19:03:38 -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
22d0eb7b24
Fix file headers in shaders/
2017-10-03 15:32:03 -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
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
8c6110a388
Remove the duplicated de Casteljau subdivision code in
...
`partitioner::geometry`
2017-10-02 11:45:34 -07:00
Patrick Walton
705274997d
Remove the now-obsolete path legalizer
2017-10-02 11:40:11 -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
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
613bc7c29d
Don't start subdividing active edges until we're sure an entire B-quad
...
will be emitted.
Otherwise it messes up the parity.
Fixes the bottom curve of the lowercase "p" in Open Sans when rendered
with Loop-Blinn.
2017-09-29 13:25:19 -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
37a88dfcd9
Use the Inter UI font in the demo
2017-09-28 15:23:52 -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
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
7f84e98e6e
Avoid a bit of code duplication in `ECAAStrategy`
2017-09-26 13:35:41 -07:00
Patrick Walton
70ab2d55f3
Don't count resolution time in the benchmark.
...
This means that users of Pathfinder will have to accept floating point
textures in order to get the advertised performance, but as they're well
supported on all modern GPUs I don't consider that much of a problem.
2017-09-26 13:35:03 -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
c37fd1f1e8
Ignore intersections beyond the sweep line.
...
Improves the outer stroke of the tiger.
2017-09-25 19:15:36 -07:00
Patrick Walton
93de8383f9
Replace the implicitization algorithm for curve intersection with a
...
simpler one based on binary search and the quadratic formula.
This does a better job avoiding floating point error and improves the
rendering of the tiger.
2017-09-25 18:51:02 -07:00
Patrick Walton
2a906569e5
Emit B-quads around both self-intersecting active edges.
...
Improves one of the whiskers in the tiger.
2017-09-25 12:58:42 -07:00
Patrick Walton
3efca89235
Don't call `Font.toArrayBuffer()` in the mesh debugger, as that's really slow
2017-09-24 11:49:15 -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
db32009d7b
Create fewer useless B-vertices
2017-09-22 19:15:58 -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
2039051f01
Remove bogus fast path that tried to avoid active edge order calculation.
...
It was causing us to miss a bunch of crossings in the tiger whiskers.
2017-09-22 13:42:20 -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
be1b100826
Split B-quads whose curves' convex hulls intersect in most cases.
...
Avoids some rendering artefacts with Loop-Blinn, improving the tiger.
2017-09-21 22:47:00 -07:00
Patrick Walton
a126e1248e
Don't structure fills around the even-odd rule.
...
Improves self-intersecting paths under the winding rule.
2017-09-21 14:54:04 -07:00
Patrick Walton
4ac11e9010
Switch to a more robust intersection algorithm based on implicitization
2017-09-20 21:23:56 -07:00
Patrick Walton
dafb18fd1d
Allow custom SVGs to be opened in the mesh debugger
2017-09-20 12:01:46 -07:00
Patrick Walton
b732878532
Encapsulate the file picker code into a view class.
...
This will allow the mesh debugger to use it.
2017-09-20 11:51:20 -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
e7a6861846
Factor the SVG loading functionality out of the SVG demo.
...
This allows the mesh debugger to use it.
2017-09-19 18:04:42 -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
b1cf4b9760
Merge pull request #32 from Manishearth/wasd
...
demo/client: Make WASD composable
2017-09-19 16:35:25 -07:00
Manish Goregaokar
9a0fa96d4f
demo/client: Make WASD composable
...
Currently movement works in the direction of the latest key pressed.
Moving diagonally is not possible, and if you are pressing two keys
and release one, movement stops instead of switching over.
This keeps track of the key press state and updates the movement delta
accordingly, leading to much more natural/pleasant WASD navigation.
Note than onKeyDown is called multiple times when you press and hold,
so we must keep track of this state ourselves.
2017-09-19 16:34:41 -07:00