Commit Graph

1681 Commits

Author SHA1 Message Date
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
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 1e84ddf1ff Use the texture allocator to allocate solid colors 2020-02-03 22:24:34 -08:00
Patrick Walton b8f622203a Add a simple quadtree-based texture allocator 2020-01-31 14:38:01 +01: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
Arturo Castro 3be6d70577 remove log restrictions from renderer, demo/common and gl crates 2020-01-28 15:24:21 +01:00
Arturo Castro 7213b3e1cb Remove log restriction
pathfinder-geometry enabled a log feature that restricts logging
to warn for any binary using it.
2020-01-28 12:07:03 +01:00
Patrick Walton cd05eefac7
Merge pull request #252 from s3bk/fix-simd
fix simd for scalar platforms
2020-01-23 19:44:21 -08:00
Patrick Walton 5ea86ccba8 Bump `pathfinder_geometry` and `pathfinder_simd` to version 0.4 2020-01-23 18:24:56 -08:00
Sebastian K de0f9055ed fix scalar simd impls 2020-01-24 00:24:22 +03:00
Patrick Walton 3f72847294 Add a few missing methods to geometry and SIMD; fix SIMD tests 2020-01-14 21:31:22 -08:00
Patrick Walton 422ccbc15c
Merge pull request #250 from servo/i686
Support `pathfinder_simd` on 32-bit x86.
2020-01-14 13:04:28 -08:00
Patrick Walton ee9187849b Support `pathfinder_simd` on 32-bit x86.
Closes #249.
2020-01-14 13:03:31 -08:00
Patrick Walton ce3b40cd5c Make timer queries and framebuffer readback async 2020-01-07 13:03:15 -08: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 0bb6b88859 Stop using AVX2 when packing pixels.
Partially addresses #241.
2019-12-29 12:38:36 -08:00
Patrick Walton 986792349f Use the SSE2 `_mm_movemask_ps` on x86 instead of the SSE4.1 `_mm_test_all_ones`
and `_mm_test_all_zeros`.

Partially addresses #241.
2019-12-29 12:13:58 -08:00
Patrick Walton 7f6374f110
Merge pull request #245 from s3bk/sorted_vector_binary_search
use a binary search for pathfinder_renderer::SortedVector
2019-12-29 11:29:45 -08:00
Patrick Walton dcefd7b70b
Merge pull request #246 from s3bk/usvg_0.8
update usvg to 0.8
2019-12-29 11:29:09 -08:00
Sebastian K e38e2d800f update usvg to 0.8 2019-12-28 11:46:31 +03:00
Sebastian K 805066e65c use a binary search for pathfinder_renderer::SortedVector 2019-12-28 11:14:25 +03:00
Patrick Walton 0662f6433f Allow any texture format to be uploaded; fix Metal compilation on newer rustcs 2019-12-20 11:48:51 -08:00
Patrick Walton 7c655246ae Add some more features to blending, and expand texture upload features 2019-12-19 08:58:02 -08:00
Patrick Walton 9124d9856a Add some more methods to 3D vectors, and a `gluLookAt()` workalike 2019-12-18 15:19:42 -08:00
Patrick Walton 8dabd0a7ea Add RGBA32F support 2019-12-14 13:58:02 -08:00
Patrick Walton 521ab3b5ba Add a 3D vector type 2019-12-07 11:52:35 -08:00
Patrick Walton b912cbbeb4
Merge pull request #242 from SethDusek/master
Bump lyon, font-kit and skribo versions to fix crashes
2019-11-30 15:01:40 -08:00
Kamal Ahmad 29713c5cd9 Bump lyon, font-kit and skribo versions to fix crashes 2019-11-20 22:51:03 +05:00
Patrick Walton fa54868eb1 Add support for single float uniforms to `pathfinder_gpu` 2019-11-15 21:17:50 -08:00
Patrick Walton 9260dbce93 Fix Cargo.toml in `pathfinder_geometry` 2019-11-10 10:33:34 -08:00
Patrick Walton 586d974b7d Update `Cargo.toml`s in preparation for publishing SIMD and geometry 2019-11-10 10:32:41 -08:00
Patrick Walton ff212dce36 Add 2D matrix uniform types and a couple more useful geometry methods 2019-11-10 10:28:20 -08:00
Patrick Walton 5d5d30346b Remove unnecessary dependencies from `pathfinder_gl` 2019-10-19 15:37:17 -07:00
Patrick Walton 99654270c9
Merge pull request #232 from s3bk/PR
fix #219 (minimum stroke thickness)
2019-10-04 20:30:23 -07:00
Patrick Walton 8914cb4977
Merge pull request #236 from est31/master
Remove redundant fixedbitset dependency
2019-09-07 18:22:43 -07:00