Skip to content

Commit 026f18f

Browse files
committed
Upgrade to WGPU v29 (+ latest vello main)
Signed-off-by: Nico Burns <nico@nicoburns.com>
1 parent 1389e05 commit 026f18f

12 files changed

Lines changed: 271 additions & 474 deletions

File tree

Cargo.lock

Lines changed: 94 additions & 338 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ homepage = "https://github.com/dioxuslabs/anyrender"
2222
repository = "https://github.com/dioxuslabs/anyrender"
2323
categories = ["gui"]
2424
edition = "2024"
25-
rust-version = "1.92.0"
25+
rust-version = "1.88.0"
2626

2727
[workspace.dependencies]
2828
# AnyRender dependencies (in-repo)
@@ -52,13 +52,29 @@ color = "0.3"
5252
linebender_resource_handle = "0.1"
5353
peniko = "0.6"
5454
kurbo = "0.13"
55-
vello = { version = "0.8", features = [ "wgpu" ] }
56-
vello_cpu = { version = "0.0.7", default-features = false, features = ["std", "text", "u8_pipeline"] }
57-
vello_hybrid = { version = "0.0.7" }
58-
vello_common = { version = "0.0.7" }
55+
# glifo = { version = "0.0.0" }
56+
# vello = { version = "0.8", features = ["wgpu"] }
57+
# vello_cpu = { version = "0.0.7", default-features = false, features = [
58+
# "std",
59+
# "text",
60+
# "u8_pipeline",
61+
# ] }
62+
# vello_hybrid = { version = "0.0.7" }
63+
# vello_common = { version = "0.0.7" }
64+
glifo = { git = "https://github.com/linebender/vello", rev = "b5c4a3192c1a2a5cc1dc2fe45342de1de95a1dc5" }
65+
vello = { git = "https://github.com/linebender/vello", rev = "b5c4a3192c1a2a5cc1dc2fe45342de1de95a1dc5", features = [
66+
"wgpu",
67+
] }
68+
vello_cpu = { git = "https://github.com/linebender/vello", rev = "b5c4a3192c1a2a5cc1dc2fe45342de1de95a1dc5", default-features = false, features = [
69+
"std",
70+
"text",
71+
"u8_pipeline",
72+
] }
73+
vello_hybrid = { git = "https://github.com/linebender/vello", rev = "b5c4a3192c1a2a5cc1dc2fe45342de1de95a1dc5" }
74+
vello_common = { git = "https://github.com/linebender/vello", rev = "b5c4a3192c1a2a5cc1dc2fe45342de1de95a1dc5" }
5975

6076
# Rendering
61-
wgpu = "28"
77+
wgpu = "29"
6278
raw-window-handle = "0.6.0"
6379
softbuffer = "0.4"
6480
pixels = "0.17"
@@ -78,9 +94,3 @@ wasm-bindgen-futures = "0.4"
7894

7995
# Dev-dependencies
8096
winit = { version = "0.30.2", features = ["rwh_06"] }
81-
82-
# [patch.crates-io]
83-
# vello = { path = "../vello/vello" }
84-
# vello_cpu = { path = "../vello/sparse_strips/vello_cpu" }
85-
# vello_hybrid = { path = "../vello/sparse_strips/vello_hybrid" }
86-
# vello_common = { path = "../vello/sparse_strips/vello_common" }

crates/anyrender/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ pub trait PaintScene: RenderContext {
234234
brush_alpha: f32,
235235
transform: Affine,
236236
glyph_transform: Option<Affine>,
237-
glyphs: impl Iterator<Item = Glyph>,
237+
glyphs: impl Iterator<Item = Glyph> + Clone,
238238
);
239239

240240
/// Draw a rounded rectangle blurred with a gaussian filter.

