use super::{Composition, RenderSink, Renderer, model::fixed};
use kurbo::{Affine, Shape};
use peniko::{BlendMode, Fill};
impl RenderSink for vello::Scene {
fn push_layer(
&mut self,
blend: impl Into<BlendMode>,
alpha: f32,
transform: Affine,
shape: &impl Shape,
) {
self.push_layer(Fill::NonZero, blend, alpha, transform, shape);
}
fn push_clip_layer(&mut self, transform: Affine, shape: &impl Shape) {
self.push_clip_layer(Fill::NonZero, transform, shape);
}
fn pop_layer(&mut self) {
self.pop_layer();
}
fn draw(
&mut self,
stroke: Option<&fixed::Stroke>,
transform: Affine,
brush: &fixed::Brush,
shape: &impl Shape,
) {
if let Some(stroke) = stroke {
self.stroke(stroke, transform, brush, None, shape);
} else {
self.fill(Fill::NonZero, transform, brush, None, shape);
}
}
}
impl Renderer {
pub fn render_to_vello_scene(
&mut self,
animation: &Composition,
frame: f64,
transform: Affine,
alpha: f64,
) -> vello::Scene {
let mut scene = vello::Scene::new();
self.append(animation, frame, transform, alpha, &mut scene);
scene
}
}