6 个版本

0.3.2 2024 年 6 月 20 日
0.3.1 2023 年 12 月 9 日
0.3.0 2023 年 3 月 22 日
0.2.0 2022 年 7 月 19 日
0.1.1 2021 年 3 月 10 日

#123 in 图形 API

Download history 136/week @ 2024-04-19 67/week @ 2024-04-26 199/week @ 2024-05-03 156/week @ 2024-05-10 102/week @ 2024-05-17 31/week @ 2024-05-24 107/week @ 2024-05-31 84/week @ 2024-06-07 149/week @ 2024-06-14 83/week @ 2024-06-21 23/week @ 2024-06-28 13/week @ 2024-07-05 2/week @ 2024-07-12 44/week @ 2024-07-19 71/week @ 2024-07-26 49/week @ 2024-08-02

167 每月下载次数

MIT 许可证

390KB
279

fontdue-sdl2

docs.rs badge crates.io badge GitHub Actions badge

一个用于使用 sdl2::render 绘制文本的包,使用 fontdue 进行光栅化。这是一个粘合包,所有好的部分都来自上述库。

创建此包的动机是为了在使用 SDL2 渲染模块的项目中实现比 sdl2_ttf 更容易、更 Rust 化和更高质量的文本渲染。

注意,fontdue 已经是一个“完整的文本渲染解决方案”,它是一个非常面向应用的包。创建此包的原因是我不需要为每个我工作的 SDL2 项目编写一个文本渲染缓存,这部分内容在 fontdue 中可能没有实现,因为它可能取决于渲染技术。这是 fontdue + SDL2 的解决方案。

文档

docs.rs 上阅读文档。

与 sdl2_ttf 相比

此库将每个字形作为自己的四边形绘制,从一个单独的字形缓存纹理。在现代 GPU 上,这非常快,因为它可以在单个绘制调用中完成。通过将此库的结果渲染到渲染纹理中,仍然可以实现按文本区域缓存。

性能和不足之处

当前,在字形缓存纹理上预留空间与之前分配的字形数量成比例,因此随着时间的推移会变慢。一些临时测试表明,在发布版本中,每个字形的处理时间约为 20 微秒,在调试版本中约为 200 微秒,对于不同大小的几段文本。然而,这很少严重影响整体性能,因为只需要为每个字符/大小/颜色/字体组合执行一次。但仍有很多优化空间。

目前,该包仍在开发中,因此还有一些功能尚未实现

  • 字形缓存纹理不能动态调整大小,纹理始终为 1024x1024。
  • 无法覆盖未使用的字形,写入的字形将永久存在于缓存中。

删除未使用的字符(包括检测它们)可能会过于耗费性能,因此我可能在实现即时纹理调整功能后发布1.0版本。虽然手动清除缓存也可能被添加,但这种做法的实际用途值得怀疑,因为您可以直接创建一个新的FontTexture来达到类似的效果。

屏幕截图

这个屏幕截图主要展示了fontdue(文本光栅化)和SDL2(窗口和渲染),但我认为渲染框应该有截图来给人留下第一印象。这个截图是来自testbed.rs示例的。

Screenshot of some text from Wikipedia rendered using this crate.

许可证

此库可以在MIT许可证的条款下使用。

依赖关系

~19MB
~394K SLoC