使用this tutorial,我设置了最新版本的FreeType以与OpenGL一起使用。唯一的问题-FT_Get_Glyph
始终返回错误18。
更具体地说,这就是我要做的:
C:/Windows/Fonts/
中的字体调用初始化函数该函数成功设置了FT_Face
(没有错误),可以设置显示列表了。
FT_Library library;
if (FT_Init_FreeType(&library))
{
std::cout << "FT_Init_FreeType noobed";
throw std::runtime_error("FT_Init_FreeType noobed");
}
FT_Face face;
if (FT_New_Face(library, fontname, 0, &face))
{
std::cout << "FT_New_Face noobed (fix your font file)";
throw std::runtime_error("FT_New_Face noobed (fix your font file)");
}
// (h << 6 = h * 64)
FT_Set_Char_Size(face, h << 6, h << 6, 96, 96);
list_base = glGenLists(128);
glGenTextures(128, textures);
//This is where we actually create each of the fonts display lists.
for (unsigned char i = 0; i < 128; i++)
make_dlist(face, i, list_base, textures);
FT_Load_Glyph
不返回错误,但是,FT_Get_Glyph
返回错误代码18。
FT_Select_Charmap(face, ft_encoding_unicode); // make it unicode, seems to have no effect on the error
std::cout << "Char index: " << FT_Get_Char_Index(face, ch) << "\n";
if (FT_Load_Glyph(face, FT_Get_Char_Index(face, ch), FT_LOAD_DEFAULT))
{
std::cout << "FT_Load_Glyph noobed";
throw std::runtime_error("FT_Load_Glyph noobed");
}
FT_Glyph glyph;
FT_Error a = FT_Get_Glyph(face->glyph, &glyph);
if (a)
{
std::cout << "FT_Get_Glyph noobed " << (int)ch << " code " << a << "\n";
return;//throw std::runtime_error("FT_Get_Glyph noobed");
}
输出:
...
Char index: 95
FT_Get_Glyph noobed 124 code 18
Char index: 96
FT_Get_Glyph noobed 125 code 18
Char index: 97
FT_Get_Glyph noobed 126 code 18
Char index: 0
FT_Get_Glyph noobed 127 code 18
Their website说错误是unsupported glyph image format
,所以我假设可以使用其他字体。我尝试了Arial,Consolas,Lucida Console,甚至尝试了Internet上的一种字体,都无济于事。 (以上输出来自Arial。)与这些字体唯一的共同点是TrueType(.ttf)。
在这里进行谷歌搜索之后,显然没有其他人发布过有关此错误不断出现的线索。
我该怎么办?