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
Patrick Walton
40c0e9b8c5
Use ES6 templates to reduce duplication in the demo HTML
2017-08-29 16:04:40 -07:00
Patrick Walton
cd3c1c996c
Get SSAA working for the tiger
2017-08-29 14:31:45 -07:00
Patrick Walton
eca1b36956
Render the fills on the tiger correctly
2017-08-29 14:15:23 -07:00
Patrick Walton
c47aa5c4d0
Get the SVG demo rendering something
2017-08-29 12:29:16 -07:00
Patrick Walton
8e2172f06f
Start implementing basic SVG rendering. Not working yet.
2017-08-28 22:11:15 -07:00
Patrick Walton
0bae14b326
Render SVG paths to an off screen framebuffer
2017-08-28 17:18:44 -07:00
Patrick Walton
4d16df17db
Implement the server-side support for SVG path partitioning in the demo
2017-08-28 16:47:27 -07:00
Patrick Walton
e5f1f3ccfb
Remove unused dependency
2017-08-27 12:45:05 -07:00
Patrick Walton
5f28f8b666
Stub out some more functionality for the SVG demo
2017-08-27 12:43:17 -07:00
Patrick Walton
72f5f4ee6d
Factor antialiasing strategies out into separate modules
2017-08-26 13:47:18 -07:00
Patrick Walton
9e7d922863
Factor out the app controller logic so we can support multiple demos more easily
2017-08-26 12:54:25 -07:00
Patrick Walton
01d1382324
Begin splitting up `index.ts`
2017-08-25 20:20:45 -07:00
Patrick Walton
894226e023
Stub an SVG demo page
2017-08-25 19:40:08 -07:00
Patrick Walton
defa2d63c3
Support multiple lines of text
2017-08-25 17:02:11 -07:00
Patrick Walton
5f347087a7
Only render glyphs in view
2017-08-25 15:39:13 -07:00
Patrick Walton
c0914a0c87
Fix a bunch of text layout issues
2017-08-25 12:20:36 -07:00
Patrick Walton
d24dd7ce24
Fix off by one error in glyph atlas rects
2017-08-24 19:39:07 -07:00
Patrick Walton
cae6e16416
Make some more methods and attributes private
2017-08-24 19:33:58 -07:00
Patrick Walton
99767ce48d
Make a bunch of methods and properties private
2017-08-24 19:30:53 -07:00
Patrick Walton
77db92bc42
Fix off by one error in the path color buffer
2017-08-24 16:23:02 -07:00
Patrick Walton
1213eaa3d7
Make the atlas texture bigger and scissor to improve clearing performance on Intel Mac
2017-08-24 16:18:26 -07:00
Patrick Walton
132b6e183b
Fix the pan/zoom logic in `onWheel()`
2017-08-24 13:34:45 -07:00
Patrick Walton
07d425dfb2
Split the ECAA shader into separate shaders for monochrome and multicolor
2017-08-24 12:08:58 -07:00
Patrick Walton
ad565ffde7
Use early Z to avoid resolving blank areas for ECAA. ~50% speedup.
2017-08-24 11:43:38 -07:00
Patrick Walton
81a6f8f051
Enable early Z for edge detection and render only in the used area of the atlas
2017-08-23 19:18:24 -07:00
Patrick Walton
ed0288906c
Use a fixed atlas size and reuse textures/FBOs more aggressively
2017-08-23 13:23:29 -07:00
Patrick Walton
52afa359b4
Render a line of text using the atlas
2017-08-22 18:25:32 -07:00
Patrick Walton
7db61bfe8e
Add a transform parameter to blit and switch framebuffer sizes to be `glmatrix.vec2` types
2017-08-19 16:52:14 -07:00
Patrick Walton
93277c7c11
Allow multiple glyphs to be rendered simultaneously
2017-08-19 16:34:02 -07:00
Patrick Walton
9b3f9d029c
Fix flipped inequality in the shader causing AA artefacts
2017-08-19 11:37:06 -07:00
Patrick Walton
9f194b7618
Add timing measurement
2017-08-19 09:57:54 -07:00
Patrick Walton
da6483c3ab
Add basic support for panning and zooming in the demo
2017-08-18 22:11:52 -07:00
Patrick Walton
37c947c751
Get basic ECAA fully working
2017-08-18 20:23:45 -07:00
Patrick Walton
653530be0b
Add a curve shader for ECAA and refactor the line shader to minimize code duplication
2017-08-18 17:12:58 -07:00
Patrick Walton
3a9b29735a
Get exact antialiasing mostly working for lines (no curves yet)
2017-08-18 15:17:23 -07:00
Patrick Walton
a9eeec39fe
Implement the line antialiasing shader, untested as of yet
2017-08-18 11:44:17 -07:00
Patrick Walton
ccf5000e1c
Get the cover step mostly working
2017-08-17 22:47:28 -07:00
Patrick Walton
9a7063a29b
Render conservative coverage. Not working yet.
2017-08-17 20:09:18 -07:00
Patrick Walton
ec78a632dc
Split path IDs and Loop-Blinn data into separate VBOs
2017-08-17 12:47:50 -07:00
Patrick Walton
0a4d57580a
Add the ECAA cover shader, untested as of yet
2017-08-16 19:51:13 -07:00
Patrick Walton
4b62ec8fa7
Get edge detection working in the demo
2017-08-16 16:37:39 -07:00
Patrick Walton
b10807d217
Initial setup for ECAA in the demo
2017-08-15 22:09:09 -07:00
Patrick Walton
3f7fc8baf6
Add an edge detection shader for ECAA, untested as of yet
2017-08-15 17:28:07 -07:00
Patrick Walton
7dc8f5debb
Switch to depth textures to aid edge detection
2017-08-15 16:51:26 -07:00
Patrick Walton
0f5b23622a
Implement SSAA in the demo
2017-08-15 15:57:52 -07:00
Patrick Walton
8bae26b521
Implement some antialiasing strategy infrastructure
2017-08-15 13:38:54 -07:00
Patrick Walton
eb7cfe7c5f
Fetch the colors of paths
2017-08-14 21:24:58 -07:00
Patrick Walton
309034b7dd
Implement basic Loop-Blinn curves
2017-08-14 19:08:18 -07:00
Patrick Walton
f8bd405759
Get basic polygons rendering in the demo
2017-08-14 16:08:45 -07:00
Patrick Walton
5f89f7ba50
Fix compile errors in shaders
2017-08-13 13:39:51 -07:00
Patrick Walton
d0dd883ddf
Switch to the Fetch API
2017-08-12 10:08:35 -07:00
Patrick Walton
ee9c1a7998
Download shaders via XHR
2017-08-11 21:26:25 -07:00
Patrick Walton
57ebbf8281
Split out B-vertex positions and info so that they're easier to pack into textures
2017-08-11 15:56:07 -07:00
Patrick Walton
fa1b2390c7
Remove bad `extern crate` directive
2017-08-10 21:02:32 -07:00
Patrick Walton
933e4023ed
Send mesh indices along to the client as well
2017-08-10 21:00:37 -07:00
Patrick Walton
5b84b052a0
Upload the chosen font to the server
2017-08-10 18:38:54 -07:00
Patrick Walton
0ad2f9abfe
Initial implementation of the Rocket-based demo server
2017-08-10 15:26:27 -07:00
Patrick Walton
2ddf95bd70
Initial work on the font renderer component
2017-08-09 15:36:41 -07:00
Patrick Walton
376faf8c38
Move `demo/` to `demo/client/` in preparation for making a partitioning web service
2017-08-08 11:35:10 -07:00
Patrick Walton
ef040b61bf
Introduce demo skeleton code
2017-08-08 11:23:30 -07:00