Skip to main content

Tile

Struct Tile 

Source
#[repr(C)]
pub struct Tile { pub packed_winding_line_idx: u32, pub x: u16, pub y: u16, }
Expand description

A tile represents an aligned area on the pixmap, used to subdivide the viewport into sub-areas (currently 4x4) and analyze line intersections inside each such area.

Keep in mind that it is possible to have multiple tiles with the same index, namely if we have multiple lines crossing the same 4x4 area!

§Note

This struct is #[repr(C)], but the byte order of its fields is dependent on the endianness of the compilation target.

Fields§

§packed_winding_line_idx: u32

The index of the line this tile belongs to into the line buffer, intersection data, and winding data packed together.

The layout is:

  • Bits 0-4 (5 bits): Intersection and Winding Mask (W | R | L | B | T).
    • Bit 0 (mask 0b00001): Intersects top edge (T)
    • Bit 1 (mask 0b00010): Intersects bottom edge (B)
    • Bit 2 (mask 0b00100): Intersects left edge (L)
    • Bit 3 (mask 0b01000): Intersects right edge (R)
    • Bit 4 (mask 0b10000): Winding (W) - 1 if crosses top edge.
  • Bits 5-31 (27 bits): The line index (line_idx).

Sorting Note: The line_idx occupies the higher bits to ensure that when sorting tiles with the same (x, y) coordinates, they are sorted by their line index first, and then by their intersection mask.

§x: u16

The index of the tile in the x direction.

§y: u16

The index of the tile in the y direction.

Implementations§

Source§

impl Tile

Source

pub const WIDTH: u16 = 4

The width of a tile in pixels.

Source

pub const HEIGHT: u16 = 4

The height of a tile in pixels.

Source

pub const SENTINEL: Self

A special tile used to signal the end of a tile stream during rendering.

Source

pub fn new_clamped( x: u16, y: u16, line_idx: u32, intersection_mask: u32, ) -> Self

Create a new tile. x and y will be clamped to the largest possible coordinate if they are too large.

line_idx must be smaller than MAX_LINES_PER_PATH.

Source

pub const fn new(x: u16, y: u16, line_idx: u32, intersection_mask: u32) -> Self

The base tile constructor

Unlike Self::new_clamped, this constructor stores x and y exactly as provided. Callers must ensure these coordinates do not exceed the limits required by downstream processing (typically u16::MAX / WIDTH and u16::MAX / HEIGHT).

Source

pub const fn same_loc(&self, other: &Self) -> bool

Check whether two tiles are at the same location.

Source

pub const fn prev_loc(&self, other: &Self) -> bool

Check whether self is adjacent to the left of other.

Source

pub const fn same_row(&self, other: &Self) -> bool

Check whether two tiles are on the same row.

Source

pub const fn line_idx(&self) -> u32

The index of the line this tile belongs to into the line buffer.

Returns the high 27 bits.

Source

pub const fn winding(&self) -> bool

Whether the line crosses the top edge of the tile.

Lines making this crossing increment or decrement the coarse tile winding, depending on the line direction.

Checks Bit 4 (Winding).

Source

pub const fn intersection_mask(&self) -> u32

The 5 bits of intersection and winding data.

Source

pub const fn intersects_top(&self) -> bool

Whether the line intersects the top edge of the tile.

Source

pub const fn intersects_bottom(&self) -> bool

Whether the line intersects the bottom edge of the tile.

Source

pub const fn intersects_left(&self) -> bool

Whether the line intersects the left edge of the tile.

Source

pub const fn intersects_right(&self) -> bool

Whether the line intersects the right edge of the tile.

Source

const fn to_bits(self) -> u64

Return the u64 representation of this tile.

This is the u64 interpretation of (y, x, packed_winding_line_idx) where y is the most-significant part of the number and packed_winding_line_idx the least significant.

Source

pub const fn is_sentinel(&self) -> bool

Whether a tile is a sentinel tile

Trait Implementations§

Source§

impl Clone for Tile

Source§

fn clone(&self) -> Tile

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Tile

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Ord for Tile

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Tile

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Tile

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Copy for Tile

Source§

impl Eq for Tile

Auto Trait Implementations§

§

impl Freeze for Tile

§

impl RefUnwindSafe for Tile

§

impl Send for Tile

§

impl Sync for Tile

§

impl Unpin for Tile

§

impl UnsafeUnpin for Tile

§

impl UnwindSafe for Tile

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.