#font #true-type #opentype #font-rendering #otf

rusttype_bugfix_19072017

FreeType等库的纯Rust替代方案。RustType提供加载、查询和光栅化TrueType字体的API。它还提供了一个用于硬件字体渲染的动态GPU字形缓存的实现

1个不稳定版本

使用旧的Rust 2015

0.2.1 2017年7月19日

#310 in 缓存

MIT/Apache

205KB
4K SLoC

RustType

Build Status

RustType是FreeType等库的纯Rust替代方案。

RustType当前的功能

  • 读取TrueType格式的字体和字体集合。这包括*.ttf以及*.otf字体文件的一个子集。
  • 检索字体及其字形的字形形状和常用属性。
  • 使用水平和垂直度量以及字形对特定间距进行字形横向布局。
  • 使用精确的分析算法(不基于采样)进行亚像素定位的字形光栅化。
  • 使用gpu_cache模块管理GPU上的字体缓存。这将在GPU内存中保留最近使用的字形渲染结果,以最小化每帧的纹理上传。它还允许您将文本的绘制调用计数保持在非常低的水平,因为所有字形都保留在一个GPU纹理中。

RustType目前不支持的事项

  • 除了TrueType字体之外,OpenType格式的字体(OpenType是TrueType的超集)。值得注意的是,目前还没有支持用于字形的立方贝塞尔曲线。
  • 字体提示。
  • 任何类型的连字符。
  • 一些不太常见的TrueType子格式。
  • 从右到左和垂直文本布局。

入门指南

将以下内容添加到您的Cargo.toml中

[dependencies]
rusttype = "0.2.1"

要快速开始使用RustType,请查看crate中提供的simple.rs示例。它演示了加载字体文件、光栅化任意字符串,并将结果显示为ASCII艺术。如果您只想查看文档,加载字体的入口点是FontCollection,从这里您可以访问单个字体,然后是它们的字形。

文档

未来计划

RustType 的当前状态只是开始。有许多途径可以对其进行改进。我进行这个项目的最主要动机是为游戏提供易于使用的字体渲染。我目前关注的重点是使用 RustType 的 UI 库。一旦我有时间回过头来改进 RustType 本身,我最感兴趣的改进是:

  • 在小型字体大小下提高可读性的某种提示形式。
  • 用用 Rust 编写的 OpenType 字体加载替换对我其他库的依赖,即 stb_truetype-rsstb_truetype.h 的直接翻译)。
  • 在 OpenType 字体中添加对立方曲线的支持。
  • 将光栅化代码提取到一个单独的矢量图形渲染包中。
  • 支持某些常见的连字形式。
  • 最终,支持嵌入的从右到左的 Unicode 文本。

如果您认为可以帮助实现这些目标中的任何一个,请随时为此打开一个跟踪问题以进行讨论。

许可

根据您的要求,许可如下:

贡献

除非您明确表示,否则,根据 Apache-2.0 许可证的定义,您有意提交给作品以包含在内的任何贡献,均应按上述方式双许可,而不附加任何额外条款或条件。

依赖项

~420KB