3个版本

0.3.2 2023年4月20日
0.3.1 2023年4月11日
0.3.0 2023年4月8日

#425 in 图形API

MPL-2.0 许可证

105KB
2.5K SLoC

VDTFont crates.io Documentation

一个将字形转换为三角剖分的新型库,可用于在游戏和应用界面中渲染文本。

use vdtfont::{*, delaunay::*};

// Create a font
let font_data = include_bytes!("/usr/share/fonts/truetype/open-sans/OpenSans-Regular.ttf");
let mut font = Font::from_vec(font_data.to_vec())?;

// Obtain a glyph
let glyph = font.glyph('a');
// Outline the glyph
let outlined_glyph = font.outline_glyph(glyph);
// Triangulate th glyph
let triangulated_glyph = font.triangulate_glyph(outlined_glyph)?;

// Use the resulting triangulation
triangulated_glyph
    .triangles()
    .handle_iter::<DelaunayTriangleHandle>(triangulated_glyph.points())
    .for_each(|triangle_handle| {
        // ...
    })

完整文档:https://docs.rs/vdtfont

概述

VDTFont使用OpenCL构建Voronoi图并使用GPU对字形进行三角剖分。

三角剖分算法的完整描述在以下论文中:"Using Graphics Hardware for Computing Two-dimensional Delaunay Triangulation"

有什么新功能?

原来的font_rasterizer不具有竞争力,因此决定几乎完全重写它。

新的库VDTFont不使用传统的光栅化方法,而是使用GPU对字形进行三角剖分。

依赖关系

在Debian 11上

  • ocl-icd-libopencl1
  • opencl-headers
  • 为您的GPU提供OpenCL驱动程序(例如,Intel GPU的intel-opencl-icd)

用法

在您的Rust项目目录中运行以下Cargo命令

$ cargo add vdtfont

或添加以下行到您的Cargo.toml文件中

vdtfont = "0.3.2"

构建

在项目目录中运行以下Cargo命令

$ cargo build --release

示例

运行以下命令

# build it
$ cargo build --release --example simple
# run it
$ ./target/release/examples/simple
Enter any symbol (CTRL + C to exit):
r
The image of the symbol was saved in r.png

r.png

路线图

  • 实现基本字形三角剖分功能
  • 修复插入边算法
  • 添加C FFI
  • 添加修复字形自相交轮廓的功能

依赖关系

~18MB
~147K SLoC