我遇到以下问题:
我需要在另一个纹理上渲染纹理,然后渲染该主纹理。 例如,我有蓝色矩形纹理,我想在这个蓝色矩形的顶部绘制红色矩形。但是我希望它们仅限制此矩形的渲染。如下图所示:
我读到了关于它们之间的纹理blit或类似的东西,但我不确定这是否可行。
我的代码如下所示:
SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);
任何人都知道如何在SDL 2.0中执行此操作?这就是我顺便使用的东西。
答案 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);