Add `render` and `render_with` methods
diff --git a/sparse_strips/vello_bench/src/glyph.rs b/sparse_strips/vello_bench/src/glyph.rs index 9a9fd02..f24b0f0 100644 --- a/sparse_strips/vello_bench/src/glyph.rs +++ b/sparse_strips/vello_bench/src/glyph.rs
@@ -9,7 +9,7 @@ PositionedLayoutItem, }; use vello_common::pixmap::Pixmap; -use vello_cpu::{Glyph, RasterizerSettings, RenderContext, RenderSettings, Resources}; +use vello_cpu::{Glyph, RenderContext, RenderSettings, Resources}; pub fn glyph(c: &mut Criterion) { let mut g = c.benchmark_group("glyph"); @@ -111,11 +111,9 @@ } } - renderer.ctx.render( - &mut renderer.pixmap, - &mut renderer.resources, - RasterizerSettings::default(), - ); + renderer + .ctx + .render(&mut renderer.pixmap, &mut renderer.resources); } fn render_glyph_run(
diff --git a/sparse_strips/vello_bench/src/integration.rs b/sparse_strips/vello_bench/src/integration.rs index b7f6887..681a433 100644 --- a/sparse_strips/vello_bench/src/integration.rs +++ b/sparse_strips/vello_bench/src/integration.rs
@@ -12,7 +12,7 @@ use vello_common::peniko::{Extend, ImageQuality}; use vello_common::pixmap::Pixmap; use vello_cpu::color::AlphaColor; -use vello_cpu::{RasterizerSettings, RenderContext, Resources}; +use vello_cpu::{RenderContext, Resources}; /// Image scene rendering benchmark. pub fn images(c: &mut Criterion) { @@ -57,7 +57,7 @@ } renderer.flush(); - renderer.render(&mut pixmap, &mut resources, RasterizerSettings::default()); + renderer.render(&mut pixmap, &mut resources); std::hint::black_box(&pixmap); }); });
diff --git a/sparse_strips/vello_cpu/CHANGELOG.md b/sparse_strips/vello_cpu/CHANGELOG.md index 2376775..c75b3f3 100644 --- a/sparse_strips/vello_cpu/CHANGELOG.md +++ b/sparse_strips/vello_cpu/CHANGELOG.md
@@ -15,7 +15,8 @@ ### Changed - The API for rendering into a pixmap. The methods `render_to_pixmap` and `composite_to_pixmap_at_offset` have been replaced with a single unified - `render` method that takes additional parameters for tweaking the behavior. ([#1665][] by [@LaurenzV][]) + `render` (and `render_with`) method that takes additional parameters for tweaking the behavior. + ([#1665][] by [@LaurenzV][]) ## [0.0.9][] - 2026-05-30
diff --git a/sparse_strips/vello_cpu/README.md b/sparse_strips/vello_cpu/README.md index 9313da8..1b522e1 100644 --- a/sparse_strips/vello_cpu/README.md +++ b/sparse_strips/vello_cpu/README.md
@@ -51,7 +51,7 @@ - Render it to an image using [`RenderContext::render`][]. ```rust -use vello_cpu::{RasterizerSettings, RenderContext, Resources, Pixmap}; +use vello_cpu::{RenderContext, Resources, Pixmap}; use vello_cpu::{color::{palette::css, PremulRgba8}, kurbo::Rect}; let width = 10; let height = 5; @@ -64,7 +64,7 @@ // While calling `flush` is only strictly necessary if you are rendering using // multiple threads, it is recommended to always do this. context.flush(); -context.render(&mut target, &mut resources, RasterizerSettings::default()); +context.render(&mut target, &mut resources); let expected_render = b"\ 0000000000\
diff --git a/sparse_strips/vello_cpu/examples/basic.rs b/sparse_strips/vello_cpu/examples/basic.rs index e958833..00474fa 100644 --- a/sparse_strips/vello_cpu/examples/basic.rs +++ b/sparse_strips/vello_cpu/examples/basic.rs
@@ -130,11 +130,11 @@ // Now the second step is to copy the results of the render context into the // pixmap. We do this by creating a new pixmap (or reusing an existing one). // The pixmap and render context can have different dimensions. See the documentation - // of the `render` method for more information. + // of the `render_with` method for more information. let mut pixmap_1 = Pixmap::new(100, 100); // Now, simply extract the results from the render context into the // pixmap. - ctx.render(&mut pixmap_1, &mut resources, rasterizer_settings); + ctx.render_with(&mut pixmap_1, &mut resources, rasterizer_settings); // Now you can do whatever you want with the pixmap, which provides raw // access to the premultiplied RGBA pixels of the image. If you have enabled @@ -162,7 +162,7 @@ // the default replace mode. In our case, we need to create a new one since // our call to `into_png` consumed the pixmap. let mut pixmap_2 = Pixmap::new(100, 100); - ctx.render(&mut pixmap_2, &mut resources, rasterizer_settings); + ctx.render_with(&mut pixmap_2, &mut resources, rasterizer_settings); let png_2 = pixmap_2.into_png().unwrap(); std::fs::write("example_basic2.png", png_2).unwrap(); }
diff --git a/sparse_strips/vello_cpu/examples/clipping.rs b/sparse_strips/vello_cpu/examples/clipping.rs index 1ed769f..51076f7 100644 --- a/sparse_strips/vello_cpu/examples/clipping.rs +++ b/sparse_strips/vello_cpu/examples/clipping.rs
@@ -4,7 +4,6 @@ //! Applying clip paths using Vello CPU. use vello_cpu::Pixmap; -use vello_cpu::RasterizerSettings; use vello_cpu::RenderContext; use vello_cpu::Resources; use vello_cpu::color::palette::css::{BLUE, RED, WHITE}; @@ -129,7 +128,7 @@ fn save_pixmap(ctx: &RenderContext, filename: &str) { let mut resources = Resources::new(); let mut pixmap = Pixmap::new(ctx.width(), ctx.height()); - ctx.render(&mut pixmap, &mut resources, RasterizerSettings::default()); + ctx.render(&mut pixmap, &mut resources); let png = pixmap.into_png().unwrap(); std::fs::write(format!("{filename}.png"), png).unwrap(); }
diff --git a/sparse_strips/vello_cpu/examples/masking.rs b/sparse_strips/vello_cpu/examples/masking.rs index 0336637..b219b1d 100644 --- a/sparse_strips/vello_cpu/examples/masking.rs +++ b/sparse_strips/vello_cpu/examples/masking.rs
@@ -5,7 +5,7 @@ use vello_cpu::color::palette::css::{BLUE, RED, WHITE}; use vello_cpu::kurbo::Rect; -use vello_cpu::{Mask, Pixmap, RasterizerSettings, RenderContext, Resources}; +use vello_cpu::{Mask, Pixmap, RenderContext, Resources}; const SIZE: u16 = 200; @@ -25,11 +25,7 @@ mask_ctx.set_paint(RED); mask_ctx.fill_rect(&Rect::new(30.0, 30.0, 170.0, 170.0)); mask_ctx.flush(); - mask_ctx.render( - &mut pixmap, - &mut mask_resources, - RasterizerSettings::default(), - ); + mask_ctx.render(&mut pixmap, &mut mask_resources); Mask::new_luminance(&pixmap) }; @@ -98,7 +94,7 @@ fn save_pixmap(ctx: &RenderContext, filename: &str) { let mut resources = Resources::new(); let mut pixmap = Pixmap::new(ctx.width(), ctx.height()); - ctx.render(&mut pixmap, &mut resources, RasterizerSettings::default()); + ctx.render(&mut pixmap, &mut resources); let png = pixmap.into_png().unwrap(); std::fs::write(format!("{filename}.png"), png).unwrap(); }
diff --git a/sparse_strips/vello_cpu/examples/paints.rs b/sparse_strips/vello_cpu/examples/paints.rs index 5c08f2e..b0337b4 100644 --- a/sparse_strips/vello_cpu/examples/paints.rs +++ b/sparse_strips/vello_cpu/examples/paints.rs
@@ -6,7 +6,7 @@ use std::sync::Arc; use std::{io::Cursor, path::Path}; use vello_cpu::{ - Image, ImageSource, Pixmap, RasterizerSettings, RenderContext, Resources, + Image, ImageSource, Pixmap, RenderContext, Resources, color::palette::css::{BLUE, CYAN, DEEP_PINK, MAGENTA, NAVY, ORANGE, PURPLE, WHITE, YELLOW}, kurbo::{Affine, Point, Rect}, peniko::{ @@ -135,7 +135,7 @@ fn save_pixmap(ctx: &RenderContext, filename: &str) { let mut resources = Resources::new(); let mut pixmap = Pixmap::new(ctx.width(), ctx.height()); - ctx.render(&mut pixmap, &mut resources, RasterizerSettings::default()); + ctx.render(&mut pixmap, &mut resources); let png = pixmap.into_png().unwrap(); std::fs::write(format!("{filename}.png"), png).unwrap(); }
diff --git a/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs b/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs index 3881a38..5a38f8f 100644 --- a/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs +++ b/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs
@@ -13,7 +13,7 @@ use std::{cell::RefCell, sync::Arc}; use vello_common::kurbo::{Affine, Vec2}; use vello_common::paint::ImageSource; -use vello_cpu::{RasterizerSettings, RenderContext}; +use vello_cpu::RenderContext; use vello_example_scenes::{AnyScene, image::ImageScene}; use wasm_bindgen::prelude::*; use web_sys::{Event, HtmlCanvasElement, KeyboardEvent, MouseEvent, WheelEvent}; @@ -75,7 +75,6 @@ self.renderer.render( &mut self.pixmap, self.scenes[self.current_scene].resources_mut(), - RasterizerSettings::default(), ); let rgba_bytes = self.pixmap.data_as_u8_slice(); let image_data = web_sys::ImageData::new_with_u8_clamped_array_and_sh(
diff --git a/sparse_strips/vello_cpu/examples/winit/src/main.rs b/sparse_strips/vello_cpu/examples/winit/src/main.rs index 20a3b8b..b53f609 100644 --- a/sparse_strips/vello_cpu/examples/winit/src/main.rs +++ b/sparse_strips/vello_cpu/examples/winit/src/main.rs
@@ -16,7 +16,7 @@ use vello_common::kurbo::{Affine, Point}; use vello_common::paint::ImageSource; use vello_common::pixmap::Pixmap; -use vello_cpu::{RasterizerSettings, RenderContext, RenderSettings}; +use vello_cpu::{RenderContext, RenderSettings}; use vello_example_scenes::image::ImageScene; use vello_example_scenes::{AnyScene, Capabilities, get_example_scenes}; use winit::{ @@ -460,7 +460,6 @@ self.renderer.render( &mut self.pixmap, self.scenes[self.current_scene].resources_mut(), - RasterizerSettings::default(), ); // Copy pixmap to window surface
diff --git a/sparse_strips/vello_cpu/src/lib.rs b/sparse_strips/vello_cpu/src/lib.rs index a7db036..6cf3641 100644 --- a/sparse_strips/vello_cpu/src/lib.rs +++ b/sparse_strips/vello_cpu/src/lib.rs
@@ -21,7 +21,7 @@ //! - Render it to an image using [`RenderContext::render`][]. //! //! ```rust -//! use vello_cpu::{RasterizerSettings, RenderContext, Resources, Pixmap}; +//! use vello_cpu::{RenderContext, Resources, Pixmap}; //! use vello_cpu::{color::{palette::css, PremulRgba8}, kurbo::Rect}; //! let width = 10; //! let height = 5; @@ -34,7 +34,7 @@ //! // While calling `flush` is only strictly necessary if you are rendering using //! // multiple threads, it is recommended to always do this. //! context.flush(); -//! context.render(&mut target, &mut resources, RasterizerSettings::default()); +//! context.render(&mut target, &mut resources); //! //! let expected_render = b"\ //! 0000000000\
diff --git a/sparse_strips/vello_cpu/src/render.rs b/sparse_strips/vello_cpu/src/render.rs index d9d0d28..32aa32d 100644 --- a/sparse_strips/vello_cpu/src/render.rs +++ b/sparse_strips/vello_cpu/src/render.rs
@@ -126,7 +126,7 @@ pub pixel_format: PixelFormat, /// Offset in destination pixels where the render context origin is placed. /// - /// See [`RenderContext::render`] for more information. + /// See [`RenderContext::render_with`] for more information. pub offset: (u16, u16), } @@ -671,7 +671,14 @@ self.dispatcher.flush(&self.encoded_paints); } - /// Render the current context into a target. + /// Render the current context into a target using default rasterizer settings. + /// + /// See the documentation of [`RenderContext::render_with`] for more information. + pub fn render<'a>(&self, target: impl Into<PixmapMut<'a>>, resources: &mut Resources) { + self.render_with(target, resources, RasterizerSettings::default()); + } + + /// Render the current context into a target using custom rasterizer settings. /// /// See the documentation of [`RasterizerSettings`] to understand the tunable parameters for /// rasterization. @@ -704,7 +711,7 @@ /// 3. In case the width/height of the pixmap is _smaller_ than the offset + width/height of the /// scene, then anything that exceeds the pixmap boundaries is simply cut off. This can be useful /// if for some reason you only want to rasterize a small cut-out of the original scene. - pub fn render<'a>( + pub fn render_with<'a>( &self, target: impl Into<PixmapMut<'a>>, resources: &mut Resources, @@ -935,7 +942,7 @@ let mut resources = Resources::new(); let mut pixmap = solid_pixmap(4, 3, GRAY); - ctx.render( + ctx.render_with( &mut pixmap, &mut resources, RasterizerSettings { @@ -963,7 +970,7 @@ let mut resources = Resources::new(); let mut pixmap = solid_pixmap(4, 4, GRAY); - ctx.render( + ctx.render_with( &mut pixmap, &mut resources, RasterizerSettings { @@ -990,7 +997,7 @@ let mut resources = Resources::new(); let mut pixmap = solid_pixmap(4, 2, GRAY); - ctx.render(&mut pixmap, &mut resources, RasterizerSettings::default()); + ctx.render(&mut pixmap, &mut resources); for y in 0..2 { for x in 0..4 { @@ -1015,7 +1022,7 @@ { let pixmap = PixmapMut::new(3, 2, &mut buffer).unwrap(); - ctx.render( + ctx.render_with( pixmap, &mut resources, RasterizerSettings { @@ -1053,7 +1060,7 @@ let mut resources = Resources::new(); let mut pixmap = solid_pixmap(2, 1, blue_pixel()); - ctx.render( + ctx.render_with( &mut pixmap, &mut resources, RasterizerSettings { @@ -1076,7 +1083,7 @@ let mut resources = Resources::new(); let mut pixmap = solid_pixmap(1, 1, blue_pixel()); - ctx.render( + ctx.render_with( &mut pixmap, &mut resources, RasterizerSettings { @@ -1116,9 +1123,9 @@ ctx.reset(); ctx.fill_path(&Rect::new(0.0, 0.0, 100.0, 100.0).to_path(0.1)); ctx.flush(); - ctx.render(&mut pixmap, &mut resources, rasterizer_settings); + ctx.render_with(&mut pixmap, &mut resources, rasterizer_settings); ctx.flush(); - ctx.render(&mut pixmap, &mut resources, rasterizer_settings); + ctx.render_with(&mut pixmap, &mut resources, rasterizer_settings); } #[cfg(feature = "text")]
diff --git a/sparse_strips/vello_cpu/src/text.rs b/sparse_strips/vello_cpu/src/text.rs index 3f349d5..50394ff 100644 --- a/sparse_strips/vello_cpu/src/text.rs +++ b/sparse_strips/vello_cpu/src/text.rs
@@ -177,7 +177,7 @@ glyph_renderer.reset(); renderer::replay_atlas_commands(&mut recorder.commands, glyph_renderer); glyph_renderer.flush(); - glyph_renderer.render( + glyph_renderer.render_with( page, &mut Self::default(), RasterizerSettings {
diff --git a/sparse_strips/vello_sparse_tests/src/regenerate_probe_reference.rs b/sparse_strips/vello_sparse_tests/src/regenerate_probe_reference.rs index aa751b1..3b2c40d 100644 --- a/sparse_strips/vello_sparse_tests/src/regenerate_probe_reference.rs +++ b/sparse_strips/vello_sparse_tests/src/regenerate_probe_reference.rs
@@ -89,7 +89,7 @@ let mut resources = Resources::new(); let mut pixmap = Pixmap::new(width, height); - ctx.render( + ctx.render_with( &mut pixmap, &mut resources, RasterizerSettings {
diff --git a/sparse_strips/vello_sparse_tests/tests/basic.rs b/sparse_strips/vello_sparse_tests/tests/basic.rs index 5be40a6..baf105d 100644 --- a/sparse_strips/vello_sparse_tests/tests/basic.rs +++ b/sparse_strips/vello_sparse_tests/tests/basic.rs
@@ -582,7 +582,7 @@ let positions: [(u16, u16); 3] = [(15, 15), (30, 30), (0, 0)]; for (dst_x, dst_y) in positions { - glyph_renderer.render( + glyph_renderer.render_with( &mut spritesheet, &mut glyph_resources, RasterizerSettings { @@ -622,7 +622,7 @@ reference_renderer.flush(); let mut reference_pixmap = Pixmap::new(spritesheet_width, spritesheet_height); - reference_renderer.render( + reference_renderer.render_with( &mut reference_pixmap, &mut reference_resources, rasterizer_settings,
diff --git a/sparse_strips/vello_sparse_tests/tests/issues.rs b/sparse_strips/vello_sparse_tests/tests/issues.rs index 36d094b..978e02d 100644 --- a/sparse_strips/vello_sparse_tests/tests/issues.rs +++ b/sparse_strips/vello_sparse_tests/tests/issues.rs
@@ -441,7 +441,7 @@ ctx.fill_path(&Rect::new(0.0, 0.0, 50.0, 50.0).to_path(0.1)); ctx.flush(); - ctx.render( + ctx.render_with( &mut pixmap, &mut resources, RasterizerSettings { @@ -451,7 +451,7 @@ ); ctx.fill_path(&Rect::new(50.0, 50.0, 100.0, 100.0).to_path(0.1)); ctx.flush(); - ctx.render( + ctx.render_with( &mut pixmap, &mut resources, RasterizerSettings {
diff --git a/sparse_strips/vello_sparse_tests/tests/mask.rs b/sparse_strips/vello_sparse_tests/tests/mask.rs index 6f9fe95..4d1d7cd 100644 --- a/sparse_strips/vello_sparse_tests/tests/mask.rs +++ b/sparse_strips/vello_sparse_tests/tests/mask.rs
@@ -9,7 +9,7 @@ use vello_common::mask::Mask; use vello_common::peniko::{ColorStop, ColorStops, Gradient}; use vello_cpu::peniko::LinearGradientPosition; -use vello_cpu::{Level, RasterizerSettings, RenderSettings}; +use vello_cpu::{Level, RenderSettings}; use vello_cpu::{Pixmap, RenderContext}; use vello_dev_macros::vello_test; @@ -48,7 +48,7 @@ mask_ctx.set_paint(grad); mask_ctx.fill_rect(&Rect::new(10.0, 10.0, 90.0, 90.0)); - mask_ctx.render(&mut mask_pix, &mut resources, RasterizerSettings::default()); + mask_ctx.render(&mut mask_pix, &mut resources); if alpha_mask { Mask::new_alpha(&mask_pix)
diff --git a/sparse_strips/vello_sparse_tests/tests/renderer.rs b/sparse_strips/vello_sparse_tests/tests/renderer.rs index e115e9c..799b19a 100644 --- a/sparse_strips/vello_sparse_tests/tests/renderer.rs +++ b/sparse_strips/vello_sparse_tests/tests/renderer.rs
@@ -248,7 +248,7 @@ } fn render_to_pixmap(&mut self, pixmap: &mut Pixmap) { - self.ctx.render( + self.ctx.render_with( pixmap, &mut self.resources, RasterizerSettings {
diff --git a/sparse_strips/vello_toy/src/svg.rs b/sparse_strips/vello_toy/src/svg.rs index e135ff3..f3fb9a3 100644 --- a/sparse_strips/vello_toy/src/svg.rs +++ b/sparse_strips/vello_toy/src/svg.rs
@@ -20,7 +20,7 @@ use vello_cpu::color::AlphaColor; use vello_cpu::kurbo::{Affine, BezPath, Stroke}; use vello_cpu::peniko::Fill; -use vello_cpu::{Level, Pixmap, RasterizerSettings, RenderContext, RenderSettings, Resources}; +use vello_cpu::{Level, Pixmap, RenderContext, RenderSettings, Resources}; fn main() { let args = Args::parse(); @@ -50,7 +50,7 @@ render_tree(&mut ctx, &mut sctx, &tree); ctx.flush(); - ctx.render(&mut pixmap, &mut resources, RasterizerSettings::default()); + ctx.render(&mut pixmap, &mut resources); runtime += start.elapsed(); num_iters += 1;