simvx.graphics.text_renderer¶
Text rendering: font caching, vertex batching, and font fallback chain.
Module Contents¶
Classes¶
Manages MSDF font atlases + the font fallback chain (the shared atlas store). |
Functions¶
Return the module-level shared TextRenderer (lazy singleton). |
|
Bake a string into an RGBA uint8 buffer using FreeType bitmap rendering. |
Data¶
API¶
- simvx.graphics.text_renderer.__all__¶
[‘TextRenderer’, ‘_find_font’, ‘_find_cjk_fonts’, ‘get_shared_text_renderer’, ‘rasterise’]
- simvx.graphics.text_renderer.log¶
‘getLogger(…)’
- class simvx.graphics.text_renderer.TextRenderer[source]¶
Manages MSDF font atlases + the font fallback chain (the shared atlas store).
After the P3a one-text-path unification this class no longer lays out or batches glyph geometry (the deleted desktop overlay pass did that): the ONE glyph layout lives in :mod:
draw2d_text, which draws throughDraw2D. What survives here is the part both paths need – atlas generation (:meth:get_atlas), glyph ensuring with the fallback chain (:meth:_ensure_with_fallback), and the CJK fallback auto-detection – sinceDraw2D._fontis one of these atlases.Supports a font fallback chain: when the primary font is missing a glyph (e.g. CJK characters), fallback fonts are tried in order. Fallback glyphs are packed into the primary atlas so the GPU sees a single texture.
Initialization
- set_font_fallbacks(paths: list[str], font_size: int = 64) None[source]¶
Set the font fallback chain (replaces auto-detected fallbacks).
Fonts are tried in order when the primary font is missing a glyph. Each path should be a .ttf or .ttc file.
Return the module-level shared TextRenderer (lazy singleton).
- simvx.graphics.text_renderer.rasterise(text: str, size: int = 24, font: str | pathlib.Path | simvx.core.text.Font | None = None, *, colour: tuple[float, float, float, float] = (1.0, 1.0, 1.0, 1.0), padding: int = 2) numpy.ndarray[source]¶
Bake a string into an RGBA uint8 buffer using FreeType bitmap rendering.
Every port that draws text-on-textures (cards, tiles, sprite atlases) re-invented this freetype glue: open a face, walk glyphs, lay them out along the baseline, composite into a buffer. Centralised here so ports pass a string and get pixels back.
Args: text: Single- or multi-line string to bake.
\nstarts a new line. size: Pixel size for the font (height of one line of text). font: A :class:Fontinstance, a path to a .ttf/.otf, or None to auto-detect via :func:_find_font. colour: RGBA tint applied to each glyph’s coverage value. padding: Pixels of transparent margin around the laid-out text.Returns:
(H, W, 4)uint8array, ready for :func:save_pngor :class:TextureManager.load_from_array. Empty input returns a(0, 0, 4)array.