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
Patrick Walton
64e3558986
Considate `resources` directories
2017-08-29 19:27:05 -07:00
Patrick Walton
8d6636b1cf
Add `-demo` to the SVG and text demo files
2017-08-29 18:57:43 -07:00