SDL: Render Texture on top of another texture

匿名 (未验证) 提交于 2019-12-03 01:12:01

问题:

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); 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!