pub struct SdfAtlas {
pub pixels: Vec<u8>,
pub width: u32,
pub height: u32,
pub channels: u32,
pub glyph_metrics: HashMap<char, SdfGlyphMetric>,
pub sdf_spread: f32,
pub font_size_px: f32,
}Expand description
A font atlas using Signed Distance Fields for resolution-independent rendering.
Each pixel in the atlas stores the signed distance to the nearest glyph edge:
- 128 (0.5 normalized) = exactly on the edge
- 255 (1.0 normalized) = deep inside the glyph
- 0 (0.0 normalized) = far outside the glyph
The fragment shader thresholds this distance to produce a crisp edge at any resolution, rotation, or scale.
Fields§
§pixels: Vec<u8>R8 pixel data (each pixel = distance value).
width: u32Atlas dimensions.
height: u32§channels: u32Number of channels: 1 for SDF, 3 for MSDF.
glyph_metrics: HashMap<char, SdfGlyphMetric>Per-glyph metrics and UV coordinates.
sdf_spread: f32How many output pixels the distance field extends (typically 8.0).
font_size_px: f32The font size at which the SDF was generated (typically 64px).
Implementations§
Source§impl SdfAtlas
impl SdfAtlas
Sourcepub fn build_with_config(config: &SdfConfig) -> Self
pub fn build_with_config(config: &SdfConfig) -> Self
Build an SDF atlas with custom configuration.
Sourcepub fn from_atlas_data(data: SdfAtlasData) -> Self
pub fn from_atlas_data(data: SdfAtlasData) -> Self
Build from pre-computed atlas data.
Sourcepub fn metric_for(&self, ch: char) -> SdfGlyphMetric
pub fn metric_for(&self, ch: char) -> SdfGlyphMetric
Get the metric for a character, falling back to ‘?’ then a default.
Sourcepub fn compute_smoothing(
&self,
screen_px_per_unit: f32,
glyph_scale: f32,
) -> f32
pub fn compute_smoothing( &self, screen_px_per_unit: f32, glyph_scale: f32, ) -> f32
Compute the smoothing factor for SDF rendering based on the glyph’s screen-space size.
At large scales, the smoothing is very small → razor-sharp edges. At small scales, the smoothing is larger → anti-aliased edges.
screen_px_per_unit is how many screen pixels one world unit occupies.
glyph_scale is the scale multiplier on the glyph.
Sourcepub fn threshold(&self) -> f32
pub fn threshold(&self) -> f32
Compute the threshold for SDF rendering.
Default is 0.5 (on the edge). Lower values make glyphs bolder, higher values make them thinner.
Sourcepub fn bold_threshold(&self) -> f32
pub fn bold_threshold(&self) -> f32
Compute the threshold for a bold variant.
Sourcepub fn outline_range(&self, outline_width: f32) -> (f32, f32)
pub fn outline_range(&self, outline_width: f32) -> (f32, f32)
Compute the outline range for a given outline width (in SDF-space units).
Returns (inner_threshold, outer_threshold) for the outline smoothstep.
Sourcepub fn shadow_uv_offset(&self, shadow_offset: Vec2, glyph_scale: f32) -> Vec2
pub fn shadow_uv_offset(&self, shadow_offset: Vec2, glyph_scale: f32) -> Vec2
Compute the shadow UV offset for a drop shadow effect.
shadow_offset is in screen pixels, glyph_scale is the current scale.
Sourcepub fn glyph_count(&self) -> usize
pub fn glyph_count(&self) -> usize
Total number of glyphs in the atlas.
Sourcepub fn measure_string_width(&self, text: &str, scale: f32) -> f32
pub fn measure_string_width(&self, text: &str, scale: f32) -> f32
Measure the width of a string in world units at a given scale.
Sourcepub fn line_height(&self, scale: f32) -> f32
pub fn line_height(&self, scale: f32) -> f32
Measure the height of a single line of text in world units at a given scale.
Auto Trait Implementations§
impl Freeze for SdfAtlas
impl RefUnwindSafe for SdfAtlas
impl Send for SdfAtlas
impl Sync for SdfAtlas
impl Unpin for SdfAtlas
impl UnsafeUnpin for SdfAtlas
impl UnwindSafe for SdfAtlas
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more