Fix more bugs
This commit is contained in:
parent
4fd332955a
commit
86f1202360
|
@ -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 interval.winding != 0.0 {
|
||||||
if tile_interval == (tile_left..tile_right) {
|
if tile_interval == (tile_left..tile_right) {
|
||||||
strip_tiles[strip_tile_index].backdrop = interval.winding
|
strip_tiles[strip_tile_index].backdrop = interval.winding
|
||||||
} else {
|
} else if tile_interval.start < tile_interval.end {
|
||||||
let left = Point2D::new(tile_interval.start - tile_left, strip_origin.y);
|
let left = Point2D::new(tile_interval.start - tile_left, 0.0);
|
||||||
let right = Point2D::new(tile_interval.end - tile_left, strip_origin.y);
|
let right = Point2D::new(tile_interval.end - tile_left, 0.0);
|
||||||
strip_fills.push(FillPrimitive {
|
strip_fills.push(FillPrimitive {
|
||||||
from: if interval.winding < 0.0 { left } else { right },
|
from: if interval.winding < 0.0 { left } else { right },
|
||||||
to: if interval.winding < 0.0 { right } else { left },
|
to: if interval.winding < 0.0 { right } else { left },
|
||||||
tile_index: strip_tile_index as u32,
|
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;
|
||||||
|
|
Loading…
Reference in New Issue