Skip to content

Commit

Permalink
Canvas => RenderTarget
Browse files Browse the repository at this point in the history
  • Loading branch information
micahrj committed Jan 6, 2025
1 parent 3a988c1 commit 91cbe57
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 16 deletions.
4 changes: 2 additions & 2 deletions benches/tiger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ const HEIGHT: usize = 1024;
pub fn criterion_benchmark(c: &mut Criterion) {
let mut framebuffer = vec![0xFF000000; WIDTH * HEIGHT];
let mut renderer = Renderer::new();
let mut canvas = renderer.canvas(&mut framebuffer, WIDTH, HEIGHT);
let mut target = renderer.attach(&mut framebuffer, WIDTH, HEIGHT);

let commands = svg::from_file("examples/res/tiger.svg").unwrap();

c.bench_function("tiger", |b| {
b.iter(|| {
svg::render(&commands, Affine::scale(2.0), &mut canvas);
svg::render(&commands, Affine::scale(2.0), &mut target);
})
});
}
Expand Down
8 changes: 4 additions & 4 deletions examples/svg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,21 +78,21 @@ impl State {

self.framebuffer.resize(width as usize * height as usize, 0xFF000000);

let mut canvas = self.renderer.canvas(&mut self.framebuffer, width, height);
let mut target = self.renderer.attach(&mut self.framebuffer, width, height);

canvas.clear(Color::rgba(255, 255, 255, 255));
target.clear(Color::rgba(255, 255, 255, 255));

let time = std::time::Instant::now();
svg::render(
&self.commands,
Affine::scale(scale as f32) * self.transform,
&mut canvas,
&mut target,
);
let elapsed = time.elapsed();

self.timer.update(elapsed);

canvas.fill_text(
target.fill_text(
&format!("{:#.3?}", self.timer.average()),
&self.font,
24.0,
Expand Down
12 changes: 6 additions & 6 deletions src/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ impl Renderer {
}
}

pub fn canvas<'a>(
pub fn attach<'a>(
&'a mut self,
data: &'a mut [u32],
width: usize,
height: usize,
) -> Canvas<'a> {
) -> RenderTarget<'a> {
assert!(data.len() == width * height);

Canvas {
RenderTarget {
renderer: self,
data,
width,
Expand All @@ -44,15 +44,15 @@ impl Default for Renderer {
}
}

pub struct Canvas<'a> {
pub struct RenderTarget<'a> {
renderer: &'a mut Renderer,
data: &'a mut [u32],
width: usize,
height: usize,
transform: Affine,
}

impl<'a> Canvas<'a> {
impl<'a> RenderTarget<'a> {
pub fn width(&self) -> usize {
self.width
}
Expand All @@ -63,7 +63,7 @@ impl<'a> Canvas<'a> {

pub fn with_transform<F, R>(&mut self, transform: Affine, f: F) -> R
where
F: FnOnce(&mut Canvas) -> R,
F: FnOnce(&mut RenderTarget) -> R,
{
let saved = self.transform;
self.transform = saved * transform;
Expand Down
8 changes: 4 additions & 4 deletions svg/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::error::Error;
use std::path;

use flicker::{Affine, Canvas, Color, Path, Point};
use flicker::{Affine, Color, Path, Point, RenderTarget};

pub enum Style {
Fill,
Expand Down Expand Up @@ -93,14 +93,14 @@ fn build_list(node: &usvg::Node, commands: &mut Vec<Command>) {
}
}

pub fn render(commands: &[Command], transform: Affine, canvas: &mut Canvas) {
pub fn render(commands: &[Command], transform: Affine, target: &mut RenderTarget) {
for command in commands {
match command.style {
Style::Fill => {
canvas.fill_path(&command.path, transform, command.color);
target.fill_path(&command.path, transform, command.color);
}
Style::Stroke(width) => {
canvas.stroke_path(&command.path, width, transform, command.color);
target.stroke_path(&command.path, width, transform, command.color);
}
}
}
Expand Down

0 comments on commit 91cbe57

Please sign in to comment.