#ifndef RENDERER_H_6A58EC30 #define RENDERER_H_6A58EC30 #include #include #include #include class Simulation; class sdl_error : public std::logic_error { public: sdl_error() : std::logic_error(SDL_GetError()) { } }; class img_error : public std::logic_error { public: img_error() : std::logic_error(IMG_GetError()) { } }; class sdl_wrapper { public: sdl_wrapper() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { sdl_error ex; SDL_Quit(); throw ex; } } ~sdl_wrapper() { SDL_Quit(); } }; class img_wrapper { public: img_wrapper() { if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG) { img_error ex; IMG_Quit(); throw ex; } } ~img_wrapper() { IMG_Quit(); } }; class window_deleter { public: void operator()(SDL_Window* ptr) { SDL_DestroyWindow(ptr); } }; using window_ptr = std::unique_ptr; class renderer_deleter { public: void operator()(SDL_Renderer* ptr) { SDL_DestroyRenderer(ptr); } }; using renderer_ptr = std::unique_ptr; class surface_deleter { public: void operator()(SDL_Surface* ptr) { SDL_FreeSurface(ptr); } }; using surface_ptr = std::unique_ptr; class texture_deleter { public: void operator()(SDL_Texture* ptr) { SDL_DestroyTexture(ptr); } }; using texture_ptr = std::unique_ptr; #endif /* end of include guard: RENDERER_H_6A58EC30 */