34 releases

0.15.0-rc.3 Nov 5, 2024
0.14.2 Sep 6, 2024
0.14.0 Jul 4, 2024
0.13.1 Mar 18, 2024
0.3.0 Nov 3, 2020

#1786 in Game dev

Download history 20303/week @ 2024-07-29 16712/week @ 2024-08-05 24529/week @ 2024-08-12 18183/week @ 2024-08-19 22130/week @ 2024-08-26 21477/week @ 2024-09-02 16307/week @ 2024-09-09 16531/week @ 2024-09-16 19912/week @ 2024-09-23 15697/week @ 2024-09-30 9856/week @ 2024-10-07 14468/week @ 2024-10-14 14020/week @ 2024-10-21 15435/week @ 2024-10-28 14161/week @ 2024-11-04 9553/week @ 2024-11-11

54,460 downloads per month
Used in 217 crates (9 directly)

MIT/Apache

6.5MB
120K SLoC

Bevy Text

License Crates.io Downloads Docs Discord


lib.rs:

This crate provides the tools for positioning and rendering text in Bevy.

Font

Fonts contain information for drawing glyphs, which are shapes that typically represent a single character, but in some cases part of a "character" (grapheme clusters) or more than one character (ligatures).

A font face is part of a font family, and is distinguished by its style (e.g. italic), its weight (e.g. bold) and its stretch (e.g. condensed).

In Bevy, Fonts are loaded by the FontLoader as assets.

TextPipeline

The TextPipeline resource does all of the heavy lifting for rendering text.

UI Text is first measured by creating a TextMeasureInfo in TextPipeline::create_text_measure, which is called by the measure_text_system system of bevy_ui.

Note that text measurement is only relevant in a UI context.

With the actual text bounds defined, the bevy_ui::widget::text::text_system system (in a UI context) or text2d::update_text2d_layout system (in a 2d world space context) passes it into TextPipeline::queue_text, which:

  1. updates a Buffer from the TextSpans, generating new FontAtlasSets if necessary.
  2. iterates over each glyph in the Buffer to create a PositionedGlyph, retrieving glyphs from the cache, or rasterizing to a FontAtlas if necessary.
  3. PositionedGlyphs are stored in a TextLayoutInfo, which contains all the information that downstream systems need for rendering.

Dependencies

~39–72MB
~1.5M SLoC