From c4d4ac1073fee39023b5ccefd588951dcbf810a4 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Thu, 6 Nov 2025 09:18:14 +0100 Subject: [PATCH 1/2] Updates crates from linebender ecosystem --- Cargo.lock | 224 +++++++++++------- Cargo.toml | 8 +- .../document/overlays/utility_types_vello.rs | 23 +- .../src/vector/algorithms/offset_subpath.rs | 7 +- node-graph/gsvg-renderer/src/renderer.rs | 42 ++-- node-graph/wgpu-executor/src/lib.rs | 8 +- .../per_pixel_adjust_runtime.rs | 1 + 7 files changed, 193 insertions(+), 120 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bbef9bbbbb..ef923e0f00 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/Cargo.toml b/Cargo.toml index 3f7d16edc6..024f4b0eae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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"] } diff --git a/editor/src/messages/portfolio/document/overlays/utility_types_vello.rs b/editor/src/messages/portfolio/document/overlays/utility_types_vello.rs index c188d3b574..a1e52df2ea 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_types_vello.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_types_vello.rs @@ -998,15 +998,20 @@ impl OverlayContextInternal { data[index..index + 4].copy_from_slice(&rgba); } - let image = peniko::Image { - data: data.into(), - format: peniko::ImageFormat::Rgba8, - width: PATTERN_WIDTH, - height: PATTERN_HEIGHT, - x_extend: peniko::Extend::Repeat, - y_extend: peniko::Extend::Repeat, - alpha: 1.0, - quality: peniko::ImageQuality::default(), + 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, + quality: peniko::ImageQuality::default(), + alpha: 1.0, + }, }; let path = self.push_path(subpaths, transform); diff --git a/node-graph/gcore/src/vector/algorithms/offset_subpath.rs b/node-graph/gcore/src/vector/algorithms/offset_subpath.rs index e4d43e7516..a830f5c1c0 100644 --- a/node-graph/gcore/src/vector/algorithms/offset_subpath.rs +++ b/node-graph/gcore/src/vector/algorithms/offset_subpath.rs @@ -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 diff --git a/node-graph/gsvg-renderer/src/renderer.rs b/node-graph/gsvg-renderer/src/renderer.rs index dda50dd321..92541a3af2 100644 --- a/node-graph/gsvg-renderer/src/renderer.rs +++ b/node-graph/gsvg-renderer/src/renderer.rs @@ -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()); @@ -941,21 +940,24 @@ impl Render for Table { 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. { @@ -1298,10 +1300,17 @@ impl Render for Table> { } } - 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> { } } - 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())); diff --git a/node-graph/wgpu-executor/src/lib.rs b/node-graph/wgpu-executor/src/lib.rs index 9fd7e43175..5c9d64f18b 100644 --- a/node-graph/wgpu-executor/src/lib.rs +++ b/node-graph/wgpu-executor/src/lib.rs @@ -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(()) diff --git a/node-graph/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs b/node-graph/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs index 763b1e1e30..9c92147613 100644 --- a/node-graph/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs +++ b/node-graph/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs @@ -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, From 4a44312edb286afbbde5b99d18bb17eb8e1b44d1 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Fri, 7 Nov 2025 08:18:58 +0100 Subject: [PATCH 2/2] Remove usages of decprecated Clip mix mode --- node-graph/gsvg-renderer/src/renderer.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/node-graph/gsvg-renderer/src/renderer.rs b/node-graph/gsvg-renderer/src/renderer.rs index 92541a3af2..38a03a5914 100644 --- a/node-graph/gsvg-renderer/src/renderer.rs +++ b/node-graph/gsvg-renderer/src/renderer.rs @@ -626,7 +626,7 @@ impl Render for Table { 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); @@ -1052,7 +1052,7 @@ impl Render for Table { 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.); @@ -1066,7 +1066,7 @@ impl Render for Table { 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.);