|
|
|
#include "window.hpp"
|
|
|
|
|
|
|
|
#include <cstdlib>
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
#include <SDL2/SDL_image.h>
|
|
|
|
|
|
|
|
SDL_Window *window;
|
|
|
|
SDL_Renderer *renderer;
|
|
|
|
|
|
|
|
int sdl2Initialize()
|
|
|
|
{
|
|
|
|
if (auto err = SDL_Init(SDL_INIT_VIDEO); err < 0) {
|
|
|
|
std::cerr << "SDL error: " << SDL_GetError() << std::endl;
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
} else {
|
|
|
|
atexit(SDL_Quit);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG)) {
|
|
|
|
std::cerr << "IMG error: " << IMG_GetError() << std::endl;
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
} else {
|
|
|
|
atexit(IMG_Quit);
|
|
|
|
}
|
|
|
|
|
|
|
|
window = SDL_CreateWindow("game",
|
|
|
|
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
|
|
|
WINDOW_WIDTH, WINDOW_HEIGHT,
|
|
|
|
SDL_WINDOW_SHOWN);
|
|
|
|
|
|
|
|
if (window == nullptr) {
|
|
|
|
std::cerr << "SDL error: " << SDL_GetError() << std::endl;
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
} else {
|
|
|
|
atexit([] { SDL_DestroyWindow(window); });
|
|
|
|
}
|
|
|
|
|
|
|
|
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
|
|
|
|
|
|
|
|
if (renderer == nullptr) {
|
|
|
|
std::cerr << "SDL error: " << SDL_GetError() << std::endl;
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
} else {
|
|
|
|
atexit([] { SDL_DestroyRenderer(renderer); });
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
SDL_Texture *sdl2LoadTexture(const char *path)
|
|
|
|
{
|
|
|
|
SDL_Texture *tex = nullptr;
|
|
|
|
|
|
|
|
auto surface = IMG_Load(path);
|
|
|
|
if (surface == nullptr) {
|
|
|
|
std::cerr << "Unable to load image " << path << '!' << std::endl;
|
|
|
|
std::cerr << "SDL error: " << IMG_GetError() << std::endl;
|
|
|
|
} else {
|
|
|
|
tex = SDL_CreateTextureFromSurface(renderer, surface);
|
|
|
|
|
|
|
|
if (tex == nullptr) {
|
|
|
|
std::cerr << "Unable to create texture for " << path << '!' << std::endl;
|
|
|
|
std::cerr << "SDL error: " << SDL_GetError() << std::endl;
|
|
|
|
} else {
|
|
|
|
SDL_FreeSurface(surface);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return tex;
|
|
|
|
}
|
|
|
|
|
|
|
|
SDL_Surface *sdl2LoadSolid(const char *path)
|
|
|
|
{
|
|
|
|
auto surface = IMG_Load(path);
|
|
|
|
|
|
|
|
if (surface == nullptr) {
|
|
|
|
std::cerr << "Unable to load image " << path << '!' << std::endl;
|
|
|
|
std::cerr << "SDL error: " << IMG_GetError() << std::endl;
|
|
|
|
}
|
|
|
|
|
|
|
|
return surface;
|
|
|
|
}
|
|
|
|
|