Commit Graph

447 Commits

Author SHA1 Message Date
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
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