2013-06-27 28 views
1

我一直试图让FreeType在我的游戏中工作,但似乎没有工作,只要我尝试从字体中加载字符。我已经看过网上的一大堆教程,并且据我所见,代码似乎没有任何问题。FreeType错误:FT_Load_Char返回36

我试过不同的字体,但他们产生相同的错误。

这是一个失败的代码:

int errorCode = FT_New_Face(freetype, filename.c_str(), 0, &face); 
if (errorCode != 0) 
{ 
    std::cerr << "Failed to load font: " << filename << ". Error code: " << errorCode << std::endl; 
} 

for (char i = 0; i < 256; i++) 
{ 
    errorCode = FT_Load_Char(face, i, FT_LOAD_RENDER); // This returns 36 when i is 0 
    if (errorCode != 0) 
    { 
     std::cerr << filename << ": Failed to load character '" << i << "'. Error code: " << errorCode << std::endl; 
    } 
} 

此打印出来:我在FreeType的头抬起头来错误代码36

FreeSans.ttf: Failed to load character ' '. Error code: 36

,它似乎是 “Invalid_Size_Handle”。这让我感到困惑,因为没有大小处理函数中传递的位置。我可以考虑face-> size属性的唯一大小的句柄,但不应该有任何错误,因为face结构在FT_New_Face函数中初始化。

是的,我在代码中初始化FreeType。

那么,有没有人知道我做错了什么,我能做些什么来解决这个问题?

+0

我将shoudl投射到FT_ULONG – Magn3s1um

+0

我试过了,结果相同。 – whoosy

+0

不要施放它,而是使用该类型实例化对象。将1个字节的值转换为8个字节的值不正确 – Magn3s1um

回答

4

我得到了同样的错误代码一次。我猜“Invalid_Size_Handle”的意思是的字体大小而不是内存大小的设置是无效的。

我加入到FT_Set_Char_Size通话后立即FT_New_Face解决了这一问题。希望能有所帮助。

0

尝试加载脸后设置字体大小:

int errorCode = FT_New_Face(freetype, filename.c_str(), 0, &face); 
if (!errorCode) 
    std::cerr << "Failed to load font: " << filename << ". Error code: " << errorCode << std::endl; 

int pensize = 64; 
FT_Set_Pixel_Sizes(face, pensize, 0); 

// you can now load the glyphs 

希望它能帮助!