Commit Graph

1715 Commits

Author SHA1 Message Date
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
Patrick Walton 677c607a8c Get clips working for canvas 2020-02-16 13:45:15 -08:00
Patrick Walton 0d3bbbd506 Clip entire tiles appropriately.
This doesn't composite masks together, so it's currently incomplete.
2020-02-15 18:01:23 -08:00
Patrick Walton a8019a1a1a Fix mask positioning on OpenGL 2020-02-15 18:00:25 -08:00
Patrick Walton 631e16ce9b Fix flipped Y axis in mask texture positioning 2020-02-15 14:08:22 -08:00
Patrick Walton f26eecae7a Build clip paths before draw paths 2020-02-15 14:04:01 -08:00
Patrick Walton 496b55ee4e Add front-end support for clip paths. They don't do anything yet. 2020-02-15 13:21:12 -08:00
Patrick Walton fefa3c3cd3 Rename `PathObject` to `DrawPath` to differentiate it from a clip path 2020-02-15 12:39:15 -08:00
Patrick Walton 6e28552a44 Add missing shaders 2020-02-14 22:10:04 -08:00
Patrick Walton 0883f54e2d Add a separate mask blit step, in preparation for supporting clips.
We can elide this in the future if there are no clips, but it isn't a huge
performance regression right now, so let's just unconditionally do it.
2020-02-14 21:56:43 -08:00
Patrick Walton 6a73a63336 Factor out mask texture UV calculation, and rename a couple of render commands 2020-02-14 21:37:20 -08:00
Patrick Walton 31becb1570 Flatten objects' tiles ourselves instead of having Rayon do it.
A prerequisite for clips.
2020-02-14 21:20:19 -08:00
Patrick Walton 84ffc3151e Split shaders out into a separate module. 2020-02-14 11:56:38 -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
Patrick Walton 740597d886
Merge pull request #254 from arturoc/remove-log-restriction
Remove log restriction
2020-02-06 08:38:08 -08:00
Patrick Walton 183c802a13
Merge pull request #257 from linkmauve/eijebong
Bump almost all dependencies to their latest version
2020-02-06 08:37:20 -08:00
Emmanuel Gil Peyrot 124472cff1 Regenerate Cargo.lock with the latest changes 2020-02-06 09:39:58 +01: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
Emmanuel Gil Peyrot 03e3a9fded Bump glutin dependency in the example
The API of winit has changed quite a lot in their 0.20 release.
2020-02-06 09:39:50 +01:00
Emmanuel Gil Peyrot d2b8e2cd30 Bump euclid dependency of area-lut 2020-02-06 09:39:50 +01:00
Emmanuel Gil Peyrot fb22aafada Update swf-related crates
swf-tree got renamed into swf-types for their 0.10 release.
2020-02-06 09:39:50 +01:00
Emmanuel Gil Peyrot 2d2bc14e5c Remove unused import 2020-02-06 08:45:14 +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
Patrick Walton 9a2e4f0b6d
Merge pull request #259 from linkmauve/fix-missing-quickcheck
Add quickcheck build-dependency
2020-02-05 15:24:28 -08:00
Patrick Walton a66ed4c073 Specify tile texture coordinates as an affine transform.
Part of the groundwork for gradients.
2020-02-05 13:59:32 -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