Search code examples
c++sdl

window doesnt show image SDL


The program doesnt show the image in the window i have created , also i dont get any of the fail messages that i have set , which means the values are not null. What is the problem? Here is the code:

#include "SDL.h"
#include "SDL_image.h"
#include <iostream>

int main(int argc,char* argv[])
{
    SDL_Window *window;
    SDL_Renderer *renderer;
    SDL_Event event;
    bool quit = false;
    SDL_Surface *tmpsur = NULL;
    SDL_Texture *tex = NULL;

    SDL_Init(SDL_INIT_EVERYTHING);

    window = SDL_CreateWindow("First window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN);
    renderer = SDL_CreateRenderer(window, -1, 0);

    tmpsur = IMG_Load("assets/player.png");
    if (tmpsur == NULL)
    {
        std::cout << "fail" << std::endl;
    }
    tex = SDL_CreateTextureFromSurface(renderer,tmpsur);
    if (tex == NULL)
    {
        std::cout << "fail 2" << std::endl;
    }
    SDL_FreeSurface(tmpsur);

    SDL_RenderPresent(renderer);

    while (!quit)
    {
        while (SDL_PollEvent(&event) != 0)
        {
            if(event.type == SDL_QUIT)
            {
                quit = true;
            }
        }
    }

    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);
    SDL_Quit();

    return 0;
}

Solution

  • You need to copy your texture onto the render target. Before presenting your renderer you need to call SDL_RenderCopy like this:

    SDL_RenderCopy(renderer, text, nullptr, nullptr);
    SDL_RenderPresent(renderer);
    

    The nullptrs in the argument will make it copy the texture over all your target (the window).