Commit Graph

562 Commits

Author SHA1 Message Date
Patrick Walton 0983812b90 Rotate and scale around the appropriate points in the demo 2019-02-13 16:05:28 -08:00
Patrick Walton 4053b7dd0c Add zoom in and zoom out buttons for input devices without gesture support 2019-02-13 10:32:25 -08:00
Patrick Walton fb692acf05 Open a default SVG if none is supplied on the command line 2019-02-12 19:31:29 -08:00
Patrick Walton 2eccdba360 Allow pinch zoom in 2D mode 2019-02-12 15:00:33 -08:00
Patrick Walton d7f6d9eb3d Allow the canvas to be dragged in 2D mode 2019-02-12 14:49:24 -08:00
Patrick Walton 398718a3c8 Allow the rotation slider to be dragged 2019-02-12 12:49:35 -08:00
Patrick Walton 22fe63503f Implement 2D rotation 2019-02-12 12:40:24 -08:00
Patrick Walton a9ac960862 Load a new scene when the user requests it 2019-02-12 11:16:49 -08:00
Patrick Walton 7511b3bd2f Add a `LoadScene` message to the backend thread 2019-02-12 11:03:37 -08:00
Patrick Walton 92421943fc Open a file dialog when the user clicks on the open file 2019-02-08 21:08:03 -08:00
Patrick Walton 6afbafcb43 Split out the demo UI code into a separate module 2019-02-08 20:58:54 -08:00
Patrick Walton dbce7e3ad1 Fix dirty tracking to stop using 100% CPU 2019-02-08 20:51:34 -08:00
Patrick Walton 3cc8f7a11f Refactor the demo some 2019-02-08 15:39:47 -08:00
Patrick Walton 725834285b Refactor the demo a bit 2019-02-08 15:16:53 -08:00
Patrick Walton dbf880d011 Rename `demo3` to `demo` 2019-02-08 14:53:20 -08:00
Patrick Walton 4062f824fd Remove the Pathfinder 2 demo 2019-02-08 14:39:35 -08:00
Patrick Walton 3165a4a1b0 Remove old demo server; remove `SegmentFlags` 2019-01-10 20:43:03 -08:00
Patrick Walton adf49ab932 Rename `path-utils` to `geometry` 2019-01-10 10:01:21 -08:00
Patrick Walton a2522e3845 wip 2018-11-14 10:33:53 -08:00
Patrick Walton 883ccceb2d Update various dependencies 2018-09-19 20:03:33 -07:00
Patrick Walton 81c3f08a5c Make macOS-only code conditionally compiled; update dependencies 2018-08-22 13:34:50 -07:00
Patrick Walton c6cc6e6fd8 Remove `pathfinder_font_renderer` in favor of `font-kit`.
Closes #69.

Closes #84.
2018-08-02 15:07:25 -07:00
Bastien Orivel 9d19454c36 Update app_units 0.7
See ya num-traits 0.1 o/
2018-07-31 20:16:44 +02:00
Bastien Orivel 3cfd0a3126 Update image to 0.19 2018-07-31 20:16:00 +02:00
Paul Rouget 6d7dd604f8 Euclid and lyon updates 2018-07-27 11:40:45 +02:00
Nicolas Silva 46d1878ef5 Update lyon and euclid dependencies. 2018-07-11 00:27:42 +02:00
Patrick Walton fcfd157c70 Remove `F32ArrayToMat4` in favor of `glmatrix.mat4.clone()` 2018-04-04 17:56:01 -07:00
Patrick Walton 2fde232982 Factor the text paragraph rendering code out into a separate class so it
can be reused
2018-04-03 13:57:46 -07:00
Patrick Walton 6ba87277c2 Remove the explicit WebVR API dependency; it seems to be upstream now 2018-04-03 12:42:33 -07:00
Patrick Walton 881be4967d Fix TypeScript build errors 2018-04-03 12:40:02 -07:00
Manish Goregaokar 8ed4e96ff9 Various review cleanups 2018-04-02 19:10:19 -07:00
Manish Goregaokar 3d223c1a4a Match screen size as much as possible 2018-04-02 19:10:11 -07:00
Manish Goregaokar 0751da81a4 Move VR stuff to ThreeDView 2018-04-02 19:10:11 -07:00
Manish Goregaokar 2b0b699fa0 Turn off lighting for VR 2018-04-02 19:10:11 -07:00
Manish Goregaokar 3af3635eea Use correct viewport and clear correctly 2018-04-02 19:10:11 -07:00
Manish Goregaokar 148e77d995 Use correct projection and view matrices 2018-04-02 19:10:11 -07:00
Manish Goregaokar 975685c23b Make it possible to enter VR mode 2018-04-02 19:10:11 -07:00
Patrick Walton d66a5b6c54 Update to `env-logger` 0.5 2018-03-30 14:25:52 -07:00
Patrick Walton dcc3a0fc94 Update to bincode 1.0 2018-03-22 15:03:25 -07:00
Patrick Walton 5e5148df54 Fix on Chrome, which doesn't support WebGL queries 2018-03-20 19:40:28 -07:00
Patrick Walton 6e13fb171c Use a lookup table to do area calculations instead of Loop-Blinn-style
distance-to-edge for stencil analytic antialiasing.

