问题
i am having trouble with the following:
I need to render a texture on top of another texture and then render that main texture. For example I have the blue rectangle texture, and I want to draw red rectangles on top of this blue rect. However i want them to restrict the render only on this rectangle. Like the following image:
I read something about texture blit between them or something like that but im not sure if this is posible.
My code looks like this:
SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);
Any one knows about how to do this in SDL 2.0? thats what Im using by the way.
回答1:
Mars answer didnt work because it drew a black texture and nothing could be drawn on that.
But THIS WORKS!:
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);
Cheers.
回答2:
First, you need to create your texture on which you want to draw with SDL_TEXTUREACCESS_TARGET
flag. So create back
texture like this:
back = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 50, 50);
Then, when calling drawing functions, you need to set the back
texture as the target, like so:
SDL_SetRenderTarget(renderer, back);
Then you draw what you want, and after that you change the target to null:
SDL_SetRenderTarget(renderer, NULL);
And render back
texture:
SDL_RenderCopy(renderer, back, NULL, &some_rect);
来源:https://stackoverflow.com/questions/18647592/sdl-render-texture-on-top-of-another-texture