Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL:在另一个纹理上渲染纹理_C++_Textures_Rendering_Sdl_Blit - Fatal编程技术网

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

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(

我遇到以下问题:

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

我读了一些关于他们之间的纹理blit之类的东西,但我不确定这是否可行

我的代码如下所示:

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函数调用是什么?