pub struct Tiles {
tile_buf: Vec<Tile>,
level: Level,
sorted: bool,
width: u16,
height: u16,
pub windings: CulledWindings,
}Expand description
Handles the tiling of paths.
Fields§
§tile_buf: Vec<Tile>§level: Level§sorted: bool§width: u16§height: u16§windings: CulledWindingsAuxiliary data tracking row windings and active rows for early culling.
Implementations§
Source§impl Tiles
impl Tiles
Sourcepub fn has_culled_tiles(&self) -> bool
pub fn has_culled_tiles(&self) -> bool
Returns true if any geometry was early-culled outside the viewport.
Sourcepub fn reset(&mut self, width: u16, height: u16)
pub fn reset(&mut self, width: u16, height: u16)
Reset the tiles’ container and resize to the given dimensions.
Sourcepub fn sort_tiles(&mut self)
pub fn sort_tiles(&mut self)
Sort the tiles in the container.
Sourcepub fn get(&self, index: u32) -> &Tile
pub fn get(&self, index: u32) -> &Tile
Get the tile at a certain index.
Panics if the container hasn’t been sorted before.
Sourcepub fn iter(&self) -> impl Iterator<Item = &Tile>
pub fn iter(&self) -> impl Iterator<Item = &Tile>
Iterate over the tiles in sorted order.
Panics if the container hasn’t been sorted before.
Sourcepub fn make_tiles_analytic_aa(
&mut self,
level: Level,
lines: &[Line],
width: u16,
height: u16,
) -> bool
pub fn make_tiles_analytic_aa( &mut self, level: Level, lines: &[Line], width: u16, height: u16, ) -> bool
Generates tile commands for Analytic Anti-Aliasing rasterization. Unlike the MSAA path, this
function performs “coarse binning” to simply identify every tile a line segment traverses.
It encodes the line index and winding direction, delegating the precise calculation of pixel
coverage to strip::render.
fn make_tiles_analytic_aa_impl<S: Simd>( &mut self, s: S, lines: &[Line], width: u16, height: u16, ) -> bool
Sourcepub fn make_tiles_msaa(&mut self, lines: &[Line], width: u16, height: u16)
pub fn make_tiles_msaa(&mut self, lines: &[Line], width: u16, height: u16)
Generates tile commands for MSAA (Multisample Anti-Aliasing) rasterization.
[ Architecture & Watertightness ] The primary goal of this function is to establish a source of “ground truth” for line-tile intersections. Because the downstream rasterization (MSAA) occurs in parallel, it is critical that intersections are “watertight.” If Thread A handles Tile (0,0) and Thread B handles Tile (1,0), they must agree exactly on whether a line crosses the shared edge.
While calculating exact intersection coordinates here is feasible, it is computationally expensive. Instead, we defer the heavy math to the GPU/rasterizer and produce a lightweight Intersection Bitmask. This mask unambiguously defines which edges of a tile a line segment touches or crosses.
[ The Intersection Bitmask (5 bits) ] The bitmask encodes winding information and edge intersections. A line is said to “intersect” an edge if it touches that edge AND continues into the neighboring tile.
Bit representation: Bit: 4 | 3 | 2 | 1 | 0 Val: W | R | L | B | T
- W (Winding): Tracks whether the line touched the top edge of the tile.
- R/L/B/T: Right, Left, Bottom, and Top edge intersections.