SDL2 copy texture on texture (was: SDL2 tilemap - too slow)

Take a look at the Render Target functionality, it’s designed so you can
render textures on other textures.

I wrote this little program. The idea is to create a backbuffer
texture (tx), make it blueish, and paste it on the screen. But all I
get is a blank screen.

I looked everywhere but couldn’t find one single example code on
copying texture on texture. Does this funcionality even exist?

Here’s my code:

#include “SDL2/SDL.h”

int main()
{
SDL_Window* win;
SDL_Renderer *ren, *bb;

// initialize SDL
SDL_Init(SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(800, 600, 0, &win, &ren);

// create backbuffer and renderer
bb = SDL_CreateRenderer(win, -1, SDL_RENDERER_TARGETTEXTURE);
SDL_Texture* tx = SDL_CreateTexture(ren, SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, 800, 600);
SDL_SetRenderTarget(bb, tx);
SDL_SetRenderDrawColor(bb, 100, 255, 255, 255);
SDL_RenderClear(bb);
SDL_RenderPresent(bb);

// paste backbuffer on the screen
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tx, NULL, NULL);
SDL_RenderPresent(ren);

SDL_Delay(2000);

}

Regards,

Andr?–
Ars longa, vita brevis, occasio praeceps, experientia fallax, iudicium
difficile.

You have to SDL_SetRenderTarget(bb, NULL) to render to screen.

2013/9/3 Andr? Wagner <andre.nho at gmail.com>> > Take a look at the Render Target functionality, it’s designed so you can

render textures on other textures.

I wrote this little program. The idea is to create a backbuffer
texture (tx), make it blueish, and paste it on the screen. But all I
get is a blank screen.

I looked everywhere but couldn’t find one single example code on
copying texture on texture. Does this funcionality even exist?

Here’s my code:

#include “SDL2/SDL.h”

int main()
{
SDL_Window* win;
SDL_Renderer *ren, *bb;

// initialize SDL
SDL_Init(SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(800, 600, 0, &win, &ren);

// create backbuffer and renderer
bb = SDL_CreateRenderer(win, -1, SDL_RENDERER_TARGETTEXTURE);
SDL_Texture* tx = SDL_CreateTexture(ren, SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, 800, 600);
SDL_SetRenderTarget(bb, tx);
SDL_SetRenderDrawColor(bb, 100, 255, 255, 255);
SDL_RenderClear(bb);
SDL_RenderPresent(bb);

// paste backbuffer on the screen
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tx, NULL, NULL);
SDL_RenderPresent(ren);

SDL_Delay(2000);

}

Regards,

Andr?


Ars longa, vita brevis, occasio praeceps, experientia fallax, iudicium
difficile.


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


Gabriel.

Take a look at this test, it should serve as a guide:
http://hg.libsdl.org/SDL/file/54c06b0f65d9/test/testrendercopyex.c

2013/9/3 Andr? Wagner <andre.nho at gmail.com>> > Take a look at the Render Target functionality, it’s designed so you can

render textures on other textures.

I wrote this little program. The idea is to create a backbuffer
texture (tx), make it blueish, and paste it on the screen. But all I
get is a blank screen.

I looked everywhere but couldn’t find one single example code on
copying texture on texture. Does this funcionality even exist?

Here’s my code:

#include “SDL2/SDL.h”

int main()
{
SDL_Window* win;
SDL_Renderer *ren, *bb;

// initialize SDL
SDL_Init(SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(800, 600, 0, &win, &ren);

// create backbuffer and renderer
bb = SDL_CreateRenderer(win, -1, SDL_RENDERER_TARGETTEXTURE);
SDL_Texture* tx = SDL_CreateTexture(ren, SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, 800, 600);
SDL_SetRenderTarget(bb, tx);
SDL_SetRenderDrawColor(bb, 100, 255, 255, 255);
SDL_RenderClear(bb);
SDL_RenderPresent(bb);

// paste backbuffer on the screen
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tx, NULL, NULL);
SDL_RenderPresent(ren);

SDL_Delay(2000);

}

Regards,

Andr?


Ars longa, vita brevis, occasio praeceps, experientia fallax, iudicium
difficile.


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


Gabriel.