Patrick Walton
96758dfc17
Add `rotate` and `scale` methods to `Transform4F`
2019-07-11 15:57:45 -07:00
Patrick Walton
3f91206d57
Add a `translate` method to 3D transforms
2019-07-11 15:44:01 -07:00
Patrick Walton
bcac119324
Rename `Transform2DF` to `Transform2F` and `Transform3DF` to `Transform4F`
2019-07-11 14:59:10 -07:00
Patrick Walton
55825cbc6a
Switch scale and translation constructors for `Transform3DF` over to use vectors
2019-07-11 14:58:45 -07:00
Patrick Walton
eb0a61679d
Use operator overloading for 3D matrix multiplication
2019-07-11 13:59:39 -07:00
Patrick Walton
b886c157c1
Use 2-lane instead of 4-lane SIMD types for 2D vectors.
...
Also, this commit rewrites the `add_fill()` method to stop using shuffle
instructions, which can be slow and make the code overly complicated. The
shuffle instructions have been removed from the various SIMD backends.
2019-06-26 16:38:37 -07:00
Patrick Walton
222fa89b23
Use a 3D transform in the tile vertex shaders.
...
This opens the door to caching tiles at different zoom levels (issue #191 ).
2019-06-25 11:32:39 -07:00
Patrick Walton
a8d20cb37f
Add transform support to the C API, and fix build problems
2019-06-24 14:03:26 -07:00
Patrick Walton
431dcf3d2e
Rename `pathfinder_geometry::basic` to simply `pathfinder_geometry`, and move
...
the remaining code in that crate to a new crate, `pathfinder_content`
The old hierarchy was confusing.
2019-06-21 10:06:19 -07:00
Patrick Walton
487577a11b
Add Metal support.
...
This commit substantially reworks the `pathfinder_gpu` API to better support
modern APIs like Metal. It should open the door to `gfx-rs`, `wgpu`, Vulkan,
and D3D12 backends relatively straightforwardly.
A new example, `canvas_metal_minimal`, has been added.
Note that the new Metal shaders require a patched version of `spirv-cross` to
build properly. An upstream patch is forthcoming.
2019-06-20 11:47:22 -07:00
Alan Jeffrey
a507e1955e
Set the scene transform by linear iterpolation of the eye transforms
2019-06-07 12:02:30 -05:00
Patrick Walton
7973148603
Implement basic shadows (no blur yet)
2019-06-03 21:09:04 -07:00
Patrick Walton
bd248bf850
Implement line dash offset
2019-06-03 19:36:08 -07:00
Patrick Walton
dc45dc459e
Remove unused `LineSegment2F::cross` and vector cross product functions
2019-06-03 15:50:39 -07:00
Patrick Walton
1a42bbf4d3
Implement dashing for line segments (no curves yet)
2019-06-03 14:16:58 -07:00
Patrick Walton
a1b0df0a42
Rename `Point2DF` to `Vector2F`, `Point3DF` to `Vector4F`, and `LineSegmentF`
...
to `LineSegment2F`.
Straw poll on Twitter suggested that these names were preferred.
2019-06-03 12:39:29 -07:00
Patrick Walton
678b6f12c7
Add support for counterclockwise winding to arcs
2019-06-01 12:56:31 -07:00
Patrick Walton
99c1cca05c
Clean up `Outline::push_segment` and `Outline::push_full_segment`
2019-06-01 12:03:03 -07:00
Patrick Walton
44167beff5
Implement `Path2D::arc_to`.
2019-05-31 16:01:53 -07:00
Patrick Walton
f20d41800c
Use a correct algorithm for approximating arcs with Bézier curves
2019-05-31 16:01:28 -07:00
Patrick Walton
712c69faf1
Precompute the curve for a quarter-circle arc
2019-05-30 21:20:32 -07:00
Patrick Walton
9756aa89f9
Base the core arc primitive on a unit chord and transform.
...
This lets us handle ellipses better.
2019-05-30 17:19:21 -07:00
Patrick Walton
5974aeba7b
Implement miter limit
2019-05-30 13:08:30 -07:00
Patrick Walton
ce127caf76
Fix drawing of full circles
2019-05-30 10:56:19 -07:00
Patrick Walton
d5ba6ab6da
Change the core arc primitive to chord and radius, not chord and center.
...
This makes it harder to call the function with illegal arguments and simplifies
the join/cap code.
2019-05-30 10:17:17 -07:00
Patrick Walton
e1bcc11ace
Change the `F32` and `I32` suffixes to `F` and `I` to match the C API.
...
They're shorter and less noisy.
2019-05-29 19:17:16 -07:00
Patrick Walton
a75b635722
Implement round joins
2019-05-29 19:09:15 -07:00
Patrick Walton
339397bf23
Revert accidental change
2019-05-29 15:21:02 -07:00
Patrick Walton
51877426ea
Take paths by reference, not by value, in outline stroke-to-fill.
2019-05-29 15:15:40 -07:00
Patrick Walton
5133bbfe1a
Use unit vectors instead of angles for arcs.
...
This makes things faster and will also simplify the implementation of round
joins.
2019-05-29 12:14:47 -07:00
Patrick Walton
cd23d62f3d
Fix off-by-epsilon error in `push_arc` that was breaking the Moiré demo
2019-05-21 20:24:04 -07:00
Patrick Walton
2131724a2a
Implement round line caps
2019-05-21 20:21:46 -07:00
Patrick Walton
197f01d56a
Write in the line segment intersection code in matrix form
2019-05-21 14:51:50 -07:00
Patrick Walton
c6fc853579
Don't miter join on stroke endpoints.
...
Fixes the Moiré demo.
2019-05-21 14:49:01 -07:00
Patrick Walton
cba5444f03
Add miter joins at endpoints
2019-05-16 12:47:18 -07:00
Patrick Walton
e282eb57d5
Implement interior miter line joins (not yet endpoints)
2019-05-16 11:10:15 -07:00
Patrick Walton
272b63a017
Implement square line caps
2019-05-16 10:43:43 -07:00
Patrick Walton
1b9cfa98a9
Stroke closed paths properly
2019-05-16 08:35:14 -07:00
Patrick Walton
c7382a8b2c
Add affine transform support to the canvas implementation
2019-05-13 18:40:25 -07:00
Patrick Walton
89ca998fa8
Add a convenience method for creating a scene proxy with an empty scene.
...
This makes animation rendering loops a bit easier for users.
2019-05-13 18:29:57 -07:00
Patrick Walton
f24d93819b
Add arc building methods and switch the Moiré demo to use them.
...
Also, stop taking points by reference in many methods, for consistency.
2019-05-13 12:42:13 -07:00
Patrick Walton
639a8f39e8
Add Moiré demo
2019-05-11 11:53:50 -07:00
Patrick Walton
a078766dc6
Implement basic text rendering in canvas with `skribo` and `font-kit`.
...
Skribo currently writes some debugging info to standard output. A patch is
forthcoming to fix that.
2019-05-09 15:21:18 -07:00
Patrick Walton
3310b15826
Fall back to Newton's method instead of dividing by zero when finding critical
...
points during curve monotonic conversion.
Closes #146 .
2019-05-08 17:51:12 -07:00
Patrick Walton
5568e6f64f
Remove unused `monotonic` module
2019-05-08 13:37:17 -07:00
Patrick Walton
9de7d95d33
Start a simple HTML canvas-like API, and add a minimal example to show how to
...
use it.
2019-05-03 14:15:38 -07:00
Patrick Walton
0da11ffe01
Run `rustfmt` on the geometry crate
2019-04-29 16:46:35 -07:00
Patrick Walton
8606cd013e
Replace commented out printlns with proper debug statements
2019-04-29 16:43:24 -07:00
Patrick Walton
d06746f28d
Remove barrel distortion.
...
It was a toy implementation and isn't the approach I want to go with.
2019-04-29 16:05:42 -07:00
Patrick Walton
6c31e1bc01
In VR mode, render one eye and then reproject to both eyes instead of rendering
...
twice.
This reduces both CPU and GPU time a lot in exchange for a small loss in
quality.
2019-04-26 17:22:54 -07:00
Patrick Walton
c688d04412
Remove the scene assembly thread, and pipeline only fills instead of alpha
...
tiles.
Removing a thread should make it easier to manually assign threads to CPUs, as
is necessary on devices with poor schedulers like Magic Leap 1.
2019-04-18 13:50:26 -07:00
Patrick Walton
224c8e85b9
Create separate shaders for monochrome and multicolor tiles.
...
This is preparation for fixing subpixel AA.
2019-03-22 14:28:31 -07:00
Patrick Walton
26fea26f87
Allow construction of a `Transform3DF32` from a quaternion describing a
...
rotation.
Closes #111 .
2019-03-20 16:27:28 -07:00
Patrick Walton
a0aeb124ad
Merge pull request #112 from asajeffrey/geometry-perspective-post-mul
...
Add Perspective::post_mul
2019-03-20 14:26:11 -07:00
Patrick Walton
6ca5dc5f62
Add basic barrel distortion support for VR
2019-03-20 13:41:04 -07:00
Alan Jeffrey
1769246e5a
Add Perspective::post_mul
2019-03-20 13:59:55 -05:00
Patrick Walton
e212a839b4
Get device orientation changes partially working
2019-03-14 19:13:27 -07:00
Patrick Walton
6062676d0e
Add tooltips to the buttons in the demo
2019-03-06 11:33:59 -08:00
Patrick Walton
4dff13ef00
Use an advancing cursor when laying out UI elements
2019-03-06 10:47:52 -08:00
Patrick Walton
ad0691c146
Move the generic UI code in the renderer crate to a separate crate
2019-03-05 15:13:55 -08:00
Patrick Walton
bc80490158
Remove raw GL code from the demo
2019-03-05 13:57:28 -08:00
Patrick Walton
ae450b063e
WIP: Factor out GL code
2019-03-04 14:55:32 -08:00
Patrick Walton
1e3298fdb7
Switch to guard-band style clipping to eliminate artefacts
2019-02-22 13:15:00 -08:00
Patrick Walton
0da196aa92
Scale the SVG appropriately in the demo
2019-02-21 20:19:42 -08:00
Patrick Walton
66ee901e43
Close the path if necessary when rebuilding it for clipping
2019-02-21 11:42:48 -08:00
Patrick Walton
fc62e9bc71
Subdivide offset curves to an error bound.
2019-02-20 18:27:27 -08:00
Patrick Walton
3a8478a048
Remove all Lyon dependencies.
...
We may want to re-merge at a later date, but for now all relevant algorithms
have been appropriately SIMD-ified.
2019-02-20 16:46:50 -08:00
Patrick Walton
23943c7428
Add a flag to specify whether contours are closed
2019-02-20 16:32:40 -08:00
Patrick Walton
b9e3952246
Reimplement segment offsetting
2019-02-20 16:21:58 -08:00
Patrick Walton
d75ed71af4
WIP before moving to a segment basis
2019-02-20 12:41:43 -08:00
Patrick Walton
9af3bac11f
Implement depth interpolation, not working yet
2019-02-18 13:42:30 -08:00
Patrick Walton
e4803cfddf
Add some ground to the 3D scene, no depth buffer yet
2019-02-14 18:53:02 -08:00
Patrick Walton
0983812b90
Rotate and scale around the appropriate points in the demo
2019-02-13 16:05:28 -08:00
Patrick Walton
cb9c14bd59
Remove the Pathfinder 2 orientation computation code
2019-02-12 19:56:44 -08:00
Patrick Walton
dbc14a3fc0
Remove the `normals` module, as we now dilate outlines directly
2019-02-12 19:55:58 -08:00
Patrick Walton
e3cca6a676
Remove the `cubic_to_quadratic` module, as it's unneeded now
2019-02-12 19:51:48 -08:00
Patrick Walton
d7f6d9eb3d
Allow the canvas to be dragged in 2D mode
2019-02-12 14:49:24 -08:00
Patrick Walton
f04c000cae
Add a quick check to skip clipping when an outline is entirely inside or
...
outside the clip area
2019-02-09 19:24:30 -08:00
Patrick Walton
725834285b
Refactor the demo a bit
2019-02-08 15:16:53 -08:00
Patrick Walton
a8cc87bfd7
Make the effects window togglable
2019-02-07 16:38:24 -08:00
Patrick Walton
c9a80304dc
Add some more (non-functional) UI widgets to the demo
2019-02-07 14:07:05 -08:00
Patrick Walton
a81850a899
Add window resizing support to the demo
2019-02-06 18:09:37 -08:00
Patrick Walton
a6963d5f3b
Optimize dilation.
2019-02-06 13:48:50 -08:00
Patrick Walton
6920583086
wip
2019-02-06 13:46:19 -08:00
Patrick Walton
b5c73f25f0
wip
2019-02-06 13:45:15 -08:00
Patrick Walton
27e47b4c39
wip
2019-02-06 13:12:53 -08:00
Patrick Walton
8771dd6789
wip: dilation not working yet
2019-02-05 20:10:20 -08:00
Patrick Walton
45dec44a53
wip
2019-02-05 13:21:33 -08:00
Patrick Walton
3d0463999c
Add a SIMD integer rect type
2019-02-05 10:55:01 -08:00
Patrick Walton
fe410e066f
Add a SIMD rect type
2019-02-05 10:03:20 -08:00
Patrick Walton
63b47f1abe
Move basic geometry primitives to the `pathfinder_geometry::basic` module
2019-02-04 20:20:32 -08:00
Patrick Walton
f25682f0f1
Add a defringing shader for subpixel antialiasing, untested as of yet
2019-02-04 16:04:13 -08:00
Patrick Walton
f19757e4cf
Add a fast path for monotonic conversion
2019-02-02 11:12:54 -08:00
Patrick Walton
70e615205e
Optimize monotonic conversion a little bit
2019-02-01 19:10:42 -08:00
Patrick Walton
ca3a8852a6
Add more fast paths to the clipper
2019-02-01 18:25:48 -08:00
Patrick Walton
d08ff40cdf
Add a fast AABB check to the rect clipper
2019-02-01 17:57:26 -08:00
Patrick Walton
4c5e351829
Use a fast path for axis aligned clipping
2019-02-01 17:49:03 -08:00
Patrick Walton
805f0c9fa7
Trait-ify the 2D clipper
2019-02-01 17:27:23 -08:00
Patrick Walton
df59fd9792
Rename `Point4DF32` to `Point3DF32`
2019-02-01 17:07:03 -08:00
Patrick Walton
6a286ab153
Remove `Point3DF32`
2019-02-01 17:05:35 -08:00