Skip to main content

kernsmith

KernSmith runtime font generation for Gum text. Triggers: BmFont, KernSmithFontCreator, StbTrueTypeRasterizer, DynamicFonts example, KernSmithPlugin.

Aller à l'installation

Informations de source

Dépôt
vchelaru/XnaFiddle
Dernière activité de la source
6 août 2026 à 14:11
Langue détectée de SKILL.md
anglais
Étoiles
13
Forks
3

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
kernsmith
description
KernSmith runtime font generation for Gum text. Triggers: BmFont, KernSmithFontCreator, StbTrueTypeRasterizer, DynamicFonts example, KernSmithPlugin.
# KernSmith Runtime (in-memory) font rasterization library, wired into Gum's text rendering — not a general-purpose graphics library. See `Examples/DynamicFonts.cs` for the canonical usage pattern: `BmFont.RegisterFont(name, ttfBytes)` to register a font by name, then `BmFont.GenerateFromSystem(...)` to rasterize it, or let Gum trigger generation lazily via `CustomSetPropertyOnRenderable.InMemoryFontCreator = new KernSmithFontCreator(GraphicsDevice, RasterizerBackend.StbTrueType)`. ## Font resolution: "system" fonts don't exist in the browser `GenerateFromSystem(family, options)` is the one API for resolving-by-family-name — it does not distinguish an OS-installed font from an in-memory one. In a normal .NET process it scans OS font directories/registry for `family`. In Blazor WASM there is no filesystem/registry to scan, so that path never finds anything — `BmFont.RegisterFont(family, ttfBytes)` is the only way to make a family resolvable, and registered fonts are checked *before* any OS scan. So in this repo (and any browser target), every font is effectively "uploaded," not "installed": a user's `.ttf` gets registered under a family name (see `DynamicFonts.cs` registering the bundled `DroidSans.ttf` before calling `GenerateFromSystem("Droid Sans", ...)`), and that same call would silently fail to find a real system font like `"Arial"` unless it happens to also be registered. Style variants (Bold/Italic) register separately per family+style. KernSmith also ships a `KernSmith.Fonts.Web` package for fetching WOFF fonts from CDNs (Google/Bunny Fonts) as a WASM-friendly alternative to bundling `.ttf` bytes — not currently referenced by XnaFiddle's `.csproj`. ## Landmine: rasterizer must be force-registered in WASM `Program.cs` uses `RuntimeHelpers.RunClassConstructor(typeof(StbTrueTypeRasterizer).TypeHandle)` for KernSmith instead of the plain `typeof(X)` touch used for every other optional library (see the block above it). The `StbTrueTypeRasterizer` backend self-registers via a static constructor side effect, not by being referenced — a mere `typeof` touch loads the assembly but never runs the constructor, so the backend silently stays unregistered at runtime. If font generation fails only in the published/WASM build (not locally), check this line first. StbTrueType is the only rasterizer backend usable in Blazor WASM — there's no native FreeType binary available there. ## Plugin (export) `XnaFiddle.Core/Plugins/KernSmithPlugin.cs` — package set is target-dependent: `KernSmith.KniGum` for KNI exports, `KernSmith.MonoGameGum` for MonoGame exports, plus `KernSmith` and `KernSmith.Rasterizers.StbTrueType` always. See the **add-library** skill for the general plugin/export checklist this follows. `Directory.Build.props` splits versioning: core `KernSmith`/`KernSmith.Rasterizers.StbTrueType` track their own release version, while the Gum-integration packages (`KniGum`/`MonoGameGum`) track Gum's version instead — bumping one does not bump the other.
Voir sur GitHub