ttf文本不会出现在SDL中

时间:2015-01-01 19:58:25

标签: render sdl-2 sdl-ttf

无论我尝试什么,我都无法使用SDL_ttf将我的文本加载到SDL 2.0中的纹理中。

这是我的textToTexture代码

void sdlapp::textToTexture(string text, SDL_Color textColor,SDL_Texture* textTexture)
{
    //free prevoius texture in textTexture if texture exists
    if (textTexture != nullptr || NULL)
    {
        SDL_DestroyTexture(textTexture);
    }
    SDL_Surface* textSurface = TTF_RenderText_Solid(m_font, text.c_str(), textColor);
    textTexture = SDL_CreateTextureFromSurface(m_renderer, textSurface);
    //free surface
    SDL_FreeSurface(textSurface);
}

然后是我加载纹理和文本

bool sdlapp::loadMedia()
{
    bool success = true;
    //load media here

    //load font
    m_font = TTF_OpenFont("Fonts/MotorwerkOblique.ttf", 28);

    //load text
    SDL_Color textColor = { 0x255, 0x255, 0x235 };
    textToTexture("im a texture thing", textColor, m_font_texture);

    return success;
}

然后这是我用来渲染它的代码

void sdlapp::render()
{
    //clear the screen
    SDL_RenderClear(m_renderer);
    //do render stuff here
    SDL_Rect rect= { 32, 64, 128, 32 };
    SDL_RenderCopy(m_renderer, m_font_texture, NULL, NULL);
    //update the screen to the current render
    SDL_RenderPresent(m_renderer);
}

有谁知道我做错了什么? 在此先感谢JustinWeq。

1 个答案:

答案 0 :(得分:0)

textToTexture使用SDL_ttf呈现文本,然后将生成的SDL_Texture地址分配给名为textTexture的变量。问题是,textTexture是一个局部变量,指向与m_font_texture相同的地址。它们不是同一个变量,它们是同一个地方的不同变量,因此你不会改变任何被调用变量。

为了澄清指针,我建议您查看question 4.8 of the C-FAQ

我让textToTexture返回新的纹理地址,而不用担心释放不受其管理的资源(m_font_texture属于sdlapp,它应由它管理。)