首页 > 解决方案 > SDL TTL_OpenFont 返回 NULL 而没有错误

问题描述

当我尝试打开字体时,我总是得到 NULL 作为回报,并且 TTL_GetError 不提供任何错误消息。

我在 Windows 下使用 SDL2 (v2.0.9.0) 和 SDL_TTF (v2.0.15)。

代码片段:

SDL/TTF 初始化:

bool Graphics::Init()
{
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("[SDL]\tInitialization error: %s\n",SDL_GetError());
        return false;
    }

    mWindowFlags |= SDL_WINDOW_SHOWN;
    if (SCREEN_FULLSCREEN) mWindowFlags |= SDL_WINDOW_FULLSCREEN;
    if (SCREEN_BORDERLESS) mWindowFlags |= SDL_WINDOW_BORDERLESS;

    mWindow = SDL_CreateWindow("Titel", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, mWindowFlags);

    if (mWindow == NULL)
    {
        printf("[SDL]\tWindow creation error: %s\n", SDL_GetError());
        return false;
    }

    mRenderer = SDL_CreateRenderer(mWindow, -1, SDL_RENDERER_ACCELERATED);

    if (mRenderer == NULL)
    {
        printf("[SDL]\tRenderer creation error: %s\n", SDL_GetError());
        return false;
    }

    SDL_SetRenderDrawColor(mRenderer, 0xFF, 0xFF, 0xFF, 0xFF);

    // Flags for image format handle
    int flags = IMG_INIT_PNG;
    if (!(IMG_Init(flags) & flags))
    {
        printf("[SDL IMG]\tInitialization error: %s\n", IMG_GetError());
        return false;
    }

    if (TTF_Init() != 0)
    {
        printf("[SDL TTF]\tInitialization error: %s\n",TTF_GetError());
        return false;
    }

    mBackBuffer = SDL_GetWindowSurface(mWindow);
    return true;
}

TTF 字体:

TTF_Font * AssetManager::GetFont(std::string filename, int size)
{
    std::string fullpath = SDL_GetBasePath();
    fullpath.append("Assets\\Fonts\\" + filename);
    std::string key = fullpath + (char)size;

    if (mFonts[key] == nullptr)
    {
        mFonts[key] == TTF_OpenFont(fullpath.c_str(), size);
        if (mFonts[key] == nullptr)
        {
            printf("[SDL TTF]\tFont loading error: Font:(%s) | FPath:(%s) | Error:(%s)\n",filename.c_str(), fullpath.c_str(), TTF_GetError());
        }
    }

    return mFonts[key];
}

输出: 调试输出

我已经尝试了不同的 TTF 字体,但没有成功。如果我给他一个不存在的字体,我会收到一个无法加载的正常错误。

有人有任何想法或有类似的问题吗?

标签: c++sdl-2sdl-ttf

解决方案


推荐阅读