Read from the disassembly of the PS4 libSceFont.sprx, libSceFontFt.sprx and libSceFontGs.sprx on firmware 10.71: sceFontOutlineVertexesInterfaceInit, sceFontSupportSystemUpdation, sceFontGetCharVariationGlyphCode, sceFontSupportGlyphs, sceFontSelectGlyphsFt, sceFontFtSupportSystemFonts, sceFontFtSupportFontFormats, sceFontSelectGraphicsGnm and the four unnamed libSceFontGs exports. Not measured on a console and not checked against the PS5 modules. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wm5hiXXANzPqoVGkSdDP4q
2.2 KiB
libSceFontFt technical debt
Functional
- Font format support: format queries now take the font library, validate its magic and lock it while checking its actual FreeType modules. The host registers its default modules at creation rather than enabling formats individually, so format-selection state and guest allocator failures during format registration are not reproduced. Unsupported foreign drivers throw.
- TrueType GX support: the GX query checks the bundled FreeType TrueType module, whose configuration enables GX variation support. The console's response for a FreeType build without GX variation support has not been measured.
Unknown function info
-
Alias and glyph selection exports: alias initialization/termination take a handle pointer; alias registration takes a string and font ID or path. Glyph selection takes a 32-bit selector and returns a table pointer whose layout remains unresolved. Their protected implementations are unchanged.
-
sceFontSelectGlyphsFt and sceFontFtSupportSystemFonts (libSceFontFt) - still throw. Read from the disassembly of the PS4 libSceFontFt.sprx on firmware 10.71, not from a PS5 module and not measured on a console.
sceFontSelectGlyphsFtreturns a static table with 0x0F1F at 0 and 0x0F03 at 4 for selector 0 and null otherwise.sceFontFtSupportSystemFontsis the same code assceFontFtSupportOpenType; both passFTA_Support_Format_OpenType. -
sceFontFtSupportFontFormats (libSceFontFt) - still throws. In the same module, it returns
INVALID_LIBRARYunless the library magic is 0x0F01, then under the library lock callsFTA_Support_Moduleswith a mask built from the format bits: 0x100 for bit 0x80, then 0x4cc0 when all of 0x52 are set, 0x4c40 for 0x42, 0x4c80 for 0x50, 0xc80 for 0x10, 0x8c80 for 0x30, 0x1820 for 0x08, 0x1808 for 0x01 and 0x1c90 for 0x14. A result of 0 returns 0, 0x40 returnsALLOCATION_FAILEDand any otherNO_SUPPORT_FORMAT. What each mask bit selects in libSceFreeType was not read