Fix more bugs

This commit is contained in:
Patrick Walton 2018-12-19 20:42:46 -08:00
parent 4fd332955a
commit 86f1202360
1 changed files with 18 additions and 21 deletions

View File

@ -1004,32 +1004,29 @@ impl<'o, 'p> Tiler<'o, 'p> {
// TODO(pcwalton): Use only the active edge list! // TODO(pcwalton): Use only the active edge list!
let mut strip_tile_index = 0; let mut strip_tile_index = 0;
for interval in &self.active_intervals.ranges { for interval in &self.active_intervals.ranges {
if interval.winding == 0.0 { while strip_tile_index < strip_tiles.len() {
continue
}
while strip_tile_index < strip_tiles.len() &&
strip_tiles[strip_tile_index].position.x + TILE_WIDTH < interval.start {
strip_tile_index += 1;
}
while strip_tile_index < strip_tiles.len() &&
strip_tiles[strip_tile_index].position.x < interval.end {
let tile_left = strip_tiles[strip_tile_index].position.x; let tile_left = strip_tiles[strip_tile_index].position.x;
let tile_right = tile_left + TILE_WIDTH; let tile_right = tile_left + TILE_WIDTH;
let tile_interval = intersect_ranges(tile_left..tile_right, let tile_interval = intersect_ranges(tile_left..tile_right,
interval.start..interval.end); interval.start..interval.end);
if tile_interval == (tile_left..tile_right) { if interval.winding != 0.0 {
strip_tiles[strip_tile_index].backdrop = interval.winding if tile_interval == (tile_left..tile_right) {
} else { strip_tiles[strip_tile_index].backdrop = interval.winding
let left = Point2D::new(tile_interval.start - tile_left, strip_origin.y); } else if tile_interval.start < tile_interval.end {
let right = Point2D::new(tile_interval.end - tile_left, strip_origin.y); let left = Point2D::new(tile_interval.start - tile_left, 0.0);
strip_fills.push(FillPrimitive { let right = Point2D::new(tile_interval.end - tile_left, 0.0);
from: if interval.winding < 0.0 { left } else { right }, strip_fills.push(FillPrimitive {
to: if interval.winding < 0.0 { right } else { left }, from: if interval.winding < 0.0 { left } else { right },
tile_index: strip_tile_index as u32, to: if interval.winding < 0.0 { right } else { left },
}); tile_index: strip_tile_index as u32,
});
used_strip_tiles.insert(strip_tile_index);
}
}
if tile_right > interval.end {
break
} }
strip_tile_index += 1; strip_tile_index += 1;