Struct piston_window::texture_packer::TexturePacker[][src]

pub struct TexturePacker<T> {
    pub textures: Vec<T, Global>,
    pub atlas: usize,
    pub skyline: Vec<[u32; 2], Global>,
}

A texture packer using a skyline heuristic.

For offline texture packing, see texture_packer.

Designed for adding textures one by one to current texture atlas. Packs tiles without backtracking or knowledge about future tiles.

Can also be used as storage for textures.

Design

A skyline is a list of non-hole atlas offsets, used to efficiently determine a good place to put the next tile.

In this texture packer, only a single skyline is kept track of, since new texture atlases are created by need.

This texture packer has runtime complexity O(N^2) for inserting a new tile, where N is the number of points in the skyline. Since N is usually a low number, the packing is pretty fast.

The algorithm was designed by Sven Nilsen (2019) for Piston-Graphics.

Fields

textures: Vec<T, Global>

Stores current texture atlas and previously created ones.

atlas: usize

The index to the current texture atlas.

skyline: Vec<[u32; 2], Global>

Texture atlas offsets from left to right.

When a new tile is added with same offset, it updates the atlas offsets that it overlaps. This means that “holes” get filled in over time.

Implementations

impl<T> TexturePacker<T> where
    T: ImageSize
[src]

pub fn new() -> TexturePacker<T>[src]

Returns a new TexturePacker.

pub fn create(&mut self, size: [u32; 2], texture: T) -> usize[src]

Create a new texture atlas with an initial tile.

The new texture atlas is made the current one.

pub fn update(&mut self, ind: usize, size: [u32; 2]) -> (usize, [u32; 2])[src]

Update current texture atlas.

  • ind: index of atlas offset in the skyline
  • size: size of new tile

Returns the index of the current texture atlas and the atlas offset of the new tile.

pub fn find_space(&self, size: [u32; 2]) -> Option<usize>[src]

Returns the index of atlas offset in skyline with room for a new tile.

Returns None if no room was found in the current texture atlas.

Auto Trait Implementations

impl<T> RefUnwindSafe for TexturePacker<T> where
    T: RefUnwindSafe

impl<T> Send for TexturePacker<T> where
    T: Send

impl<T> Sync for TexturePacker<T> where
    T: Sync

impl<T> Unpin for TexturePacker<T> where
    T: Unpin

impl<T> UnwindSafe for TexturePacker<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Pointable for T[src]

type Init = T

The type for initializers.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.