Renderização de fontes
A libSceFont rasteriza faces TrueType e OpenType fornecidas pelo título com FreeType. Pedidos de fonte do sistema usam o substituto Noto Sans incluído para latim, grego e cirílico.
Notas do repositório até 10 de outubro de 2026
Faces, escala e tempo de vida
Um título abre uma biblioteca de fontes, cria uma face a partir de bytes que ele fornece ou de um pedido de fonte do sistema, e então pede métricas e cobertura de glifos. Cada face guarda a própria escala, a escala de renderização, a inclinação e o tempo de vida. Fechar a biblioteca libera as faces dela, e o encerramento do processo limpa o estado das fontes. Os bytes da fonte são copiados na abertura, então um desmapeamento posterior do buffer de origem do título não pode invalidar o rasterizador.
Noto Sans é um substituto, não uma cópia idêntica byte a byte de toda fonte de firmware. Cobre latim, grego e cirílico. Uma face que o título fornece pode conter outros glifos, inclusive CJK, e esses contornos são usados. O próprio pedido de fonte do sistema não substitui uma face CJK.
Glifos, kerning e atlas
O caminho de glifos devolve métricas reais, layout horizontal, kerning básico de pares, cobertura com antisserrilhamento, recorte e descritores de resultado de renderização. Um cache limitado de glifos evita rasterizar o mesmo caractere de novo, e um cache separado de pares reutiliza o kerning entre tamanhos. As escritas verificam permissões de CPU e invalidam as vigias de página da GPU antes de tocar um atlas de textura.
Um escalar Unicode válido que a face não contém usa o contorno .notdef da face, inclusive códigos de controle encontrados enquanto um título monta um intervalo completo de atlas. Esse caminho de glifo ausente é o que permite a Jurassic Park Classic Games Collection terminar de montar o atlas de fontes. Escalares Unicode inválidos e identificadores explícitos de glifo fora do intervalo ainda devolvem um erro. A cobertura é escrita em pixels de um a quatro bytes.
O que o layout de texto deixa com o título
Muitos títulos nunca chamam a libSceFont. Eles desenham texto com a fonte do próprio motor, e esta implementação não muda esses pixels. O caminho HLE é para títulos que pedem ao firmware para rasterizar.
A modelagem de texto, o layout bidirecional, o peso sintético, a substituição de fonte de sistema CJK, a seleção de face em coleção e as APIs de mais alto nível FontWriting e String não estão implementados. As verificações focadas ficam atrás de zig build test-hle com o filtro de fontes.
O que está implementado
- Rasterização com FreeType de faces TrueType e OpenType fornecidas pelo título.
- Substituto Noto Sans para pedidos de fonte do sistema em latim, grego e cirílico.
- Métricas, layout horizontal, kerning de pares, inclinação, recorte e um cache de glifos.
- Reserva .notdef para escalares Unicode ausentes, o que desbloqueia o atlas de Jurassic Park.
O que ainda falta
- A modelagem de texto, o layout bidirecional e as APIs FontWriting estão ausentes.
- Pedidos de fonte do sistema não substituem uma face CJK.
- Títulos que desenham texto inteiramente no próprio motor não usam este caminho.
Mecanismos relacionados
O que estas páginas descrevem