当主字体缺少某个字符时,自动从 Fallback 字体中查找,实现多语言混排。
| 函数 | 说明 |
|---|---|
void xgeFontSetFallback(xge_font pFont, xge_font pFallback) | 设置 Fallback 字体 |
int xgeFontFallbackSet(const char* sPath, float fSize) | 设置全局 Fallback |
int xgeFontFallbackSetMemory(const void* pData, int iSize, float fSize) | 内存设置全局 Fallback |
int xgeFontFallbackGet(xge_font pFont, float fSize) | 获取 Fallback 字体 |
void xgeFontFallbackClear(void) | 清除全局 Fallback |
gcc -O2 -I. -o ch85.exe ch85_main.c build\xge.lib -lm -lws2_32 -liphlpapi -lgdi32 -luser32 -lshell32 -lopengl32 -lole32 -lwinmm -lavrt
.\ch85.exe
// 主字体:英文
xge_font enFont = NULL;
xgeFontLoad(&enFont, "Roboto.ttf", 20.0f);
// Fallback:中文
xge_font cnFont = NULL;
xgeFontLoad(&cnFont, "NotoSansSC.ttf", 20.0f);
// 链接 Fallback
xgeFontSetFallback(enFont, cnFont);
// 绘制中英文混排(自动切换字体)
xgeTextDraw(enFont, "Hello 世界!", 100, 100, 0xFFFFFFFF);
// "Hello " 用 Roboto,"世界" 用 NotoSansSC
// 全局 Fallback(所有字体共享)
xgeFontFallbackSet("NotoSansSC.ttf", 20.0f);
// 清除
xgeFontFallbackClear();将以下代码保存为 ch85_main.c,编译后运行即可看到中英文 Fallback 混排效果:
#include "xge.h"
static xge_font g_en = NULL;
static xge_font g_cn = NULL;
static int onFrame(void* pUser) {
(void)pUser;
xgeClear(0x081114FF);
xgeTextDraw(g_en, "Hello 世界! XGE 引擎", 100, 200, 0xFFFFFFFF)
xgeTextDraw(g_en, "Fallback: EN→CN 自动切换", 100, 280, 0x4FD8C2FF)
return XGE_OK;
}
int main(void) {
xge_desc_t d = {0};
d.iWidth = 800;
d.iHeight = 600;
d.sTitle = "ch85 - Font Fallback";
d.iFlags = XGE_INIT_VSYNC;
xgeInit(&d);
xgeFontLoad(&g_en, "fonts/Roboto.ttf", 28.0f);
xgeFontLoad(&g_cn, "fonts/NotoSansSC.ttf", 28.0f);
xgeFontSetFallback(g_en, g_cn);
xgeRun(onFrame, NULL);
xgeFontFree(g_en);
xgeFontFree(g_cn);
xgeUnit();
return 0;
}