14 releases
0.2.13 | Jun 17, 2024 |
---|---|
0.2.10 | Nov 17, 2023 |
0.2.8 | Jul 4, 2023 |
0.2.7 | May 4, 2022 |
0.2.1 | Nov 26, 2020 |
#27 in Graphics APIs
64,411 downloads per month
Used in 80 crates
(20 directly)
88KB
2K
SLoC
Étagère
A dynamic texture atlas allocator using the shelf packing algorithm.
Motivation
The ability to dynamically batch textures together is important for some graphics rendering scenarios (for example WebRender).
The shelf packing algorithm works very well when there is a high number of items with similar sizes, for example for dynamic glyph atlases.
See also guillotière, another dynamic atlas allocator based on a different algorithm, with different packing and performance characteristics.
Example
use etagere::*;
let mut atlas = AtlasAllocator::new(size2(1000, 1000));
let a = atlas.allocate(size2(100, 1000)).unwrap();
let b = atlas.allocate(size2(900, 200)).unwrap();
atlas.deallocate(a.id);
let c = atlas.allocate(size2(300, 200)).unwrap();
assert_eq!(c.rectangle, atlas.get(c.id));
atlas.deallocate(c.id);
atlas.deallocate(b.id);
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Dependencies
~0.6–0.8MB
~19K SLoC