XRF 是 XGE 预光栅化字体格式,加载快、无需运行时渲染,适合固定字符集场景。
| 函数 | 说明 |
|---|---|
int xgeFontLoadXRF(xge_font pFont, const char* sPath) | 加载 XRF 文件 |
int xgeFontLoadXRFMemory(xge_font pFont, const void* pData, int iSize) | 从内存加载 XRF |
int xgeFontSaveXRF(xge_font pFont, const char* sPath, uint32_t iFirstCodepoint, uint32_t iCount) | 导出 XRF 文件 |
int xgeFontBuildXRFMemory(xge_font pFont, uint32_t iFirstCodepoint, uint32_t iCount, void** ppData, int* pSize) | 构建内存 XRF |
gcc -O2 -I. -o ch82.exe ch82_main.c build\xge.lib -lm -lws2_32 -liphlpapi -lgdi32 -luser32 -lshell32 -lopengl32 -lole32 -lwinmm -lavrt
.\ch82.exe
// 步骤 1:从 TTF 生成 XRF(离线工具或启动时)
xge_font srcFont = NULL;
xgeFontLoad(&srcFont, "fonts/NotoSansSC.ttf", 24.0f);
// 导出 ASCII + 常用汉字(U+4E00 起 3000 个)
xgeFontSaveXRF(srcFont, "fonts/NotoSans24.xrf",
0x20, 95); // ASCII 可打印字符
xgeFontFree(srcFont);
// 步骤 2:运行时加载 XRF(极快)
xge_font font = NULL;
xgeFontLoadXRF(&font, "fonts/NotoSans24.xrf");
// 步骤 3:构建内存 XRF(嵌入资源)
void* xrfData;
int xrfSize;
xgeFontBuildXRFMemory(srcFont, 0x20, 95,
&xrfData, &xrfSize);
// xrfData 可写入文件或嵌入代码将以下代码保存为 ch82_main.c,编译后运行即可看到 XRF 生成与加载效果:
#include "xge.h"
static xge_font g_font = NULL;
static int onFrame(void* pUser) {
(void)pUser;
xgeClear(0x081114FF);
xgeTextDraw(g_font, "XRF Fast Load!", 100, 250, 0xFFB454FF)
xgeTextDraw(g_font, "No runtime rasterize", 100, 320, 0x4FD8C2FF)
return XGE_OK;
}
int main(void) {
xge_desc_t d = {0};
d.iWidth = 800;
d.iHeight = 600;
d.sTitle = "ch82 - XRF Font";
d.iFlags = XGE_INIT_VSYNC;
xgeInit(&d);
// 步骤 1:从 TTF 生成 XRF(仅首次)
xge_font src = NULL;
xgeFontLoad(&src, "fonts/NotoSansSC.ttf", 24.0f);
xgeFontSaveXRF(src, "fonts/NotoSans24.xrf", 0x20, 95);
xgeFontFree(src);
// 步骤 2:加载 XRF(极快)
xgeFontLoadXRF(&g_font, "fonts/NotoSans24.xrf");
xgeRun(onFrame, NULL);
xgeFontFree(g_font);
xgeUnit();
return 0;
}