1 个不稳定版本
0.1.0 | 2024 年 5 月 21 日 |
---|
#274 在 图形 API 中
135KB
1K SLoC
关于项目
通过从 TTF 文件中提取字形的轮廓来渲染字形,并直接从 GPU 绘制。没有任何类型的签名距离场缓存。这基于 Eric Lengyel 的 Slug 算法。
(回到顶部)
构建工具
- 文本形状的 Swash - https://github.com/dfrg/swash
- TTF 解析器以读取 TTF 文件 - https://github.com/RazrFalcon/ttf-parser
- WGPU 作为图形 API - https://wgpu.rs/
(回到顶部)
入门
这是一个示例,展示了如何使用此包以编程方式生成段落,并使用 WGPU 进行渲染。
安装
将依赖项添加到你的 cargo.toml 中
[dependencies]
wgpu-font-renderer = "0.1.0"
(回到顶部)
使用方法
首先,您需要通过传递文件路径和定义您的应用程序使用的字符列表的预置字符串来在 FontStore 中加载 TTF 文件。
let mut font_store = FontStore::new(&device, &config);
let cache_preset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,;:!ù*^$=)àç_è-('\"é&²<>+°§/.? ";
let font_key = font_store.load(&device, &queue, "examples/Roboto-Regular.ttf", cache_preset).expect("Couldn't load the font");
然后在运行时,您可以创建要渲染的新段落。这些可以通过以下方式定义:
- 特定的字体名称
- 屏幕上的位置
- 字体大小
- 线性 RGBA 颜色
- 文本内容
let mut paragraphs = Vec::new();
let mut type_writer = TypeWriter::new();
if let Some(paragraph) = type_writer.shape_text(&font_store, font_key, [100., 100.], 72, [0.68, 0.5, 0.12, 1.], "Salut, c'est cool!") {
paragraphs.push(paragraph);
}
然后您可以初始化预定义的字体渲染中间件
let mut text_renderer = TextRenderer::new(&device, &config, font_store.atlas());
调用 prepare 将您要渲染的段落传递给中间件
text_renderer.prepare(&device, ¶graphs, &font_store);
调用 render 使用现有的渲染通道构建渲染您的段落所需的命令缓冲区
text_renderer.render(&mut pass, [config.width, config.height]);
要查看具体示例,请查看 这里
(回到顶部)
路线图
- 将字形轮廓分离成带
- 按带排序曲线
- 优化数据布局
- 抗锯齿
查看 开放问题 获取所有建议功能(和已知问题)的完整列表。
(回到顶部)
贡献
贡献使开源社区成为一个如此美妙的学习、灵感和创造的地方。您做出的任何贡献都将被 高度赞赏。
如果您有使这个项目变得更好的建议,请fork仓库并创建一个pull request。别忘了给项目加星!再次感谢!
- fork项目
- 创建您的功能分支(
git checkout -b feature/AmazingFeature
) - 提交您的更改(
git commit -m 'Add some AmazingFeature'
) - 推送到分支(
git push origin feature/AmazingFeature
) - 打开pull request
(回到顶部)
许可
遵循MIT许可证分发。更多信息请参阅LICENSE.txt
(回到顶部)
联系方式
项目链接: https://github.com/ValentinRio/wgpu-font-renderer
(回到顶部)
依赖项
~8–39MB
~632K SLoC