You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.8 KiB
C++

#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;
}