Commit Graph

665 Commits

Author SHA1 Message Date
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
Patrick Walton c9948a844d Render reference images on the server, untested as of yet 2017-11-10 17:04:59 -08:00
Patrick Walton 75474b19e6 Add the normal angle to the shaders used in the 3D demo 2017-11-10 15:03:43 -08:00
Patrick Walton 932fc64524 Stub an integration test page 2017-11-10 13:58:07 -08:00
Patrick Walton 2f7205bd22 Improve the stem darkening vertical extents preservation hack 2017-11-10 08:40:31 -08:00
Patrick Walton a73fb9ab8d Try to align glyphs on their baselines after stem darkening 2017-11-10 08:16:27 -08:00
Patrick Walton f2d5ced933 Describe how to adjust the JSON size limit when running the server.
Closes #41.
2017-11-09 18:55:41 -08:00
Patrick Walton 3bcd05a5ed Update the XCAA multi direct shaders to support normals.
Fixes XCAA in the SVG demo.
2017-11-09 16:42:53 -08:00
Patrick Walton 8e7eb6ca60 Support stem darkening in SSAA mode.
The normals are incorrect right now in some cases, but it looks OK-ish.
2017-11-09 16:20:15 -08:00
Patrick Walton 35e59b1a05 Fix MCAA in the text demo.
The B-quad ranges were not being expanded properly.
2017-11-08 20:58:22 -08:00
Patrick Walton 9a5728aab6 Implement clipping in XCAA mode 2017-11-08 16:45:30 -08:00
Patrick Walton 941223c7d4 Update the README a bit 2017-11-07 17:42:42 -08:00
Patrick Walton 997e9b852a Round x-heights naturally instead of rounding up.
I think this matches what macOS does.
2017-11-07 17:39:29 -08:00
Patrick Walton e5b76726d9 Use the LUT to gamma correct text, and fix stem darkening math 2017-11-07 17:24:19 -08:00
Patrick Walton 82fd214a76 Load the gamma LUT in the demo 2017-11-07 14:13:13 -08:00
Patrick Walton 0a5f4c65df Add a prebuilt gamma LUT 2017-11-07 11:56:04 -08:00
Patrick Walton 556bb2ce84 Add `gamma_lut` from WebRender 2017-11-06 20:41:13 -08:00
Patrick Walton 8897145f54 Add a simple command-line frontend for use as part of a build process 2017-11-06 13:28:32 -08:00
Patrick Walton 8a1e3bc8b2 Add some basic Phong shading to the monument 2017-11-03 18:49:25 -07:00
Patrick Walton 1e446f816f Add basic clip path support when rendering with SSAA 2017-11-03 14:29:31 -07:00
Patrick Walton 4cbc2a8800 Add partial support for clip paths in the SVG demo.
At the moment, this only works when antialiasing is off.
2017-11-03 14:14:29 -07:00
Patrick Walton 511e5956d8 Don't clear away the scenery after drawing it!
Fixes the 3D view.
2017-11-02 16:17:35 -07:00
Patrick Walton 572b7cdd4a Encode path IDs using a sparse representation, not a dense one.
This reduces the size of serialized mesh libraries. It also makes it
much easier to expand meshes and select individual paths for rendering.
2017-11-02 16:08:31 -07:00
Patrick Walton c767141169 Build render tasks for clips.
This doesn't actually clip anything yet, but it's a step in that direction.
2017-10-31 17:04:06 -07:00
Patrick Walton b9f6f13cec Stop going to the DOM every time we need the color of an SVG path 2017-10-31 14:50:15 -07:00
Patrick Walton 579528ebdc Remove one direct rendering pass from the multicolor XCAA path 2017-10-31 12:41:38 -07:00
Patrick Walton d65bfb7fb2 Show compositing time in the SVG demo 2017-10-31 12:35:24 -07:00
Patrick Walton dc6bdda7ff Implement basic native FreeType glyph rendering, untested as of yet 2017-10-31 11:26:14 -07:00
Patrick Walton ce91d0490a
Merge pull request #46 from mbebenita/watch
Automatically rebuild in the background.
2017-10-30 18:07:56 -07:00
Michael Bebenita 2e3451d9da Automatically rebuild in the background. 2017-10-30 16:24:12 -07:00
Patrick Walton a6582aefb3
Merge pull request #45 from mbebenita/toggle
Mesh Debugger Improvements
2017-10-30 15:31:36 -07:00
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