#纹理图集 #2D 图形 #图形 #矩形 #2D #分配器 #动态

guillotiere

具有快速释放功能的动态 2D 纹理图集分配器

14 个版本

0.6.2 2021 年 8 月 10 日
0.6.1 2021 年 5 月 16 日
0.6.0 2020 年 8 月 7 日
0.5.2 2020 年 6 月 5 日
0.3.0 2019 年 3 月 30 日

图形 API 中排名 457

Download history 21236/week @ 2024-03-14 22711/week @ 2024-03-21 23701/week @ 2024-03-28 21972/week @ 2024-04-04 21768/week @ 2024-04-11 22870/week @ 2024-04-18 21522/week @ 2024-04-25 24293/week @ 2024-05-02 19283/week @ 2024-05-09 19025/week @ 2024-05-16 20272/week @ 2024-05-23 22225/week @ 2024-05-30 21297/week @ 2024-06-06 20761/week @ 2024-06-13 18088/week @ 2024-06-20 17194/week @ 2024-06-27

每月下载量 80,385
用于 444 个 Crates(直接使用 9 个)

MIT/Apache 许可协议

82KB
1.5K SLoC

Guillotière

Travis Build Status documentation

具有快速释放和矩形合并功能的动态纹理图集分配器。

动机

对于某些图形渲染场景(例如 WebRender),动态地将纹理批量组合在一起的能力很重要。动态图集分配的挑战性方面之一是在释放后需要合并空闲矩形以整理可用空间。一些图集分配器通过检查所有可能的空闲矩形对并测试它们是否可以合并来执行此任务,这对于实时应用程序来说代价过高。

Guillotière 通过内部维护一个允许以常数时间访问相邻矩形并极大地加快合并操作的数据结构来解决此问题。

此功能的详细说明请参阅 AtlasAllocator 文档

示例

use guillotiere::*;

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[c.id]);

atlas.deallocate(c.id);
atlas.deallocate(b.id);

许可证

根据您选择的许可证

依赖项

~0.6–0.8MB
~19K SLoC