SDL:在另一个纹理上渲染纹理

che*_*o_c 7 c++ textures rendering sdl blit

我遇到以下问题:

我需要在另一个纹理上渲染纹理,然后渲染该主纹理.例如,我有蓝色矩形纹理,我想在这个蓝色矩形的顶部绘制红色矩形.但是我希望它们仅限制此矩形的渲染.如下图所示: 在此输入图像描述

我读了一些关于它们之间的纹理blit或类似的东西,但我不确定这是否可行.

我的代码看起来像这样:

SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何在SDL 2.0中执行此操作?这就是我使用的方式.

che*_*o_c 7

火星的答案没有用,因为它画了一个黑色的纹理,没有任何东西可以绘制.

但是这个工作!:

SDL_Texture* auxtexture = SDL_CreateTexture(ren, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 500, 500);

//change the rendering target

SDL_SetTextureBlendMode(auxtexture, SDL_BLENDMODE_BLEND);
SDL_SetRenderTarget(ren, auxtexture);

//render what we want
triangle->render(ren); //render my class triangle e.g


//change the target back to the default and then render the aux

SDL_SetRenderTarget(ren, NULL); //NULL SETS TO DEFAULT
SDL_RenderCopy(ren, auxtexture, NULL, canvas->drect);
SDL_DestroyTexture(auxtexture);
Run Code Online (Sandbox Code Playgroud)

干杯.

  • 未来读者的一些提示.始终确保使用`SDL_RENDERER_TARGETTEXTURE`标志初始化`SDL_Renderer`以支持渲染目标.此外,永远不要尝试使用`SDL_表面`使用`SDL_CreateTextureFromSurface`函数创建的`SDL_Texture`.它不会起作用. (3认同)