Patrick Walton
2db4cfcfed
Uncomment round join code in the NanoVG demo now that it doesn't crash
2020-03-31 13:32:23 -07:00
Patrick Walton
40377d657a
Prevent taking the square root of a negative number in the half-angle formula
2020-03-31 13:32:23 -07:00
Patrick Walton
f142f045aa
Detect coincident points and bail out of the line join code as necessary.
2020-03-31 13:31:22 -07:00
Patrick Walton
c7ca630aad
Search backward for a non-coincident point if the two ending points of a capped
...
stroke are coincident.
This prevents a divide by zero in normalization.
2020-03-31 13:29:47 -07:00
Patrick Walton
9212c742b7
Avoid taking the square root of a negative number in `arc_from_cos()`.
2020-03-31 13:28:55 -07:00
Patrick Walton
df4021e3c5
Limit the number of trips through the round join loop.
...
This is a safety measure to prevent infinite loops.
2020-03-31 13:27:47 -07:00
Patrick Walton
93f5fbc6d2
Add convenience constructors: `vec2f`, `vec2i`, `Vector2F::zero()`,
...
`Vector2I::zero()`
2020-03-31 11:29:21 -07:00
Patrick Walton
d83f54457c
Merge pull request #290 from s3bk/patch-1
...
add Contour::clear
2020-03-30 22:01:04 -07:00
Patrick Walton
4af74f225d
Add support to canvas for the commonly-used `textBaseline` values
2020-03-30 22:00:13 -07:00
Patrick Walton
9a0fbe1d11
Flesh out the NanoVG demo yet more
2020-03-30 21:33:20 -07:00
Patrick Walton
f1d7a0bfa3
Make the gradient construction methods more convenient
2020-03-30 21:32:55 -07:00
Patrick Walton
6d6b5191bb
Clean up the `text` module inside `canvas` a bit
2020-03-30 21:32:30 -07:00
Patrick Walton
e864536b31
Add a `From` implementation to `FillStyle` and use it in `canvas` for brevity
2020-03-30 21:31:18 -07:00
Patrick Walton
f1d5906c9e
Switch to my branch of `skribo` for much better `fill_text()` performance
2020-03-30 21:30:14 -07:00
Patrick Walton
7ac822bc2e
Cache image hashes.
2020-03-30 16:48:01 -07:00
Patrick Walton
cf78ac4569
Fix image pattern texture atlas logic.
2020-03-30 16:19:03 -07:00
Patrick Walton
a1f0ae097a
Add thumbnail images to the NanoVG demo
2020-03-30 16:18:41 -07:00
Patrick Walton
257067e368
Flesh out the NanoVG example even more
2020-03-28 12:45:23 -07:00
Sebastian
cb91f40d7a
add Contour::clear
2020-03-28 19:22:39 +03:00
Patrick Walton
ed2807eb84
Flesh out the NanoVG demo some more
2020-03-27 20:53:57 -07:00
Patrick Walton
9723fa441b
Update `image`, `glutin`, and `jni` crates.
...
From #277 .
2020-03-27 15:49:26 -07:00
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
6239356d89
Add a `Debug` impl for `Path2D`
2020-03-27 15:05:10 -07:00
Patrick Walton
6eb0232aad
Add `precision highp sampler2D` everywhere so our winding numbers don't get clipped
...
Closes #280 .
2020-03-27 14:53:00 -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
b29ffdf3fa
Add missing packed comparisons to the scalar implementation of `I32x2`
2020-03-27 10:04:42 -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
51277a2027
Merge pull request #288 from kyythane/master
...
Add derive(Clone) to no text font context
2020-03-25 16:58:04 -07:00
Lillian Primrose
22d54a82ca
CanvasFontContext now implements .clone()
2020-03-24 22:15:09 -04:00
Patrick Walton
0f5de612f9
Merge pull request #281 from zimond/master
...
Use instant crate to build for wasm32 target
2020-03-09 17:17:09 -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
2548ab853a
Unify solid tiles and render target tiles.
...
This commit also removes old shaders from the manifest.
2020-03-05 12:22:01 -08:00
Patrick Walton
9935c9fdff
Don't distinguish between render targets and other images in the texture atlas
...
allocator
2020-03-04 19:41:24 -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
27357a23d3
Separate the `AddPaintData` render command into different subcommands
2020-03-04 15:50:53 -08:00
Patrick Walton
e50039f4c2
Create framebuffers for every texture page
2020-03-04 12:35:07 -08:00
Patrick Walton
a3736859ba
Rename "paint texture" to just "texture page"
2020-03-04 12:09:08 -08:00
乌戈
22f9c3bf6e
Use instant crate to build for wasm32 target
2020-03-05 01:54:36 +08:00
Patrick Walton
d0f4579864
Move `RenderTargetId` out of the `pattern` module
2020-03-03 15:50:48 -08:00
Patrick Walton
2beb2bb126
Apply path transforms to paints
2020-03-03 14:26:38 -08:00
Patrick Walton
12574101e5
Add a transform field to `DrawPath`.
...
This is currently applied to the outline and should eventually be applied to
paints as well.
2020-03-03 11:18:01 -08:00
Patrick Walton
afd1585d5d
Merge pull request #278 from inferiorhumanorgans/iho/pub-outline
...
Make Path2D#into_outline public
2020-03-03 11:00:00 -08:00
Patrick Walton
468848086a
Use the paint texture uniform belonging to the appropriate program
2020-03-03 10:56:32 -08:00
Patrick Walton
f607b607b0
Composite render targets using tiles, taking the Z-buffer into account.
...
We can do more tile-based optimization, but this should be enough to ensure a
correct rendering.
This temporarily breaks subpixel AA, but it should be fixable by modifying
`blur.fs.glsl`.
Closes #271 .
2020-03-02 20:10:10 -08:00
Alex Zepeda
c8496a1cb2
Make Path2D#into_outline public
2020-03-02 00:14:24 -08:00
Patrick Walton
0f35d9c817
Add an embedded resource loader that places resources directly in the binary.
...
This is useful for WebGL and for downstream crates.io use.
2020-02-28 17:10:53 -08:00
Patrick Walton
ee6c7e0797
Explicitly cast `aTessCoord` to `vec2` for WebGL compatibility
2020-02-28 12:49:21 -08:00
Sebastian K
e2fbde820d
Implement a WebGL backend
...
Signed-off-by: Patrick Walton <pcwalton@mimiga.net>
2020-02-28 10:41:35 -08:00
Patrick Walton
c59b347c62
Mention CoC in the community section
2020-02-28 10:07:27 -08:00
Patrick Walton
fa2cb9b6e0
Update README to mention chat room
2020-02-28 10:05:39 -08:00
Patrick Walton
d2ae183ed6
Update README
2020-02-28 09:46:42 -08:00
Patrick Walton
b4681dcf8f
Add a PNG version of the logo
2020-02-28 09:44:09 -08:00
Patrick Walton
40bb1b412c
Implement radial gradients along a line, following Pixman.
2020-02-27 16:24:10 -08:00
Patrick Walton
59783ad457
Merge pull request #272 from adamnemecek/master
...
trimmed whitespace
2020-02-27 09:04:21 -08:00
Adam Nemecek
3d39c5e9b7
trimmed whitespace
2020-02-27 08:13:14 -08:00
Patrick Walton
060241e4d0
Fix Metal backend
2020-02-27 04:07:09 -08:00
Patrick Walton
e913f83eee
Remove obsolete TODOs
2020-02-27 04:03:08 -08:00
Patrick Walton
b998449885
Remove unused #define
2020-02-26 18:46:48 -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
e7de50eb67
Fix sub-Z-buffer indexing error with render targets
2020-02-25 18:36:46 -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
149efeb672
Fix `is_fully_transparent()` for colors.
...
Oops!
2020-02-24 21:22:36 -08:00
Patrick Walton
99d980c0c7
Fix batch breaking logic for blend modes
2020-02-24 21:22:15 -08:00
Patrick Walton
00b7a2ee5a
Factor out 3-element selection into a `select3()` function
2020-02-24 21:21:30 -08:00
Patrick Walton
c96cb62f47
Factor out common functions used in tile alpha shaders
2020-02-24 19:42:32 -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
3245796445
Add support for multiple paint texture pages.
...
This avoids arbitrary limits on the number of images, gradients, etc. you can
have.
2020-02-21 14:46:10 -08:00
Patrick Walton
0b102ec97d
Fix compile error in `convert` utility
2020-02-20 22:23:38 -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
0c3dad974f
Expose individual blend factors in `pathfinder_gpu`
2020-02-20 15:28:37 -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
d9e994e46d
Transition the existing postprocessing system to a layers system.
...
This is preparatory work for composite ops and blurs.
Closes #261 .
2020-02-20 11:21:45 -08:00
Patrick Walton
25f9346160
Add an incomplete port of the NanoVG example app
2020-02-19 11:00:03 -08:00
Patrick Walton
fd070d7a24
Start an `angle` module in `pathfinder_geometry`
2020-02-19 10:59:40 -08:00
Patrick Walton
95d5fab5ef
Minor cleanup in `pathfinder_canvas`
2020-02-19 10:59:40 -08:00
Patrick Walton
cc9711e151
Transform some paints in the canvas API
2020-02-18 16:06:39 -08:00
Patrick Walton
3f79927eb1
Allow the paint texture to grow a bit
2020-02-18 15:06:09 -08:00
Patrick Walton
d97eb32566
Add a (somewhat inefficient) HSLA to RGBA conversion function
2020-02-18 14:36:26 -08:00
Patrick Walton
df150dea8a
Add a method to fetch the center of a rect
2020-02-18 14:36:10 -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
28c0811daa
Fix `pathfinder_swf` build
2020-02-17 15:24:21 -08:00
Patrick Walton
a383c9a2ab
Fix build of `pathfinder_text`
2020-02-17 14:55:05 -08:00
Patrick Walton
3ad1c25796
Implement the even-odd fill rule
2020-02-17 14:44:48 -08:00
Patrick Walton
243f2cc9b2
Add basic, incomplete support for clip paths in SVG
2020-02-16 15:02:37 -08:00