This improves the rendering quality of stencil AAA significantly.

Additionally, this adds an approximation of Core Graphics' (macOS')
defringing filter.

Closes #73.
2018-03-19 14:35:36 -07:00
Patrick Walton 64c818e530 Construct meshes independently of mesh libraries (renamed to "mesh
packs").

This fits in better with the way WebRender does things. It simplifies
the code too.
2018-03-08 15:10:29 -08:00
Patrick Walton db6986ca1f Take the orientation of a path into account when computing normals 2018-03-07 11:21:08 -08:00
Patrick Walton 18121208d4 Update euclid to 0.17 and Lyon to 0.10 2018-03-06 15:06:06 -08:00
Patrick Walton b60275e5ea Convert cubic curves to quadratic ones in fonts 2018-03-06 13:10:29 -08:00
Patrick Walton 07d978909c Get the DirectWrite backend compiling again.
Partially addresses #69.
2018-03-06 12:24:30 -08:00
Patrick Walton fad7f2f343 Fix FreeType build 2018-03-05 15:04:52 -08:00
Patrick Walton 5d3c1f6d59 Abstract away `FontKey` so WebRender can more easily use this; switch
from angle measurement to scale-dependent hull height
2018-03-05 11:27:18 -08:00
Patrick Walton 45a812d30f Move webpack to the `devDependencies` section.
See issue #69.
2018-02-22 10:02:15 -08:00
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 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 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 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 c68f16f6ba Write more API documentation 2018-01-05 15:52:15 -08:00
Patrick Walton 4b887174f8 Document some more of `pathfinder_path_utils` 2018-01-05 12:35:01 -08:00
Patrick Walton 2a3ab09279 Fix rustdoc CSS a bit 2018-01-05 12:19:13 -08:00
Patrick Walton f3841ef402 Document more shader parameters 2018-01-04 18:07:14 -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 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 9515451e7a Remove render tasks entirely. 2017-12-28 11:44:46 -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 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 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 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 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 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 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 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 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 c9948a844d Render reference images on the server, untested as of yet 2017-11-10 17:04:59 -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 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 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 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
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 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 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 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 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 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 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 d4c7fa74bd Add a feature to save benchmark data as CSV 2017-10-05 11:46:53 -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 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 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 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 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 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 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 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
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
Patrick Walton 83cfb1d9d5 Make glyphs transparent.
Avoids cutting off the bottom of the "g" in the text demo.
2017-09-19 13:57:56 -07:00
Patrick Walton 22d2a6590b Blend when compositing in the text demo 2017-09-19 11:42:37 -07:00
Patrick Walton 820c4bec18 Round canvas sizes to properly handle fractional device pixel ratios.
Fixes nasty artefacts seen on Windows HiDPI screens with certain system settings.
2017-09-17 10:06:53 -07:00
Patrick Walton 45927f6299 Add a CSS spinner to the HTML templates.
This will allow us to make loading a nicer experience.

Source: http://tobiasahlin.com/spinkit/
2017-09-16 10:41:25 -07:00
Patrick Walton 5d267cc2c8 Take the xMin/left values of the glyphs' bounds into account when determining their pixel rects.
This prevents glyph images from "bleeding" into each other horizontally.
2017-09-15 15:57:32 -04:00
Patrick Walton 375dbe7ab9 Make sure scrollbars don't show up on demo and tool pages 2017-09-15 09:40:26 -07:00
Patrick Walton 445d00fed3 Prevent the user from flipping the camera upside down in the 3D view 2017-09-15 09:31:19 -07:00
Patrick Walton 82f876c4ff Take `WheelEvent.deltaMode` into account when panning 2017-09-15 09:22:56 -07:00
Patrick Walton a5d0df6a96 Implement simple collision detection in the 3D demo 2017-09-14 18:48:55 -07:00
Patrick Walton b48b256ab3 Actually reverse indices for early Z!
2x performance improvement. I feel silly.
2017-09-14 17:20:54 -07:00
Patrick Walton 42151cc334 Fix text positioning and improve performance in the 3D demo.
This implements a simple form of software backface culling to reduce vertex shading load.
2017-09-14 15:16:06 -07:00
Patrick Walton 0087c1ed50 Add SSAA support to the benchmarking tool 2017-09-13 21:41:33 -07:00
Patrick Walton 299bcd685e Fix scaling of the benchmark 2017-09-13 21:03:10 -07:00
Patrick Walton adf960bafe Make the GitHub corner stay in place when zooming and not widen the pages 2017-09-13 20:59:19 -07:00
Patrick Walton 8b34fa5461 Enable SSAA by default in the SVG demo 2017-09-13 20:45:48 -07:00
Patrick Walton a21afa9bb7 Fix the interaction between the camera and SSAA in the SVG demo 2017-09-13 20:41:04 -07:00
Patrick Walton 5c45b6f94e Prevent the user from scrolling the text out of view 2017-09-13 18:39:19 -07:00
Patrick Walton 6642cc7aa4 Limit how far the user can zoom the camera out 2017-09-13 13:30:26 -07:00
Patrick Walton d64a28c166 Beautify the timings display and make it work with the SVG and 3D demos 2017-09-13 11:56:40 -07:00
Patrick Walton 65eecbf071 Don't allow the user to zoom in so far that we run out of space in the glyph atlas 2017-09-12 22:32:18 -07:00
Patrick Walton f68da75c75 Implement SSAA for the 3D demo.
This commit additionally refactors transforms to be resolution-independent as much as possible throughout all the demos.
2017-09-12 19:43:43 -07:00
Patrick Walton 6fec73b2f7 Make sure all glyphs stay in the viewport when running the benchmark 2017-09-12 16:07:04 -07:00
Patrick Walton 2c8c11b303 Get a bare-minimum benchmark up and running 2017-09-12 12:40:14 -07:00
Patrick Walton a7d75f913c Split paths into monotonic segments before partitioning them in the demo 2017-09-12 09:35:57 -07:00
Patrick Walton 19e8305eaa Start the 3D camera out at a more interesting place 2017-09-11 19:37:18 -07:00
Patrick Walton eae20eb7ca Fix glyph positioning in the 3D view 2017-09-11 19:09:43 -07:00
Patrick Walton 7d3afa0e74 Initially zoom the SVG to fit 2017-09-11 17:56:37 -07:00
Patrick Walton 94c5ea181f Initially zoom the text to fit in the text demo 2017-09-11 16:57:53 -07:00
Patrick Walton 3dd1d73f81 Start the camera centered on the text in the text demo 2017-09-11 16:07:11 -07:00
Patrick Walton 6e4f0b0734 Add support for WASD keyboard controls to the 3D demo 2017-09-11 13:23:25 -07:00
Patrick Walton e13f0f7006 Papercut: Stop the GitHub corner from overlapping the demo content 2017-09-11 12:27:09 -07:00
Patrick Walton 0f3b5d6c3c Papercut: Don't allow navbar text to be selected 2017-09-11 12:23:43 -07:00
Patrick Walton 72fa6a7b55 Allow demos to be dragged with the mouse when applicable 2017-09-11 12:21:50 -07:00
Patrick Walton 068e2bd99e Stub a benchmarking tool, not working yet 2017-09-11 11:22:19 -07:00
Patrick Walton bd3536d058 Simplify a couple of getters in the mesh debugger 2017-09-11 11:22:06 -07:00
Patrick Walton 5eec2c5b6f Fix settings button in the 3D demo 2017-09-11 11:21:38 -07:00
Patrick Walton 28699f9dfb Upgrade dependencies 2017-09-11 11:21:19 -07:00
Patrick Walton 65e3278e94 Add zoom in and zoom out buttons for those without scale gestures 2017-09-10 13:17:24 -07:00
Patrick Walton ce855cc0ff Enable subpixel AA and hinting by default in the demo 2017-09-09 13:14:25 -07:00
Patrick Walton eb9c0ceb4d Implement "slight" hinting by rounding x-heights up to the nearest pixel 2017-09-09 13:12:51 -07:00
Patrick Walton 43513da957 Add a simple model of the Mozilla Monument to the 3D scene 2017-09-09 00:04:35 -07:00
Patrick Walton 473c28e16d Add screenshot functionality to the demo 2017-09-08 20:10:29 -07:00
Patrick Walton f5eea1cc7a Add a screenshot button, nonfunctional at the moment 2017-09-08 17:21:28 -07:00
Patrick Walton c36896e337 Implement path stroking using the FreeType stroker.
I'm not too happy with this, as I discovered a segfault in FreeType that doesn't give me confidence
in this as a solution for the long term. Additionally, this exposes the problems in the partitioner
with lack of winding fill rule, proper handling of self-intersections, and splitting of paths at
their extrema. (I believe these problems should be fairly straightforward to handle, but we just
don't handle them yet.)
2017-09-08 16:50:27 -07:00
Patrick Walton 3e5b53f13c Partially refactor the path APIs to be streaming, like Lyon 2017-09-08 13:09:00 -07:00
Patrick Walton 57374e9f30 Add all four sides of the Mozilla Monument to the 3D demo 2017-09-07 19:01:55 -07:00
Patrick Walton e34ca3d3e4 Stub support for multiple text frames 2017-09-07 16:13:55 -07:00
Patrick Walton 3ee066bdf0 Implement subpixel ECAA 2017-09-07 14:58:41 -07:00
Patrick Walton 6cbc7dc082 Use some names from the Mozilla Monument in the 3D demo 2017-09-06 22:50:07 -07:00
Patrick Walton 7de664e4a9 Implement some rudimentary text layout for the 3D demo 2017-09-06 22:11:32 -07:00
Patrick Walton 2cce20db10 Swap the locations of the FPS meter and the settings button in preparation for more UI 2017-09-06 18:47:14 -07:00
Patrick Walton 3378fb3447 Make clicking outside the settings popup dismiss it 2017-09-06 18:39:14 -07:00
Patrick Walton 2166f9fa07 Reverse Z order of interior elements for early Z 2017-09-06 18:28:23 -07:00
Patrick Walton 82d2f076d7 Add basic subpixel AA support for SSAA.
No LCD filter is implemented yet, so the color fringing is currently fairly extreme.
2017-09-06 16:32:11 -07:00
Patrick Walton acf2e0be00 Implement mesh expansion so that the 3D demo can actually render strings of text 2017-09-06 14:11:58 -07:00
Patrick Walton 4b7ac0182c Implement basic working 3D support 2017-09-05 19:47:19 -07:00
Patrick Walton a599db4eb9 Choose prettier default settings for the demo 2017-09-05 12:57:01 -07:00
Patrick Walton df20bcff5c Fix incorrect depth test in monochrome ECAA mode 2017-09-05 12:48:08 -07:00
Patrick Walton a9dd33d479 Stub a shader for objects in the 3D demo 2017-09-03 19:24:28 -07:00
Patrick Walton 4ab917b79b Snap baselines to the nearest pixel 2017-09-03 16:35:10 -07:00
Patrick Walton 24cfb03c66 Don't count the padding between glyphs as part of the atlas rect.
This was causing nasty aliasing artefacts.
2017-09-03 13:12:33 -07:00
Patrick Walton f968a4ac20 Don't do server-side hinting 2017-09-03 13:03:45 -07:00
Patrick Walton 049b8eba97 Initial work on perspective camera control for the 3D demo 2017-09-02 13:41:08 -07:00
Patrick Walton 7360a41a60 Factor camera logic into a separate object in preparation for the 3D demo 2017-09-02 12:14:10 -07:00
Patrick Walton 444e7bbf96 Use the Citardauq Formula in the partitioner as well as the shader to avoid precision problems.
Addresses the issue with the Nimbus Sans "o" mentioned in #24.
2017-09-01 23:45:51 -07:00
Patrick Walton 632202e5eb Implement a basic mesh debugger 2017-09-01 22:29:05 -07:00
Patrick Walton 1eb1bb5343 Stub a mesh debugger app 2017-09-01 18:11:44 -07:00
Patrick Walton a43a09b9d3 Allow the demo text to be changed by double-clicking 2017-09-01 16:31:40 -07:00
Patrick Walton 9f6f10deca Tweak the GitHub corner 2017-08-31 20:04:49 -07:00
Patrick Walton bc79c56eac Fix currentTarget/target mixup 2017-08-31 20:04:42 -07:00
Patrick Walton 67eaa499c0 Add a GitHub corner from http://tholman.com/github-corners/ 2017-08-31 19:57:41 -07:00
Patrick Walton a1013de5ba Expose the Rust API documentation via the server 2017-08-31 19:47:58 -07:00
Patrick Walton 982c97771c Get the 3D view rendering something 2017-08-31 19:19:26 -07:00
Patrick Walton f182686ba8 Do some more refactoring in preparation for the 3D view 2017-08-31 17:08:22 -07:00
Patrick Walton b75c327017 Factor out text layout into a separate class so it can be used by the text and 3D demos 2017-08-31 16:33:21 -07:00
Patrick Walton e448ba7b30 Switch from ES6 interpolation to Handlebars and add a simple landing page 2017-08-30 23:25:58 -07:00
Patrick Walton d6767219ff Automatically load some built-in fonts and SVGs 2017-08-30 19:48:18 -07:00
Patrick Walton 58b558de64 Make the demo UI less cluttered 2017-08-30 17:01:28 -07:00
Patrick Walton d7b606987a Update to Bootstrap 4 beta 2017-08-30 09:51:15 -07:00
Patrick Walton 7029248610 Stub a 3D demo 2017-08-29 19:46:18 -07:00