[Font] sceFontRebindRenderer, sceFontGetCharGlyphMetrics, sceFontGetKerning

This commit is contained in:
ParantezTech 2026-09-22 04:12:19 +03:00
parent 2a27cfe8be
commit b4584f8040
1 changed files with 41 additions and 0 deletions

View File

@ -86,6 +86,13 @@ public static class FontExports
LibraryName = "libSceFont")]
public static int BindRenderer(CpuContext ctx) => SetSuccess(ctx);
[SysAbiExport(
Nid = "Z2cdsqJH+5k",
ExportName = "sceFontRebindRenderer",
Target = Generation.Gen5,
LibraryName = "libSceFont")]
public static int RebindRenderer(CpuContext ctx) => SetSuccess(ctx);
[SysAbiExport(
Nid = "N1EBMeGhf7E",
ExportName = "sceFontSetScalePixel",
@ -296,6 +303,40 @@ public static class FontExports
return SetSuccess(ctx);
}
[SysAbiExport(
Nid = "L97d+3OgMlE",
ExportName = "sceFontGetCharGlyphMetrics",
Target = Generation.Gen5,
LibraryName = "libSceFont")]
public static int GetCharGlyphMetrics(CpuContext ctx) => GetRenderCharGlyphMetrics(ctx);
[SysAbiExport(
Nid = "sDuhHGNhHvE",
ExportName = "sceFontGetKerning",
Target = Generation.Gen5,
LibraryName = "libSceFont")]
public static int GetKerning(CpuContext ctx)
{
var kerningAddress = ctx[CpuRegister.Rcx];
if (kerningAddress == 0)
{
return SetReturn(ctx, OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT);
}
// OrbisFontKerning is four floats (offsetX, offsetY, positionX, positionY).
// Until the font backend exposes real kerning data, match the safe fallback
// used when no kerning-capable face is available and return zero offsets.
for (var offset = 0; offset < 16; offset += sizeof(float))
{
if (!TryWriteUInt32(ctx, kerningAddress + (ulong)offset, 0))
{
return SetReturn(ctx, OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT);
}
}
return SetSuccess(ctx);
}
[SysAbiExport(
Nid = "gdUCnU0gHdI",
ExportName = "sceFontRenderSurfaceInit",