pub struct Glyph { /* private fields */ }Expand description
Represents a single character glyph in a font atlas texture.
A Glyph contains the metadata needed to locate and identify a character
within a font atlas texture. Each glyph has a unique ID that maps
to its coordinates in a GL TEXTURE_2D_ARRAY.
§ASCII Optimization
For ASCII characters, the glyph ID directly corresponds to the character’s ASCII value, enabling fast lookups without hash table lookups. Non-ASCII characters are assigned sequential IDs starting from a base value.
§Glyph ID Bit Layout (16-bit)
| Bit(s) | Flag Name | Hex Mask | Binary Mask | Description |
|---|---|---|---|---|
| 0-9 | GLYPH_ID | 0x03FF | 0000_0011_1111_1111 | Base glyph identifier |
| 10 | BOLD | 0x0400 | 0000_0100_0000_0000 | Bold font style |
| 11 | ITALIC | 0x0800 | 0000_1000_0000_0000 | Italic font style |
| 12 | EMOJI | 0x1000 | 0001_0000_0000_0000 | Emoji character flag |
| 13 | UNDERLINE | 0x2000 | 0010_0000_0000_0000 | Underline effect |
| 14 | STRIKETHROUGH | 0x4000 | 0100_0000_0000_0000 | Strikethrough effect |
| 15 | RESERVED | 0x8000 | 1000_0000_0000_0000 | Reserved for future use |
- The first 10 bits (0-9) represent the base glyph ID, allowing for 1024 unique glyphs.
- Emoji glyphs implicitly clear any other font style bits.
- The fragment shader uses the glyph ID to decode the texture coordinates and effects.
§Glyph ID Encoding Examples
| Character | Style | Binary Representation | Hex Value | Description |
|---|---|---|---|---|
| ‘A’ (0x41) | Normal | 0000_0000_0100_0001 | 0x0041 | Plain ‘A’ |
| ‘A’ (0x41) | Bold | 0000_0100_0100_0001 | 0x0441 | Bold ‘A’ |
| ‘A’ (0x41) | Bold + Italic | 0000_1100_0100_0001 | 0x0C41 | Bold italic ‘A’ |
| ‘A’ (0x41) | Bold + Underline | 0010_0100_0100_0001 | 0x2441 | Bold underlined ‘A’ |
| ‘🚀’ (0x81) | Emoji | 0001_0000_1000_0001 | 0x1081 | “rocket” emoji |
Implementations§
Source§impl Glyph
impl Glyph
Sourcepub const UNASSIGNED_ID: u16 = 0xFFFF
pub const UNASSIGNED_ID: u16 = 0xFFFF
The ID is used as a short-lived placeholder until the actual ID is assigned.
Source§impl Glyph
impl Glyph
Sourcepub fn pixel_coords(&self) -> (i32, i32)
pub fn pixel_coords(&self) -> (i32, i32)
Returns the pixel coordinates of the glyph in the texture.
Sourcepub fn set_pixel_coords(&mut self, pixel_coords: (i32, i32))
pub fn set_pixel_coords(&mut self, pixel_coords: (i32, i32))
Sets the pixel coordinates of the glyph in the texture.
Sourcepub fn new(symbol: &str, style: FontStyle, pixel_coords: (i32, i32)) -> Self
pub fn new(symbol: &str, style: FontStyle, pixel_coords: (i32, i32)) -> Self
Creates a new glyph with the specified symbol and pixel coordinates.
pub fn new_with_id( base_id: u16, symbol: &str, style: FontStyle, pixel_coords: (i32, i32), ) -> Self
pub fn new_emoji(base_id: u16, symbol: &str, pixel_coords: (i32, i32)) -> Self
Sourcepub fn base_id(&self) -> u16
pub fn base_id(&self) -> u16
Returns the base glyph ID without style flags.
For non-emoji glyphs, this masks off the style bits (bold/italic) using
GLYPH_ID_MASK to extract just the base identifier (bits 0-9).
For emoji glyphs, returns the full ID since emoji don’t use style variants.
§Examples
use beamterm_data::{Glyph, FontStyle};
// Bold 'A' (0x0441) -> base ID 0x41
let bold_a = Glyph::new_with_id(0x41, "A", FontStyle::Bold, (0, 0));
assert_eq!(bold_a.id(), 0x441);
assert_eq!(bold_a.base_id(), 0x041);
// Emoji retains full ID
let emoji = Glyph::new_emoji(0x00, "🚀", (0, 0));
assert_eq!(emoji.base_id(), 0x1000); // includes EMOJI_FLAG