gfx_glyph
Fast GPU cached text rendering using gfx-rs & rusttype.
Makes use of three kinds of caching to optimise frame performance.
- Caching of glyph positioning output to avoid repeated cost of identical text rendering on sequential frames.
- Caches draw calculations to avoid repeated cost of identical text rendering on sequential frames.
- GPU cache logic to dynamically maintain a GPU texture of rendered glyphs.
extern crate gfx_glyph;
use ;
let arial: & = include_bytes!;
let mut glyph_brush = using_font
.build;
let section = Section ;
glyph_brush.queue;
glyph_brush.queue;
glyph_brush.draw_queued.unwrap;
Limitations
The current implementation only supports OpenGL 3.0 or later. But other rendering languages (that are supported by gfx) should be easy enough to add. Send in your PRs!
Examples
Have a look at
cargo run --example paragraph --release
cargo run --example performance --release
Changelog
0.4
- Support depth testing with configurable gfx depth test (via
GlyphBrushBuilder::depth_test
).Section
s now have az
value to indicate the depth.- Actual depth testing is disabled by default, but a reference to the depth buffer is now required to draw.
- Streamline API for use with built-in
Layout
s, while still allowing custom layouts.- Built-in layouts are now a member of
Section
. - Custom layouts can still be used by using
GlyphBrush::queue_custom_layout
method instead ofqueue
. Section<'a, L>
are now generic to allow pluggableLineBreaker
logic in the layout. This is a little unfortunate for the API surface.
- Built-in layouts are now a member of
- Remove unnecessary
OwnedSection
andStaticSection
to simplify the API. pixel_bounding_box
renamed topixel_bounds
&pixel_bounds_custom_layout
- These now return
Option<_>
to handle the bounds of 'nothing' properly
- These now return
GlyphBrushBuilder
gpu_cache_position_tolerance
default reduced to 0.1 (from 1.0)
0.3
- Use
Into<SharedBytes>
instead of explicit&[u8]
for font byte input to improve flexibility.
Notable non-breaking changes:
- 0.3.2
- Move fixed GPU caching logic into crate replacing
rusttype::gpu_cache
Section
&StaticSection
implementCopy
- Move fixed GPU caching logic into crate replacing
- 0.3.3
- Fix another GPU caching issue that could cause missing glyphs
- Fix a layout issue that could miss a character immediately preceding EOF
- Optimise GPU cache sorting performance
0.2
- Adopt default line breaking logic according to the Unicode Standard Annex #14 with
StandardLineBreaker
(included inLayout::default()
). ALineBreaker
implementation can be provided instead of using one of these.