Patrick Walton
87eb3038eb
Make the cubic Bézier approximation tolerance proportional to the SVG
...
view box size instead of hardcoding it.
Reduces the vertex shading load by approximately half on many of the
"Massively Parallel Vector Graphics" test cases.
Partially addresses #67 .
2018-02-08 20:00:14 -08:00
Patrick Walton
5879d9778d
Replace the MCAA shader with an extended Loop-Blinn approach and an
...
approximation of area based on approximate first-order line distance.
This enables support for full affine transforms in MCAA. It also greatly
simplifies the shader and reduces the amount of work that the GPU needs
to do for fragment shading.
Experimental testing has shown the area approximation to be accurate to
about 4%.
2018-02-02 18:28:41 -08:00
Patrick Walton
5bd68dec65
Port Pathfinder to use Lyon for Bézier curve math.
...
This removes a whole lot of code from `pathfinder_path_utils`. Hopefully
the remaining code can go upstream.
These changes regress quality of stroke widths for cubic curves, because
they move fill-to-stroke conversion before cubic-to-quadratic
conversion. To fix that, we will need to recursively subdivide when
doing fill-to-stroke conversion.
2018-01-29 12:47:47 -08:00
Patrick Walton
2ec5dbfa42
Fix minor comment typo
2018-01-21 13:06:47 -08:00
Patrick Walton
d8c590867d
Stop computing B-vertex normals, which are no longer used.
...
6x improvement in partitioning time (because atan2 is dog slow).
2018-01-21 11:41:26 -08:00
Patrick Walton
7a2ad35d7e
Don't allow the user to move the camera in the benchmarks and reference tests.
...
Doing this messes up the tests.
2018-01-18 17:26:56 -08:00
Patrick Walton
0720b04591
Scale stroke widths correctly in the Ghostscript tiger test
2018-01-18 17:01:47 -08:00
Patrick Walton
3be3ff7351
Disable gamma correction, stem darkening, and emboldening in the UI when SSAA mode is selected
2018-01-16 15:50:17 -08:00
Patrick Walton
ef29eb19f3
Tiny comment fix
2018-01-16 13:06:51 -08:00
Patrick Walton
3b3fef3982
Hide `generate_gamma_lut` and `pathfinder_server` in the API docs list.
...
This is a messy way to do this, but I couldn't find a better way in Cargo or `rustdoc`…
2018-01-16 12:57:26 -08:00
Patrick Walton
6a640eca74
Simplify the B-quad vertex position VBO to have a uniform format, and
...
enable early Z for SVG.
Additionally, this switches the B-quad patches for XCAA to be convex
hulls instead of bounding boxes, reducing fragment shader load.
This is a large speedup for the Ghostscript tiger demo: 5x or more.
Closes #33 .
2018-01-11 19:25:02 -08:00
Patrick Walton
67dd6cd8ed
Add some simple overview documentation to the partitioner crate
2018-01-05 18:40:36 -08:00
Patrick Walton
952186c638
Document `pathfinder_font_renderer`.
2018-01-05 16:59:49 -08:00
Patrick Walton
c68f16f6ba
Write more API documentation
2018-01-05 15:52:15 -08:00
Patrick Walton
32c20ec649
Document most of `pathfinder_path_utils`.
2018-01-05 14:20:50 -08:00
Patrick Walton
4b887174f8
Document some more of `pathfinder_path_utils`
2018-01-05 12:35:01 -08:00
Patrick Walton
452ade0012
Document `pathfinder_path_utils::cubic`
2018-01-05 12:19:23 -08:00
Patrick Walton
2a3ab09279
Fix rustdoc CSS a bit
2018-01-05 12:19:13 -08:00
Patrick Walton
d821991c01
Clean up `common.inc.glsl` a bit
2018-01-05 12:18:50 -08:00
Patrick Walton
f3841ef402
Document more shader parameters
2018-01-04 18:07:14 -08:00
Patrick Walton
67d29803b5
Document most uniforms in shaders
2018-01-04 17:32:20 -08:00
Patrick Walton
aa7e0df514
Make the libraries only used for reftesting opt-in.
...
Closes #56 .
2018-01-04 15:10:23 -08:00
Patrick Walton
4a71f79a78
Make the logo in the navbar monochrome
2018-01-04 14:43:37 -08:00
Patrick Walton
275a937439
Fix colors and view box for the reference in the SVG reftest
2018-01-04 14:14:47 -08:00
Patrick Walton
c5187deedd
Use the monochrome MCAA mode for the Material Design icons SVG demo.
...
This avoids ugly pixel snapping.
2018-01-03 20:53:25 -08:00
Patrick Walton
2c2afe2fc0
Only emit a `ClosePath` command in a `PathBufferStream` if the subpath
...
is closed.
Closes #60 .
2018-01-03 15:31:34 -08:00
Patrick Walton
11913a20f1
Merge MCAA monochrome and multicolor shaders.
...
Not only is this a lot simpler, it's faster too!
2018-01-03 15:22:28 -08:00
Patrick Walton
017a2e2f8c
Provide brief documentation of each shader
2017-12-30 20:32:51 -05:00
Patrick Walton
a81c69c34e
Document the blit shaders
2017-12-28 11:46:44 -05:00
Patrick Walton
9515451e7a
Remove render tasks entirely.
2017-12-28 11:44:46 -05:00
Patrick Walton
473cb38fb3
Add a few paragraphs of overview documentation
2017-12-23 18:17:33 -05:00
Patrick Walton
0ec5b74851
Start a Cargo workspace and generate documentation for it
2017-12-23 18:01:55 -05:00
Patrick Walton
429e4a3063
Remove clipping support from the SVG demo.
...
It's overengineering and was broken anyway. WebRender has much better
clipping support; let's centralize the logic in there.
2017-12-22 16:30:24 -08:00
Patrick Walton
934086ace8
Build Rust documentation as part of the demo client build process
2017-12-21 18:01:00 -08:00
Patrick Walton
b6236ac835
Use librsvg/Cairo/Pixman to render SVG reference images.
...
The scale and colors aren't correct yet, but this is a start.
2017-12-21 17:20:01 -08:00
Patrick Walton
c2d89aba91
Add support for the even-odd fill rule in the demo.
...
Closes #59 .
2017-12-21 13:53:38 -08:00
Patrick Walton
2deb4fae2a
Use binary search to find line intersections to reduce floating point error.
...
This is probably improvable, but let's do the safe thing for now.
Closes #57 .
Closes #58 .
2017-12-21 13:22:32 -08:00
Patrick Walton
f132117d4c
Don't add overlapping points to close paths in the stroking algorithm.
...
These extra points are unnecessary and can confuse the partitioner,
because they sometimes prevent it from detecting winding numbers
properly. This is a bug in the partitioner and should be fixed, but we
shouldn't be generating these points to begin with.
Partially addresses #57 .
2017-12-21 13:22:23 -08:00
Patrick Walton
98250b9232
Close stroke paths as necessary.
...
Partially addresses #57 .
2017-12-21 11:56:12 -08:00
Patrick Walton
84ed1a76b0
Hook the reftest framework up to the SVG renderer
2017-12-20 19:13:07 -08:00
Patrick Walton
fc95edda81
Add UI for SVG reference tests, not functional yet
2017-12-20 18:49:44 -08:00
Patrick Walton
ec467ba92c
Fix `getMeshIndexRange()` logic for the first interior mesh.
...
This caused the first path to disappear in the SVG demo.
Closes #57 .
2017-12-20 14:10:51 -08:00
Patrick Walton
4c2d0cb5ab
Use homogeneous coordinates to reduce floating point error when computing the intersection of self-intersecting line segments.
...
Partially addresses #57 .
2017-12-20 13:42:20 -08:00
Patrick Walton
f58d3a8512
Add stroke drawing functionality to the mesh debugger.
...
It's disabled by default, but it can be enabled by editing the code.
2017-12-20 13:41:31 -08:00
Patrick Walton
f04f39afd6
Close subpaths explicitly.
...
Partially addresses #57 .
2017-12-20 13:41:01 -08:00
Patrick Walton
6a81ec4893
Make SVG stroke width more accurate, and switch to XCAA by default.
...
Partially addresses #57 .
2017-12-20 10:40:21 -08:00
Patrick Walton
797b935f35
Add Material Design icons to the SVG demo
2017-12-19 19:11:12 -08:00
Patrick Walton
6f41039ba8
Use the Bootstrap style for the rotate slider
2017-12-19 14:56:26 -08:00
Patrick Walton
23482b2af8
Add the logo to the demo.
...
Logo design courtesy Jay Vining.
2017-12-19 14:51:51 -08:00
Patrick Walton
097e909d07
In multicolor XCAA, cap the slope to a reasonable amount to prevent line segments from shooting way up or down
2017-12-19 13:47:57 -08:00
Patrick Walton
ddd1c89294
Use one side for the X position in the multicolor MCAA vertex shader to avoid cracks
2017-12-19 10:54:30 -08:00
Patrick Walton
cfe72f486e
Use a single-pass pixel-snapping MCAA algorithm instead of a multipass
...
ECAA algorithm for multicolor SVG.
This is much faster than both Skia and the previous XCAA algorithm
while maintaining slightly higher quality than the latter.
There are a couple of known issues:
* Vertical inflection points of hairlines with very steep slopes can
become very light or even drop out occasionally. I suspect this is due
to floating point error.
* Rarely, single columns of pixels can disappear from a mesh. Cause TBD.
Besides these bugs, this technique can be cleaned up and probably made
faster, but it's a sizable improvement as is.
2017-12-18 17:37:14 -08:00
Patrick Walton
5da56fea0b
Fix 3D demo
2017-12-12 09:46:38 -06:00
Patrick Walton
b8785a31db
Implement 8xSSAA and 16xSSAA in the SVG demo
2017-12-11 19:02:20 -08:00
Patrick Walton
1102965f6d
Use RGB5_A1 on macOS to work around driver stalls with RGBA
2017-12-11 12:18:48 -08:00
Patrick Walton
00433d418a
Disable subpixel AA during the SVG benchmark
2017-12-06 12:19:24 -08:00
Patrick Walton
1459267292
Make benchmark sizes more sensible for SVG
2017-12-06 10:58:16 -08:00
Patrick Walton
80c0d07f1a
Revert refactoring of Renderer into BaseRenderer.
...
It's not needed.
2017-12-05 19:08:31 -08:00
Patrick Walton
30893fb9ad
Partially implement benchmarking for SVG.
2017-12-05 19:05:23 -08:00
Patrick Walton
f5a7032ca5
Merge pull request #55 from trishume/fix-51
...
Fixes #51 by introducing a variable for an early return boolean.
2017-12-05 18:51:49 -08:00
Tristan Hume
dd934211af
Fixes #51 by introducing a variable for an early return boolean.
...
This works around a bug in the macOS Nvidia shader compiler
in 2014 rMBPs.
2017-12-05 21:09:58 -05:00
Patrick Walton
d0d08816b9
Factor the SVG renderer out of the demo so it can be reused
2017-12-05 11:23:13 -08:00
Patrick Walton
15d8c98ff9
Fix a bug preventing the benchmark from running, and improve its UI
2017-12-04 22:02:16 -08:00
Patrick Walton
ac95b04061
Fix accidental `x`/`y` swap in the ECAA multi edge mask curve shader
2017-12-04 11:55:47 -08:00
Patrick Walton
bc863e3ed3
Remove commented out code
2017-12-04 11:55:37 -08:00
Patrick Walton
30062aea81
Expose emboldening in the demo UI
2017-12-03 17:28:30 -08:00
Patrick Walton
9b59ce2443
Fix rotation artefacts by rendering curves in two passes, clipping at X
...
inflection points as necessary.
2017-12-03 16:59:35 -08:00
Patrick Walton
801c25305f
Pack left and right normal angles into one vec2 in `computeECAAQuadPosition`
2017-12-02 13:21:13 -08:00
Patrick Walton
7e0d003a95
Refactor the XCAA vertex shaders themselves, now that the common XCAA
...
infrastructure has been refactored
2017-12-02 13:14:01 -08:00
Patrick Walton
dc5e3a0093
Refactor the XCAA shaders some more
2017-12-02 13:05:11 -08:00
Patrick Walton
1de0378f1e
Get rotation working in the text demo.
...
There are some known artefacts when zoomed in heavily in XCAA mode.
2017-11-30 16:08:15 -08:00
Patrick Walton
95a1dd0195
Eliminate the distinction between layout and display pixels per unit
2017-11-30 09:51:07 -08:00
Patrick Walton
86660572bd
Upgrade ST-transforms to affine transforms where possible, and add
...
incomplete rotation support to the text demo
2017-11-29 17:06:52 -08:00
Patrick Walton
58260beb8c
Only run the ECAA mask shader on edge pixels
2017-11-28 17:05:59 -08:00
Patrick Walton
6942bb51ca
Add support for full 3D transforms, including rotation, to SVG in XCAA mode.
2017-11-28 16:15:06 -08:00
Patrick Walton
0e9144286e
Fix the calculation of `dP` in the XCAA multicolor edge mask.
2017-11-27 15:43:47 -08:00
Patrick Walton
6e70b983c3
Remove incorrect commented-out shader code
2017-11-21 15:54:18 -08:00
Patrick Walton
7bd3a48110
Don't clip curves to the left and right sides of the pixel column twice
2017-11-21 15:51:27 -08:00
Patrick Walton
6d85cb3382
Rename the integration test to the reference test to be more specific
2017-11-20 17:18:30 -08:00
Patrick Walton
99c7e685e7
Rebuild the layout when new text is entered in the text demo
2017-11-20 17:09:39 -08:00
Patrick Walton
8c89ef9938
Make sure the gamma LUT loads before the initial render
2017-11-20 16:47:52 -08:00
Patrick Walton
5a1e4d4e60
Fix rendering of glyphs in the 3D demo
2017-11-20 16:25:57 -08:00
Patrick Walton
529a3eae23
Add rotation support for SSAA in SVG; switch to Material Design icons
2017-11-20 15:32:02 -08:00
Patrick Walton
b005e6d165
Improve the layout of the integration test a bit
2017-11-17 17:29:18 -08:00
Patrick Walton
3388b38e3b
Try to fix #50 by inserting an "as any"
2017-11-17 17:10:05 -08:00
Patrick Walton
86df78f939
Flesh out the integration test more
2017-11-17 17:06:59 -08:00
Patrick Walton
8c1b3e9cb5
Optimize and better document the exact antialiasing calculation
2017-11-14 18:02:26 -08:00
Patrick Walton
ca0387d355
Get reference and rendered glyphs displaying side-by-side in the integration test
2017-11-13 20:42:07 -08:00
Patrick Walton
2578298198
More work on the integration test
2017-11-13 17:23:03 -08:00
Patrick Walton
9dda148b38
Fix some bugs in Core Graphics native rendering
2017-11-13 17:22:35 -08:00
Patrick Walton
0642e65c9d
Stub integration test functionality some more
2017-11-13 15:26:46 -08:00
Patrick Walton
bc99fdf02b
Enable early Z in the XCAA multicolor direct interior pass
2017-11-11 14:45:28 -08:00
Patrick Walton
2975038891
Reenable early Z.
...
It regressed again!
2017-11-11 14:04:57 -08:00
Patrick Walton
2e90b3bce8
Multiply stem darkening amounts by sqrt(2).
...
This compensates for the fact that macOS dilation is relative to the pixel square, while our dilation is relative to each vertex normal.
2017-11-11 11:29:52 -08:00
Patrick Walton
ceb9d2bb80
Tweak the max stem darkening ppem to avoid a "pop" when zooming
2017-11-11 09:41:21 -08:00
Patrick Walton
d90d3af21b
Fix swapped min/max stem darkening amounts
2017-11-11 09:38:28 -08:00
Patrick Walton
575d4c2366
Fix regression involving NaN when doing curve clipping
2017-11-11 09:38:06 -08:00
Patrick Walton
37cdc9bc5c
Optimize the signed area calculation
2017-11-10 23:09:54 -08:00
Patrick Walton
1f5dbe33e8
Apply optimizations to the multi-edge mask shader too
2017-11-10 22:09:29 -08:00
Patrick Walton
fc2ac12fc0
Optimize the XCAA fragment shaders a bit
2017-11-10 19:25:47 -08:00