Patrick Walton
b6762cecb8
Don't include the closing segment when printing a path as a string.
...
Closes #279 .
Closes #282 .
2020-03-27 15:40:27 -07:00
Patrick Walton
7b53cc6731
Close all subpaths right before filling them.
...
Closes #269 .
2020-03-27 14:50:02 -07:00
Patrick Walton
c258616bad
Add `Path2D::add_path()`
2020-03-27 12:33:06 -07:00
Patrick Walton
15718d297c
Add `Contour::with_capacity()` from #289
2020-03-27 10:06:56 -07:00
Patrick Walton
55df287fec
Move radial gradients from the CPU to the GPU
2020-03-26 21:24:20 -07:00
Patrick Walton
0c24619dd0
Add a `clear` method to `Outline` as suggested in #289
2020-03-26 08:34:47 -07:00
Patrick Walton
0c93045f50
Replace the individual tile shaders with an ubershader
2020-03-25 21:59:51 -07:00
Patrick Walton
0b0c45a49a
Collapse linear gradients down to a single 256x1 sliver instead of a 256x256
...
square
2020-03-05 16:58:26 -08:00
Patrick Walton
a8f7438cd9
Remove transforms from paths.
...
Paints aren't scale-invariant when rendered into the texture atlas, so they
actually do need individual transforms.
2020-03-04 16:28:21 -08:00
Patrick Walton
d0f4579864
Move `RenderTargetId` out of the `pattern` module
2020-03-03 15:50:48 -08:00
Adam Nemecek
3d39c5e9b7
trimmed whitespace
2020-02-27 08:13:14 -08:00
Patrick Walton
e913f83eee
Remove obsolete TODOs
2020-02-27 04:03:08 -08:00
Patrick Walton
3a014d78eb
Implement a blur filter for canvas shadows
2020-02-26 18:43:41 -08:00
Patrick Walton
d1c7da8bd2
Implement pattern repeating and image smoothing control
2020-02-26 14:56:05 -08:00
Patrick Walton
77b3555828
Separate opacity out from paint.
...
This allows `globalAlpha` to work on render targets.
2020-02-26 12:43:07 -08:00
Patrick Walton
1deb53fa9c
Implement the remaining Porter-Duff compositing operators
2020-02-25 18:37:23 -08:00
Patrick Walton
0a3f64eb44
Implement the difference and exclusion blend modes
2020-02-25 14:55:58 -08:00
Patrick Walton
a8e33d3d3d
Add the soft light blend mode
2020-02-25 14:39:06 -08:00
Patrick Walton
9b4217300f
Implement the source-in, destination-in, source-out, and destination-atop blend
...
modes to round out the assortment of Porter-Duff blend modes
2020-02-25 12:52:11 -08:00
Patrick Walton
02012431ca
Implement color dodge and color burn blend modes
2020-02-25 11:37:42 -08:00
Patrick Walton
5b228ed825
Implement multiply, screen, hard light, and overlay blend modes.
2020-02-24 21:23:17 -08:00
Patrick Walton
5421525eaa
Implement the HSL filters (called "non-separable blend modes" in the spec).
...
These cannot be implemented with the standard OpenGL blending functions, so we
have to do them manually in a shader, which requires a good deal of machinery
to create intermediate framebuffers and so forth.
2020-02-24 15:37:44 -08:00
Patrick Walton
67d12adb6c
Replace layers with render targets, which can be used as patterns.
...
This allows us to efficiently handle a lot of workloads that require multiple
HTML canvases, without CPU readback. For example, you can render paths to a
render target, then turn that render target into a repeating pattern that you
fill other paths with. Or you can render paths to a render target and then
composite that render target as a whole with a blend mode.
This introduces a new `DrawRenderTarget` render command that blits a render
target without any paths involved. This is basically just a hack that works
around the fact that our tiled renderer doesn't yet support effects that widen
the ink region (i.e. blurs). It can be removed once we have that support.
2020-02-21 22:14:18 -08:00
Patrick Walton
36538d5748
Implement a few more blend modes and switch to premultiplied alpha for layer
...
compositing
2020-02-20 22:22:15 -08:00
Patrick Walton
4933efb513
Add Lighten and Darken composite ops
2020-02-20 20:38:43 -08:00
Patrick Walton
ab55b9509b
Fix handling of solid tiles with the Clear blend mode
2020-02-20 18:15:20 -08:00
Patrick Walton
6acd2d91f7
Implement `clear_rect()` in the canvas front-end by introducing the concept of
...
per-path blend modes.
These should be useful for some canvas composite operations as well.
2020-02-20 15:52:40 -08:00
Patrick Walton
16a2de88df
Rename "postprocessing" to "effects" and start initial work on composite ops
2020-02-20 14:22:07 -08:00
Patrick Walton
cc9711e151
Transform some paints in the canvas API
2020-02-18 16:06:39 -08:00
Patrick Walton
dcd12279d4
Fix counterclockwise arc logic
2020-02-18 14:36:02 -08:00
Patrick Walton
4419553acc
Clamp gradient time to [0, 1]
2020-02-18 14:35:37 -08:00
Patrick Walton
3ad1c25796
Implement the even-odd fill rule
2020-02-17 14:44:48 -08:00
Patrick Walton
90445bac7e
Implement basic support for non-repeating image patterns.
2020-02-11 17:20:21 -08:00
Patrick Walton
aad467e716
Implement basic radial gradients.
...
This doesn't handle the case where the circles are not concentric yet.
2020-02-10 22:15:50 -08:00
Patrick Walton
5a21557a6d
Implement basic linear gradients.
...
This is not a very efficient implementation yet, but it seems to work.
2020-02-10 16:01:05 -08:00
Emmanuel Gil Peyrot
6ce416e77c
Bump all outdated dependencies
...
I’m pleasantly surprised that none of these required any (visible) code
change, but tests pass so let’s go with that. :)
2020-02-06 09:39:50 +01:00
Patrick Walton
706b6dbd1d
Add an API for gradients to the canvas frontend, not implemented yet
2020-02-05 20:01:11 -08:00
Emmanuel Gil Peyrot
cc6fe7864b
Add quickcheck build-dependency
...
quickcheck usage in pathfinder_content had been added in
b8f622203a
, but not to the Cargo.toml.
This makes tests pass again.
2020-02-05 14:35:20 +01:00
Patrick Walton
b269723254
Switch to per-pixel texture lookup for paints.
...
This is a prerequisite for supporting gradients and images.
2020-02-04 21:50:13 -08:00
Patrick Walton
2db43797c3
Split colors out into their own crate.
...
A lot of downstream consumers of `pathfinder_gpu` want to use colors without
the path stuff.
2020-01-31 09:17:04 +01:00
Patrick Walton
eb66459ef4
Fold the `.round()` method on SIMD vectors into float-to-int conversion.
...
This drops our requirements from SSE4.1 to SSE2.
Closes #241 .
2019-12-29 15:05:01 -08:00
Patrick Walton
e9c3fe6f31
Allow overloaded `*` to work between transforms and line segments and
...
transforms and rects
2019-07-12 11:59:04 -07:00
Patrick Walton
437eda96da
Overload `*` between transforms and points
2019-07-12 11:55:01 -07:00
Patrick Walton
2c984de1ea
Add convenience translation, rotation, and scaling methods to `Transform2D`
2019-07-12 11:34:48 -07:00
Patrick Walton
1eb28a5539
Fix incorrect definition of 2D transform multiplication
2019-07-12 11:26:09 -07:00
Patrick Walton
bcac119324
Rename `Transform2DF` to `Transform2F` and `Transform3DF` to `Transform4F`
2019-07-11 14:59:10 -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
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