/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #include #include #include "fastevents.h" #include "backend.hh" #include "log.hh" namespace moof { struct impl { static bool is_initialized; static int retain_count; }; bool impl::is_initialized = false; int impl::retain_count = 0; backend::backend() { if (impl::retain_count++ == 0) { #if defined(_WIN32) if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) #else if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTTHREAD) != 0) #endif { throw std::runtime_error(SDL_GetError()); } else { char name[128]; SDL_VideoDriverName(name, sizeof(name)); log_info << "initialized SDL; using video driver `" << name << "'" << std::endl; } if (FE_Init() != 0) { throw std::runtime_error(FE_GetError()); } } impl::is_initialized = true; } backend::backend(const backend& backend) { ++impl::retain_count; } backend& backend::operator=(const backend& backend) { ++impl::retain_count; return *this; } backend::~backend() { if (--impl::retain_count == 0) { FE_Quit(); SDL_Quit(); impl::is_initialized = false; } } bool backend::is_initialized() { return impl::is_initialized; } } // namespace moof