Glyph

Struct Glyph 

Source
pub struct Glyph {
    pub id: u16,
    pub style: FontStyle,
    pub symbol: CompactString,
    pub pixel_coords: (i32, i32),
    pub is_emoji: bool,
}
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 WebGL 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 NameHex MaskBinary MaskDescription
0-9GLYPH_ID0x03FF0000_0011_1111_1111Base glyph identifier
10BOLD0x04000000_0100_0000_0000Bold font style
11ITALIC0x08000000_1000_0000_0000Italic font style
12EMOJI0x10000001_0000_0000_0000Emoji character flag
13UNDERLINE0x20000010_0000_0000_0000Underline effect
14STRIKETHROUGH0x40000100_0000_0000_0000Strikethrough effect
15RESERVED0x80001000_0000_0000_0000Reserved 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

CharacterStyleBinary RepresentationHex ValueDescription
‘A’ (0x41)Normal0000_0000_0100_00010x0041Plain ‘A’
‘A’ (0x41)Bold0000_0100_0100_00010x0441Bold ‘A’
‘A’ (0x41)Bold + Italic0000_1100_0100_00010x0C41Bold italic ‘A’
‘A’ (0x41)Bold + Underline0010_0100_0100_00010x2441Bold underlined ‘A’
‘🚀’ (0x81)Emoji0001_0000_1000_00010x1081“rocket” emoji

Fields§

§id: u16

The glyph ID; encodes the 3d texture coordinates

§style: FontStyle

The style of the glyph, e.g., bold, italic

§symbol: CompactString

The character

§pixel_coords: (i32, i32)

The pixel coordinates of the glyph in the texture

§is_emoji: bool

Indicates if the glyph is an emoji

Implementations§

Source§

impl Glyph

Source

pub const UNASSIGNED_ID: u16 = 65_535u16

The ID is used as a short-lived placeholder until the actual ID is assigned.

Source

pub const GLYPH_ID_MASK: u16 = 1_023u16

Glyph ID mask - extracts the base glyph identifier (bits 0-9). Supports 1024 unique base glyphs (0x000 to 0x3FF) in the texture atlas.

Source

pub const GLYPH_ID_EMOJI_MASK: u16 = 8_191u16

Glyph ID mask for emoji - extracts the base glyph identifier (bits 0-11). Supports 2048 emoji glyphs (0x000 to 0xFFF) occupying two slots each in the texture atlas.

Source

pub const BOLD_FLAG: u16 = 1_024u16

Bold flag - selects the bold variant of the glyph from the texture atlas.

Source

pub const ITALIC_FLAG: u16 = 2_048u16

Italic flag - selects the italic variant of the glyph from the texture atlas.

Source

pub const EMOJI_FLAG: u16 = 4_096u16

Emoji flag - indicates this glyph represents an emoji character requiring special handling.

Source

pub const UNDERLINE_FLAG: u16 = 8_192u16

Underline flag - renders a horizontal line below the character baseline.

Source

pub const STRIKETHROUGH_FLAG: u16 = 16_384u16

Strikethrough flag - renders a horizontal line through the middle of the character.

Source§

impl Glyph

Source

pub fn new(symbol: &str, style: FontStyle, pixel_coords: (i32, i32)) -> Self

Creates a new glyph with the specified symbol and pixel coordinates.

Source

pub fn new_with_id( base_id: u16, symbol: &str, style: FontStyle, pixel_coords: (i32, i32), ) -> Self

Source

pub fn new_emoji(base_id: u16, symbol: &str, pixel_coords: (i32, i32)) -> Self

Source

pub fn is_ascii(&self) -> bool

Returns true if this glyph represents a single ASCII character.

Source

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

Trait Implementations§

Source§

impl Debug for Glyph

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Glyph

Source§

fn eq(&self, other: &Glyph) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Glyph

Source§

impl StructuralPartialEq for Glyph

Auto Trait Implementations§

§

impl Freeze for Glyph

§

impl RefUnwindSafe for Glyph

§

impl Send for Glyph

§

impl Sync for Glyph

§

impl Unpin for Glyph

§

impl UnwindSafe for Glyph

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.