글꼴 렌더링
libSceFont는 타이틀이 제공한 TrueType과 OpenType 글꼴을 FreeType으로 래스터화합니다. 시스템 글꼴 요청에는 라틴, 그리스, 키릴 문자용으로 함께 제공되는 Noto Sans 대체 글꼴을 사용합니다.
2026년 10월 10일까지의 저장소 노트
글꼴, 배율, 수명
타이틀은 글꼴 라이브러리를 열고, 직접 제공한 바이트나 시스템 글꼴 요청으로 글꼴을 만든 다음, 글리프 메트릭과 커버리지를 요청합니다. 각 글꼴은 자신만의 배율, 렌더링 배율, 기울기, 수명을 가집니다. 라이브러리를 닫으면 그 글꼴들이 해제되고, 프로세스 종료 시 글꼴 상태가 정리됩니다. 글꼴 바이트는 열 때 복사되므로, 나중에 타이틀이 원본 버퍼의 매핑을 해제해도 래스터라이저가 무효화되지 않습니다.
Noto Sans는 대체 글꼴이며, 모든 펌웨어 글꼴과 바이트 단위로 같은 사본이 아닙니다. 라틴, 그리스, 키릴 문자를 다룹니다. 타이틀이 제공한 글꼴에는 CJK를 포함한 다른 글리프가 있을 수 있으며, 그 윤곽선은 그대로 사용됩니다. 시스템 글꼴 요청 자체는 CJK 글꼴로 대체하지 않습니다.
글리프, 커닝, 아틀라스
글리프 경로는 실제 메트릭, 가로 레이아웃, 기본 쌍 커닝, 안티앨리어싱된 커버리지, 클리핑, 렌더링 결과 디스크립터를 반환합니다. 한도가 있는 글리프 캐시는 같은 문자를 다시 래스터화하지 않게 하고, 별도의 쌍 캐시는 크기가 달라도 커닝을 재사용합니다. 쓰기는 텍스처 아틀라스를 건드리기 전에 CPU 권한을 확인하고 GPU 페이지 감시를 무효화합니다.
글꼴에 없는 유효한 유니코드 스칼라는 글꼴의 .notdef 윤곽선을 사용하며, 타이틀이 완전한 아틀라스 범위를 만들다 마주치는 제어 문자도 마찬가지입니다. 이 없는 글리프 경로 덕분에 Jurassic Park Classic Games Collection이 글꼴 아틀라스를 끝까지 만들 수 있습니다. 유효하지 않은 유니코드 스칼라와 범위를 벗어난 명시적 글리프 식별자는 여전히 오류를 반환합니다. 커버리지는 1–4바이트 픽셀로 기록됩니다.
타이틀에 맡겨진 텍스트 레이아웃
많은 타이틀은 libSceFont를 아예 호출하지 않습니다. 자체 엔진 글꼴로 텍스트를 그리며, 이 구현은 그 픽셀을 바꾸지 않습니다. HLE 경로는 펌웨어에 래스터화를 요청하는 타이틀을 위한 것입니다.
텍스트 셰이핑, 양방향 레이아웃, 합성 굵기, CJK 시스템 글꼴 대체, 컬렉션 글꼴 선택, 그리고 상위 수준의 FontWriting과 String API는 구현되지 않았습니다. 집중 점검은 font 필터를 쓴 zig build test-hle 뒤에 있습니다.
구현된 것
- 타이틀이 제공한 TrueType과 OpenType 글꼴의 FreeType 래스터화.
- 라틴, 그리스, 키릴 문자 시스템 글꼴 요청에 대한 Noto Sans 대체.
- 메트릭, 가로 레이아웃, 쌍 커닝, 기울기, 클리핑, 글리프 캐시.
- 없는 유니코드 스칼라에 대한 .notdef 대체로 Jurassic Park의 아틀라스 문제 해결.
아직 빠진 것
- 셰이핑, 양방향 레이아웃, FontWriting API가 없습니다.
- 시스템 글꼴 요청은 CJK 글꼴로 대체하지 않습니다.
- 텍스트를 전부 자체 엔진으로 그리는 타이틀은 이 경로를 쓰지 않습니다.
관련 메커니즘
이 페이지들에 대하여