Renderizado de fuentes
libSceFont rasteriza caras TrueType y OpenType aportadas por el título con FreeType. Las peticiones de fuente del sistema usan el sustituto Noto Sans incluido para latino, griego y cirílico.
Notas del repositorio hasta el 10 de octubre de 2026
Caras, escala y ciclo de vida
Un título abre una biblioteca de fuentes, crea una cara a partir de bytes que él aporta o de una petición de fuente del sistema, y después pide métricas de glifos y cobertura. Cada cara conserva su propia escala, escala de render, inclinación y ciclo de vida. Cerrar la biblioteca libera sus caras, y el cierre del proceso limpia el estado de las fuentes. Los bytes de la fuente se copian al abrir, de modo que un desmapeo posterior del búfer de origen del título no puede invalidar el rasterizador.
Noto Sans es un sustituto, no una copia idéntica byte a byte de cada fuente del firmware. Cubre latino, griego y cirílico. Una cara que aporta el título puede contener otros glifos, incluido CJK, y esos contornos se usan. La petición de fuente del sistema en sí no sustituye una cara CJK.
Glifos, kerning y atlas
La ruta de glifos devuelve métricas reales, disposición horizontal, kerning básico de pares, cobertura con antialiasing, recorte y descriptores del resultado de render. Una caché de glifos acotada evita rasterizar otra vez el mismo carácter, y una caché de pares distinta reutiliza el kerning entre tamaños. Las escrituras comprueban los permisos de CPU e invalidan las vigilancias de página de la GPU antes de tocar un atlas de textura.
Un escalar Unicode válido que la cara no contiene usa el contorno .notdef de la cara, incluidos los códigos de control que aparecen mientras un título construye un rango completo de atlas. Esa ruta de glifo ausente es lo que permite a Jurassic Park Classic Games Collection terminar de construir su atlas de fuentes. Los escalares Unicode no válidos y los identificadores de glifo explícitos fuera de rango siguen devolviendo un error. La cobertura se escribe en píxeles de uno a cuatro bytes.
Qué maquetación de texto queda en manos del título
Muchos títulos nunca llaman a libSceFont. Dibujan el texto con la fuente de su propio motor, y esta implementación no cambia esos píxeles. La ruta HLE es para los títulos que piden al firmware que rasterice.
El shaping del texto, la disposición bidireccional, el peso sintético, la sustitución de fuente del sistema para CJK, la selección de caras de una colección y las API de nivel superior FontWriting y String no están implementados. Las comprobaciones enfocadas viven detrás de zig build test-hle con el filtro de fuentes.
Qué está implementado
- Rasterización con FreeType de caras TrueType y OpenType aportadas por el título.
- Sustituto Noto Sans para peticiones de fuente del sistema en latino, griego y cirílico.
- Métricas, disposición horizontal, kerning de pares, inclinación, recorte y una caché de glifos.
- Alternativa .notdef para escalares Unicode ausentes, que desbloquea el atlas de Jurassic Park.
Qué falta todavía
- El shaping, la disposición bidireccional y las API FontWriting están ausentes.
- Las peticiones de fuente del sistema no sustituyen una cara CJK.
- Los títulos que dibujan el texto por completo en su propio motor no usan esta ruta.
Mecanismos relacionados
Qué describen estas páginas