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

时间:2013-09-05 23:34:16

标签: c++ textures rendering sdl blit

我遇到以下问题:

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

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

我的代码如下所示:

SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);

任何人都知道如何在SDL 2.0中执行此操作?这就是我顺便使用的东西。

2 个答案:

答案 0 :(得分: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);

干杯。

答案 1 :(得分:3)

首先,您需要使用SDL_TEXTUREACCESS_TARGET标志创建要绘制的纹理。所以像这样创建back纹理:

back = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 50, 50);

然后,在调用绘图函数时,需要将back纹理设置为目标,如下所示:

SDL_SetRenderTarget(renderer, back);

然后你绘制你想要的东西,之后你将目标改为null:

SDL_SetRenderTarget(renderer, NULL);

渲染back纹理:

SDL_RenderCopy(renderer, back, NULL, &some_rect);