pub struct Atlas {
    id: c_uint,
    width: i32,
    height: i32,
    row_extent: i32,
    row_baseline: i32,
    row_tallest: i32,
    is_gles_context: bool,
}
Expand description

Manages a single texture atlas.

The strategy for filling an atlas looks roughly like this:

                          (width, height)
  ┌─────┬─────┬─────┬─────┬─────┐
  │ 10  │     │     │     │     │ <- Empty spaces; can be filled while
  │     │     │     │     │     │    glyph_height < height - row_baseline
  ├─────┼─────┼─────┼─────┼─────┤
  │ 5   │ 6   │ 7   │ 8   │ 9   │
  │     │     │     │     │     │
  ├─────┼─────┼─────┼─────┴─────┤ <- Row height is tallest glyph in row; this is
  │ 1   │ 2   │ 3   │ 4         │    used as the baseline for the following row.
  │     │     │     │           │ <- Row considered full when next glyph doesn't
  └─────┴─────┴─────┴───────────┘    fit in the row.
(0, 0)  x->

Fields§

§id: c_uint

Texture id for this atlas.

§width: i32

Width of atlas.

§height: i32

Height of atlas.

§row_extent: i32

Left-most free pixel in a row.

This is called the extent because it is the upper bound of used pixels in a row.

§row_baseline: i32

Baseline for glyphs in the current row.

§row_tallest: i32

Tallest glyph in current row.

This is used as the advance when end of row is reached.

§is_gles_context: bool

Gles context.

This affects the texture loading.

Implementations§

source§

impl Atlas

source

pub fn new(size: i32, is_gles_context: bool) -> Self

source

pub fn clear(&mut self)

source

pub fn insert( &mut self, glyph: &RasterizedGlyph, active_tex: &mut u32 ) -> Result<Glyph, AtlasInsertError>

Insert a RasterizedGlyph into the texture atlas.

source

fn insert_inner( &mut self, glyph: &RasterizedGlyph, active_tex: &mut u32 ) -> Glyph

Insert the glyph without checking for room.

Internal function for use once atlas has been checked for space. GL errors could still occur at this point if we were checking for them; hence, the Result.

source

pub fn room_in_row(&self, raw: &RasterizedGlyph) -> bool

Check if there’s room in the current row for given glyph.

source

pub fn advance_row(&mut self) -> Result<(), AtlasInsertError>

Mark current row as finished and prepare to insert into the next row.

source

pub fn load_glyph( active_tex: &mut c_uint, atlas: &mut Vec<Atlas>, current_atlas: &mut usize, rasterized: &RasterizedGlyph ) -> Glyph

Load a glyph into a texture atlas.

If the current atlas is full, a new one will be created.

source

pub fn clear_atlas(atlas: &mut [Atlas], current_atlas: &mut usize)

Trait Implementations§

source§

impl Debug for Atlas

source§

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

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

impl Drop for Atlas

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Atlas

§

impl Send for Atlas

§

impl Sync for Atlas

§

impl Unpin for Atlas

§

impl UnwindSafe for Atlas

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.