到目前为止,我使用纹理(位图字体)进行字体渲染,但我正在尝试让 freetype2 工作。我所有的字符串都是 SHIFT_JIS 编码的,我现在唯一的问题是从 freetype 获得正确的字形到正确的 SHIFT_JIS 位序列。但这似乎比我预期的要难。例如,“亜”的字符代码为“0x889F”(字节 1 设置为 136,字节 2 设置为 159) - 这是根据 SHIFT_JIS 编码的。所以我调用了这个函数:
FT_Select_Charmap(face, FT_ENCODING_SJIS);
然后尝试使用该字符码加载字形:
FT_Load_Char(face, 0x889F, FT_LOAD_RENDER );
但我收到一些随机字形。这不可能是特定于字体的问题,因为我已经尝试了具有相同结果的不同字体(是的,它们提供了 shift-jis Charmap)。例如,“0”(零)应该在位置 0x0030 - 但实际上它在 0x002D。并非所有字符的恒定偏移量都为 3,否则不会有问题......我认为我的“FT_Load_Char”调用以错误的方式传递了 charcode 参数 - 但无法猜测它是如何正确的。已经尝试过:
FT_Load_Char(face, FT_Get_Char_Index(face, 0x889F), FT_LOAD_RENDER );
但随后我收到另一个随机字形。那么,如果没有选择默认的charmap,我如何将charcode传递给FT_Load_Char?
任何建议都会非常有帮助。谢谢你。