Skip to content

Commit

Permalink
Remove a workaround for vello#719
Browse files Browse the repository at this point in the history
  • Loading branch information
yutannihilation committed Oct 23, 2024
1 parent b80a3b4 commit 49af822
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 73 deletions.
9 changes: 3 additions & 6 deletions src/rust/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ ipc-channel = "0.18.3"
winit = "0.30"
pollster = "0.3"

vello = "0.3"
vello = { git = "https://github.com/linebender/vello", branch = "image_sampling" }
parley = "0.2"
fastrace = { version = "0.7", features = ["enable"] }

Expand Down
19 changes: 2 additions & 17 deletions src/rust/src/vello_device/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -259,29 +259,14 @@ impl DeviceDriver for VelloGraphicsDevice {

let scale = (size.0 / pixels.0 as f64, size.1 / pixels.1 as f64);

// when the pixel is small enough, it's not a problem, but if it's
// large, this needs a tweak.
let with_extended_edge = scale.0 > 1.0 || scale.1 > 1.0;

#[cfg(debug_assertions)]
{
savvy::r_eprintln!("with_extended_edge : {with_extended_edge}");
}

let image = convert_to_image(
raster,
pixels.0 as usize,
pixels.1 as usize,
alpha,
with_extended_edge,
);
let image = convert_to_image(raster, pixels.0 as usize, pixels.1 as usize, alpha);

let window_height = VELLO_APP_PROXY.height.load(Ordering::Relaxed) as f64;
let pos = (pos.0, window_height - (pos.1 + size.1)); // change to top-left corner

VELLO_APP_PROXY
.scene
.draw_raster(&image, scale, pos.into(), angle, with_extended_edge);
.draw_raster(&image, scale, pos.into(), angle);
}

// TODO
Expand Down
54 changes: 5 additions & 49 deletions src/rust/vellogd-shared/src/winit_app/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,31 +206,13 @@ impl SceneDrawer {
scale: (f64, f64),
pos: kurbo::Vec2, // top left corner
angle: f64,
with_extended_edge: bool,
) {
let transform = kurbo::Affine::scale_non_uniform(scale.0, scale.1)
.then_translate(pos)
.then_rotate(-angle.to_radians());
let scene = &mut self.inner.lock().unwrap();

let (brush_transform, width, height) = if with_extended_edge {
// draw largely and clip the edge
(
Some(kurbo::Affine::translate((0.5, 0.5))),
image.width as f64 - 1.0,
image.height as f64 - 1.0,
)
} else {
(None, image.width as f64, image.height as f64)
};

scene.fill(
peniko::Fill::NonZero,
transform,
image,
brush_transform,
&kurbo::Rect::new(0.0, 0.0, width, height),
);
scene.draw_image(image, transform);

self.needs_redraw.store(true, Ordering::Relaxed);
}
Expand Down Expand Up @@ -312,39 +294,13 @@ impl SceneDrawer {
// be drawn after the raster() Graphics API call. There's no
// guarantee that this still exists on R's memory at the time.
// So, this needs to be kept on Rust's memory.
pub fn convert_to_image(
raster: &[u8],
width: usize,
height: usize,
alpha: u8,
with_extended_edge: bool,
) -> peniko::Image {
let (raster_owned, width, height) = if !with_extended_edge {
(raster.to_vec(), width as u32, height as u32)
} else {
let extended_width = width + 1;
let extended_height = height + 1;
let mut raster_owned = Vec::with_capacity(extended_width * extended_height);
for (i, row) in raster.chunks(width * 4).enumerate() {
raster_owned.extend_from_slice(row);
// copy the last pixel
let last_pixel = &row[(width * 4 - 4)..(width * 4)];
raster_owned.extend_from_slice(last_pixel);
// fill the last line
if i == height - 1 {
raster_owned.extend_from_slice(row);
raster_owned.extend_from_slice(last_pixel);
}
}
(raster_owned, extended_width as u32, extended_height as u32)
};

let raster_blob = peniko::Blob::new(Arc::new(raster_owned));
pub fn convert_to_image(raster: &[u8], width: usize, height: usize, alpha: u8) -> peniko::Image {
let raster_blob = peniko::Blob::new(Arc::new(raster.to_vec()));
peniko::Image {
data: raster_blob,
format: peniko::Format::Rgba8,
width,
height,
width: width as u32,
height: height as u32,
extend: peniko::Extend::Pad,
alpha,
}
Expand Down

0 comments on commit 49af822

Please sign in to comment.