C++ SDL:在另一个纹理上渲染纹理
我遇到以下问题: 我需要在另一个纹理上渲染一个纹理,然后渲染主纹理。 例如,我有蓝色矩形纹理,我想在这个蓝色矩形的顶部绘制红色矩形。但是,我希望它们仅在该矩形上进行渲染。如下图所示: 我读了一些关于他们之间的纹理blit之类的东西,但我不确定这是否可行 我的代码如下所示:C++ SDL:在另一个纹理上渲染纹理,c++,textures,rendering,sdl,blit,C++,Textures,Rendering,Sdl,Blit,我遇到以下问题: 我需要在另一个纹理上渲染一个纹理,然后渲染主纹理。 例如,我有蓝色矩形纹理,我想在这个蓝色矩形的顶部绘制红色矩形。但是,我希望它们仅在该矩形上进行渲染。如下图所示: 我读了一些关于他们之间的纹理blit之类的东西,但我不确定这是否可行 我的代码如下所示: SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect); SDL_RenderCopy(ren,redtexture,NULL,dREDrect); SDL_RenderPresent(
SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);
back = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 50, 50);
有人知道如何在SDL2.0中实现这一点吗?顺便说一句,这就是我所使用的。首先,您需要创建您想要使用
SDL\u TEXTUREACCESS\u TARGET
标志绘制的纹理。因此,创建如下back
纹理:
SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);
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);
火星答案不起作用,因为它画了一个黑色的纹理,上面什么也画不出来 但这是有效的!:
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);
干杯。给未来读者的一些建议。始终确保使用
SDL\u Renderer\u TARGETTEXTURE
标志初始化SDL\u渲染器
,以支持渲染目标。此外,切勿尝试使用使用SDL\u CreateTextureFromSurface
功能从SDL\u曲面创建的SDL\u纹理。它就是不起作用。@Justinskilles我很高兴有人注意到SDL_RENDERER_TARGETTEXTURE的缺乏,有那么一会儿我觉得要么我疯了,要么api突然改变,允许所有渲染器直接渲染目标纹理。我不明白这里发生了什么。谁来解释一下?什么是三角形->渲染()。这个函数是如何工作的,这个函数的代码在哪里?此函数中的SDL函数调用是什么?