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;