0

I'm trying to export SDL2 initialization routines to an external function

void initEngine(SDL_Window *window, SDL_Renderer *renderer)
{
    if(SDL_Init(SDL_INIT_VIDEO)) {
        fprintf(stderr, "Failed to initialize SDL2 library");
        exit(1);
    }

    window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 640, 0);
    if(!window) {
        fprintf(stderr, "Failed to create window");
        exit(2);
    }

    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if(!renderer) {
        fprintf(stderr, "Failed to create renderer");
        exit(3);
    }
}

Other functions involved have the following definition

SDL_bool doEvent(SDL_Window *window, SDL_Event *event);
void doRenderer(SDL_Renderer *renderer);
void doClean(SDL_Window *window, SDL_Renderer *renderer);

My main looks like this.

int main(void) {

    SDL_Window *window = NULL;
    SDL_Renderer *renderer = NULL;

    SDL_Event event;

    SDL_bool done = SDL_FALSE;

    initEngine(window, renderer); /* This line fails*/

    while(!done) {
        done = doEvent(window, &event);
        doRenderer(renderer);
    }

    doClean(window, renderer);
    return 0;
}

doRenderer() function clears the screen to black and draws a white squre. However, when I execute my program the screen is black and no square is present. Everything works fine when I keep SDL2 initialization routines within main() so, I guess, I made a mistake somewhere in calling initEngine(). Please help.

  • 1
    You pass `window` and `renderer` by value, and they are still NULL in `main` when the function returns. – user3840170 Apr 29 '20 at 10:36
  • @user3840170, but I thought that window and renderer are both pointers, so when I pass them as arguments to that function, I pass addresses, and the function modifies values in this addresses? –  Apr 29 '20 at 10:55
  • They are pointers, but you pass those pointers by value. – user3840170 Apr 29 '20 at 10:59

0 Answers0