Commit Graph

503 Commits

Author SHA1 Message Date
Patrick Walton 48aceb6291 Fix zoomed-in rotation for text by taking extended path transforms into
account in the MCAA shader.
2018-02-21 17:00:37 -08:00
Patrick Walton dfcbd9dddd Remove the unused `usesSTTransform` 2018-02-21 16:38:09 -08:00
Patrick Walton 4e1a9a9bad Add a new varying to the stencil AAA fragment shader for simplicity.
The new `vXDist` values *can* be deduced simply from the `vUV` values
and first-order derivatives thereof, and therefore they're technically
redundant. However, calculating them in this way increases the
complexity and ALU load in the fragment shader. It's simpler to just
compute the additional values in the vertex shader and use
interpolation.
2018-02-21 16:27:49 -08:00
Patrick Walton 82be5d12d1 Update dependencies and fix TypeScript build failures.
Closes #68.
2018-02-19 11:52:00 -08:00
Patrick Walton a84b7c7cbd Replace ECAA with "Stencil AAA", a distance-based antialiasing
technique similar to the new MCAA.

This new technique simplifies the code significantly by unifying lines,
curves, and transformed curves. Blog posts forthcoming.
2018-02-17 10:45:25 -08:00
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