30 releases
0.7.11 | Oct 20, 2024 |
---|---|
0.7.9 | Jun 22, 2024 |
0.7.8 | Sep 29, 2023 |
0.7.7 | Feb 24, 2023 |
0.2.2 | Nov 9, 2018 |
#8 in Rendering
17,723 downloads per month
Used in 164 crates
(29 directly)
235KB
4.5K
SLoC
glyph_brush
Fast caching text render library using ab_glyph. Provides render API agnostic rasterization & draw caching logic.
Makes extensive use of caching to optimise frame performance.
- GPU texture cache logic to dynamically maintain a GPU texture of rendered glyphs.
- Caching of glyph layout output to avoid repeated cost of identical text rendering on sequential frames.
- Layouts are re-used to optimise similar layout calculation after a change.
- Vertex generation is cached per section and re-assembled into the total vertex array on change.
- Avoids any layout or vertex calculations when identical text is rendered on sequential frames.
The crate is designed to be easily wrapped to create a convenient render API specific version, for example gfx-glyph.
use glyph_brush::{ab_glyph::FontArc, BrushAction, BrushError, GlyphBrushBuilder, Section, Text};
let dejavu = FontArc::try_from_slice(include_bytes!("../../fonts/DejaVuSans.ttf"))?;
let mut glyph_brush = GlyphBrushBuilder::using_font(dejavu).build();
glyph_brush.queue(Section::default().add_text(Text::new("Hello glyph_brush")));
glyph_brush.queue(some_other_section);
match glyph_brush.process_queued(
|rect, tex_data| update_texture(rect, tex_data),
|vertex_data| into_vertex(vertex_data),
) {
Ok(BrushAction::Draw(vertices)) => {
// Draw new vertices.
}
Ok(BrushAction::ReDraw) => {
// Re-draw last frame's vertices unmodified.
}
Err(BrushError::TextureTooSmall { suggested }) => {
// Enlarge texture + glyph_brush texture cache and retry.
}
}
Examples
Have a look at
cargo run --example opengl --release
Dependencies
~1.6–2.3MB
~44K SLoC