#texture-atlas #2d #dynamic #packing #2d-graphics #algorithm #size

etagere

使用货架装箱算法进行动态2D纹理图集分配

14个版本

0.2.13 2024年6月17日
0.2.10 2023年11月17日
0.2.8 2023年7月4日
0.2.7 2022年5月4日
0.2.1 2020年11月26日

#15 in 图形API

Download history 12276/week @ 2024-04-26 12508/week @ 2024-05-03 10617/week @ 2024-05-10 10036/week @ 2024-05-17 10368/week @ 2024-05-24 10860/week @ 2024-05-31 10920/week @ 2024-06-07 13631/week @ 2024-06-14 11904/week @ 2024-06-21 12848/week @ 2024-06-28 16857/week @ 2024-07-05 22179/week @ 2024-07-12 21099/week @ 2024-07-19 18704/week @ 2024-07-26 17791/week @ 2024-08-02 20673/week @ 2024-08-09

81,570 每月下载量
66 个crate中(17个直接) 使用

MIT/Apache

88KB
2K SLoC

Étagère

crates.io documentation

使用货架装箱算法的动态纹理图集分配器。

动机

动态地将纹理组合在一起的能力对于某些图形渲染场景非常重要(例如 WebRender)。

当存在大量尺寸相似的项目时,货架装箱算法效果非常好,例如动态字形图集。

另见 guillotière,另一个基于不同算法的动态图集分配器,具有不同的装箱和性能特征。

示例

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);

许可证

根据您的要求,许可协议为以下之一

依赖关系

~0.6–0.8MB
~19K SLoC