fontmesh

Crates.iofontmesh
lib.rsfontmesh
version0.3.4
created_at2025-10-24 22:21:18.908306+00
updated_at2026-01-06 11:46:09.710907+00
descriptionPure Rust library for converting TrueType font glyphs to 2D/3D triangle meshes
homepage
repositoryhttps://github.com/PoHsuanLai/fontmesh
max_upload_size
id1899410
size1,422,896
Po-Hsuan Lai (PoHsuanLai)

documentation

https://docs.rs/fontmesh

README

fontmesh

CI Crates.io Documentation License: MIT

Library for converting TrueType font glyphs to 2D and 3D triangle meshes. A faster, pure Rust alternative to ttf2mesh.

3D Text

2D Mesh 3D Mesh

Quick Start

use fontmesh::{Face, char_to_mesh_2d, char_to_mesh_3d};

let font_data = include_bytes!("font.ttf");
let face = Face::parse(font_data, 0)?;

// 2D mesh with 20 subdivisions per curve
let mesh_2d = char_to_mesh_2d(&face, 'A', 20)?;

// 3D mesh with depth 5.0 and 50 subdivisions
let mesh_3d = char_to_mesh_3d(&face, 'A', 5.0, 50)?;

Caching

use std::collections::HashMap;
use std::sync::Arc;

// Cache just the font data
let mut cache: HashMap<String, Arc<Vec<u8>>> = HashMap::new();
cache.insert("myfont".into(), Arc::new(font_data.to_vec()));

// Parse Face when needed (cheap!)
let data = cache.get("myfont").unwrap();
let face = Face::parse(data, 0)?;
let mesh = char_to_mesh_3d(&face, 'A', 5.0, 20)?;

Examples

cargo run --example basic
cargo run --example export_obj
cargo run --example serde --features serde

Performance

fontmesh is 2-3x faster than comparable libraries.

Benchmark Comparison

Run benchmarks: cargo bench

License

MIT

Commit count: 23

cargo fmt