Update Linebender-related dependencies (#3349)

* Updates crates from linebender ecosystem

* Remove usages of decprecated Clip mix mode
This commit is contained in:
Dennis Kobert 2025-11-08 08:59:00 +01:00 committed by GitHub
parent 6b315c3b68
commit 68e67055d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 196 additions and 123 deletions

224
Cargo.lock generated
View File

@ -92,7 +92,7 @@ dependencies = [
"log",
"ndk",
"ndk-context",
"ndk-sys 0.6.0+11769913",
"ndk-sys",
"num_enum",
"thiserror 1.0.69",
]
@ -876,9 +876,9 @@ dependencies = [
[[package]]
name = "color"
version = "0.3.1"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ae467d04a8a8aea5d9a49018a6ade2e4221d92968e8ce55a48c0b1164e5f698"
checksum = "a18ef4657441fb193b65f34dc39b3781f0dfec23d3bd94d0eeb4e88cde421edb"
[[package]]
name = "color_quant"
@ -1018,6 +1018,17 @@ dependencies = [
"libc",
]
[[package]]
name = "core-graphics-types"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
dependencies = [
"bitflags 2.9.3",
"core-foundation 0.10.1",
"libc",
]
[[package]]
name = "core_maths"
version = "0.1.1"
@ -1617,6 +1628,15 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "font-types"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "511e2c18a516c666d27867d2f9821f76e7d591f762e9fc41dd6cc5c90fe54b0b"
dependencies = [
"bytemuck",
]
[[package]]
name = "fontconfig-cache-parser"
version = "0.2.0"
@ -1679,7 +1699,7 @@ dependencies = [
"objc2-core-foundation",
"objc2-core-text",
"objc2-foundation",
"peniko",
"peniko 0.4.0",
"read-fonts 0.29.3",
"roxmltree",
"smallvec",
@ -2111,7 +2131,7 @@ dependencies = [
"glam",
"graphene-core-shaders",
"image",
"kurbo",
"kurbo 0.12.0",
"log",
"lyon_geom",
"node-macro",
@ -2189,7 +2209,7 @@ dependencies = [
"graphene-core-shaders",
"graphene-raster-nodes-shaders",
"image",
"kurbo",
"kurbo 0.12.0",
"ndarray",
"node-macro",
"num-traits",
@ -2255,7 +2275,7 @@ dependencies = [
"dyn-any",
"glam",
"graphene-core",
"kurbo",
"kurbo 0.12.0",
"log",
"num-traits",
"serde",
@ -2280,7 +2300,7 @@ dependencies = [
"graphite-desktop-embedded-resources",
"graphite-desktop-wrapper",
"libc",
"metal",
"metal 0.31.0",
"muda",
"objc",
"open",
@ -2373,7 +2393,7 @@ dependencies = [
"image",
"interpreted-executor",
"js-sys",
"kurbo",
"kurbo 0.12.0",
"log",
"num_enum",
"once_cell",
@ -3153,6 +3173,17 @@ name = "kurbo"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62"
dependencies = [
"arrayvec",
"euclid",
"smallvec",
]
[[package]]
name = "kurbo"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32"
dependencies = [
"arrayvec",
"euclid",
@ -3221,6 +3252,12 @@ dependencies = [
"redox_syscall",
]
[[package]]
name = "linebender_resource_handle"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4"
[[package]]
name = "linux-raw-sys"
version = "0.9.4"
@ -3369,7 +3406,22 @@ checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e"
dependencies = [
"bitflags 2.9.3",
"block",
"core-graphics-types",
"core-graphics-types 0.1.3",
"foreign-types 0.5.0",
"log",
"objc",
"paste",
]
[[package]]
name = "metal"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605"
dependencies = [
"bitflags 2.9.3",
"block",
"core-graphics-types 0.2.0",
"foreign-types 0.5.0",
"log",
"objc",
@ -3430,26 +3482,27 @@ dependencies = [
[[package]]
name = "naga"
version = "25.0.1"
version = "26.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632"
checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c"
dependencies = [
"arrayvec",
"bit-set",
"bitflags 2.9.3",
"cfg-if",
"cfg_aliases",
"codespan-reporting",
"half",
"hashbrown",
"hexf-parse",
"indexmap",
"libm",
"log",
"num-traits",
"once_cell",
"petgraph 0.8.2",
"rustc-hash 1.1.0",
"spirv",
"strum 0.26.3",
"thiserror 2.0.16",
"unicode-ident",
]
@ -3495,7 +3548,7 @@ dependencies = [
"bitflags 2.9.3",
"jni-sys",
"log",
"ndk-sys 0.6.0+11769913",
"ndk-sys",
"num_enum",
"raw-window-handle",
"thiserror 1.0.69",
@ -3507,15 +3560,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
[[package]]
name = "ndk-sys"
version = "0.5.0+25.2.9519653"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
dependencies = [
"jni-sys",
]
[[package]]
name = "ndk-sys"
version = "0.6.0+11769913"
@ -3556,7 +3600,7 @@ dependencies = [
"proc-macro-error2",
"proc-macro2",
"quote",
"strum 0.27.2",
"strum",
"syn 2.0.106",
]
@ -3973,7 +4017,7 @@ checksum = "13e57638545cf2ba4c3e72cc5715e53b1880b829cc3dbefda3d1700c58efe723"
dependencies = [
"fontique",
"hashbrown",
"peniko",
"peniko 0.4.0",
"skrifa 0.31.3",
"swash",
]
@ -4015,7 +4059,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f9529efd019889b2a205193c14ffb6e2839b54ed9d2720674f10f4b04d87ac9"
dependencies = [
"color",
"kurbo",
"kurbo 0.11.3",
"smallvec",
]
[[package]]
name = "peniko"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3c76095c9a636173600478e0373218c7b955335048c2bcd12dc6a79657649d8"
dependencies = [
"color",
"kurbo 0.12.0",
"linebender_resource_handle",
"smallvec",
]
@ -4088,7 +4144,6 @@ dependencies = [
"fixedbitset",
"hashbrown",
"indexmap",
"serde",
]
[[package]]
@ -4616,7 +4671,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04ca636dac446b5664bd16c069c00a9621806895b8bb02c2dc68542b23b8f25d"
dependencies = [
"bytemuck",
"font-types",
"font-types 0.9.0",
]
[[package]]
@ -4626,7 +4681,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8941f8e9d5f8ad3aebea330d01ac68c0167600eb31a86ecd86e97be4d13b51f5"
dependencies = [
"bytemuck",
"font-types",
"font-types 0.9.0",
]
[[package]]
name = "read-fonts"
version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358"
dependencies = [
"bytemuck",
"font-types 0.10.0",
]
[[package]]
@ -4862,7 +4927,7 @@ version = "0.9.0"
source = "git+https://github.com/Rust-GPU/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f#3f05f5482824e3b1fbb44c9ef90a8795a0204c7c"
dependencies = [
"serde",
"strum 0.27.2",
"strum",
"thiserror 2.0.16",
]
@ -5266,6 +5331,16 @@ dependencies = [
"read-fonts 0.34.0",
]
[[package]]
name = "skrifa"
version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841"
dependencies = [
"bytemuck",
"read-fonts 0.35.0",
]
[[package]]
name = "slab"
version = "0.4.11"
@ -5466,35 +5541,13 @@ version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "strum"
version = "0.26.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
dependencies = [
"strum_macros 0.26.4",
]
[[package]]
name = "strum"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
dependencies = [
"strum_macros 0.27.2",
]
[[package]]
name = "strum_macros"
version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
dependencies = [
"heck",
"proc-macro2",
"quote",
"rustversion",
"syn 2.0.106",
"strum_macros",
]
[[package]]
@ -5533,7 +5586,7 @@ version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc"
dependencies = [
"kurbo",
"kurbo 0.11.3",
"siphasher",
]
@ -6243,7 +6296,7 @@ dependencies = [
"flate2",
"fontdb 0.22.0",
"imagesize",
"kurbo",
"kurbo 0.11.3",
"log",
"pico-args",
"roxmltree",
@ -6270,7 +6323,7 @@ dependencies = [
"flate2",
"fontdb 0.23.0",
"imagesize",
"kurbo",
"kurbo 0.11.3",
"log",
"pico-args",
"roxmltree",
@ -6329,15 +6382,16 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "vello"
version = "0.5.0"
source = "git+https://github.com/linebender/vello.git?rev=87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b#87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71acbd6b5f7f19841425845c113a89a54bbf60556ae39e7d0182a6f80ce37f5b"
dependencies = [
"bytemuck",
"futures-intrusive",
"log",
"peniko",
"peniko 0.5.0",
"png",
"skrifa 0.31.3",
"skrifa 0.37.0",
"static_assertions",
"thiserror 2.0.16",
"vello_encoding",
@ -6347,20 +6401,22 @@ dependencies = [
[[package]]
name = "vello_encoding"
version = "0.5.0"
source = "git+https://github.com/linebender/vello.git?rev=87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b#87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfd5e0b9fec91df34a09fbcbbed474cec68d05691b590a911c7af83c4860ae42"
dependencies = [
"bytemuck",
"guillotiere",
"peniko",
"skrifa 0.31.3",
"peniko 0.5.0",
"skrifa 0.37.0",
"smallvec",
]
[[package]]
name = "vello_shaders"
version = "0.5.0"
source = "git+https://github.com/linebender/vello.git?rev=87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b#87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c381dde4e7d0d7957df0c0e3f8a7cc0976762d3972d97da5c71464e57ffefd3"
dependencies = [
"bytemuck",
"log",
@ -6658,12 +6714,13 @@ checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3"
[[package]]
name = "wgpu"
version = "25.0.2"
version = "26.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9"
checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798"
dependencies = [
"arrayvec",
"bitflags 2.9.3",
"cfg-if",
"cfg_aliases",
"document-features",
"hashbrown",
@ -6686,9 +6743,9 @@ dependencies = [
[[package]]
name = "wgpu-core"
version = "25.0.2"
version = "26.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500"
checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9"
dependencies = [
"arrayvec",
"bit-set",
@ -6718,27 +6775,27 @@ dependencies = [
[[package]]
name = "wgpu-core-deps-apple"
version = "25.0.0"
version = "26.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d"
checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-core-deps-emscripten"
version = "25.0.0"
version = "26.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445"
checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-core-deps-windows-linux-android"
version = "25.0.0"
version = "26.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46"
checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14"
dependencies = [
"wgpu-hal",
]
@ -6764,9 +6821,9 @@ dependencies = [
[[package]]
name = "wgpu-hal"
version = "25.0.2"
version = "26.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f968767fe4d3d33747bbd1473ccd55bf0f6451f55d733b5597e67b5deab4ad17"
checksum = "a8d0e67224cc7305b3b4eb2cc57ca4c4c3afc665c1d1bee162ea806e19c47bdd"
dependencies = [
"android_system_properties",
"arrayvec",
@ -6777,7 +6834,7 @@ dependencies = [
"bytemuck",
"cfg-if",
"cfg_aliases",
"core-graphics-types",
"core-graphics-types 0.2.0",
"glow",
"glutin_wgl_sys",
"gpu-alloc",
@ -6789,13 +6846,14 @@ dependencies = [
"libc",
"libloading",
"log",
"metal",
"metal 0.32.0",
"naga",
"ndk-sys 0.5.0+25.2.9519653",
"ndk-sys",
"objc",
"ordered-float 4.6.0",
"parking_lot",
"portable-atomic",
"portable-atomic-util",
"profiling",
"range-alloc",
"raw-window-handle",
@ -6811,9 +6869,9 @@ dependencies = [
[[package]]
name = "wgpu-types"
version = "25.0.0"
version = "26.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc"
checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2"
dependencies = [
"bitflags 2.9.3",
"bytemuck",

View File

@ -106,7 +106,7 @@ quote = "1.0"
chrono = "0.4"
ron = "0.11"
fastnoise-lite = "1.1"
wgpu = { version = "25.0", features = [
wgpu = { version = "26.0", features = [
# We don't have wgpu on multiple threads (yet) https://github.com/gfx-rs/wgpu/blob/trunk/CHANGELOG.md#wgpu-types-now-send-sync-on-wasm
"fragile-send-sync-non-atomic-wasm",
"spirv",
@ -138,8 +138,8 @@ winit = { git = "https://github.com/rust-windowing/winit.git" }
keyboard-types = "0.8"
url = "2.5"
tokio = { version = "1.29", features = ["fs", "macros", "io-std", "rt"] }
vello = { git = "https://github.com/linebender/vello.git", rev = "87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b" } # TODO switch back to stable when a release is made
vello_encoding = { git = "https://github.com/linebender/vello.git", rev = "87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b" } # TODO switch back to stable when a release is made
vello = { version = "0.6" }
vello_encoding = { version = "0.6" }
resvg = "0.45"
usvg = "0.45"
rand = { version = "0.9", default-features = false, features = ["std_rng"] }
@ -178,7 +178,7 @@ syn = { version = "2.0", default-features = false, features = [
"extra-traits",
"proc-macro",
] }
kurbo = { version = "0.11", features = ["serde"] }
kurbo = { version = "0.12", features = ["serde"] }
lyon_geom = "1.0"
petgraph = { version = "0.7", default-features = false, features = ["graphmap"] }
half = { version = "2.4", default-features = false, features = ["bytemuck"] }

View File

@ -998,15 +998,20 @@ impl OverlayContextInternal {
data[index..index + 4].copy_from_slice(&rgba);
}
let image = peniko::Image {
let image = peniko::ImageBrush {
image: peniko::ImageData {
data: data.into(),
format: peniko::ImageFormat::Rgba8,
width: PATTERN_WIDTH,
height: PATTERN_HEIGHT,
alpha_type: peniko::ImageAlphaType::Alpha,
},
sampler: peniko::ImageSampler {
x_extend: peniko::Extend::Repeat,
y_extend: peniko::Extend::Repeat,
alpha: 1.0,
quality: peniko::ImageQuality::default(),
alpha: 1.0,
},
};
let path = self.push_path(subpaths, transform);

View File

@ -4,8 +4,6 @@ use kurbo::{BezPath, Join, ParamCurve, PathEl, PathSeg};
/// Value to control smoothness and mathematical accuracy to offset a cubic Bezier.
const CUBIC_REGULARIZATION_ACCURACY: f64 = 0.5;
/// Accuracy of fitting offset curve to Bezier paths.
const CUBIC_TO_BEZPATH_ACCURACY: f64 = 1e-3;
/// Constant used to determine if `f64`s are equivalent.
pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-7;
/// Squared version to avoid sqrt in distance checks.
@ -36,9 +34,8 @@ pub fn offset_bezpath(bezpath: &BezPath, distance: f64, join: Join, miter_limit:
return None;
}
let cubic_offset = kurbo::offset::CubicOffset::new_regularized(cubic_bez, distance, CUBIC_REGULARIZATION_ACCURACY);
let fitted = kurbo::fit_to_bezpath(&cubic_offset, CUBIC_TO_BEZPATH_ACCURACY);
let mut fitted = BezPath::new();
kurbo::offset::offset_cubic(cubic_bez, distance, CUBIC_REGULARIZATION_ACCURACY, &mut fitted);
if fitted.segments().count() > MAX_FITTED_SEGMENTS {
None

View File

@ -153,7 +153,7 @@ impl Default for SvgRender {
#[derive(Clone, Debug, Default)]
pub struct RenderContext {
#[cfg(feature = "vello")]
pub resource_overrides: Vec<(peniko::Image, wgpu::Texture)>,
pub resource_overrides: Vec<(peniko::ImageBrush, wgpu::Texture)>,
}
#[derive(Default, Clone, Copy, Hash)]
@ -459,8 +459,7 @@ impl Render for Artboard {
scene.pop_layer();
if self.clip {
let blend_mode = peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcOver);
scene.push_layer(blend_mode, 1., kurbo::Affine::new(transform.to_cols_array()), &rect);
scene.push_clip_layer(kurbo::Affine::new(transform.to_cols_array()), &rect);
}
// Since the content's transform is right multiplied in when rendering the content, we just need to right multiply by the artboard offset here.
let child_transform = transform * DAffine2::from_translation(self.location.as_dvec2());
@ -627,7 +626,7 @@ impl Render for Table<Graphic> {
scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect);
mask_element.render_to_vello(scene, transform_mask, context, &render_params.for_clipper());
scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcIn), 1., kurbo::Affine::IDENTITY, &rect);
scene.push_clip_layer(kurbo::Affine::IDENTITY, &rect);
}
row.element.render_to_vello(scene, transform, context, render_params);
@ -941,21 +940,24 @@ impl Render for Table<Vector> {
let fill = peniko::Brush::Gradient(peniko::Gradient {
kind: match gradient.gradient_type {
GradientType::Linear => peniko::GradientKind::Linear {
GradientType::Linear => peniko::LinearGradientPosition {
start: to_point(start),
end: to_point(end),
},
}
.into(),
GradientType::Radial => {
let radius = start.distance(end);
peniko::GradientKind::Radial {
peniko::RadialGradientPosition {
start_center: to_point(start),
start_radius: 0.,
end_center: to_point(start),
end_radius: radius as f32,
}
.into()
}
},
stops,
interpolation_alpha_space: peniko::InterpolationAlphaSpace::Premultiplied,
..Default::default()
});
let inverse_element_transform = if element_transform.matrix2.determinant() != 0. {
@ -1050,7 +1052,7 @@ impl Render for Table<Vector> {
if wants_stroke_below {
scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect);
vector_table.render_to_vello(scene, parent_transform, _context, &render_params.for_alignment(applied_stroke_transform));
scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, compose), 1., kurbo::Affine::IDENTITY, &rect);
scene.push_layer(peniko::BlendMode::new(peniko::Mix::Normal, compose), 1., kurbo::Affine::IDENTITY, &rect);
do_stroke(scene, 2.);
@ -1064,7 +1066,7 @@ impl Render for Table<Vector> {
scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect);
vector_table.render_to_vello(scene, parent_transform, _context, &render_params.for_alignment(applied_stroke_transform));
scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, compose), 1., kurbo::Affine::IDENTITY, &rect);
scene.push_layer(peniko::BlendMode::new(peniko::Mix::Normal, compose), 1., kurbo::Affine::IDENTITY, &rect);
do_stroke(scene, 2.);
@ -1298,10 +1300,17 @@ impl Render for Table<Raster<CPU>> {
}
}
let image = peniko::Image::new(image.to_flat_u8().0.into(), peniko::ImageFormat::Rgba8, image.width, image.height).with_extend(peniko::Extend::Repeat);
let image_brush = peniko::ImageBrush::new(peniko::ImageData {
data: image.to_flat_u8().0.into(),
format: peniko::ImageFormat::Rgba8,
width: image.width,
height: image.height,
alpha_type: peniko::ImageAlphaType::Alpha,
})
.with_extend(peniko::Extend::Repeat);
let image_transform = transform * *row.transform * DAffine2::from_scale(1. / DVec2::new(image.width as f64, image.height as f64));
scene.draw_image(&image, kurbo::Affine::new(image_transform.to_cols_array()));
scene.draw_image(&image_brush, kurbo::Affine::new(image_transform.to_cols_array()));
if layer {
scene.pop_layer();
@ -1350,14 +1359,17 @@ impl Render for Table<Raster<GPU>> {
}
}
let image = peniko::Image::new(
peniko::Blob::new(LAZY_ARC_VEC_ZERO_U8.deref().clone()),
peniko::ImageFormat::Rgba8,
row.element.data().width(),
row.element.data().height(),
)
let width = row.element.data().width();
let height = row.element.data().height();
let image = peniko::ImageBrush::new(peniko::ImageData {
data: peniko::Blob::new(LAZY_ARC_VEC_ZERO_U8.deref().clone()),
format: peniko::ImageFormat::Rgba8,
width,
height,
alpha_type: peniko::ImageAlphaType::Alpha,
})
.with_extend(peniko::Extend::Repeat);
let image_transform = transform * *row.transform * DAffine2::from_scale(1. / DVec2::new(image.width as f64, image.height as f64));
let image_transform = transform * *row.transform * DAffine2::from_scale(1. / DVec2::new(width as f64, height as f64));
scene.draw_image(&image, kurbo::Affine::new(image_transform.to_cols_array()));
context.resource_overrides.push((image, row.element.data().clone()));

View File

@ -143,18 +143,18 @@ impl WgpuExecutor {
{
let mut renderer = self.vello_renderer.lock().await;
for (image, texture) in context.resource_overrides.iter() {
for (image_brush, texture) in context.resource_overrides.iter() {
let texture_view = wgpu::TexelCopyTextureInfoBase {
texture: texture.clone(),
mip_level: 0,
origin: Origin3d::ZERO,
aspect: TextureAspect::All,
};
renderer.override_image(image, Some(texture_view));
renderer.override_image(&image_brush.image, Some(texture_view));
}
renderer.render_to_texture(&self.context.device, &self.context.queue, scene, &target_texture.view, &render_params)?;
for (image, _) in context.resource_overrides.iter() {
renderer.override_image(image, None);
for (image_brush, _) in context.resource_overrides.iter() {
renderer.override_image(&image_brush.image, None);
}
}
Ok(())

View File

@ -220,6 +220,7 @@ impl PerPixelAdjustGraphicsPipeline {
load: LoadOp::Clear(wgpu::Color::BLACK),
store: StoreOp::Store,
},
depth_slice: None,
})],
depth_stencil_attachment: None,
timestamp_writes: None,