Get rid of Vello API (#1002)
See primarily [#vello > Clearing out Vello
API](https://xi.zulipchat.com/#narrow/channel/197075-vello/topic/Clearing.20out.20Vello.20API/with/517105581).
Its purpose was never all that clear, and so publishing it is likely to
lead to an incoherent story in the future.
diff --git a/Cargo.lock b/Cargo.lock
index cfb5e5e..2683ad5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3180,10 +3180,11 @@
version = "0.5.0"
dependencies = [
"bytemuck",
+ "peniko",
+ "png",
"roxmltree",
"skrifa",
"smallvec",
- "vello_api",
]
[[package]]
diff --git a/sparse_strips/vello_api/README.md b/sparse_strips/vello_api/README.md
index dbb0f08..f884ac1 100644
--- a/sparse_strips/vello_api/README.md
+++ b/sparse_strips/vello_api/README.md
@@ -24,24 +24,9 @@
<!-- cargo-rdme start -->
-This crate defines the public API types used by both Vello CPU and Vello Hybrid.
-
-## Usage
-
-This crate should not be used on its own, and you should instead use one of the renderers which use it.
-At the moment, only [Vello CPU](crates.io/crates/vello_cpu) is published, and you probably want to use that.
-
-We also develop [Vello](crates.io/crates/vello), which makes use of the GPU for 2D rendering and has higher performance than Vello CPU.
-Vello CPU is being developed as part of work to address shortcomings in Vello.
-Vello does not use this crate.
-
-## Features
-
-- Shared API types for Vello's rendering pipeline.
-
-## Usage
-
-This crate is intended to be used by other Vello components.
+A stub crate.
+Planned to provide an abstraction between different renderers in the future.
+This abstraction is not yet designed.
<!-- cargo-rdme end -->
diff --git a/sparse_strips/vello_api/src/glyph.rs b/sparse_strips/vello_api/src/glyph.rs
deleted file mode 100644
index 28d8b02..0000000
--- a/sparse_strips/vello_api/src/glyph.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2025 the Vello Authors
-// SPDX-License-Identifier: Apache-2.0 OR MIT
-
-//! Types for glyphs.
-
-/// Positioned glyph.
-#[derive(Copy, Clone, Default, Debug)]
-pub struct Glyph {
- /// The font-specific identifier for this glyph.
- ///
- /// This ID is specific to the font being used and corresponds to the
- /// glyph index within that font. It is *not* a Unicode code point.
- pub id: u32,
- /// X-offset in run, relative to transform.
- pub x: f32,
- /// Y-offset in run, relative to transform.
- pub y: f32,
-}
diff --git a/sparse_strips/vello_api/src/lib.rs b/sparse_strips/vello_api/src/lib.rs
index e596ab1..f85f0cf 100644
--- a/sparse_strips/vello_api/src/lib.rs
+++ b/sparse_strips/vello_api/src/lib.rs
@@ -1,37 +1,9 @@
// Copyright 2025 the Vello Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT
-//! This crate defines the public API types used by both Vello CPU and Vello Hybrid.
-//!
-//! ## Usage
-//!
-//! This crate should not be used on its own, and you should instead use one of the renderers which use it.
-//! At the moment, only [Vello CPU](crates.io/crates/vello_cpu) is published, and you probably want to use that.
-//!
-//! We also develop [Vello](crates.io/crates/vello), which makes use of the GPU for 2D rendering and has higher performance than Vello CPU.
-//! Vello CPU is being developed as part of work to address shortcomings in Vello.
-//! Vello does not use this crate.
-//!
-//! ## Features
-//!
-//! - Shared API types for Vello's rendering pipeline.
-// - Interfaces for render contexts and rendering options.
-// - Designed for compatibility across CPU and GPU implementations.
-//!
-//! ## Usage
-//!
-//! This crate is intended to be used by other Vello components.
-//and external consumers needing a stable API.
+//! A stub crate.
+//! Planned to provide an abstraction between different renderers in the future.
+//! This abstraction is not yet designed.
#![forbid(unsafe_code)]
#![no_std]
-extern crate alloc;
-
-pub use peniko;
-pub use peniko::color;
-pub use peniko::kurbo;
-pub mod execute;
-pub mod glyph;
-pub mod mask;
-pub mod paint;
-pub mod pixmap;
diff --git a/sparse_strips/vello_common/Cargo.toml b/sparse_strips/vello_common/Cargo.toml
index f8074ff..901d366 100644
--- a/sparse_strips/vello_common/Cargo.toml
+++ b/sparse_strips/vello_common/Cargo.toml
@@ -12,16 +12,26 @@
publish = false
[dependencies]
-vello_api = { workspace = true, default-features = true }
bytemuck = { workspace = true, features = [] }
+peniko = { workspace = true, features = ["bytemuck"] }
+png = { workspace = true, optional = true }
+roxmltree = { version = "0.20.0", optional = true }
skrifa = { workspace = true }
smallvec = { workspace = true }
-roxmltree = { version = "0.20.0", optional = true }
+
[features]
-simd = ["vello_api/simd"]
-png = ["vello_api/png"]
+default = ["std", "png"]
+# Enable using SIMD instructions for rendering
+simd = []
+# Enable a simple version of SVG drawing. This is likely to be removed.
pico_svg = ["dep:roxmltree"]
+# Get floating point functions from the standard library (likely using your target’s libc).
+std = ["peniko/std"]
+# Use floating point implementations from libm.v
+libm = ["peniko/libm"]
+# Allow loading and saving Pixmap to PNG.
+png = ["std", "dep:png"]
[lints]
workspace = true
diff --git a/sparse_strips/vello_common/src/coarse.rs b/sparse_strips/vello_common/src/coarse.rs
index 9a56928..c7d497e 100644
--- a/sparse_strips/vello_common/src/coarse.rs
+++ b/sparse_strips/vello_common/src/coarse.rs
@@ -4,13 +4,12 @@
//! Generating and processing wide tiles.
use crate::color::palette::css::TRANSPARENT;
-use crate::peniko::{BlendMode, Compose, Mix};
+use crate::mask::Mask;
+use crate::paint::{Paint, PremulColor};
+use crate::peniko::{BlendMode, Compose, Fill, Mix};
use crate::{strip::Strip, tile::Tile};
use alloc::vec;
use alloc::{boxed::Box, vec::Vec};
-use vello_api::mask::Mask;
-use vello_api::paint::PremulColor;
-use vello_api::{paint::Paint, peniko::Fill};
#[derive(Debug)]
struct Layer {
@@ -1043,10 +1042,10 @@
use crate::coarse::{Cmd, CmdFill, Wide, WideTile};
use crate::color::AlphaColor;
use crate::color::palette::css::TRANSPARENT;
+ use crate::paint::{Paint, PremulColor};
use crate::peniko::{BlendMode, Compose, Fill, Mix};
use crate::strip::Strip;
use alloc::{boxed::Box, vec};
- use vello_api::paint::{Paint, PremulColor};
#[test]
fn optimize_empty_layers() {
diff --git a/sparse_strips/vello_common/src/colr.rs b/sparse_strips/vello_common/src/colr.rs
index fc1e38e..5414327 100644
--- a/sparse_strips/vello_common/src/colr.rs
+++ b/sparse_strips/vello_common/src/colr.rs
@@ -4,10 +4,10 @@
//! Drawing COLR glyphs.
use crate::color::Srgb;
+use crate::color::{AlphaColor, DynamicColor};
use crate::glyph::{ColorGlyph, OutlinePath};
use crate::kurbo::{Affine, BezPath, Point, Rect, Shape};
-use crate::peniko;
-use crate::peniko::{BlendMode, ColorStops, Compose, Extend, Gradient, Mix};
+use crate::peniko::{self, BlendMode, ColorStops, Compose, Extend, Gradient, GradientKind, Mix};
use alloc::boxed::Box;
use alloc::vec;
use alloc::vec::Vec;
@@ -18,8 +18,6 @@
use skrifa::raw::types::BoundingBox;
use skrifa::{GlyphId, MetadataProvider};
use smallvec::SmallVec;
-use vello_api::color::{AlphaColor, DynamicColor};
-use vello_api::peniko::GradientKind;
/// A trait for clients capable of rendering COLR glyphs.
pub trait ColrRenderer {
diff --git a/sparse_strips/vello_common/src/encode.rs b/sparse_strips/vello_common/src/encode.rs
index 1a24df2..03c7df2 100644
--- a/sparse_strips/vello_common/src/encode.rs
+++ b/sparse_strips/vello_common/src/encode.rs
@@ -8,6 +8,7 @@
use crate::color::{ColorSpaceTag, HueDirection, Srgb, gradient};
use crate::kurbo::{Affine, Point, Vec2};
use crate::math::compute_erf7;
+use crate::paint::{Image, IndexedPaint, Paint, PremulColor};
use crate::peniko::{ColorStop, Extend, Gradient, GradientKind, ImageQuality};
use crate::pixmap::Pixmap;
use alloc::borrow::Cow;
@@ -16,7 +17,6 @@
use core::f32::consts::PI;
use core::iter;
use smallvec::SmallVec;
-use vello_api::paint::{Image, IndexedPaint, Paint, PremulColor};
const DEGENERATE_THRESHOLD: f32 = 1.0e-6;
const NUDGE_VAL: f32 = 1.0e-7;
@@ -355,7 +355,7 @@
) -> Vec<GradientRange> {
struct EncodedColorStop {
offset: f32,
- color: vello_api::color::PremulColor<Srgb>,
+ color: crate::color::PremulColor<Srgb>,
}
// Create additional (SRGB-encoded) stops in-between to approximate the color space we want to
@@ -833,11 +833,10 @@
use super::{EncodeExt, Gradient};
use crate::color::DynamicColor;
use crate::color::palette::css::{BLACK, BLUE, GREEN};
- use crate::kurbo::Point;
+ use crate::kurbo::{Affine, Point};
use crate::peniko::{ColorStop, ColorStops, GradientKind};
use alloc::vec;
use smallvec::smallvec;
- use vello_api::kurbo::Affine;
#[test]
fn gradient_missing_stops() {
diff --git a/sparse_strips/vello_api/src/execute.rs b/sparse_strips/vello_common/src/execute.rs
similarity index 100%
rename from sparse_strips/vello_api/src/execute.rs
rename to sparse_strips/vello_common/src/execute.rs
diff --git a/sparse_strips/vello_common/src/flatten.rs b/sparse_strips/vello_common/src/flatten.rs
index 72b74ee..3e71e06 100644
--- a/sparse_strips/vello_common/src/flatten.rs
+++ b/sparse_strips/vello_common/src/flatten.rs
@@ -3,9 +3,8 @@
//! Flattening filled and stroked paths.
+use crate::kurbo::{self, Affine, BezPath, Stroke, StrokeOpts};
use alloc::vec::Vec;
-use vello_api::kurbo;
-use vello_api::kurbo::{Affine, BezPath, Stroke, StrokeOpts};
/// The flattening tolerance.
const TOL: f64 = 0.25;
diff --git a/sparse_strips/vello_common/src/glyph.rs b/sparse_strips/vello_common/src/glyph.rs
index 13c1ca7..e3800b6 100644
--- a/sparse_strips/vello_common/src/glyph.rs
+++ b/sparse_strips/vello_common/src/glyph.rs
@@ -3,6 +3,7 @@
//! Processing and drawing glyphs.
+use crate::kurbo::{Affine, BezPath, Vec2};
use crate::peniko::Font;
use alloc::boxed::Box;
use core::fmt::{Debug, Formatter};
@@ -14,14 +15,26 @@
GlyphId, MetadataProvider,
outline::{HintingInstance, HintingOptions, OutlinePen},
};
-use vello_api::kurbo::{Affine, BezPath, Vec2};
use crate::colr::convert_bounding_box;
use crate::encode::x_y_advances;
use crate::kurbo::Rect;
+use crate::pixmap::Pixmap;
use skrifa::bitmap::{BitmapData, BitmapFormat, BitmapStrikes, Origin};
-pub use vello_api::glyph::*;
-use vello_api::pixmap::Pixmap;
+
+/// Positioned glyph.
+#[derive(Copy, Clone, Default, Debug)]
+pub struct Glyph {
+ /// The font-specific identifier for this glyph.
+ ///
+ /// This ID is specific to the font being used and corresponds to the
+ /// glyph index within that font. It is *not* a Unicode code point.
+ pub id: u32,
+ /// X-offset in run, relative to transform.
+ pub x: f32,
+ /// Y-offset in run, relative to transform.
+ pub y: f32,
+}
/// A type of glyph.
#[derive(Debug)]
diff --git a/sparse_strips/vello_common/src/lib.rs b/sparse_strips/vello_common/src/lib.rs
index fde88fe..1b6425e 100644
--- a/sparse_strips/vello_common/src/lib.rs
+++ b/sparse_strips/vello_common/src/lib.rs
@@ -36,12 +36,18 @@
pub mod coarse;
pub mod colr;
pub mod encode;
+pub mod execute;
pub mod flatten;
pub mod glyph;
+pub mod mask;
pub mod math;
+pub mod paint;
#[cfg(feature = "pico_svg")]
pub mod pico_svg;
+pub mod pixmap;
pub mod strip;
pub mod tile;
-pub use vello_api::*;
+pub use peniko;
+pub use peniko::color;
+pub use peniko::kurbo;
diff --git a/sparse_strips/vello_api/src/mask.rs b/sparse_strips/vello_common/src/mask.rs
similarity index 100%
rename from sparse_strips/vello_api/src/mask.rs
rename to sparse_strips/vello_common/src/mask.rs
diff --git a/sparse_strips/vello_api/src/paint.rs b/sparse_strips/vello_common/src/paint.rs
similarity index 100%
rename from sparse_strips/vello_api/src/paint.rs
rename to sparse_strips/vello_common/src/paint.rs
diff --git a/sparse_strips/vello_common/src/pico_svg.rs b/sparse_strips/vello_common/src/pico_svg.rs
index ee149c0..df3abe1 100644
--- a/sparse_strips/vello_common/src/pico_svg.rs
+++ b/sparse_strips/vello_common/src/pico_svg.rs
@@ -11,15 +11,14 @@
extern crate std;
+use crate::color::{AlphaColor, DynamicColor, Srgb, palette};
+use crate::kurbo::{Affine, BezPath, Point, Size, Vec2};
use alloc::boxed::Box;
use alloc::vec;
use alloc::vec::Vec;
use core::str::FromStr;
-use std::eprintln;
-
use roxmltree::{Document, Node};
-use vello_api::kurbo::{Affine, BezPath, Point, Size, Vec2};
-use vello_api::peniko::color::{AlphaColor, DynamicColor, Srgb, palette};
+use std::eprintln;
/// A simplified representation of an SVG document
#[derive(Debug)]
@@ -293,7 +292,7 @@
fn parse_color(color: &str) -> AlphaColor<Srgb> {
let color = color.trim();
- vello_api::peniko::color::parse_color(color.trim())
+ crate::color::parse_color(color.trim())
.map(DynamicColor::to_alpha_color)
.unwrap_or(palette::css::FUCHSIA.with_alpha(0.5))
}
@@ -319,7 +318,7 @@
#[cfg(test)]
mod tests {
use super::parse_color;
- use vello_api::peniko::color::{AlphaColor, Srgb, palette};
+ use crate::color::{AlphaColor, Srgb, palette};
fn assert_close_color(c1: AlphaColor<Srgb>, c2: AlphaColor<Srgb>) {
const EPSILON: f32 = 1e-4;
diff --git a/sparse_strips/vello_api/src/pixmap.rs b/sparse_strips/vello_common/src/pixmap.rs
similarity index 100%
rename from sparse_strips/vello_api/src/pixmap.rs
rename to sparse_strips/vello_common/src/pixmap.rs
diff --git a/sparse_strips/vello_common/src/strip.rs b/sparse_strips/vello_common/src/strip.rs
index d43c788..aa9657d 100644
--- a/sparse_strips/vello_common/src/strip.rs
+++ b/sparse_strips/vello_common/src/strip.rs
@@ -3,11 +3,10 @@
//! Rendering strips.
-use alloc::vec::Vec;
-use vello_api::peniko::Fill;
-
use crate::flatten::Line;
+use crate::peniko::Fill;
use crate::tile::{Tile, Tiles};
+use alloc::vec::Vec;
/// A strip.
#[derive(Debug, Clone, Copy)]
diff --git a/sparse_strips/vello_sparse_tests/tests/blurred_rounded_rect.rs b/sparse_strips/vello_sparse_tests/tests/blurred_rounded_rect.rs
index 88f13ba..bf40360 100644
--- a/sparse_strips/vello_sparse_tests/tests/blurred_rounded_rect.rs
+++ b/sparse_strips/vello_sparse_tests/tests/blurred_rounded_rect.rs
@@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0 OR MIT
use crate::renderer::Renderer;
-use vello_api::color::palette::css::REBECCA_PURPLE;
-use vello_api::kurbo::{Affine, Point, Rect};
+use vello_common::color::palette::css::REBECCA_PURPLE;
+use vello_common::kurbo::{Affine, Point, Rect};
use vello_dev_macros::vello_test;
fn rect_with(ctx: &mut impl Renderer, radius: f32, std_dev: f32, affine: Affine) {
diff --git a/sparse_strips/vello_sparse_tests/tests/clip.rs b/sparse_strips/vello_sparse_tests/tests/clip.rs
index 8a3086b..ad6fb6d 100644
--- a/sparse_strips/vello_sparse_tests/tests/clip.rs
+++ b/sparse_strips/vello_sparse_tests/tests/clip.rs
@@ -6,12 +6,12 @@
use crate::renderer::Renderer;
use crate::util::{circular_star, crossed_line_star};
use std::f64::consts::PI;
-use vello_api::color::palette::css::{
+use vello_common::coarse::WideTile;
+use vello_common::color::palette::css::{
BLACK, BLUE, DARK_BLUE, DARK_GREEN, GREEN, REBECCA_PURPLE, RED,
};
-use vello_api::peniko::Color;
-use vello_common::coarse::WideTile;
use vello_common::kurbo::{Affine, BezPath, Circle, Point, Rect, Shape, Stroke};
+use vello_common::peniko::Color;
use vello_common::peniko::Fill;
use vello_common::tile::Tile;
use vello_dev_macros::vello_test;
diff --git a/sparse_strips/vello_sparse_tests/tests/glyph.rs b/sparse_strips/vello_sparse_tests/tests/glyph.rs
index ab6e48b..fe83e94 100644
--- a/sparse_strips/vello_sparse_tests/tests/glyph.rs
+++ b/sparse_strips/vello_sparse_tests/tests/glyph.rs
@@ -9,11 +9,10 @@
use crate::util::{layout_glyphs_noto_cbtf, layout_glyphs_noto_colr, layout_glyphs_roboto};
use std::iter;
use std::sync::Arc;
-use vello_api::color::palette::css::{BLACK, BLUE, GREEN};
-use vello_api::glyph::Glyph;
-use vello_api::peniko::{Blob, Font};
-use vello_common::color::palette::css::REBECCA_PURPLE;
+use vello_common::color::palette::css::{BLACK, BLUE, GREEN, REBECCA_PURPLE};
+use vello_common::glyph::Glyph;
use vello_common::kurbo::Affine;
+use vello_common::peniko::{Blob, Font};
use vello_dev_macros::vello_test;
#[vello_test(width = 300, height = 70)]
diff --git a/sparse_strips/vello_sparse_tests/tests/gradient.rs b/sparse_strips/vello_sparse_tests/tests/gradient.rs
index d2e8561..955a289 100644
--- a/sparse_strips/vello_sparse_tests/tests/gradient.rs
+++ b/sparse_strips/vello_sparse_tests/tests/gradient.rs
@@ -4,11 +4,10 @@
use crate::renderer::Renderer;
use crate::util::{stops_blue_green_red_yellow, stops_green_blue};
use smallvec::smallvec;
-use vello_api::peniko::Gradient;
use vello_common::color::palette::css::{BLACK, BLUE, WHITE, YELLOW};
use vello_common::color::{ColorSpaceTag, DynamicColor};
use vello_common::kurbo::{Point, Rect};
-use vello_common::peniko::{ColorStop, ColorStops, GradientKind};
+use vello_common::peniko::{ColorStop, ColorStops, Gradient, GradientKind};
use vello_dev_macros::vello_test;
pub(crate) const fn tan_45() -> f64 {
@@ -122,10 +121,8 @@
};
use peniko::Extend;
use std::f64::consts::PI;
- use vello_api::peniko;
- use vello_api::peniko::Gradient;
use vello_common::kurbo::{Affine, Point, Rect};
- use vello_common::peniko::GradientKind;
+ use vello_common::peniko::{self, Gradient, GradientKind};
use vello_dev_macros::vello_test;
#[vello_test]
@@ -430,10 +427,9 @@
};
use peniko::Extend;
use std::f64::consts::PI;
- use vello_api::peniko;
- use vello_api::peniko::{ColorStops, Gradient};
use vello_common::kurbo::{Affine, Point, Rect};
use vello_common::peniko::GradientKind::Radial;
+ use vello_common::peniko::{self, ColorStops, Gradient};
use vello_dev_macros::vello_test;
fn simple(ctx: &mut impl Renderer, stops: ColorStops) {
@@ -754,10 +750,8 @@
};
use peniko::Extend;
use std::f64::consts::PI;
- use vello_api::peniko;
- use vello_api::peniko::{ColorStops, Gradient};
use vello_common::kurbo::{Affine, Point, Rect};
- use vello_common::peniko::GradientKind;
+ use vello_common::peniko::{self, ColorStops, Gradient, GradientKind};
use vello_dev_macros::vello_test;
fn basic(ctx: &mut impl Renderer, stops: ColorStops, center: Point) {
diff --git a/sparse_strips/vello_sparse_tests/tests/mask.rs b/sparse_strips/vello_sparse_tests/tests/mask.rs
index 5195d53..59c265a 100644
--- a/sparse_strips/vello_sparse_tests/tests/mask.rs
+++ b/sparse_strips/vello_sparse_tests/tests/mask.rs
@@ -3,12 +3,11 @@
use crate::renderer::Renderer;
use smallvec::smallvec;
-use vello_api::peniko::Gradient;
use vello_common::color::DynamicColor;
use vello_common::color::palette::css::{BLACK, LIME, RED, YELLOW};
use vello_common::kurbo::{Point, Rect};
use vello_common::mask::Mask;
-use vello_common::peniko::{ColorStop, ColorStops, GradientKind};
+use vello_common::peniko::{ColorStop, ColorStops, Gradient, GradientKind};
use vello_cpu::RenderMode;
use vello_cpu::{Pixmap, RenderContext};
use vello_dev_macros::vello_test;
diff --git a/sparse_strips/vello_sparse_tests/tests/mix.rs b/sparse_strips/vello_sparse_tests/tests/mix.rs
index 6fb562f..e141a2b 100644
--- a/sparse_strips/vello_sparse_tests/tests/mix.rs
+++ b/sparse_strips/vello_sparse_tests/tests/mix.rs
@@ -4,13 +4,13 @@
use crate::image::load_image;
use crate::renderer::Renderer;
use smallvec::smallvec;
-use vello_api::peniko::Gradient;
use vello_common::color::palette::css::{BLUE, LIME, MAGENTA, RED, YELLOW};
use vello_common::color::{AlphaColor, DynamicColor, Srgb};
use vello_common::kurbo::{Affine, Point, Rect};
use vello_common::paint::Image;
-use vello_common::peniko::{BlendMode, Compose, Extend, Mix};
-use vello_common::peniko::{ColorStop, ColorStops, GradientKind, ImageQuality};
+use vello_common::peniko::{
+ BlendMode, ColorStop, ColorStops, Compose, Extend, Gradient, GradientKind, ImageQuality, Mix,
+};
use vello_dev_macros::vello_test;
// The outputs have been compared visually with tiny-skia, and except for two cases (where tiny-skia
diff --git a/sparse_strips/vello_sparse_tests/tests/renderer.rs b/sparse_strips/vello_sparse_tests/tests/renderer.rs
index 5e12271..c610c1d 100644
--- a/sparse_strips/vello_sparse_tests/tests/renderer.rs
+++ b/sparse_strips/vello_sparse_tests/tests/renderer.rs
@@ -1,12 +1,12 @@
// Copyright 2025 the Vello Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT
-use vello_api::kurbo::{Affine, BezPath, Rect, Stroke};
-use vello_api::mask::Mask;
-use vello_api::paint::PaintType;
-use vello_api::peniko::{BlendMode, Fill, Font};
-use vello_api::pixmap::Pixmap;
use vello_common::glyph::{GlyphRenderer, GlyphRunBuilder};
+use vello_common::kurbo::{Affine, BezPath, Rect, Stroke};
+use vello_common::mask::Mask;
+use vello_common::paint::PaintType;
+use vello_common::peniko::{BlendMode, Fill, Font};
+use vello_common::pixmap::Pixmap;
use vello_cpu::{RenderContext, RenderMode};
use vello_hybrid::Scene;