[−][src]Struct graphics::texture_packer::TexturePacker
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.
- Perfect at packing tiles of same size
- Good at packing tiles of some unit size
- Decent at packing tiles of similar sizes
- Can be used with pre-sorted tile sizes for better packing
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>
Stores current texture atlas and previously created ones.
atlas: usize
The index to the current texture atlas.
skyline: Vec<[u32; 2]>
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: ImageSize> TexturePacker<T>
[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,
T: RefUnwindSafe,
impl<T> Send for TexturePacker<T> where
T: Send,
T: Send,
impl<T> Sync for TexturePacker<T> where
T: Sync,
T: Sync,
impl<T> Unpin for TexturePacker<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for TexturePacker<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,