我一直在尝试让FreeType在我的游戏中运行,但是每当我尝试从字体加载字符时它似乎都不起作用。我在网上看了很多教程,据我所知,代码似乎没有任何问题。
我尝试使用不同的字体,但它们会产生相同的错误。
这是失败的代码:
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;
}
}
打印出来:
FreeSans.ttf:无法加载字符''。错误代码:36
我在FreeType标题中查找了错误代码36,它似乎是“Invalid_Size_Handle”。这让我很困惑,因为没有大小处理函数传递的位置。唯一的大小句柄我可以想到face-&gt; size属性,但是由于face结构在FT_New_Face函数中初始化,所以它应该没有任何问题。
是的,我之前在代码中初始化了FreeType。
那么,有人知道我做错了什么以及我能做些什么来解决这个问题?
答案 0 :(得分:4)
我有一次相同的错误代码。我想“Invalid_Size_Handle”意味着字体大小而不是内存大小设置无效。
我通过在 FT_New_Face 之后添加对 FT_Set_Char_Size 的调用来修复此问题。希望能有所帮助。
答案 1 :(得分:1)
尝试在加载面后设置字体大小:
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
希望它有所帮助!