Search code examples
sdlsdl-2

SDL layered rendering system


I would like help with building a layered rendering system in SDL2.

I have a first layer containing a map of Paris with its roads. I need to draw a line between two points on this map - the problem occurs when the before state of this line does not disappear.

I need to draw this line over the map and keep this.

How do I make s a system to save the map state whithout any overlaid lines drawn, and such that frame by frame I can show the map with the new state of the line overlaid on top of this?


Solution

  • Solved, below an example !! Thank you all

    SDL_Window *window; 
    SDL_Renderer *render;
    SDL_Texture *map; //map texture (my layer)
    
    window = SDL_CreateWindow("Test window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
    render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    map = SDL_CreateTexture(render,  SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 640, 480); //Creating a texture
    
    /*Map is a red background stored in map texture*/
    SDL_SetRenderDrawColor(render, 255, 0, 0, 255);
    SDL_SetRenderTarget(render, map);
    SDL_RenderClear(render);
    SDL_SetRenderTarget(render, NULL);
    
    /*Seting the line color*/
    SDL_SetRenderDrawColor(render, 0, 255, 0, 255);
    
    /*Coping the map texture to the render and drawing a green line on top of this*/
    SDL_RenderCopy(render, map, NULL, NULL);
    SDL_RenderDrawLine(render, 0, 0, 640, 480);
    SDL_RenderPresent(render);
    SDL_Delay(2000);
    
    /*Another line*/
    SDL_RenderCopy(render, map, NULL, NULL);
    SDL_RenderDrawLine(render, 0, 480, 640, 0);
    SDL_RenderPresent(render);
    SDL_Delay(2000);
    
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(render);
    SDL_Quit();