FreeType FT_Get_Glyph始终返回错误18

时间:2018-08-24 16:39:35

标签: c++ freetype2

使用this tutorial,我设置了最新版本的FreeType以与OpenGL一起使用。唯一的问题-FT_Get_Glyph始终返回错误18。

更具体地说,这就是我要做的:

  1. 使用C:/Windows/Fonts/中的字体调用初始化函数
  2. 该函数成功设置了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);
    
  3. 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)。

在这里进行谷歌搜索之后,显然没有其他人发布过有关此错误不断出现的线索。

我该怎么办?

0 个答案:

没有答案