来自 SDL2_ttf 的 TTF_GetError 返回空字符串

问题描述 投票:0回答:1

这是问题所在的函数

void Video_OpenFont(Video* video, char* path) {
    video->font = TTF_OpenFont(path, 0xFFFF);

    if (video->font == NULL) {
        FATAL("Failed to open font"); // TODO: make a window for this and reset
    }

    // generate characters
    for (uint32_t i = 1; i < ARRAY_LEN(video->characters); ++ i) {
        if (i == 173) {
            continue; // idk
        }

        SDL_Color colour      = {255, 255, 255, 255};
        char      asString[2] = {(char) i, 0};

        SDL_Surface* textSurface = TTF_RenderText_Solid(
            video->font, asString, colour
        );

        if (textSurface == NULL) {
            fprintf(stderr, "TTF error for character %d: %s\n", i, TTF_GetError());
            FATAL("Failed to render text");
        }

        video->characters[i] = SDL_CreateTextureFromSurface(
            video->renderer, textSurface
        );

        if (video->characters[i] == NULL) {
            fprintf(stderr, "SDL error: %s\n", SDL_GetError());
            FATAL("Failed to create texture");
        }
    }
}

运行它会显示这个

TTF error for character 1: 
source/sdl.c:68: Failed to render text

这是视频结构

typedef struct Video {
    SDL_Window*   window;
    SDL_Renderer* renderer;
    TTF_Font*     font;
    SDL_Texture*  characters[256];
} Video;

字符数组就像每个字符的纹理缓存,以使渲染速度更快(我正在制作终端模拟器)

我需要显示错误,以便我知道为什么它无法渲染角色

c sdl-2
1个回答
0
投票

我不知道您使用的是哪种字体(因为您从未告诉过我们),但我认为假设每种字体都有某种从 1 到最大值的代码值图形是错误的。

它甚至可能没有每个可能的 ASCII 字符的图形。我可以想象一种只包含字母、数字或罗马数字的字体。

您可能必须重组代码来处理这个事实。

您可以通过将这些角色的

NULL
存储在
video->characters[i]
中,并在渲染它们时对其进行处理来做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.