mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-04-10 19:51:32 -06:00
- Integrated `stb_truetype` for advanced font rendering. - Added support for external and system fonts with logging. - Introduced new structures for glyphs, metrics, and kerning. - Implemented functions for font state management and scaling. - Improved glyph rendering, including subpixel and caching. - Enhanced render surface initialization and scissor handling. - Refactored stubbed functions with proper implementations. - Added ABI compatibility checks for key structures. - Improved logging, error handling, and code organization. - Updated documentation and comments for better clarity.
2326 lines
88 KiB
C++
2326 lines
88 KiB
C++
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include <algorithm>
|
|
#include <cmath>
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <fstream>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <unordered_set>
|
|
#include <vector>
|
|
#include "common/logging/log.h"
|
|
#include "core/libraries/error_codes.h"
|
|
#include "core/libraries/font/font.h"
|
|
#include "core/libraries/libs.h"
|
|
#include "font_error.h"
|
|
|
|
#define STBTT_STATIC
|
|
#define STB_TRUETYPE_IMPLEMENTATION
|
|
#include "externals/dear_imgui/imstb_truetype.h"
|
|
|
|
namespace {
|
|
struct GlyphEntry {
|
|
std::vector<std::uint8_t> bitmap;
|
|
int w = 0;
|
|
int h = 0;
|
|
int x0 = 0;
|
|
int y0 = 0;
|
|
int x1 = 0;
|
|
int y1 = 0;
|
|
float advance = 0.0f;
|
|
float bearingX = 0.0f;
|
|
};
|
|
|
|
struct FontState {
|
|
float scale_w = 16.0f;
|
|
float scale_h = 16.0f;
|
|
Libraries::Font::OrbisFontLib library = nullptr;
|
|
bool face_ready = false;
|
|
std::vector<unsigned char> face_data;
|
|
stbtt_fontinfo face{};
|
|
float scale_for_height = 0.0f;
|
|
int ascent = 0, descent = 0, lineGap = 0;
|
|
bool ext_face_ready = false;
|
|
std::vector<unsigned char> ext_face_data;
|
|
stbtt_fontinfo ext_face{};
|
|
float ext_scale_for_height = 0.0f;
|
|
int ext_ascent = 0, ext_descent = 0, ext_lineGap = 0;
|
|
std::unordered_map<std::uint64_t, GlyphEntry> ext_cache;
|
|
std::unordered_map<std::uint64_t, GlyphEntry> sys_cache;
|
|
std::unordered_map<std::uint64_t, float> ext_kern_cache;
|
|
std::unordered_map<std::uint64_t, float> sys_kern_cache;
|
|
std::vector<std::uint8_t> scratch;
|
|
bool logged_ext_use = false;
|
|
bool logged_sys_use = false;
|
|
};
|
|
|
|
static std::unordered_map<Libraries::Font::OrbisFontHandle, FontState> g_font_state;
|
|
|
|
struct LibraryState {
|
|
bool support_system = false;
|
|
bool support_external = false;
|
|
u32 external_formats = 0;
|
|
u32 external_fontMax = 0;
|
|
};
|
|
static std::unordered_map<Libraries::Font::OrbisFontLib, LibraryState> g_library_state;
|
|
|
|
static std::unordered_map<Libraries::Font::OrbisFontRenderSurface*,
|
|
const Libraries::Font::OrbisFontStyleFrame*>
|
|
g_style_for_surface;
|
|
|
|
static FontState& GetState(Libraries::Font::OrbisFontHandle h) {
|
|
return g_font_state[h];
|
|
}
|
|
|
|
static LibraryState& GetLibState(Libraries::Font::OrbisFontLib lib) {
|
|
return g_library_state[lib];
|
|
}
|
|
|
|
static void LogExternalFormatSupport(u32 formats_mask) {
|
|
LOG_INFO(Lib_Font, "ExternalFormatsMask=0x{:X}", formats_mask);
|
|
}
|
|
|
|
static bool ReadFileBinary(const std::string& path, std::vector<unsigned char>& out) {
|
|
std::ifstream f(path, std::ios::binary);
|
|
if (!f)
|
|
return false;
|
|
f.seekg(0, std::ios::end);
|
|
std::streampos sz = f.tellg();
|
|
if (sz <= 0)
|
|
return false;
|
|
out.resize(static_cast<size_t>(sz));
|
|
f.seekg(0, std::ios::beg);
|
|
f.read(reinterpret_cast<char*>(out.data()), sz);
|
|
return f.good();
|
|
}
|
|
|
|
static bool EnsureSystemFace(FontState& st) {
|
|
if (st.face_ready)
|
|
return true;
|
|
std::vector<std::string> candidates;
|
|
if (const char* env_dir = std::getenv("SHADPS4_FONTS_DIR"); env_dir && *env_dir) {
|
|
candidates.emplace_back(std::string(env_dir) + "/NotoSansJP-Regular.ttf");
|
|
candidates.emplace_back(std::string(env_dir) + "/ProggyVector-Regular.ttf");
|
|
}
|
|
static const char* rel_roots[] = {".", "..", "../..", "../../..", "../../../.."};
|
|
for (auto* root : rel_roots) {
|
|
candidates.emplace_back(std::string(root) +
|
|
"/src/imgui/renderer/fonts/NotoSansJP-Regular.ttf");
|
|
candidates.emplace_back(std::string(root) +
|
|
"/src/imgui/renderer/fonts/ProggyVector-Regular.ttf");
|
|
}
|
|
for (const auto& path : candidates) {
|
|
st.face_data.clear();
|
|
if (ReadFileBinary(path, st.face_data)) {
|
|
if (stbtt_InitFont(&st.face, st.face_data.data(), 0)) {
|
|
st.face_ready = true;
|
|
stbtt_GetFontVMetrics(&st.face, &st.ascent, &st.descent, &st.lineGap);
|
|
if (st.scale_for_height == 0.0f)
|
|
st.scale_for_height = stbtt_ScaleForPixelHeight(&st.face, st.scale_h);
|
|
LOG_INFO(Lib_Font,
|
|
"SystemFace: loaded '{}' (ascent={}, descent={}, lineGap={}, scale={})",
|
|
path, st.ascent, st.descent, st.lineGap, st.scale_for_height);
|
|
return true;
|
|
} else {
|
|
LOG_WARNING(Lib_Font, "SystemFace: stbtt_InitFont failed for '{}'", path);
|
|
}
|
|
} else {
|
|
LOG_DEBUG(Lib_Font, "SystemFace: could not open '{}'", path);
|
|
}
|
|
}
|
|
LOG_WARNING(Lib_Font, "SystemFace: no font file found; using placeholder rectangles");
|
|
return false;
|
|
}
|
|
|
|
static std::unordered_set<u32> g_logged_pua;
|
|
|
|
static inline std::uint64_t MakeGlyphKey(u32 code, int pixel_h) {
|
|
return (static_cast<std::uint64_t>(code) << 32) | static_cast<std::uint32_t>(pixel_h);
|
|
}
|
|
static std::unordered_set<const void*> g_stride_logged;
|
|
static inline void LogStrideOnce(const Libraries::Font::OrbisFontRenderSurface* surf) {
|
|
if (!surf)
|
|
return;
|
|
const void* key = static_cast<const void*>(surf);
|
|
if (g_stride_logged.insert(key).second) {
|
|
const int bpp = std::max(1, static_cast<int>(surf->pixelSizeByte));
|
|
const long expected = static_cast<long>(surf->width) * bpp;
|
|
const bool match = (expected == surf->widthByte);
|
|
LOG_INFO(Lib_Font,
|
|
"StrideCheck: surf={} buf={} width={} height={} pixelSizeByte={} widthByte={} "
|
|
"expected={} match={}",
|
|
key, surf->buffer, surf->width, surf->height, bpp, surf->widthByte, expected,
|
|
match);
|
|
}
|
|
}
|
|
} // namespace
|
|
|
|
namespace Libraries::Font {
|
|
|
|
struct FontLibOpaque {};
|
|
struct OrbisFontRenderer_ {};
|
|
|
|
s32 PS4_SYSV_ABI sceFontAttachDeviceCacheBuffer(OrbisFontLib library, void* buffer, u32 size) {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called library={} buffer={} size={}",
|
|
static_cast<const void*>(library), static_cast<const void*>(buffer), size);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontBindRenderer(OrbisFontHandle fontHandle, OrbisFontRenderer renderer) {
|
|
LOG_DEBUG(Lib_Font, "sceFontBindRenderer fontHandle={} renderer={}",
|
|
static_cast<const void*>(fontHandle), static_cast<const void*>(renderer));
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCharacterGetBidiLevel(OrbisFontTextCharacter* textCharacter,
|
|
int* bidiLevel) {
|
|
if (!textCharacter || !bidiLevel) {
|
|
LOG_DEBUG(Lib_Font, "Invalid parameter");
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
*bidiLevel = textCharacter->bidiLevel;
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCharacterGetSyllableStringState() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCharacterGetTextFontCode() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCharacterGetTextOrder(OrbisFontTextCharacter* textCharacter,
|
|
void** pTextOrder) {
|
|
if (!pTextOrder) {
|
|
LOG_DEBUG(Lib_Font, "Invalid parameter");
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
if (!textCharacter) {
|
|
LOG_DEBUG(Lib_Font, "Invalid parameter");
|
|
*pTextOrder = NULL;
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
*pTextOrder = textCharacter->textOrder;
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
u32 PS4_SYSV_ABI sceFontCharacterLooksFormatCharacters(OrbisFontTextCharacter* textCharacter) {
|
|
if (!textCharacter) {
|
|
return 0;
|
|
}
|
|
|
|
return (textCharacter->formatFlags & 0x04) ? textCharacter->characterCode : 0;
|
|
}
|
|
|
|
u32 PS4_SYSV_ABI sceFontCharacterLooksWhiteSpace(OrbisFontTextCharacter* textCharacter) {
|
|
if (!textCharacter) {
|
|
return 0;
|
|
}
|
|
|
|
return (textCharacter->charType == 0x0E) ? textCharacter->characterCode : 0;
|
|
}
|
|
|
|
OrbisFontTextCharacter* PS4_SYSV_ABI
|
|
sceFontCharacterRefersTextBack(OrbisFontTextCharacter* textCharacter) {
|
|
if (!textCharacter)
|
|
return NULL;
|
|
|
|
OrbisFontTextCharacter* current = textCharacter->prev;
|
|
while (current) {
|
|
if (current->unkn_0x31 == 0 && current->unkn_0x33 == 0) {
|
|
return current;
|
|
}
|
|
current = current->prev;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
OrbisFontTextCharacter* PS4_SYSV_ABI
|
|
sceFontCharacterRefersTextNext(OrbisFontTextCharacter* textCharacter) {
|
|
if (!textCharacter)
|
|
return NULL;
|
|
|
|
OrbisFontTextCharacter* current = textCharacter->next;
|
|
while (current) {
|
|
if (current->unkn_0x31 == 0 && current->unkn_0x33 == 0) {
|
|
return current;
|
|
}
|
|
current = current->next;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCharactersRefersTextCodes() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontClearDeviceCache() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCloseFont() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontControl() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateGraphicsDevice() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateGraphicsService() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateGraphicsServiceWithEdition() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateLibrary() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateLibraryWithEdition(const OrbisFontMem* memory,
|
|
OrbisFontLibCreateParams create_params,
|
|
u64 edition, OrbisFontLib* pLibrary) {
|
|
if (!pLibrary) {
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
(void)memory;
|
|
(void)create_params;
|
|
(void)edition;
|
|
*pLibrary = new FontLibOpaque{};
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateRenderer() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateRendererWithEdition(const OrbisFontMem* memory,
|
|
OrbisFontRendererCreateParams create_params,
|
|
u64 edition, OrbisFontRenderer* pRenderer) {
|
|
if (!pRenderer) {
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
(void)memory;
|
|
(void)create_params;
|
|
(void)edition;
|
|
*pRenderer = new OrbisFontRenderer_{};
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateString() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateWords() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontCreateWritingLine() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDefineAttribute() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDeleteGlyph() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDestroyGraphicsDevice() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDestroyGraphicsService() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDestroyLibrary() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDestroyRenderer() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDestroyString() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDestroyWords() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDestroyWritingLine() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontDettachDeviceCacheBuffer() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGenerateCharGlyph() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetAttribute() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetCharGlyphCode() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetCharGlyphMetrics(OrbisFontHandle fontHandle, u32 code,
|
|
OrbisFontGlyphMetrics* metrics) {
|
|
if (!metrics) {
|
|
LOG_DEBUG(Lib_Font, "sceFontGetCharGlyphMetrics: invalid params");
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
auto& st = GetState(fontHandle);
|
|
const stbtt_fontinfo* face = nullptr;
|
|
float scale = 0.0f;
|
|
bool use_ext = false;
|
|
|
|
int ext_glyph = 0;
|
|
if (st.ext_face_ready) {
|
|
if (st.ext_scale_for_height == 0.0f)
|
|
st.ext_scale_for_height = stbtt_ScaleForPixelHeight(&st.ext_face, st.scale_h);
|
|
ext_glyph = stbtt_FindGlyphIndex(&st.ext_face, static_cast<int>(code));
|
|
if (ext_glyph > 0) {
|
|
face = &st.ext_face;
|
|
scale = st.ext_scale_for_height;
|
|
use_ext = true;
|
|
if (!st.logged_ext_use) {
|
|
LOG_INFO(Lib_Font, "RenderFace: handle={} source=external (game font)",
|
|
static_cast<const void*>(fontHandle));
|
|
st.logged_ext_use = true;
|
|
}
|
|
}
|
|
}
|
|
if (!face && EnsureSystemFace(st)) {
|
|
if (st.scale_for_height == 0.0f)
|
|
st.scale_for_height = stbtt_ScaleForPixelHeight(&st.face, st.scale_h);
|
|
int sys_glyph = stbtt_FindGlyphIndex(&st.face, static_cast<int>(code));
|
|
if (sys_glyph > 0) {
|
|
face = &st.face;
|
|
scale = st.scale_for_height;
|
|
use_ext = false;
|
|
if (!st.logged_sys_use) {
|
|
LOG_INFO(Lib_Font, "RenderFace: handle={} source=system (fallback)",
|
|
static_cast<const void*>(fontHandle));
|
|
st.logged_sys_use = true;
|
|
}
|
|
}
|
|
}
|
|
if (face) {
|
|
const int pixel_h = std::max(1, (int)std::lround(st.scale_h));
|
|
const std::uint64_t key = MakeGlyphKey(code, pixel_h);
|
|
GlyphEntry* ge = nullptr;
|
|
if (use_ext) {
|
|
auto it = st.ext_cache.find(key);
|
|
if (it != st.ext_cache.end())
|
|
ge = &it->second;
|
|
} else {
|
|
auto it = st.sys_cache.find(key);
|
|
if (it != st.sys_cache.end())
|
|
ge = &it->second;
|
|
}
|
|
if (!ge) {
|
|
GlyphEntry entry{};
|
|
int aw = 0, lsb = 0;
|
|
stbtt_GetCodepointHMetrics(face, static_cast<int>(code), &aw, &lsb);
|
|
stbtt_GetCodepointBitmapBox(face, static_cast<int>(code), scale, scale, &entry.x0,
|
|
&entry.y0, &entry.x1, &entry.y1);
|
|
entry.w = std::max(0, entry.x1 - entry.x0);
|
|
entry.h = std::max(0, entry.y1 - entry.y0);
|
|
entry.advance = static_cast<float>(aw) * scale;
|
|
entry.bearingX = static_cast<float>(lsb) * scale;
|
|
if (use_ext) {
|
|
ge = &st.ext_cache.emplace(key, std::move(entry)).first->second;
|
|
} else {
|
|
ge = &st.sys_cache.emplace(key, std::move(entry)).first->second;
|
|
}
|
|
}
|
|
metrics->w = ge->w > 0 ? (float)ge->w : st.scale_w;
|
|
metrics->h = ge->h > 0 ? (float)ge->h : st.scale_h;
|
|
metrics->h_bearing_x = ge->bearingX;
|
|
metrics->h_bearing_y = static_cast<float>(-ge->y0);
|
|
metrics->h_adv = ge->advance > 0.0f ? ge->advance : st.scale_w;
|
|
metrics->v_bearing_x = 0.0f;
|
|
metrics->v_bearing_y = 0.0f;
|
|
metrics->v_adv = 0.0f;
|
|
LOG_TRACE(Lib_Font,
|
|
"GetCharGlyphMetrics: code=U+{:04X} src={} size=({}, {}) adv={} bearing=({}, {}) "
|
|
"box={}x{}",
|
|
code, use_ext ? "external" : "system", st.scale_w, st.scale_h, metrics->h_adv,
|
|
metrics->h_bearing_x, metrics->h_bearing_y, metrics->w, metrics->h);
|
|
return ORBIS_OK;
|
|
}
|
|
metrics->w = st.scale_w;
|
|
metrics->h = st.scale_h;
|
|
metrics->h_bearing_x = 0.0f;
|
|
metrics->h_bearing_y = st.scale_h;
|
|
metrics->h_adv = st.scale_w;
|
|
metrics->v_bearing_x = 0.0f;
|
|
metrics->v_bearing_y = 0.0f;
|
|
metrics->v_adv = 0.0f;
|
|
LOG_TRACE(Lib_Font, "GetCharGlyphMetrics(fallback): code=U+{:04X} size=({}, {}) box={}x{}",
|
|
code, st.scale_w, st.scale_h, metrics->w, metrics->h);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetEffectSlant() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetEffectWeight() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetFontGlyphsCount() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetFontGlyphsOutlineProfile() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetFontMetrics() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetFontResolution() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetFontStyleInformation() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetGlyphExpandBufferState() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetHorizontalLayout() {
|
|
LOG_DEBUG(Lib_Font, "GetHorizontalLayout: default layout (no effects)");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetKerning(OrbisFontHandle fontHandle, u32 preCode, u32 code,
|
|
OrbisFontKerning* kerning) {
|
|
if (!kerning) {
|
|
LOG_DEBUG(Lib_Font, "sceFontGetKerning: invalid params");
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
auto& st = GetState(fontHandle);
|
|
const stbtt_fontinfo* face = nullptr;
|
|
float scale = 0.0f;
|
|
if (st.ext_face_ready) {
|
|
if (st.ext_scale_for_height == 0.0f)
|
|
st.ext_scale_for_height = stbtt_ScaleForPixelHeight(&st.ext_face, st.scale_h);
|
|
int g1 = stbtt_FindGlyphIndex(&st.ext_face, static_cast<int>(preCode));
|
|
int g2 = stbtt_FindGlyphIndex(&st.ext_face, static_cast<int>(code));
|
|
if (g1 > 0 && g2 > 0) {
|
|
face = &st.ext_face;
|
|
scale = st.ext_scale_for_height;
|
|
}
|
|
}
|
|
if (!face && EnsureSystemFace(st)) {
|
|
if (st.scale_for_height == 0.0f)
|
|
st.scale_for_height = stbtt_ScaleForPixelHeight(&st.face, st.scale_h);
|
|
int g1 = stbtt_FindGlyphIndex(&st.face, static_cast<int>(preCode));
|
|
int g2 = stbtt_FindGlyphIndex(&st.face, static_cast<int>(code));
|
|
if (g1 > 0 && g2 > 0) {
|
|
face = &st.face;
|
|
scale = st.scale_for_height;
|
|
}
|
|
}
|
|
if (face) {
|
|
const int kern =
|
|
stbtt_GetCodepointKernAdvance(face, static_cast<int>(preCode), static_cast<int>(code));
|
|
const float kx = static_cast<float>(kern) * scale;
|
|
kerning->dx = kx;
|
|
kerning->dy = 0.0f;
|
|
kerning->px = 0.0f;
|
|
kerning->py = 0.0f;
|
|
LOG_TRACE(Lib_Font, "GetKerning: pre=U+{:04X} code=U+{:04X} dx={}", preCode, code, kx);
|
|
return ORBIS_OK;
|
|
}
|
|
kerning->dx = 0.0f;
|
|
kerning->dy = 0.0f;
|
|
kerning->px = 0.0f;
|
|
kerning->py = 0.0f;
|
|
LOG_TRACE(Lib_Font, "GetKerning: pre=U+{:04X} code=U+{:04X} dx=0 (no face)", preCode, code);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetLibrary(OrbisFontHandle fontHandle, OrbisFontLib* pLibrary) {
|
|
if (!pLibrary) {
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
const auto& st = GetState(fontHandle);
|
|
*pLibrary = st.library;
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetPixelResolution() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetRenderCharGlyphMetrics() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetRenderEffectSlant() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetRenderEffectWeight() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetRenderScaledKerning() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetRenderScalePixel() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetRenderScalePoint() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetResolutionDpi() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetScalePixel(OrbisFontHandle fontHandle, float* w, float* h) {
|
|
if (!w || !h) {
|
|
LOG_DEBUG(Lib_Font, "sceFontGetScalePixel: invalid params");
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
const auto& st = GetState(fontHandle);
|
|
*w = st.scale_w;
|
|
*h = st.scale_h;
|
|
LOG_DEBUG(Lib_Font, "GetScalePixel: handle={} -> w={}, h={}",
|
|
static_cast<const void*>(fontHandle), *w, *h);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetScalePoint() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetScriptLanguage() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetTypographicDesign() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGetVerticalLayout() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphDefineAttribute() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphGetAttribute() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphGetGlyphForm() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphGetMetricsForm() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphGetScalePixel() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRefersMetrics() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRefersMetricsHorizontal() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRefersMetricsHorizontalAdvance() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRefersMetricsHorizontalX() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRefersOutline() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRenderImage() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRenderImageHorizontal() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGlyphRenderImageVertical() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsBeginFrame() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsDrawingCancel() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsDrawingFinish() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsEndFrame() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsExchangeResource() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillMethodInit() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillPlotInit() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillPlotSetLayout() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillPlotSetMapping() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillRatesInit() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillRatesSetFillEffect() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillRatesSetLayout() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsFillRatesSetMapping() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsGetDeviceUsage() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsRegionInit() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsRegionInitCircular() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsRegionInitRoundish() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsRelease() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsRenderResource() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetFramePolicy() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupClipping() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupColorRates() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupFillMethod() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupFillRates() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupGlyphFill() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupGlyphFillPlot() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupHandleDefault() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupLocation() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupPositioning() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupRotation() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupScaling() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupShapeFill() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsSetupShapeFillPlot() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsStructureCanvas() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsStructureCanvasSequence() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsStructureDesign() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsStructureDesignResource() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsStructureSurfaceTexture() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateClipping() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateColorRates() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateFillMethod() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateFillRates() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateGlyphFill() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateGlyphFillPlot() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateLocation() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdatePositioning() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateRotation() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateScaling() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateShapeFill() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontGraphicsUpdateShapeFillPlot() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontMemoryInit(OrbisFontMem* fontMemory, void* address, u32 sizeByte,
|
|
const OrbisFontMemInterface* memInterface, void* mspaceObject,
|
|
OrbisFontMemDestroyCb destroyCallback, void* destroyObject) {
|
|
LOG_ERROR(Lib_Font,
|
|
"(STUBBED) called font_mem={} region_base={} sizeByte={} mem_if={} mspace_handle={}"
|
|
" destroy_cb={} destroy_ctx={}",
|
|
static_cast<const void*>(fontMemory), static_cast<const void*>(address), sizeByte,
|
|
static_cast<const void*>(memInterface), static_cast<const void*>(mspaceObject),
|
|
reinterpret_cast<const void*>(destroyCallback),
|
|
static_cast<const void*>(destroyObject));
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontMemoryTerm() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontOpenFontFile() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontOpenFontInstance() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontOpenFontMemory(OrbisFontLib library, const void* fontAddress, u32 fontSize,
|
|
const OrbisFontOpenParams* open_params,
|
|
OrbisFontHandle* pFontHandle) {
|
|
if (!library || !fontAddress || fontSize == 0 || !pFontHandle) {
|
|
LOG_DEBUG(Lib_Font, "sceFontOpenFontMemory: invalid params");
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
(void)open_params;
|
|
auto* f = new OrbisFontHandleOpaque{};
|
|
*pFontHandle = f;
|
|
auto& st = GetState(f);
|
|
st.library = library;
|
|
const unsigned char* p = reinterpret_cast<const unsigned char*>(fontAddress);
|
|
auto& ls = GetLibState(library);
|
|
LOG_INFO(Lib_Font,
|
|
"OpenFontMemory: lib={} size={} open_params={} handle={} sig='{}{}{}{}' "
|
|
"ext_supported={} formats=0x{:X}",
|
|
static_cast<const void*>(library), fontSize, static_cast<const void*>(open_params),
|
|
static_cast<const void*>(*pFontHandle), (fontSize >= 1 ? (char)p[0] : '?'),
|
|
(fontSize >= 2 ? (char)p[1] : '?'), (fontSize >= 3 ? (char)p[2] : '?'),
|
|
(fontSize >= 4 ? (char)p[3] : '?'), ls.support_external, ls.external_formats);
|
|
st.ext_face_data.assign(reinterpret_cast<const unsigned char*>(fontAddress),
|
|
reinterpret_cast<const unsigned char*>(fontAddress) + fontSize);
|
|
int font_count = stbtt_GetNumberOfFonts(st.ext_face_data.data());
|
|
int chosen_index = 0;
|
|
if (font_count > 1) {
|
|
chosen_index = 0;
|
|
if (open_params) {
|
|
chosen_index =
|
|
static_cast<int>(open_params->subfont_index % static_cast<u32>(font_count));
|
|
}
|
|
}
|
|
int offset = stbtt_GetFontOffsetForIndex(st.ext_face_data.data(), chosen_index);
|
|
const unsigned char* d = st.ext_face_data.data();
|
|
const u32 sig32 = (fontSize >= 4)
|
|
? (static_cast<u32>(d[0]) << 24) | (static_cast<u32>(d[1]) << 16) |
|
|
(static_cast<u32>(d[2]) << 8) | static_cast<u32>(d[3])
|
|
: 0u;
|
|
const bool is_ttc = (font_count > 1);
|
|
const bool is_otf_cff = (sig32 == 0x4F54544Fu);
|
|
const bool is_ttf_sfnt = (sig32 == 0x00010000u) || (sig32 == 0x74727565u);
|
|
const bool is_sfnt_typ1 = (sig32 == 0x74797031u);
|
|
if (is_otf_cff) {
|
|
LOG_WARNING(Lib_Font,
|
|
"ExternalFace: OTF/CFF detected (OTTO). CFF outlines are not supported;"
|
|
" handle={} fonts={} requested_index={} -> fallback may occur",
|
|
static_cast<const void*>(*pFontHandle), font_count, chosen_index);
|
|
}
|
|
if (stbtt_InitFont(&st.ext_face, st.ext_face_data.data(), offset)) {
|
|
st.ext_face_ready = true;
|
|
stbtt_GetFontVMetrics(&st.ext_face, &st.ext_ascent, &st.ext_descent, &st.ext_lineGap);
|
|
st.ext_scale_for_height = stbtt_ScaleForPixelHeight(&st.ext_face, st.scale_h);
|
|
LOG_INFO(Lib_Font,
|
|
"ExternalFace: handle={} ascent={} descent={} lineGap={} scale={} (data={} bytes)"
|
|
" fonts={} chosen_index={} ttc={} sig=0x{:08X} kind={}",
|
|
static_cast<const void*>(*pFontHandle), st.ext_ascent, st.ext_descent,
|
|
st.ext_lineGap, st.ext_scale_for_height, (int)st.ext_face_data.size(), font_count,
|
|
chosen_index, is_ttc, sig32,
|
|
is_otf_cff ? "OTF/CFF (unsupported)"
|
|
: (is_ttf_sfnt ? "TTF (ready)"
|
|
: (is_sfnt_typ1 ? "Type1(sfnt) (stub)" : "unknown")));
|
|
if (is_ttf_sfnt) {
|
|
LOG_INFO(Lib_Font, "ExternalFormat: OpenType-TT (glyf) -> ready");
|
|
} else if (is_otf_cff) {
|
|
LOG_WARNING(Lib_Font, "ExternalFormat: OpenType-CFF -> stub (CFF unsupported)");
|
|
} else if (is_sfnt_typ1) {
|
|
LOG_WARNING(Lib_Font, "ExternalFormat: Type 1 (sfnt wrapper) -> stub");
|
|
}
|
|
} else {
|
|
LOG_WARNING(Lib_Font,
|
|
"ExternalFace: stbtt_InitFont failed for handle={} size={} fonts={}"
|
|
" chosen_index={} sig='{}{}{}{}' (OTF/CFF unsupported={})",
|
|
static_cast<const void*>(*pFontHandle), fontSize, font_count, chosen_index,
|
|
(fontSize >= 1 ? (char)p[0] : '?'), (fontSize >= 2 ? (char)p[1] : '?'),
|
|
(fontSize >= 3 ? (char)p[2] : '?'), (fontSize >= 4 ? (char)p[3] : '?'),
|
|
is_otf_cff);
|
|
if (is_otf_cff) {
|
|
LOG_WARNING(Lib_Font, "Stubbed: CFF outlines not implemented; fallback to system font");
|
|
}
|
|
}
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontOpenFontSet(OrbisFontLib library, u32 fontSetType, u32 openMode,
|
|
const OrbisFontOpenParams* open_params,
|
|
OrbisFontHandle* pFontHandle) {
|
|
(void)fontSetType;
|
|
(void)openMode;
|
|
(void)open_params;
|
|
if (!pFontHandle) {
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
auto* f = new OrbisFontHandleOpaque{};
|
|
*pFontHandle = f;
|
|
auto& st = GetState(f);
|
|
st.library = library;
|
|
EnsureSystemFace(st);
|
|
if (st.scale_for_height == 0.0f)
|
|
st.scale_for_height = stbtt_ScaleForPixelHeight(&st.face, st.scale_h);
|
|
LOG_INFO(
|
|
Lib_Font,
|
|
"OpenFontSet: lib={} fontSetType={} openMode={} open_params={} handle={} (system face={})",
|
|
static_cast<const void*>(library), fontSetType, openMode,
|
|
static_cast<const void*>(open_params), static_cast<const void*>(*pFontHandle),
|
|
EnsureSystemFace(GetState(f)));
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRebindRenderer(OrbisFontHandle fontHandle) {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called fontHandle={}", static_cast<const void*>(fontHandle));
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRenderCharGlyphImage(OrbisFontHandle fontHandle, u32 code,
|
|
OrbisFontRenderSurface* surf, float x, float y,
|
|
OrbisFontGlyphMetrics* metrics,
|
|
OrbisFontRenderOutput* result) {
|
|
return sceFontRenderCharGlyphImageHorizontal(fontHandle, code, surf, x, y, metrics, result);
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRenderCharGlyphImageHorizontal(OrbisFontHandle fontHandle, u32 code,
|
|
OrbisFontRenderSurface* surf, float x,
|
|
float y, OrbisFontGlyphMetrics* metrics,
|
|
OrbisFontRenderOutput* result) {
|
|
LOG_INFO(Lib_Font,
|
|
"RenderGlyph(H): handle={} code=U+{:04X} x={} y={} metrics={} result={} surf={}"
|
|
" buf={} widthByte={} pixelSizeByte={} size={}x{} sc=[{},{}-{}:{}] styleFlag={}",
|
|
static_cast<const void*>(fontHandle), code, x, y, static_cast<const void*>(metrics),
|
|
static_cast<const void*>(result), static_cast<const void*>(surf),
|
|
surf ? static_cast<const void*>(surf->buffer) : nullptr, surf ? surf->widthByte : -1,
|
|
surf ? (int)surf->pixelSizeByte : -1, surf ? surf->width : -1,
|
|
surf ? surf->height : -1, surf ? surf->sc_x0 : 0u, surf ? surf->sc_y0 : 0u,
|
|
surf ? surf->sc_x1 : 0u, surf ? surf->sc_y1 : 0u, surf ? (int)surf->styleFlag : -1);
|
|
if (!surf || !surf->buffer) {
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
LogStrideOnce(surf);
|
|
LOG_DEBUG(Lib_Font,
|
|
"RenderGlyph(H): handle={} code=U+{:04X} x={} y={} surf={} size={}x{} bpp={} "
|
|
"sc=[{},{}-{}:{}]",
|
|
static_cast<const void*>(fontHandle), code, x, y, static_cast<const void*>(surf),
|
|
surf->width, surf->height, (int)surf->pixelSizeByte, surf->sc_x0, surf->sc_y0,
|
|
surf->sc_x1, surf->sc_y1);
|
|
if (result) {
|
|
result->stage = nullptr;
|
|
result->slot.maybe_addr = static_cast<u8*>(surf->buffer);
|
|
result->slot.maybe_rowBytes = static_cast<u32>(std::max(0, surf->widthByte));
|
|
result->slot.maybe_pixelSize = static_cast<u8>(std::max(1, (int)surf->pixelSizeByte));
|
|
result->slot.maybe_pixelFmt = (result->slot.maybe_pixelSize == 4) ? 1 : 0;
|
|
}
|
|
auto& st = GetState(fontHandle);
|
|
float fw = st.scale_w;
|
|
float fh = st.scale_h;
|
|
int g_x0 = 0, g_y0 = 0, g_x1 = 0, g_y1 = 0;
|
|
const stbtt_fontinfo* face = nullptr;
|
|
float scale = 0.0f;
|
|
bool use_ext = false;
|
|
|
|
int ext_glyph = 0;
|
|
if (st.ext_face_ready) {
|
|
if (st.ext_scale_for_height == 0.0f)
|
|
st.ext_scale_for_height = stbtt_ScaleForPixelHeight(&st.ext_face, st.scale_h);
|
|
ext_glyph = stbtt_FindGlyphIndex(&st.ext_face, static_cast<int>(code));
|
|
if (ext_glyph > 0) {
|
|
face = &st.ext_face;
|
|
scale = st.ext_scale_for_height;
|
|
use_ext = true;
|
|
}
|
|
}
|
|
if (!face && EnsureSystemFace(st)) {
|
|
if (st.scale_for_height == 0.0f)
|
|
st.scale_for_height = stbtt_ScaleForPixelHeight(&st.face, st.scale_h);
|
|
int sys_glyph = stbtt_FindGlyphIndex(&st.face, static_cast<int>(code));
|
|
if (sys_glyph > 0) {
|
|
face = &st.face;
|
|
scale = st.scale_for_height;
|
|
use_ext = false;
|
|
}
|
|
}
|
|
if (face) {
|
|
LOG_DEBUG(Lib_Font, "RenderGlyphSrc(H): handle={} code=U+{:04X} src={}",
|
|
static_cast<const void*>(fontHandle), code, use_ext ? "external" : "system");
|
|
const float frac_x = x - std::floor(x);
|
|
const float frac_y = y - std::floor(y);
|
|
const bool use_subpixel = (frac_x != 0.0f) || (frac_y != 0.0f);
|
|
const int pixel_h = std::max(1, (int)std::lround(st.scale_h));
|
|
const std::uint64_t key = MakeGlyphKey(code, pixel_h);
|
|
GlyphEntry* ge = nullptr;
|
|
if (!use_subpixel) {
|
|
if (use_ext) {
|
|
auto it = st.ext_cache.find(key);
|
|
if (it != st.ext_cache.end())
|
|
ge = &it->second;
|
|
} else {
|
|
auto it = st.sys_cache.find(key);
|
|
if (it != st.sys_cache.end())
|
|
ge = &it->second;
|
|
}
|
|
}
|
|
if (!ge) {
|
|
GlyphEntry entry{};
|
|
int aw = 0, lsb = 0;
|
|
stbtt_GetCodepointHMetrics(face, static_cast<int>(code), &aw, &lsb);
|
|
if (use_subpixel) {
|
|
stbtt_GetCodepointBitmapBoxSubpixel(face, static_cast<int>(code), scale, scale,
|
|
frac_x, frac_y, &entry.x0, &entry.y0, &entry.x1,
|
|
&entry.y1);
|
|
} else {
|
|
stbtt_GetCodepointBitmapBox(face, static_cast<int>(code), scale, scale, &entry.x0,
|
|
&entry.y0, &entry.x1, &entry.y1);
|
|
}
|
|
entry.w = std::max(0, entry.x1 - entry.x0);
|
|
entry.h = std::max(0, entry.y1 - entry.y0);
|
|
entry.advance = static_cast<float>(aw) * scale;
|
|
entry.bearingX = static_cast<float>(lsb) * scale;
|
|
if (!use_subpixel && entry.w > 0 && entry.h > 0) {
|
|
entry.bitmap.resize(static_cast<size_t>(entry.w * entry.h));
|
|
stbtt_MakeCodepointBitmap(face, entry.bitmap.data(), entry.w, entry.h, entry.w,
|
|
scale, scale, static_cast<int>(code));
|
|
}
|
|
if (!use_subpixel) {
|
|
if (use_ext) {
|
|
ge = &st.ext_cache.emplace(key, std::move(entry)).first->second;
|
|
} else {
|
|
ge = &st.sys_cache.emplace(key, std::move(entry)).first->second;
|
|
}
|
|
} else {
|
|
fw = (float)entry.w;
|
|
fh = (float)entry.h;
|
|
g_x0 = entry.x0;
|
|
g_y0 = entry.y0;
|
|
g_x1 = entry.x1;
|
|
g_y1 = entry.y1;
|
|
}
|
|
}
|
|
if (ge) {
|
|
fw = (float)ge->w;
|
|
fh = (float)ge->h;
|
|
g_x0 = ge->x0;
|
|
g_y0 = ge->y0;
|
|
g_x1 = ge->x1;
|
|
g_y1 = ge->y1;
|
|
}
|
|
}
|
|
if (metrics) {
|
|
if (face) {
|
|
int aw = 0, lsb = 0;
|
|
stbtt_GetCodepointHMetrics(face, static_cast<int>(code), &aw, &lsb);
|
|
metrics->w = fw;
|
|
metrics->h = fh;
|
|
metrics->h_bearing_x = static_cast<float>(lsb) * scale;
|
|
metrics->h_bearing_y = static_cast<float>(-g_y0);
|
|
metrics->h_adv = static_cast<float>(aw) * scale;
|
|
} else {
|
|
metrics->w = fw;
|
|
metrics->h = fh;
|
|
metrics->h_bearing_x = 0.0f;
|
|
metrics->h_bearing_y = fh;
|
|
metrics->h_adv = fw;
|
|
}
|
|
metrics->v_bearing_x = 0.0f;
|
|
metrics->v_bearing_y = 0.0f;
|
|
metrics->v_adv = 0.0f;
|
|
}
|
|
|
|
if (code == 0x20) {
|
|
if (result) {
|
|
result->new_x = 0;
|
|
result->new_y = 0;
|
|
result->new_w = 0;
|
|
result->new_h = 0;
|
|
result->ImageMetrics = {};
|
|
}
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
int ix = static_cast<int>(std::floor(x));
|
|
int iy = static_cast<int>(std::floor(y));
|
|
int left = ix;
|
|
int top = iy;
|
|
if (face) {
|
|
left = ix + g_x0;
|
|
top = iy + g_y0;
|
|
}
|
|
int iw = std::max(0, static_cast<int>(std::round(fw)));
|
|
int ih = std::max(0, static_cast<int>(std::round(fh)));
|
|
|
|
int sw = surf->width;
|
|
int sh = surf->height;
|
|
if (sw <= 0 || sh <= 0 || iw <= 0 || ih <= 0) {
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
int sx0 = 0, sy0 = 0, sx1 = sw, sy1 = sh;
|
|
if (surf->sc_x1 > 0 || surf->sc_y1 > 0 || surf->sc_x0 > 0 || surf->sc_y0 > 0) {
|
|
sx0 = static_cast<int>(surf->sc_x0);
|
|
sy0 = static_cast<int>(surf->sc_y0);
|
|
sx1 = static_cast<int>(surf->sc_x1);
|
|
sy1 = static_cast<int>(surf->sc_y1);
|
|
sx0 = std::clamp(sx0, 0, sw);
|
|
sy0 = std::clamp(sy0, 0, sh);
|
|
sx1 = std::clamp(sx1, 0, sw);
|
|
sy1 = std::clamp(sy1, 0, sh);
|
|
}
|
|
|
|
int rx0 = left;
|
|
int ry0 = top;
|
|
int rx1 = left + iw;
|
|
int ry1 = top + ih;
|
|
|
|
rx0 = std::clamp(rx0, sx0, sx1);
|
|
ry0 = std::clamp(ry0, sy0, sy1);
|
|
rx1 = std::clamp(rx1, sx0, sx1);
|
|
ry1 = std::clamp(ry1, sy0, sy1);
|
|
|
|
int cw = std::max(0, rx1 - rx0);
|
|
int ch = std::max(0, ry1 - ry0);
|
|
|
|
if (cw > 0 && ch > 0) {
|
|
const int bpp = std::max(1, static_cast<int>(surf->pixelSizeByte));
|
|
bool is_pua = (code >= 0xE000 && code <= 0xF8FF) || (code >= 0xF0000 && code <= 0xFFFFD) ||
|
|
(code >= 0x100000 && code <= 0x10FFFD);
|
|
bool is_placeholder_ascii = (code == 'h' || code == 'p' || code == 'x' || code == 'o');
|
|
if ((is_pua || is_placeholder_ascii) && g_logged_pua.insert(code).second) {
|
|
LOG_DEBUG(
|
|
Lib_Font,
|
|
"GlyphTrace: code=U+{:04X} pua={} placeholder_ascii={} dst=[{},{} {}x{}] bpp={}",
|
|
code, is_pua, is_placeholder_ascii, rx0, ry0, cw, ch, bpp);
|
|
}
|
|
if (face && iw > 0 && ih > 0) {
|
|
const int pixel_h = std::max(1, (int)std::lround(st.scale_h));
|
|
const std::uint64_t key = MakeGlyphKey(code, pixel_h);
|
|
const GlyphEntry* ge = nullptr;
|
|
if (use_ext) {
|
|
auto it = st.ext_cache.find(key);
|
|
if (it != st.ext_cache.end())
|
|
ge = &it->second;
|
|
} else {
|
|
auto it = st.sys_cache.find(key);
|
|
if (it != st.sys_cache.end())
|
|
ge = &it->second;
|
|
}
|
|
const float frac_x = x - std::floor(x);
|
|
const float frac_y = y - std::floor(y);
|
|
const bool use_subpixel = (frac_x != 0.0f) || (frac_y != 0.0f);
|
|
const std::uint8_t* src_bitmap = nullptr;
|
|
if (!use_subpixel && ge && ge->w == iw && ge->h == ih && !ge->bitmap.empty()) {
|
|
src_bitmap = ge->bitmap.data();
|
|
} else {
|
|
st.scratch.assign(static_cast<size_t>(iw * ih), 0);
|
|
if (use_subpixel) {
|
|
stbtt_MakeCodepointBitmapSubpixel(face, st.scratch.data(), iw, ih, iw, scale,
|
|
scale, frac_x, frac_y,
|
|
static_cast<int>(code));
|
|
} else {
|
|
stbtt_MakeCodepointBitmap(face, st.scratch.data(), iw, ih, iw, scale, scale,
|
|
static_cast<int>(code));
|
|
}
|
|
src_bitmap = st.scratch.data();
|
|
}
|
|
|
|
const std::uint8_t* eff_src = src_bitmap;
|
|
|
|
const int src_x0 = std::max(0, sx0 - rx0);
|
|
const int src_y0 = std::max(0, sy0 - ry0);
|
|
const int dst_x0 = std::max(rx0, sx0);
|
|
const int dst_y0 = std::max(ry0, sy0);
|
|
const int copy_w = std::min(rx1, sx1) - dst_x0;
|
|
const int copy_h = std::min(ry1, sy1) - dst_y0;
|
|
if (copy_w > 0 && copy_h > 0) {
|
|
LOG_TRACE(Lib_Font,
|
|
"RenderGlyph(H): code=U+{:04X} baseline=({}, {}) box=[{},{}-{}:{}] "
|
|
"dst=[{},{} {}x{}] bpp={}",
|
|
code, ix, iy, g_x0, g_y0, g_x1, g_y1, dst_x0, dst_y0, copy_w, copy_h,
|
|
bpp);
|
|
for (int row = 0; row < copy_h; ++row) {
|
|
const int src_y = src_y0 + row;
|
|
const std::uint8_t* src_row = eff_src + src_y * iw + src_x0;
|
|
int row_shift = 0;
|
|
int row_dst_x = dst_x0 + row_shift;
|
|
int row_copy_w = copy_w;
|
|
if (row_dst_x < sx0) {
|
|
int delta = sx0 - row_dst_x;
|
|
row_dst_x = sx0;
|
|
if (delta < row_copy_w) {
|
|
src_row += delta;
|
|
row_copy_w -= delta;
|
|
} else {
|
|
row_copy_w = 0;
|
|
}
|
|
}
|
|
if (row_dst_x + row_copy_w > sx1) {
|
|
row_copy_w = std::max(0, sx1 - row_dst_x);
|
|
}
|
|
std::uint8_t* dst_row = static_cast<std::uint8_t*>(surf->buffer) +
|
|
(dst_y0 + row) * surf->widthByte + row_dst_x * bpp;
|
|
if (bpp == 1) {
|
|
for (int col = 0; col < row_copy_w; ++col) {
|
|
std::uint8_t cov = src_row[col];
|
|
std::uint8_t& d = dst_row[col];
|
|
d = std::max(d, cov);
|
|
}
|
|
} else if (bpp == 4) {
|
|
std::uint32_t* px = reinterpret_cast<std::uint32_t*>(dst_row);
|
|
for (int col = 0; col < row_copy_w; ++col) {
|
|
std::uint8_t a = src_row[col];
|
|
px[col] = (static_cast<std::uint32_t>(a) << 24) | 0x00FFFFFFu;
|
|
}
|
|
} else {
|
|
for (int col = 0; col < row_copy_w; ++col) {
|
|
std::uint8_t a = src_row[col];
|
|
std::uint8_t* p = dst_row + col * bpp;
|
|
std::memset(p, 0xFF, static_cast<size_t>(bpp));
|
|
p[0] = a;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (result) {
|
|
result->new_x = 0;
|
|
result->new_y = 0;
|
|
result->new_w = 0;
|
|
result->new_h = 0;
|
|
result->ImageMetrics.width = 0;
|
|
result->ImageMetrics.height = 0;
|
|
}
|
|
LOG_DEBUG(Lib_Font, "RenderGlyph(H): skip draw (no face/zero size) code=U+{:04X}",
|
|
code);
|
|
return ORBIS_OK;
|
|
}
|
|
}
|
|
|
|
if (result) {
|
|
result->new_x = static_cast<u32>(rx0);
|
|
result->new_y = static_cast<u32>(ry0);
|
|
result->new_w = static_cast<u32>(cw);
|
|
result->new_h = static_cast<u32>(ch);
|
|
const float stride_bytes = static_cast<float>(std::max(0, surf->widthByte));
|
|
result->ImageMetrics.bearing_x = static_cast<float>(g_x0);
|
|
result->ImageMetrics.bearing_y = static_cast<float>(-g_y0);
|
|
float adv_px = 0.0f;
|
|
if (face) {
|
|
int aw_tmp = 0, lsb_tmp = 0;
|
|
stbtt_GetCodepointHMetrics(face, static_cast<int>(code), &aw_tmp, &lsb_tmp);
|
|
adv_px = static_cast<float>(aw_tmp) * scale;
|
|
}
|
|
result->ImageMetrics.dv = adv_px;
|
|
result->ImageMetrics.stride = stride_bytes;
|
|
result->ImageMetrics.width = static_cast<u32>(cw);
|
|
result->ImageMetrics.height = static_cast<u32>(ch);
|
|
LOG_DEBUG(Lib_Font, "RenderGlyph(H): UpdateRect=[{},{} {}x{}] stride={} adv={}",
|
|
result->new_x, result->new_y, result->new_w, result->new_h,
|
|
result->ImageMetrics.stride, result->ImageMetrics.dv);
|
|
}
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRenderCharGlyphImageVertical() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRendererGetOutlineBufferSize() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRendererResetOutlineBuffer() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRendererSetOutlineBufferPolicy() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
void PS4_SYSV_ABI sceFontRenderSurfaceInit(OrbisFontRenderSurface* renderSurface, void* buffer,
|
|
int bufWidthByte, int pixelSizeByte, int widthPixel,
|
|
int heightPixel) {
|
|
if (renderSurface) {
|
|
renderSurface->buffer = buffer;
|
|
renderSurface->widthByte = bufWidthByte;
|
|
renderSurface->pixelSizeByte = static_cast<int8_t>(pixelSizeByte);
|
|
renderSurface->pad0 = 0;
|
|
renderSurface->styleFlag = 0;
|
|
renderSurface->pad2 = 0;
|
|
renderSurface->width = (widthPixel < 0) ? 0 : widthPixel;
|
|
renderSurface->height = (heightPixel < 0) ? 0 : heightPixel;
|
|
renderSurface->sc_x0 = 0;
|
|
renderSurface->sc_y0 = 0;
|
|
renderSurface->sc_x1 = static_cast<u32>(renderSurface->width);
|
|
renderSurface->sc_y1 = static_cast<u32>(renderSurface->height);
|
|
std::fill(std::begin(renderSurface->reserved_q), std::end(renderSurface->reserved_q), 0);
|
|
LOG_INFO(Lib_Font,
|
|
"RenderSurfaceInit: buf={} widthByte={} pixelSizeByte={} size={}x{} "
|
|
"scissor=[0,0-{}:{}]",
|
|
static_cast<const void*>(buffer), bufWidthByte, pixelSizeByte,
|
|
renderSurface->width, renderSurface->height, renderSurface->sc_x1,
|
|
renderSurface->sc_y1);
|
|
}
|
|
}
|
|
|
|
void PS4_SYSV_ABI sceFontRenderSurfaceSetScissor(OrbisFontRenderSurface* renderSurface, int x0,
|
|
int y0, int w, int h) {
|
|
if (!renderSurface)
|
|
return;
|
|
|
|
int surfaceWidth = renderSurface->width;
|
|
int clip_x0, clip_x1;
|
|
|
|
if (surfaceWidth != 0) {
|
|
if (x0 < 0) {
|
|
clip_x0 = 0;
|
|
clip_x1 = (w + x0 > surfaceWidth) ? surfaceWidth : w + x0;
|
|
if (w <= -x0)
|
|
clip_x1 = 0;
|
|
} else {
|
|
clip_x0 = (x0 > surfaceWidth) ? surfaceWidth : x0;
|
|
clip_x1 = (w + x0 > surfaceWidth) ? surfaceWidth : w + x0;
|
|
}
|
|
renderSurface->sc_x0 = static_cast<u32>(clip_x0);
|
|
renderSurface->sc_x1 = static_cast<u32>(clip_x1);
|
|
}
|
|
|
|
int surfaceHeight = renderSurface->height;
|
|
int clip_y0, clip_y1;
|
|
|
|
if (surfaceHeight != 0) {
|
|
if (y0 < 0) {
|
|
clip_y0 = 0;
|
|
clip_y1 = (h + y0 > surfaceHeight) ? surfaceHeight : h + y0;
|
|
if (h <= -y0)
|
|
clip_y1 = 0;
|
|
} else {
|
|
clip_y0 = (y0 > surfaceHeight) ? surfaceHeight : y0;
|
|
clip_y1 = (h + y0 > surfaceHeight) ? surfaceHeight : h + y0;
|
|
}
|
|
renderSurface->sc_y0 = static_cast<u32>(clip_y0);
|
|
renderSurface->sc_y1 = static_cast<u32>(clip_y1);
|
|
}
|
|
LOG_INFO(Lib_Font, "RenderSurfaceSetScissor: [{},{}-{}:{}]", renderSurface->sc_x0,
|
|
renderSurface->sc_y0, renderSurface->sc_x1, renderSurface->sc_y1);
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontRenderSurfaceSetStyleFrame(OrbisFontRenderSurface* renderSurface,
|
|
OrbisFontStyleFrame* styleFrame) {
|
|
if (!renderSurface)
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
g_style_for_surface[renderSurface] = styleFrame;
|
|
renderSurface->styleFlag |= 0x1;
|
|
renderSurface->reserved_q[0] = reinterpret_cast<u64>(styleFrame);
|
|
LOG_INFO(Lib_Font, "RenderSurfaceSetStyleFrame: surf={} styleFrame={}",
|
|
static_cast<const void*>(renderSurface), static_cast<const void*>(styleFrame));
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetEffectSlant() {
|
|
LOG_DEBUG(Lib_Font, "SetEffectSlant: no-op (effects not implemented)");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetEffectWeight() {
|
|
LOG_DEBUG(Lib_Font, "SetEffectWeight: no-op (effects not implemented)");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetFontsOpenMode() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetResolutionDpi() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetScalePixel(OrbisFontHandle fontHandle, float w, float h) {
|
|
if (w <= 0.0f || h <= 0.0f) {
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
}
|
|
auto& st = GetState(fontHandle);
|
|
st.scale_w = w;
|
|
st.scale_h = h;
|
|
const bool sys_ok = EnsureSystemFace(st);
|
|
if (st.ext_face_ready)
|
|
st.ext_scale_for_height = stbtt_ScaleForPixelHeight(&st.ext_face, st.scale_h);
|
|
if (sys_ok)
|
|
st.scale_for_height = stbtt_ScaleForPixelHeight(&st.face, st.scale_h);
|
|
LOG_INFO(
|
|
Lib_Font,
|
|
"SetScalePixel: handle={} w={} h={} ext_scale={} sys_scale={} ext_ready={} sys_ready={}",
|
|
static_cast<const void*>(fontHandle), w, h, st.ext_scale_for_height, st.scale_for_height,
|
|
st.ext_face_ready, sys_ok);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetScalePoint() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetScriptLanguage() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetTypographicDesign() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetupRenderEffectSlant() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetupRenderEffectWeight() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetupRenderScalePixel(OrbisFontHandle fontHandle, float w, float h) {
|
|
auto rc = sceFontSetScalePixel(fontHandle, w, h);
|
|
LOG_INFO(Lib_Font, "SetupRenderScalePixel: handle={} w={} h={}",
|
|
static_cast<const void*>(fontHandle), w, h);
|
|
return rc;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSetupRenderScalePoint() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStringGetTerminateCode() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStringGetTerminateOrder() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStringGetWritingForm() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStringRefersRenderCharacters() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStringRefersTextCharacters() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameGetEffectSlant(OrbisFontStyleFrame* styleFrame,
|
|
float* slantRatio) {
|
|
if (!styleFrame || !slantRatio)
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
*slantRatio = 0.0f;
|
|
LOG_DEBUG(Lib_Font, "StyleFrameGetEffectSlant: frame={} slant={} (opaque)",
|
|
static_cast<const void*>(styleFrame), *slantRatio);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameGetEffectWeight(OrbisFontStyleFrame* fontStyleFrame,
|
|
float* weightXScale, float* weightYScale,
|
|
uint32_t* mode) {
|
|
if (!fontStyleFrame)
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
if (weightXScale)
|
|
*weightXScale = 1.0f;
|
|
if (weightYScale)
|
|
*weightYScale = 1.0f;
|
|
if (mode)
|
|
*mode = 0;
|
|
LOG_DEBUG(Lib_Font, "StyleFrameGetEffectWeight: frame={} weight=({}, {}) mode={} (opaque)",
|
|
static_cast<const void*>(fontStyleFrame), weightXScale ? *weightXScale : -1.0f,
|
|
weightYScale ? *weightYScale : -1.0f, mode ? *mode : 0u);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameGetResolutionDpi() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameGetScalePixel(OrbisFontStyleFrame* styleFrame, float* w,
|
|
float* h) {
|
|
if (!styleFrame)
|
|
return ORBIS_FONT_ERROR_INVALID_PARAMETER;
|
|
if (w)
|
|
*w = 0.0f;
|
|
if (h)
|
|
*h = 0.0f;
|
|
LOG_DEBUG(Lib_Font, "StyleFrameGetScalePixel: frame={} -> w={}, h={} (opaque)",
|
|
static_cast<const void*>(styleFrame), w ? *w : 0.0f, h ? *h : 0.0f);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameGetScalePoint() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameInit() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameSetEffectSlant() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameSetEffectWeight() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameSetResolutionDpi() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameSetScalePixel() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameSetScalePoint() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameUnsetEffectSlant() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameUnsetEffectWeight() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontStyleFrameUnsetScale() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSupportExternalFonts(OrbisFontLib library, u32 fontMax, u32 formats) {
|
|
auto& ls = GetLibState(library);
|
|
ls.support_external = true;
|
|
ls.external_fontMax = fontMax;
|
|
ls.external_formats = formats;
|
|
LOG_INFO(Lib_Font, "SupportExternalFonts: lib={} fontMax={} formats=0x{:X}",
|
|
static_cast<const void*>(library), fontMax, formats);
|
|
LogExternalFormatSupport(formats);
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSupportGlyphs() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontSupportSystemFonts(OrbisFontLib library) {
|
|
auto& ls = GetLibState(library);
|
|
ls.support_system = true;
|
|
LOG_INFO(Lib_Font, "SupportSystemFonts: lib={} system=on", static_cast<const void*>(library));
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontTextCodesStepBack() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontTextCodesStepNext() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontTextSourceInit() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontTextSourceRewind() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontTextSourceSetDefaultFont() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontTextSourceSetWritingForm() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontUnbindRenderer(OrbisFontHandle fontHandle) {
|
|
LOG_DEBUG(Lib_Font, "sceFontUnbindRenderer fontHandle={}",
|
|
static_cast<const void*>(fontHandle));
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWordsFindWordCharacters() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingGetRenderMetrics() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingInit() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingLineClear() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingLineGetOrderingSpace() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingLineGetRenderMetrics() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingLineRefersRenderStep() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingLineWritesOrder() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingRefersRenderStep() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingRefersRenderStepCharacter() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI sceFontWritingSetMaskInvisible() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_00F4D778F1C88CB3() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_03C650025FBB0DE7() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_07EAB8A163B27E1A() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_09408E88E4F97CE3() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_09F92905ED82A814() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_0D142CEE1AB21ABE() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_14BD2E9E119C16F2() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_1AC53C9EDEAE8D75() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_1D401185D5E24C3D() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_1E83CD20C2CC996F() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_314B1F765B9FE78A() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_350E6725FEDE29E1() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_3DB773F0A604BF39() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_4FF49DD21E311B1C() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_526287664A493981() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_55CA718DBC84A6E9() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_563FC5F0706A8B4D() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_569E2ECD34290F45() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_5A04775B6BE47685() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_5FD93BCAB6F79750() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_62B5398F864BD3B4() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_6F9010294D822367() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_7757E947423A7A67() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_7E06BA52077F54FA() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_93B36DEA021311D6() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_94B0891E7111598A() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_9785C9128C2FE7CD() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_97DFBC9B65FBC0E1() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_ACD9717405D7D3CA() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_B19A8AEC3FD4F16F() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_C10F488AD7CF103D() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_D0C8B5FF4A6826C7() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_E48D3CD01C342A33() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_EAC96B2186B71E14() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_FE4788A96EF46256() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
s32 PS4_SYSV_ABI Func_FE7E5AE95D3058F5() {
|
|
LOG_ERROR(Lib_Font, "(STUBBED) called");
|
|
return ORBIS_OK;
|
|
}
|
|
|
|
void RegisterlibSceFont(Core::Loader::SymbolsResolver* sym) {
|
|
LIB_FUNCTION("CUKn5pX-NVY", "libSceFont", 1, "libSceFont", sceFontAttachDeviceCacheBuffer);
|
|
LIB_FUNCTION("3OdRkSjOcog", "libSceFont", 1, "libSceFont", sceFontBindRenderer);
|
|
LIB_FUNCTION("6DFUkCwQLa8", "libSceFont", 1, "libSceFont", sceFontCharacterGetBidiLevel);
|
|
LIB_FUNCTION("coCrV6IWplE", "libSceFont", 1, "libSceFont",
|
|
sceFontCharacterGetSyllableStringState);
|
|
LIB_FUNCTION("zN3+nuA0SFQ", "libSceFont", 1, "libSceFont", sceFontCharacterGetTextFontCode);
|
|
LIB_FUNCTION("mxgmMj-Mq-o", "libSceFont", 1, "libSceFont", sceFontCharacterGetTextOrder);
|
|
LIB_FUNCTION("-P6X35Rq2-E", "libSceFont", 1, "libSceFont",
|
|
sceFontCharacterLooksFormatCharacters);
|
|
LIB_FUNCTION("SaRlqtqaCew", "libSceFont", 1, "libSceFont", sceFontCharacterLooksWhiteSpace);
|
|
LIB_FUNCTION("6Gqlv5KdTbU", "libSceFont", 1, "libSceFont", sceFontCharacterRefersTextBack);
|
|
LIB_FUNCTION("BkjBP+YC19w", "libSceFont", 1, "libSceFont", sceFontCharacterRefersTextNext);
|
|
LIB_FUNCTION("lVSR5ftvNag", "libSceFont", 1, "libSceFont", sceFontCharactersRefersTextCodes);
|
|
LIB_FUNCTION("I9R5VC6eZWo", "libSceFont", 1, "libSceFont", sceFontClearDeviceCache);
|
|
LIB_FUNCTION("vzHs3C8lWJk", "libSceFont", 1, "libSceFont", sceFontCloseFont);
|
|
LIB_FUNCTION("MpKSBaYKluo", "libSceFont", 1, "libSceFont", sceFontControl);
|
|
LIB_FUNCTION("WBNBaj9XiJU", "libSceFont", 1, "libSceFont", sceFontCreateGraphicsDevice);
|
|
LIB_FUNCTION("4So0MC3oBIM", "libSceFont", 1, "libSceFont", sceFontCreateGraphicsService);
|
|
LIB_FUNCTION("NlO5Qlhjkng", "libSceFont", 1, "libSceFont",
|
|
sceFontCreateGraphicsServiceWithEdition);
|
|
LIB_FUNCTION("nWrfPI4Okmg", "libSceFont", 1, "libSceFont", sceFontCreateLibrary);
|
|
LIB_FUNCTION("n590hj5Oe-k", "libSceFont", 1, "libSceFont", sceFontCreateLibraryWithEdition);
|
|
LIB_FUNCTION("u5fZd3KZcs0", "libSceFont", 1, "libSceFont", sceFontCreateRenderer);
|
|
LIB_FUNCTION("WaSFJoRWXaI", "libSceFont", 1, "libSceFont", sceFontCreateRendererWithEdition);
|
|
LIB_FUNCTION("MO24vDhmS4E", "libSceFont", 1, "libSceFont", sceFontCreateString);
|
|
LIB_FUNCTION("cYrMGk1wrMA", "libSceFont", 1, "libSceFont", sceFontCreateWords);
|
|
LIB_FUNCTION("7rogx92EEyc", "libSceFont", 1, "libSceFont", sceFontCreateWritingLine);
|
|
LIB_FUNCTION("8h-SOB-asgk", "libSceFont", 1, "libSceFont", sceFontDefineAttribute);
|
|
LIB_FUNCTION("LHDoRWVFGqk", "libSceFont", 1, "libSceFont", sceFontDeleteGlyph);
|
|
LIB_FUNCTION("5QG71IjgOpQ", "libSceFont", 1, "libSceFont", sceFontDestroyGraphicsDevice);
|
|
LIB_FUNCTION("zZQD3EwJo3c", "libSceFont", 1, "libSceFont", sceFontDestroyGraphicsService);
|
|
LIB_FUNCTION("FXP359ygujs", "libSceFont", 1, "libSceFont", sceFontDestroyLibrary);
|
|
LIB_FUNCTION("exAxkyVLt0s", "libSceFont", 1, "libSceFont", sceFontDestroyRenderer);
|
|
LIB_FUNCTION("SSCaczu2aMQ", "libSceFont", 1, "libSceFont", sceFontDestroyString);
|
|
LIB_FUNCTION("hWE4AwNixqY", "libSceFont", 1, "libSceFont", sceFontDestroyWords);
|
|
LIB_FUNCTION("PEjv7CVDRYs", "libSceFont", 1, "libSceFont", sceFontDestroyWritingLine);
|
|
LIB_FUNCTION("UuY-OJF+f0k", "libSceFont", 1, "libSceFont", sceFontDettachDeviceCacheBuffer);
|
|
LIB_FUNCTION("C-4Qw5Srlyw", "libSceFont", 1, "libSceFont", sceFontGenerateCharGlyph);
|
|
LIB_FUNCTION("5kx49CAlO-M", "libSceFont", 1, "libSceFont", sceFontGetAttribute);
|
|
LIB_FUNCTION("OINC0X9HGBY", "libSceFont", 1, "libSceFont", sceFontGetCharGlyphCode);
|
|
LIB_FUNCTION("L97d+3OgMlE", "libSceFont", 1, "libSceFont", sceFontGetCharGlyphMetrics);
|
|
LIB_FUNCTION("ynSqYL8VpoA", "libSceFont", 1, "libSceFont", sceFontGetEffectSlant);
|
|
LIB_FUNCTION("d7dDgRY+Bzw", "libSceFont", 1, "libSceFont", sceFontGetEffectWeight);
|
|
LIB_FUNCTION("ZB8xRemRRG8", "libSceFont", 1, "libSceFont", sceFontGetFontGlyphsCount);
|
|
LIB_FUNCTION("4X14YSK4Ldk", "libSceFont", 1, "libSceFont", sceFontGetFontGlyphsOutlineProfile);
|
|
LIB_FUNCTION("eb9S3zNlV5o", "libSceFont", 1, "libSceFont", sceFontGetFontMetrics);
|
|
LIB_FUNCTION("tiIlroGki+g", "libSceFont", 1, "libSceFont", sceFontGetFontResolution);
|
|
LIB_FUNCTION("3hVv3SNoL6E", "libSceFont", 1, "libSceFont", sceFontGetFontStyleInformation);
|
|
LIB_FUNCTION("gVQpMBuB7fE", "libSceFont", 1, "libSceFont", sceFontGetGlyphExpandBufferState);
|
|
LIB_FUNCTION("imxVx8lm+KM", "libSceFont", 1, "libSceFont", sceFontGetHorizontalLayout);
|
|
LIB_FUNCTION("sDuhHGNhHvE", "libSceFont", 1, "libSceFont", sceFontGetKerning);
|
|
LIB_FUNCTION("LzmHDnlcwfQ", "libSceFont", 1, "libSceFont", sceFontGetLibrary);
|
|
LIB_FUNCTION("BozJej5T6fs", "libSceFont", 1, "libSceFont", sceFontGetPixelResolution);
|
|
LIB_FUNCTION("IQtleGLL5pQ", "libSceFont", 1, "libSceFont", sceFontGetRenderCharGlyphMetrics);
|
|
LIB_FUNCTION("Gqa5Pp7y4MU", "libSceFont", 1, "libSceFont", sceFontGetRenderEffectSlant);
|
|
LIB_FUNCTION("woOjHrkjIYg", "libSceFont", 1, "libSceFont", sceFontGetRenderEffectWeight);
|
|
LIB_FUNCTION("ryPlnDDI3rU", "libSceFont", 1, "libSceFont", sceFontGetRenderScaledKerning);
|
|
LIB_FUNCTION("EY38A01lq2k", "libSceFont", 1, "libSceFont", sceFontGetRenderScalePixel);
|
|
LIB_FUNCTION("FEafYUcxEGo", "libSceFont", 1, "libSceFont", sceFontGetRenderScalePoint);
|
|
LIB_FUNCTION("8REoLjNGCpM", "libSceFont", 1, "libSceFont", sceFontGetResolutionDpi);
|
|
LIB_FUNCTION("CkVmLoCNN-8", "libSceFont", 1, "libSceFont", sceFontGetScalePixel);
|
|
LIB_FUNCTION("GoF2bhB7LYk", "libSceFont", 1, "libSceFont", sceFontGetScalePoint);
|
|
LIB_FUNCTION("IrXeG0Lc6nA", "libSceFont", 1, "libSceFont", sceFontGetScriptLanguage);
|
|
LIB_FUNCTION("7-miUT6pNQw", "libSceFont", 1, "libSceFont", sceFontGetTypographicDesign);
|
|
LIB_FUNCTION("3BrWWFU+4ts", "libSceFont", 1, "libSceFont", sceFontGetVerticalLayout);
|
|
LIB_FUNCTION("8-zmgsxkBek", "libSceFont", 1, "libSceFont", sceFontGlyphDefineAttribute);
|
|
LIB_FUNCTION("oO33Uex4Ui0", "libSceFont", 1, "libSceFont", sceFontGlyphGetAttribute);
|
|
LIB_FUNCTION("PXlA0M8ax40", "libSceFont", 1, "libSceFont", sceFontGlyphGetGlyphForm);
|
|
LIB_FUNCTION("XUfSWpLhrUw", "libSceFont", 1, "libSceFont", sceFontGlyphGetMetricsForm);
|
|
LIB_FUNCTION("lNnUqa1zA-M", "libSceFont", 1, "libSceFont", sceFontGlyphGetScalePixel);
|
|
LIB_FUNCTION("ntrc3bEWlvQ", "libSceFont", 1, "libSceFont", sceFontGlyphRefersMetrics);
|
|
LIB_FUNCTION("9kTbF59TjLs", "libSceFont", 1, "libSceFont", sceFontGlyphRefersMetricsHorizontal);
|
|
LIB_FUNCTION("nJavPEdMDvM", "libSceFont", 1, "libSceFont",
|
|
sceFontGlyphRefersMetricsHorizontalAdvance);
|
|
LIB_FUNCTION("JCnVgZgcucs", "libSceFont", 1, "libSceFont",
|
|
sceFontGlyphRefersMetricsHorizontalX);
|
|
LIB_FUNCTION("R1T4i+DOhNY", "libSceFont", 1, "libSceFont", sceFontGlyphRefersOutline);
|
|
LIB_FUNCTION("RmkXfBcZnrM", "libSceFont", 1, "libSceFont", sceFontGlyphRenderImage);
|
|
LIB_FUNCTION("r4KEihtwxGs", "libSceFont", 1, "libSceFont", sceFontGlyphRenderImageHorizontal);
|
|
LIB_FUNCTION("n22d-HIdmMg", "libSceFont", 1, "libSceFont", sceFontGlyphRenderImageVertical);
|
|
LIB_FUNCTION("RL2cAQgyXR8", "libSceFont", 1, "libSceFont", sceFontGraphicsBeginFrame);
|
|
LIB_FUNCTION("dUmIK6QjT7E", "libSceFont", 1, "libSceFont", sceFontGraphicsDrawingCancel);
|
|
LIB_FUNCTION("X2Vl3yU19Zw", "libSceFont", 1, "libSceFont", sceFontGraphicsDrawingFinish);
|
|
LIB_FUNCTION("DOmdOwV3Aqw", "libSceFont", 1, "libSceFont", sceFontGraphicsEndFrame);
|
|
LIB_FUNCTION("zdYdKRQC3rw", "libSceFont", 1, "libSceFont", sceFontGraphicsExchangeResource);
|
|
LIB_FUNCTION("UkMUIoj-e9s", "libSceFont", 1, "libSceFont", sceFontGraphicsFillMethodInit);
|
|
LIB_FUNCTION("DJURdcnVUqo", "libSceFont", 1, "libSceFont", sceFontGraphicsFillPlotInit);
|
|
LIB_FUNCTION("eQac6ftmBQQ", "libSceFont", 1, "libSceFont", sceFontGraphicsFillPlotSetLayout);
|
|
LIB_FUNCTION("PEYQJa+MWnk", "libSceFont", 1, "libSceFont", sceFontGraphicsFillPlotSetMapping);
|
|
LIB_FUNCTION("21g4m4kYF6g", "libSceFont", 1, "libSceFont", sceFontGraphicsFillRatesInit);
|
|
LIB_FUNCTION("pJzji5FvdxU", "libSceFont", 1, "libSceFont",
|
|
sceFontGraphicsFillRatesSetFillEffect);
|
|
LIB_FUNCTION("scaro-xEuUM", "libSceFont", 1, "libSceFont", sceFontGraphicsFillRatesSetLayout);
|
|
LIB_FUNCTION("W66Kqtt0xU0", "libSceFont", 1, "libSceFont", sceFontGraphicsFillRatesSetMapping);
|
|
LIB_FUNCTION("FzpLsBQEegQ", "libSceFont", 1, "libSceFont", sceFontGraphicsGetDeviceUsage);
|
|
LIB_FUNCTION("W80hs0g5d+E", "libSceFont", 1, "libSceFont", sceFontGraphicsRegionInit);
|
|
LIB_FUNCTION("S48+njg9p-o", "libSceFont", 1, "libSceFont", sceFontGraphicsRegionInitCircular);
|
|
LIB_FUNCTION("wcOQ8Fz73+M", "libSceFont", 1, "libSceFont", sceFontGraphicsRegionInitRoundish);
|
|
LIB_FUNCTION("YBaw2Yyfd5E", "libSceFont", 1, "libSceFont", sceFontGraphicsRelease);
|
|
LIB_FUNCTION("qkySrQ4FGe0", "libSceFont", 1, "libSceFont", sceFontGraphicsRenderResource);
|
|
LIB_FUNCTION("qzNjJYKVli0", "libSceFont", 1, "libSceFont", sceFontGraphicsSetFramePolicy);
|
|
LIB_FUNCTION("9iRbHCtcx-o", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupClipping);
|
|
LIB_FUNCTION("KZ3qPyz5Opc", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupColorRates);
|
|
LIB_FUNCTION("LqclbpVzRvM", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupFillMethod);
|
|
LIB_FUNCTION("Wl4FiI4qKY0", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupFillRates);
|
|
LIB_FUNCTION("WC7s95TccVo", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupGlyphFill);
|
|
LIB_FUNCTION("zC6I4ty37NA", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupGlyphFillPlot);
|
|
LIB_FUNCTION("drZUF0XKTEI", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupHandleDefault);
|
|
LIB_FUNCTION("MEAmHMynQXE", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupLocation);
|
|
LIB_FUNCTION("XRUOmQhnYO4", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupPositioning);
|
|
LIB_FUNCTION("98XGr2Bkklg", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupRotation);
|
|
LIB_FUNCTION("Nj-ZUVOVAvc", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupScaling);
|
|
LIB_FUNCTION("p0avT2ggev0", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupShapeFill);
|
|
LIB_FUNCTION("0C5aKg9KghY", "libSceFont", 1, "libSceFont", sceFontGraphicsSetupShapeFillPlot);
|
|
LIB_FUNCTION("4pA3qqAcYco", "libSceFont", 1, "libSceFont", sceFontGraphicsStructureCanvas);
|
|
LIB_FUNCTION("cpjgdlMYdOM", "libSceFont", 1, "libSceFont",
|
|
sceFontGraphicsStructureCanvasSequence);
|
|
LIB_FUNCTION("774Mee21wKk", "libSceFont", 1, "libSceFont", sceFontGraphicsStructureDesign);
|
|
LIB_FUNCTION("Hp3NIFhUXvQ", "libSceFont", 1, "libSceFont",
|
|
sceFontGraphicsStructureDesignResource);
|
|
LIB_FUNCTION("bhmZlml6NBs", "libSceFont", 1, "libSceFont",
|
|
sceFontGraphicsStructureSurfaceTexture);
|
|
LIB_FUNCTION("5sAWgysOBfE", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateClipping);
|
|
LIB_FUNCTION("W4e8obm+w6o", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateColorRates);
|
|
LIB_FUNCTION("EgIn3QBajPs", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateFillMethod);
|
|
LIB_FUNCTION("MnUYAs2jVuU", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateFillRates);
|
|
LIB_FUNCTION("R-oVDMusYbc", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateGlyphFill);
|
|
LIB_FUNCTION("b9R+HQuHSMI", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateGlyphFillPlot);
|
|
LIB_FUNCTION("IN4P5pJADQY", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateLocation);
|
|
LIB_FUNCTION("U+LLXdr2DxM", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdatePositioning);
|
|
LIB_FUNCTION("yStTYSeb4NM", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateRotation);
|
|
LIB_FUNCTION("eDxmMoxE5xU", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateScaling);
|
|
LIB_FUNCTION("Ax6LQJJq6HQ", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateShapeFill);
|
|
LIB_FUNCTION("I5Rf2rXvBKQ", "libSceFont", 1, "libSceFont", sceFontGraphicsUpdateShapeFillPlot);
|
|
LIB_FUNCTION("whrS4oksXc4", "libSceFont", 1, "libSceFont", sceFontMemoryInit);
|
|
LIB_FUNCTION("h6hIgxXEiEc", "libSceFont", 1, "libSceFont", sceFontMemoryTerm);
|
|
LIB_FUNCTION("RvXyHMUiLhE", "libSceFont", 1, "libSceFont", sceFontOpenFontFile);
|
|
LIB_FUNCTION("JzCH3SCFnAU", "libSceFont", 1, "libSceFont", sceFontOpenFontInstance);
|
|
LIB_FUNCTION("KXUpebrFk1U", "libSceFont", 1, "libSceFont", sceFontOpenFontMemory);
|
|
LIB_FUNCTION("cKYtVmeSTcw", "libSceFont", 1, "libSceFont", sceFontOpenFontSet);
|
|
LIB_FUNCTION("Z2cdsqJH+5k", "libSceFont", 1, "libSceFont", sceFontRebindRenderer);
|
|
LIB_FUNCTION("3G4zhgKuxE8", "libSceFont", 1, "libSceFont", sceFontRenderCharGlyphImage);
|
|
LIB_FUNCTION("kAenWy1Zw5o", "libSceFont", 1, "libSceFont",
|
|
sceFontRenderCharGlyphImageHorizontal);
|
|
LIB_FUNCTION("i6UNdSig1uE", "libSceFont", 1, "libSceFont", sceFontRenderCharGlyphImageVertical);
|
|
LIB_FUNCTION("amcmrY62BD4", "libSceFont", 1, "libSceFont", sceFontRendererGetOutlineBufferSize);
|
|
LIB_FUNCTION("ai6AfGrBs4o", "libSceFont", 1, "libSceFont", sceFontRendererResetOutlineBuffer);
|
|
LIB_FUNCTION("ydF+WuH0fAk", "libSceFont", 1, "libSceFont",
|
|
sceFontRendererSetOutlineBufferPolicy);
|
|
LIB_FUNCTION("gdUCnU0gHdI", "libSceFont", 1, "libSceFont", sceFontRenderSurfaceInit);
|
|
LIB_FUNCTION("vRxf4d0ulPs", "libSceFont", 1, "libSceFont", sceFontRenderSurfaceSetScissor);
|
|
LIB_FUNCTION("0hr-w30SjiI", "libSceFont", 1, "libSceFont", sceFontRenderSurfaceSetStyleFrame);
|
|
LIB_FUNCTION("TMtqoFQjjbA", "libSceFont", 1, "libSceFont", sceFontSetEffectSlant);
|
|
LIB_FUNCTION("v0phZwa4R5o", "libSceFont", 1, "libSceFont", sceFontSetEffectWeight);
|
|
LIB_FUNCTION("kihFGYJee7o", "libSceFont", 1, "libSceFont", sceFontSetFontsOpenMode);
|
|
LIB_FUNCTION("I1acwR7Qp8E", "libSceFont", 1, "libSceFont", sceFontSetResolutionDpi);
|
|
LIB_FUNCTION("N1EBMeGhf7E", "libSceFont", 1, "libSceFont", sceFontSetScalePixel);
|
|
LIB_FUNCTION("sw65+7wXCKE", "libSceFont", 1, "libSceFont", sceFontSetScalePoint);
|
|
LIB_FUNCTION("PxSR9UfJ+SQ", "libSceFont", 1, "libSceFont", sceFontSetScriptLanguage);
|
|
LIB_FUNCTION("SnsZua35ngs", "libSceFont", 1, "libSceFont", sceFontSetTypographicDesign);
|
|
LIB_FUNCTION("lz9y9UFO2UU", "libSceFont", 1, "libSceFont", sceFontSetupRenderEffectSlant);
|
|
LIB_FUNCTION("XIGorvLusDQ", "libSceFont", 1, "libSceFont", sceFontSetupRenderEffectWeight);
|
|
LIB_FUNCTION("6vGCkkQJOcI", "libSceFont", 1, "libSceFont", sceFontSetupRenderScalePixel);
|
|
LIB_FUNCTION("nMZid4oDfi4", "libSceFont", 1, "libSceFont", sceFontSetupRenderScalePoint);
|
|
LIB_FUNCTION("ObkDGDBsVtw", "libSceFont", 1, "libSceFont", sceFontStringGetTerminateCode);
|
|
LIB_FUNCTION("+B-xlbiWDJ4", "libSceFont", 1, "libSceFont", sceFontStringGetTerminateOrder);
|
|
LIB_FUNCTION("o1vIEHeb6tw", "libSceFont", 1, "libSceFont", sceFontStringGetWritingForm);
|
|
LIB_FUNCTION("hq5LffQjz-s", "libSceFont", 1, "libSceFont", sceFontStringRefersRenderCharacters);
|
|
LIB_FUNCTION("Avv7OApgCJk", "libSceFont", 1, "libSceFont", sceFontStringRefersTextCharacters);
|
|
LIB_FUNCTION("lOfduYnjgbo", "libSceFont", 1, "libSceFont", sceFontStyleFrameGetEffectSlant);
|
|
LIB_FUNCTION("HIUdjR-+Wl8", "libSceFont", 1, "libSceFont", sceFontStyleFrameGetEffectWeight);
|
|
LIB_FUNCTION("VSw18Aqzl0U", "libSceFont", 1, "libSceFont", sceFontStyleFrameGetResolutionDpi);
|
|
LIB_FUNCTION("2QfqfeLblbg", "libSceFont", 1, "libSceFont", sceFontStyleFrameGetScalePixel);
|
|
LIB_FUNCTION("7x2xKiiB7MA", "libSceFont", 1, "libSceFont", sceFontStyleFrameGetScalePoint);
|
|
LIB_FUNCTION("la2AOWnHEAc", "libSceFont", 1, "libSceFont", sceFontStyleFrameInit);
|
|
LIB_FUNCTION("394sckksiCU", "libSceFont", 1, "libSceFont", sceFontStyleFrameSetEffectSlant);
|
|
LIB_FUNCTION("faw77-pEBmU", "libSceFont", 1, "libSceFont", sceFontStyleFrameSetEffectWeight);
|
|
LIB_FUNCTION("dB4-3Wdwls8", "libSceFont", 1, "libSceFont", sceFontStyleFrameSetResolutionDpi);
|
|
LIB_FUNCTION("da4rQ4-+p-4", "libSceFont", 1, "libSceFont", sceFontStyleFrameSetScalePixel);
|
|
LIB_FUNCTION("O997laxY-Ys", "libSceFont", 1, "libSceFont", sceFontStyleFrameSetScalePoint);
|
|
LIB_FUNCTION("dUmABkAnVgk", "libSceFont", 1, "libSceFont", sceFontStyleFrameUnsetEffectSlant);
|
|
LIB_FUNCTION("hwsuXgmKdaw", "libSceFont", 1, "libSceFont", sceFontStyleFrameUnsetEffectWeight);
|
|
LIB_FUNCTION("bePC0L0vQWY", "libSceFont", 1, "libSceFont", sceFontStyleFrameUnsetScale);
|
|
LIB_FUNCTION("mz2iTY0MK4A", "libSceFont", 1, "libSceFont", sceFontSupportExternalFonts);
|
|
LIB_FUNCTION("71w5DzObuZI", "libSceFont", 1, "libSceFont", sceFontSupportGlyphs);
|
|
LIB_FUNCTION("SsRbbCiWoGw", "libSceFont", 1, "libSceFont", sceFontSupportSystemFonts);
|
|
LIB_FUNCTION("IPoYwwlMx-g", "libSceFont", 1, "libSceFont", sceFontTextCodesStepBack);
|
|
LIB_FUNCTION("olSmXY+XP1E", "libSceFont", 1, "libSceFont", sceFontTextCodesStepNext);
|
|
LIB_FUNCTION("oaJ1BpN2FQk", "libSceFont", 1, "libSceFont", sceFontTextSourceInit);
|
|
LIB_FUNCTION("VRFd3diReec", "libSceFont", 1, "libSceFont", sceFontTextSourceRewind);
|
|
LIB_FUNCTION("eCRMCSk96NU", "libSceFont", 1, "libSceFont", sceFontTextSourceSetDefaultFont);
|
|
LIB_FUNCTION("OqQKX0h5COw", "libSceFont", 1, "libSceFont", sceFontTextSourceSetWritingForm);
|
|
LIB_FUNCTION("1QjhKxrsOB8", "libSceFont", 1, "libSceFont", sceFontUnbindRenderer);
|
|
LIB_FUNCTION("H-FNq8isKE0", "libSceFont", 1, "libSceFont", sceFontWordsFindWordCharacters);
|
|
LIB_FUNCTION("fljdejMcG1c", "libSceFont", 1, "libSceFont", sceFontWritingGetRenderMetrics);
|
|
LIB_FUNCTION("fD5rqhEXKYQ", "libSceFont", 1, "libSceFont", sceFontWritingInit);
|
|
LIB_FUNCTION("1+DgKL0haWQ", "libSceFont", 1, "libSceFont", sceFontWritingLineClear);
|
|
LIB_FUNCTION("JQKWIsS9joE", "libSceFont", 1, "libSceFont", sceFontWritingLineGetOrderingSpace);
|
|
LIB_FUNCTION("nlU2VnfpqTM", "libSceFont", 1, "libSceFont", sceFontWritingLineGetRenderMetrics);
|
|
LIB_FUNCTION("+FYcYefsVX0", "libSceFont", 1, "libSceFont", sceFontWritingLineRefersRenderStep);
|
|
LIB_FUNCTION("wyKFUOWdu3Q", "libSceFont", 1, "libSceFont", sceFontWritingLineWritesOrder);
|
|
LIB_FUNCTION("W-2WOXEHGck", "libSceFont", 1, "libSceFont", sceFontWritingRefersRenderStep);
|
|
LIB_FUNCTION("f4Onl7efPEY", "libSceFont", 1, "libSceFont",
|
|
sceFontWritingRefersRenderStepCharacter);
|
|
LIB_FUNCTION("BbCZjJizU4A", "libSceFont", 1, "libSceFont", sceFontWritingSetMaskInvisible);
|
|
LIB_FUNCTION("APTXePHIjLM", "libSceFont", 1, "libSceFont", Func_00F4D778F1C88CB3);
|
|
LIB_FUNCTION("A8ZQAl+7Dec", "libSceFont", 1, "libSceFont", Func_03C650025FBB0DE7);
|
|
LIB_FUNCTION("B+q4oWOyfho", "libSceFont", 1, "libSceFont", Func_07EAB8A163B27E1A);
|
|
LIB_FUNCTION("CUCOiOT5fOM", "libSceFont", 1, "libSceFont", Func_09408E88E4F97CE3);
|
|
LIB_FUNCTION("CfkpBe2CqBQ", "libSceFont", 1, "libSceFont", Func_09F92905ED82A814);
|
|
LIB_FUNCTION("DRQs7hqyGr4", "libSceFont", 1, "libSceFont", Func_0D142CEE1AB21ABE);
|
|
LIB_FUNCTION("FL0unhGcFvI", "libSceFont", 1, "libSceFont", Func_14BD2E9E119C16F2);
|
|
LIB_FUNCTION("GsU8nt6ujXU", "libSceFont", 1, "libSceFont", Func_1AC53C9EDEAE8D75);
|
|
LIB_FUNCTION("HUARhdXiTD0", "libSceFont", 1, "libSceFont", Func_1D401185D5E24C3D);
|
|
LIB_FUNCTION("HoPNIMLMmW8", "libSceFont", 1, "libSceFont", Func_1E83CD20C2CC996F);
|
|
LIB_FUNCTION("MUsfdluf54o", "libSceFont", 1, "libSceFont", Func_314B1F765B9FE78A);
|
|
LIB_FUNCTION("NQ5nJf7eKeE", "libSceFont", 1, "libSceFont", Func_350E6725FEDE29E1);
|
|
LIB_FUNCTION("Pbdz8KYEvzk", "libSceFont", 1, "libSceFont", Func_3DB773F0A604BF39);
|
|
LIB_FUNCTION("T-Sd0h4xGxw", "libSceFont", 1, "libSceFont", Func_4FF49DD21E311B1C);
|
|
LIB_FUNCTION("UmKHZkpJOYE", "libSceFont", 1, "libSceFont", Func_526287664A493981);
|
|
LIB_FUNCTION("VcpxjbyEpuk", "libSceFont", 1, "libSceFont", Func_55CA718DBC84A6E9);
|
|
LIB_FUNCTION("Vj-F8HBqi00", "libSceFont", 1, "libSceFont", Func_563FC5F0706A8B4D);
|
|
LIB_FUNCTION("Vp4uzTQpD0U", "libSceFont", 1, "libSceFont", Func_569E2ECD34290F45);
|
|
LIB_FUNCTION("WgR3W2vkdoU", "libSceFont", 1, "libSceFont", Func_5A04775B6BE47685);
|
|
LIB_FUNCTION("X9k7yrb3l1A", "libSceFont", 1, "libSceFont", Func_5FD93BCAB6F79750);
|
|
LIB_FUNCTION("YrU5j4ZL07Q", "libSceFont", 1, "libSceFont", Func_62B5398F864BD3B4);
|
|
LIB_FUNCTION("b5AQKU2CI2c", "libSceFont", 1, "libSceFont", Func_6F9010294D822367);
|
|
LIB_FUNCTION("d1fpR0I6emc", "libSceFont", 1, "libSceFont", Func_7757E947423A7A67);
|
|
LIB_FUNCTION("fga6Ugd-VPo", "libSceFont", 1, "libSceFont", Func_7E06BA52077F54FA);
|
|
LIB_FUNCTION("k7Nt6gITEdY", "libSceFont", 1, "libSceFont", Func_93B36DEA021311D6);
|
|
LIB_FUNCTION("lLCJHnERWYo", "libSceFont", 1, "libSceFont", Func_94B0891E7111598A);
|
|
LIB_FUNCTION("l4XJEowv580", "libSceFont", 1, "libSceFont", Func_9785C9128C2FE7CD);
|
|
LIB_FUNCTION("l9+8m2X7wOE", "libSceFont", 1, "libSceFont", Func_97DFBC9B65FBC0E1);
|
|
LIB_FUNCTION("rNlxdAXX08o", "libSceFont", 1, "libSceFont", Func_ACD9717405D7D3CA);
|
|
LIB_FUNCTION("sZqK7D-U8W8", "libSceFont", 1, "libSceFont", Func_B19A8AEC3FD4F16F);
|
|
LIB_FUNCTION("wQ9IitfPED0", "libSceFont", 1, "libSceFont", Func_C10F488AD7CF103D);
|
|
LIB_FUNCTION("0Mi1-0poJsc", "libSceFont", 1, "libSceFont", Func_D0C8B5FF4A6826C7);
|
|
LIB_FUNCTION("5I080Bw0KjM", "libSceFont", 1, "libSceFont", Func_E48D3CD01C342A33);
|
|
LIB_FUNCTION("6slrIYa3HhQ", "libSceFont", 1, "libSceFont", Func_EAC96B2186B71E14);
|
|
LIB_FUNCTION("-keIqW70YlY", "libSceFont", 1, "libSceFont", Func_FE4788A96EF46256);
|
|
LIB_FUNCTION("-n5a6V0wWPU", "libSceFont", 1, "libSceFont", Func_FE7E5AE95D3058F5);
|
|
};
|
|
|
|
} // namespace Libraries::Font
|