加载SDL_ttf字体时出错:奇怪的返回指针

时间:2016-03-10 11:02:11

标签: c sdl true-type-fonts

我有以下代码片段,其作用是使用SDL_ttf库简单地生成和绘制字符串:

void drawString (G_Frame *frame, char *string, int x, int y, int size) {

    TTF_Font *font = NULL;
    while (font == NULL) {
        font = TTF_OpenFontRW(frame->fontMem, 0, size);
    }

    SDL_Surface *words = TTF_RenderText_Blended(font, string, frame->drawColor);
    SDL_Rect dest = {x, y, words->w, words->h};
    SDL_BlitSurface(words, NULL, frame->canvas, &dest);

    TTF_CloseFont(font);
    SDL_FreeSurface(words);
}

现在TTF_OpenFontRW给了我很多问题。首先,如果我没有while循环,有时候字体会正确加载,但函数有时会返回一个空指针,看似没有理由。对TTF_GetError()的调用说“无法加载字体文件”,但这几乎不具有描述性。所以,作为一个临时修复,我放了一个while循环,直到返回一个有效的指针,它似乎工作。

为了让事情变得更奇怪,只有当我用FreeMono.ttf字体填充SDL_RWops时才会发生这种情况。否则,如果我使用FreeSerif.ttf,我通常不会返回空指针。有时,我返回一个指向没有有意义数据的字体的指针。在使用这样的字体创建表面时,我得到一个分段错误,TTF_GetError()表示该字体没有宽度。

我哪里错了?

0 个答案:

没有答案