BenGilliland
BenGilliland

Reputation: 11

SDL2 Renderer not drawing anything to screen

I'm trying to make my first game using C++ with SDL2. For now I'm just trying to get the screen to show up properly. When I run my code a window appears but instead of a blue background the window just shows up in plain white as if the renderer isn't doing anything. Here is my code:

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

//Screen dimension constants
const int DEFAULT_WIDTH = 800;
const int DEFAULT_HEIGHT = 600;

bool initWindow(SDL_Window* window, SDL_Renderer* renderer) {
    window = SDL_CreateWindow("Pong", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, DEFAULT_WIDTH, DEFAULT_HEIGHT, SDL_WINDOW_RESIZABLE);
    if (window == nullptr)
    {
        std::cout << "Window could not be created! SDL_Error:\n" << SDL_GetError();
        return false;
    }
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if (renderer == nullptr) {
        std::cout << "Window could not be created! SDL_Error:\n" << SDL_GetError();
        return false;
    }
    return true;
}

void pollEvents(bool &gameOver) {
    SDL_Event event;
    if (SDL_PollEvent(&event)) {
        switch (event.type) {
        case SDL_QUIT:
            gameOver = true;
            break;
        case SDL_KEYDOWN:
            switch (event.key.keysym.sym) {
            case SDLK_ESCAPE:
                gameOver = true;
                break;
            case SDLK_w:
                std::cout << "Test";
                break;
            }
        }
    }
}

int main(int argc, char **argv) {
    bool gameOver = false;
    SDL_Window* window = nullptr;
    SDL_Renderer* renderer = nullptr;
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        std::cout << "SDL could not initialize! SDL_Error:\n" << SDL_GetError();
    }
    else
    {
        if (initWindow(window, renderer)) {
            while (!gameOver) {
                // Draw everything
                SDL_SetRenderDrawColor(renderer, 0, 0, 200, 255);
                SDL_RenderClear(renderer);
                SDL_RenderPresent(renderer);

                pollEvents(gameOver);
            }
        }
    }
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

Upvotes: 1

Views: 581

Answers (1)

MikeCAT
MikeCAT

Reputation: 75062

Copies of what are specified are passed to the arguments of the function

bool initWindow(SDL_Window* window, SDL_Renderer* renderer)

and modification to them won't affect what are passed.

You should add & to the arguments and make them references to have the assignments affect the local variables of main().

bool initWindow(SDL_Window*& window, SDL_Renderer*& renderer) 

Upvotes: 2

Related Questions