Skip to main content

FontRenderer

Struct FontRenderer 

Source
pub struct FontRenderer { /* private fields */ }
Expand description

Font renderer for rendering text with WGPU.

This is the hybrid renderer that combines both bitmap and SDF backends, automatically selecting the best mode based on text size and effects.

  • Small text (< 24px) without effects: uses bitmap for sharpness
  • Large text (>= 24px) or text with effects: uses SDF for quality

This is the backwards-compatible default renderer.

Implementations§

Source§

impl FontRenderer

Source

pub fn new(context: Arc<GraphicsContext>, font_system: FontSystem) -> Self

Create a new font renderer.

Source

pub fn new_with_atlas_size( context: Arc<GraphicsContext>, font_system: FontSystem, atlas_size: u32, ) -> Self

Create a new font renderer with a custom atlas size.

Source

pub fn with_config( context: Arc<GraphicsContext>, font_system: FontSystem, config: TextRendererConfig, ) -> Self

Create a new font renderer with custom configuration.

Source

pub fn measure_text(&self, text: &Text) -> (f32, f32)

Measure text dimensions without rendering.

Source

pub fn buffer_bounds(&self, buffer: &TextBuffer) -> (f32, f32)

Get the logical (unscaled) bounds of a prepared text buffer.

Source

pub fn get_text_metrics(&self, text: &Text) -> TextMetrics

Get font metrics for the given text style.

Source

pub fn get_baseline_offset(&self, text: &Text) -> f32

Get the baseline offset from the top of the text bounding box.

Source

pub fn set_render_mode(&mut self, mode: TextRenderMode)

Set the text render mode (Bitmap or SDF).

Source

pub fn render_mode(&self) -> TextRenderMode

Get the current render mode.

Source

pub fn set_sdf_config(&mut self, config: SdfConfig)

Set SDF configuration.

Source

pub fn sdf_config(&self) -> &SdfConfig

Get the current SDF configuration.

Source

pub fn select_render_mode(font_size: f32, has_effects: bool) -> TextRenderMode

Determine the appropriate render mode based on font size and effects.

  • Small text (< 24px) without effects: use Bitmap for sharpness
  • Large text (>= 24px) or text with effects: use SDF for quality
Source

pub fn set_viewport(&mut self, viewport: Viewport)

Set the viewport for rendering.

Source

pub fn prepare(&mut self, text: &Text) -> TextBuffer

Prepare text for rendering.

Source

pub fn draw_text(&mut self, buffer: &mut TextBuffer, position: Vec2)

Draw text at a position.

The position represents the top-left corner of the text’s bounding box.

Source

pub fn draw_text_with_effects( &mut self, buffer: &mut TextBuffer, position: Vec2, effects: &TextEffects, )

Draw text with effects at a position using SDF rendering.

Source

pub fn draw_text_with_decoration( &mut self, buffer: &mut TextBuffer, position: Vec2, text: &Text, )

Draw text with decoration (underline, strikethrough, background).

This method handles both the text rendering and any decorations. Decorations are rendered in the correct order:

  • Background: behind text
  • Text glyphs
  • Underline/strikethrough: on top of text
§Arguments
  • buffer - The prepared text buffer
  • position - Top-left position of the text
  • text - The Text object containing decoration configuration
Source

pub fn render(&mut self, render_pass: &mut RenderPass<'_>)

Render all queued text to the given render pass.

Automatically selects bitmap or SDF pipeline based on the current render mode. Renders in the correct order:

  1. Background decorations (behind text)
  2. Text glyphs
  3. Line decorations (underline, strikethrough - on top of text)
Source

pub fn font_system(&self) -> Arc<RwLock<FontSystem>>

Get the font system.

Source

pub fn swash_cache(&self) -> Arc<RwLock<SwashCache>>

Get the swash cache.

Source

pub fn atlas_size(&self) -> u32

Get the atlas size in pixels.

Source

pub fn atlas_texture_view(&self) -> &TextureView

Get the atlas texture view for binding.

Source

pub fn atlas_sampler(&self) -> &Sampler

Get the atlas sampler for binding.

Source

pub fn is_atlas_dirty(&self) -> bool

Check if the atlas has pending changes.

Source

pub fn upload_atlas_if_dirty(&mut self)

Upload atlas data to GPU if dirty.

Source

pub fn ensure_glyph_in_atlas( &mut self, cache_key: CacheKey, ) -> Option<&AtlasEntry>

Ensure a glyph is in the atlas using a cache key.

Source

pub fn get_glyph_placement( &mut self, cache_key: CacheKey, ) -> Option<GlyphPlacement>

Get glyph placement information.

Source

pub fn ensure_glyph_with_placement( &mut self, cache_key: CacheKey, ) -> Option<(AtlasEntry, GlyphPlacement)>

Ensure a glyph is in the atlas and get its placement info.

Source

pub fn get_atlas_entry(&self, cache_key: CacheKey) -> Option<&AtlasEntry>

Get an atlas entry by cache key (if it exists).

Trait Implementations§

Source§

impl TextRender for FontRenderer

Source§

fn prepare(&mut self, text: &Text) -> TextBuffer

Prepare text for rendering. Read more
Source§

fn draw_text(&mut self, buffer: &mut TextBuffer, position: Vec2)

Draw text at a position. Read more
Source§

fn render(&mut self, render_pass: &mut RenderPass<'_>)

Render all queued text to the given render pass.
Source§

fn measure_text(&self, text: &Text) -> (f32, f32)

Measure text dimensions without rendering.
Source§

fn set_viewport(&mut self, viewport: Viewport)

Set the viewport for rendering.
Source§

fn buffer_bounds(&self, buffer: &TextBuffer) -> (f32, f32)

Get the logical (unscaled) bounds of a prepared text buffer.

Auto Trait Implementations§

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> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,