crates/anyrender_vello/src/window_renderer.rs

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use vello::{
1111
AaConfig, AaSupport, RenderParams, Renderer as VelloRenderer, RendererOptions,
1212
Scene as VelloScene,
1313
};
14-
use wgpu::{Features, Limits, PresentMode, SurfaceError, Texture, TextureFormat, TextureUsages};
14+
use wgpu::{Features, Limits, PresentMode, Texture, TextureFormat, TextureUsages};
1515
use wgpu_context::{
1616
DeviceHandle, SurfaceRenderer, SurfaceRendererConfiguration, TextureConfiguration, WGPUContext,
1717
};
@@ -305,19 +305,12 @@ impl WindowRenderer for VelloWindowRenderer {
305305
});
306306
timer.record_time("cmd");
307307

308-
match render_surface.ensure_current_surface_texture() {
309-
Ok(_) => {}
310-
Err(SurfaceError::Timeout | SurfaceError::Lost | SurfaceError::Outdated) => {
311-
render_surface.clear_surface_texture();
312-
return;
313-
}
314-
Err(SurfaceError::OutOfMemory) => panic!("Out of memory"),
315-
Err(SurfaceError::Other) => panic!("Unknown error getting surface"),
308+
let Ok(texture_view) = render_surface.target_texture_view() else {
309+
// Skip frame in case of error trying to get current surface texture
310+
render_surface.clear_surface_texture();
311+
return;
316312
};
317313

318-
let texture_view = render_surface
319-
.target_texture_view()
320-
.expect("handled errors from ensure_current_surface_texture above");
321314
state
322315
.renderer
323316
.render_to_texture(
@@ -337,9 +330,9 @@ impl WindowRenderer for VelloWindowRenderer {
337330

338331
drop(texture_view);
339332

340-
render_surface
341-
.maybe_blit_and_present()
342-
.expect("handled errors from ensure_current_surface_texture above");
333+
if render_surface.maybe_blit_and_present().is_err() {
334+
return;
335+
}
343336
timer.record_time("present");
344337

345338
render_surface

crates/anyrender_vello_cpu/src/image_renderer.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::VelloCpuScenePainter;
22
use anyrender::{ImageRenderer, RenderContext as AnyRenderContext};
33
use debug_timer::debug_timer;
4-
use vello_cpu::{RenderContext, RenderMode};
4+
use vello_cpu::{RenderContext, RenderMode, Resources};
55

66
pub struct VelloCpuImageRenderer {
77
scene: VelloCpuScenePainter,
@@ -13,16 +13,19 @@ impl ImageRenderer for VelloCpuImageRenderer {
1313

1414
fn new(width: u32, height: u32) -> Self {
1515
Self {
16-
scene: VelloCpuScenePainter(RenderContext::new(width as u16, height as u16)),
16+
scene: VelloCpuScenePainter {
17+
render_ctx: RenderContext::new(width as u16, height as u16),
18+
resources: Resources::new(),
19+
},
1720
}
1821
}
1922

2023
fn resize(&mut self, width: u32, height: u32) {
21-
self.scene.0 = RenderContext::new(width as u16, height as u16);
24+
self.scene.render_ctx = RenderContext::new(width as u16, height as u16);
2225
}
2326

2427
fn reset(&mut self) {
25-
self.scene.0.reset();
28+
self.scene.render_ctx.reset();
2629
}
2730

2831
fn render<F: FnOnce(&mut Self::ScenePainter<'_>)>(&mut self, draw_fn: F, buffer: &mut [u8]) {
@@ -31,13 +34,14 @@ impl ImageRenderer for VelloCpuImageRenderer {
3134
draw_fn(&mut self.scene);
3235
timer.record_time("cmds");
3336

34-
self.scene.0.flush();
37+
self.scene.render_ctx.flush();
3538
timer.record_time("flush");
3639

37-
self.scene.0.render_to_buffer(
40+
self.scene.render_ctx.render_to_buffer(
41+
&mut self.scene.resources,
3842
buffer,
39-
self.scene.0.width(),
40-
self.scene.0.height(),
43+
self.scene.render_ctx.width(),
44+
self.scene.render_ctx.height(),
4145
RenderMode::OptimizeSpeed,
4246
);
4347
timer.record_time("render");
@@ -50,8 +54,8 @@ impl ImageRenderer for VelloCpuImageRenderer {
5054
draw_fn: F,
5155
buffer: &mut Vec<u8>,
5256
) {
53-
let width = self.scene.0.width();
54-
let height = self.scene.0.height();
57+
let width = self.scene.render_ctx.width();
58+
let height = self.scene.render_ctx.height();
5559
buffer.resize(width as usize * height as usize * 4, 0);
5660
self.render(draw_fn, buffer);
5761
}

crates/anyrender_vello_cpu/src/scene.rs

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,24 @@ fn convert_image_cached(image: &peniko::ImageData) -> ImageSource {
3636
.clone()
3737
}
3838

39-
pub struct VelloCpuScenePainter(pub vello_cpu::RenderContext);
39+
pub struct VelloCpuScenePainter {
40+
pub render_ctx: vello_cpu::RenderContext,
41+
pub resources: vello_cpu::Resources,
42+
}
4043

4144
impl VelloCpuScenePainter {
42-
pub fn finish(self) -> Pixmap {
43-
let mut pixmap = Pixmap::new(self.0.width(), self.0.height());
44-
self.0.render_to_pixmap(&mut pixmap);
45+
pub fn finish(mut self) -> Pixmap {
46+
let mut pixmap = Pixmap::new(self.render_ctx.width(), self.render_ctx.height());
47+
self.render_ctx
48+
.render_to_pixmap(&mut self.resources, &mut pixmap);
4549
pixmap
4650
}
4751
}
4852

4953
impl RenderContext for VelloCpuScenePainter {}
5054
impl PaintScene for VelloCpuScenePainter {
5155
fn reset(&mut self) {
52-
self.0.reset();
56+
self.render_ctx.reset();
5357
}
5458

5559
fn push_layer(
@@ -59,8 +63,8 @@ impl PaintScene for VelloCpuScenePainter {
5963
transform: Affine,
6064
clip: &impl Shape,
6165
) {
62-
self.0.set_transform(transform);
63-
self.0.push_layer(
66+
self.render_ctx.set_transform(transform);
67+
self.render_ctx.push_layer(
6468
Some(&clip.into_path(DEFAULT_TOLERANCE)),
6569
Some(blend.into()),
6670
Some(alpha),
@@ -70,12 +74,13 @@ impl PaintScene for VelloCpuScenePainter {
7074
}
7175

7276
fn push_clip_layer(&mut self, transform: Affine, clip: &impl Shape) {
73-
self.0.set_transform(transform);
74-
self.0.push_clip_layer(&clip.into_path(DEFAULT_TOLERANCE));
77+
self.render_ctx.set_transform(transform);
78+
self.render_ctx
79+
.push_clip_layer(&clip.into_path(DEFAULT_TOLERANCE));
7580
}
7681

7782
fn pop_layer(&mut self) {
78-
self.0.pop_layer();
83+
self.render_ctx.pop_layer();
7984
}
8085

8186
fn stroke<'a>(
@@ -86,13 +91,14 @@ impl PaintScene for VelloCpuScenePainter {
8691
brush_transform: Option<Affine>,
8792
shape: &impl Shape,
8893
) {
89-
self.0.set_transform(transform);
90-
self.0.set_stroke(style.clone());
91-
self.0
94+
self.render_ctx.set_transform(transform);
95+
self.render_ctx.set_stroke(style.clone());
96+
self.render_ctx
9297
.set_paint(anyrender_paint_to_vello_cpu_paint(paint.into()));
93-
self.0
98+
self.render_ctx
9499
.set_paint_transform(brush_transform.unwrap_or(Affine::IDENTITY));
95-
self.0.stroke_path(&shape.into_path(DEFAULT_TOLERANCE));
100+
self.render_ctx
101+
.stroke_path(&shape.into_path(DEFAULT_TOLERANCE));
96102
}
97103

98104
fn fill<'a>(
@@ -103,13 +109,14 @@ impl PaintScene for VelloCpuScenePainter {
103109
brush_transform: Option<Affine>,
104110
shape: &impl Shape,
105111
) {
106-
self.0.set_transform(transform);
107-
self.0.set_fill_rule(style);
108-
self.0
112+
self.render_ctx.set_transform(transform);
113+
self.render_ctx.set_fill_rule(style);
114+
self.render_ctx
109115
.set_paint(anyrender_paint_to_vello_cpu_paint(paint.into()));
110-
self.0
116+
self.render_ctx
111117
.set_paint_transform(brush_transform.unwrap_or(Affine::IDENTITY));
112-
self.0.fill_path(&shape.into_path(DEFAULT_TOLERANCE));
118+
self.render_ctx
119+
.fill_path(&shape.into_path(DEFAULT_TOLERANCE));
113120
}
114121

115122
fn draw_glyphs<'a, 's: 'a>(
@@ -123,10 +130,10 @@ impl PaintScene for VelloCpuScenePainter {
123130
_brush_alpha: f32,
124131
transform: Affine,
125132
glyph_transform: Option<Affine>,
126-
glyphs: impl Iterator<Item = anyrender::Glyph>,
133+
glyphs: impl Iterator<Item = anyrender::Glyph> + Clone,
127134
) {
128-
self.0.set_transform(transform);
129-
self.0
135+
self.render_ctx.set_transform(transform);
136+
self.render_ctx
130137
.set_paint(anyrender_paint_to_vello_cpu_paint(paint.into()));
131138

132139
fn into_vello_cpu_glyph(g: anyrender::Glyph) -> vello_cpu::Glyph {
@@ -140,19 +147,19 @@ impl PaintScene for VelloCpuScenePainter {
140147
let style: StyleRef<'a> = style.into();
141148
match style {
142149
StyleRef::Fill(fill) => {
143-
self.0.set_fill_rule(fill);
144-
self.0
145-
.glyph_run(font)
150+
self.render_ctx.set_fill_rule(fill);
151+
self.render_ctx
152+
.glyph_run(&mut self.resources, font)
146153
.font_size(font_size)
147154
.hint(hint)
148155
.normalized_coords(normalized_coords)
149156
.glyph_transform(glyph_transform.unwrap_or_default())
150157
.fill_glyphs(glyphs.map(into_vello_cpu_glyph));
151158
}
152159
StyleRef::Stroke(stroke) => {
153-
self.0.set_stroke(stroke.clone());
154-
self.0
155-
.glyph_run(font)
160+
self.render_ctx.set_stroke(stroke.clone());
161+
self.render_ctx
162+
.glyph_run(&mut self.resources, font)
156163
.font_size(font_size)
157164
.hint(hint)
158165
.normalized_coords(normalized_coords)
@@ -169,9 +176,9 @@ impl PaintScene for VelloCpuScenePainter {
169176
radius: f64,
170177
std_dev: f64,
171178
) {
172-
self.0.set_transform(transform);
173-
self.0.set_paint(PaintType::Solid(color));
174-
self.0
179+
self.render_ctx.set_transform(transform);
180+
self.render_ctx.set_paint(PaintType::Solid(color));
181+
self.render_ctx
175182
.fill_blurred_rounded_rect(&rect, radius as f32, std_dev as f32);
176183
}
177184
}

crates/anyrender_vello_hybrid/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ kurbo = { workspace = true }
1919
peniko = { workspace = true }
2020
vello_hybrid = { workspace = true }
2121
vello_common = { workspace = true }
22+
glifo = { workspace = true }
2223
wgpu = { workspace = true }
2324
rustc-hash = { workspace = true }
2425
wgpu_context = { workspace = true }

0 commit comments

Comments
 (0)