Patrick Walton
e05b5df562
Stop duplicating font names everywhere in the NanoVG demo
2020-04-01 17:31:16 -07:00
Patrick Walton
da9b944e77
Clean up a few uses of `RectF::contract()` and `RectF::dilate()`
2020-04-01 17:27:08 -07:00
Patrick Walton
794dd55038
Add some implicit conversions between scalars and vectors where appropriate
2020-04-01 17:20:32 -07:00
Patrick Walton
40bd13aa5a
Add convenience color construction methods
2020-04-01 16:37:36 -07:00
Patrick Walton
ae97ccea5a
Improve ergonomics of the canvas font interface, and use the right fonts in the
...
NanoVG demo.
2020-04-01 16:25:13 -07:00
Patrick Walton
f823cb9474
Rename `SIL Open Font License.txt` to `LICENSE-SIL` for consistency
2020-04-01 13:24:07 -07:00
Patrick Walton
956b9020e8
Rename `overpass-regular.otf` to `Overpass-Regular.otf`
2020-04-01 13:22:29 -07:00
Patrick Walton
cedc5595db
Fix `canvas_moire`
2020-04-01 13:03:58 -07:00
Patrick Walton
3d71703950
Stop copying images every frame on CPU.
...
We can avoid reuploading them to the GPU every frame as well, but this is a
bigger, and easier, win for now.
2020-04-01 13:01:08 -07:00
Patrick Walton
bf6890b341
Fix `canvas_minimal`
2020-03-31 20:21:27 -07:00
Patrick Walton
7c5c43b50f
Use HiDPI and a larger window size in the NanoVG demo
2020-03-31 20:18:25 -07:00
Patrick Walton
e6d8aab974
Don't draw backwards miters.
2020-03-31 19:38:43 -07:00
Patrick Walton
764953a643
Fix counterclockwise arc drawing logic
2020-03-31 17:59:41 -07:00
Patrick Walton
bf2fd6569b
Fix tests
2020-03-31 17:17:25 -07:00
Patrick Walton
32a56eab85
Stop leaking textures and framebuffers in the OpenGL backend.
...
Closes #264 .
Possibly addresses #286 .
2020-03-31 17:14:28 -07:00
Patrick Walton
bbcd371efc
Show the progress spinners behind thumbnail images in the NanoVG demo
2020-03-31 17:14:06 -07:00
Patrick Walton
2f6071c059
Make solid tiles not use mask 1.
...
Fixes random garbage appearing in the thumbnails in the NanoVG demo.
2020-03-31 14:16:04 -07:00
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