回报在从与SDL2的表面创造的纹理顶部的纹理

时间:2018-05-24 20:41:08

标签: c++ sdl sdl-2

我想将png加载到纹理中,然后在其上绘制另一个文本纹理。我正在做这样的事情:

SDL_Surface *bgImg = IMG_Load(PNG_PATH);
SDL_Texture *bg = SDL_CreateTextureFromSurface(renderer, bgImg);
SDL_Surface *textSurface = TTF_RenderText_Blended(font, text, red);
SDL_Texture *txt = SDL_CreateTextureFromSurface(renderer, textSurface);

SDL_SetTextureBlendMode(bg, SDL_BLENDMODE_NONE);
SDL_SetRenderTarget(renderer, bg);
SDL_RenderCopy(renderer, txt, NULL, &textDstRect);
SDL_SetRenderTarget(renderer, NULL);
SDL_RenderPresent(renderer);

我的代码基于this answer。评论说,如果从表面加载纹理,它将不起作用,实际上它不会。文本显示在背景图像后面,而不是在它上面。我知道文本是渲染的,因为如果我将混合模式设置为SDL_BLENDMODE_ADD,它就是可见的,但这不是我想要的。

我想过尝试将bg纹理的访问权限更改为SDL_TEXTUREACCESS_TARGET,以防出现问题,但我无法想办法为表面创建的纹理做到这一点。

在从PNG文件加载的纹理上渲染文本的任何其他方法?性能不是很重要,因为这只会在应用程序启动时发生一次。

1 个答案:

答案 0 :(得分:1)

我使用SDL_TEXTUREACCESS_TARGET创建了一个新纹理,并将表面加载的纹理复制到其中。