我有以下代码片段,其作用是使用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()表示该字体没有宽度。
我哪里错了?