Reputation: 11
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
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