在使用 SDL2 从表面创建的纹理之上渲染纹理
Render texture on top of texture created from surface with SDL2
我想将 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 文件加载的纹理上渲染文本吗?性能不是太重要,因为这只会在应用程序启动时发生一次。
我用 SDL_TEXTUREACCESS_TARGET
创建了一个新纹理,并将表面加载的纹理复制到其中。
我想将 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 文件加载的纹理上渲染文本吗?性能不是太重要,因为这只会在应用程序启动时发生一次。
我用 SDL_TEXTUREACCESS_TARGET
创建了一个新纹理,并将表面加载的纹理复制到其中。