Fix vello_toy
diff --git a/sparse_strips/vello_toy/src/debug.rs b/sparse_strips/vello_toy/src/debug.rs
index 852e1aa..aacf08f 100644
--- a/sparse_strips/vello_toy/src/debug.rs
+++ b/sparse_strips/vello_toy/src/debug.rs
@@ -200,7 +200,7 @@
}
}
-fn draw_strip_areas(document: &mut Document, strips: &[Strip], alphas: &[u32]) {
+fn draw_strip_areas(document: &mut Document, strips: &[Strip], alphas: &[u8]) {
for i in 0..strips.len() {
let strip = &strips[i];
let x = strip.x;
@@ -208,10 +208,10 @@
let end = strips
.get(i + 1)
- .map(|s| s.col)
+ .map(|s| s.alpha_idx / u32::from(Tile::HEIGHT))
.unwrap_or(alphas.len() as u32);
- let width = end - strip.col;
+ let width = end - strip.alpha_idx / u32::from(Tile::HEIGHT);
// TODO: Account for even-odd?
let color = if strip.winding != 0 {
@@ -235,18 +235,16 @@
}
}
-fn draw_strips(document: &mut Document, strips: &[Strip], alphas: &[u32]) {
+fn draw_strips(document: &mut Document, strips: &[Strip], alphas: &[u8]) {
for s in 0..strips.len() {
let strip = &strips[s];
- let x = strip.x;
- let y = strip.strip_y();
let end = strips
.get(s + 1)
- .map(|st| st.col)
+ .map(|st| st.alpha_idx / u32::from(Tile::HEIGHT))
.unwrap_or(alphas.len() as u32);
- let width = u16::try_from(end - strip.col).unwrap();
+ let width = u16::try_from(end - strip.alpha_idx / u32::from(Tile::HEIGHT)).unwrap();
// TODO: Account for even-odd?
let color = if strip.winding != 0 {
@@ -255,18 +253,18 @@
"limegreen"
};
- for i in 0..width {
- let alpha = alphas[i as usize + strip.col as usize];
- let entries = alpha.to_le_bytes();
-
- for (h, e) in entries.iter().enumerate().take(Tile::HEIGHT.into()) {
+ for x in 0..width {
+ for y in 0..Tile::HEIGHT {
+ let alpha = alphas[strip.alpha_idx as usize
+ + usize::from(x) * usize::from(Tile::HEIGHT)
+ + usize::from(y)];
let rect = Rectangle::new()
- .set("x", x + i)
- .set("y", y * Tile::HEIGHT + h as u16)
+ .set("x", strip.x + x)
+ .set("y", strip.y + y)
.set("width", 1)
.set("height", 1)
.set("fill", color)
- .set("fill-opacity", *e as f32 / 255.0);
+ .set("fill-opacity", alpha as f32 / 255.0);
document.append(rect);
}
@@ -274,16 +272,17 @@
}
}
-fn draw_wide_tiles(document: &mut Document, wide_tiles: &[WideTile], alphas: &[u32]) {
- for (t_i, tile) in wide_tiles.iter().enumerate() {
+fn draw_wide_tiles(document: &mut Document, wide_tiles: &[WideTile], alphas: &[u8]) {
+ // TODO: account for multiple wide tiles per row.
+ for (tile_idx, tile) in wide_tiles.iter().enumerate() {
for cmd in &tile.cmds {
match cmd {
Cmd::Fill(f) => {
- for i in 0..f.width {
- for h in 0..Tile::HEIGHT {
+ for x in 0..f.width {
+ for y in 0..Tile::HEIGHT {
let rect = Rectangle::new()
- .set("x", f.x + i)
- .set("y", t_i * usize::from(Tile::HEIGHT + h))
+ .set("x", f.x + x)
+ .set("y", tile_idx * usize::from(Tile::HEIGHT) + usize::from(y))
.set("width", 1)
.set("height", 1)
.set("fill", "blue");
@@ -293,18 +292,19 @@
}
}
Cmd::AlphaFill(s) => {
- for i in 0..s.width {
- let alpha = alphas[s.alpha_ix + i as usize];
- let entries = alpha.to_le_bytes();
+ for x in 0..s.width {
+ for y in 0..Tile::HEIGHT {
+ let alpha = alphas[s.alpha_ix
+ + usize::from(x) * usize::from(Tile::HEIGHT)
+ + usize::from(y)];
- for (h, e) in entries.iter().enumerate().take(Tile::HEIGHT.into()) {
let rect = Rectangle::new()
- .set("x", s.x + i)
- .set("y", t_i * usize::from(Tile::HEIGHT) + h)
+ .set("x", s.x + x)
+ .set("y", tile_idx * usize::from(Tile::HEIGHT) + usize::from(y))
.set("width", 1)
.set("height", 1)
.set("fill", "yellow")
- .set("fill-opacity", *e as f32 / 255.0);
+ .set("fill-opacity", alpha as f32 / 255.0);
document.append(rect);
}