boost::shared_ptr<SDL_Surface> CGViewer::loadImage(const std::string& filename) { boost::shared_ptr<SDL_Surface> loadedImage( IMG_Load(filename.c_str()), boost::bind(&SafeFreeSurface, _1)); if (!loadedImage.get()) throw std::runtime_error(IMG_GetError()); //dostosowanie grafiki do wyswietlenia z kanalem przezroczystosci boost::shared_ptr<SDL_Surface> optimizedImage( SDL_DisplayFormatAlpha(loadedImage.get()), boost::bind(&SafeFreeSurface, _1) ); return optimizedImage; }
shared_ptr<SDL_Surface> SDL::generate(const string & filename, bool alpha) { shared_ptr<SDL_Surface> image(IMG_Load(filename.c_str()), &freeSurface); if (image == NULL) throw SDLException(IMG_GetError(), HERE); shared_ptr<SDL_Surface> optimizedImage(optimize(image, alpha)); if (optimizedImage == NULL) throw SDLException(IMG_GetError(), HERE); Uint32 flags = SDL_RLEACCEL; if (alpha) flags |= SDL_SRCALPHA; SDL_SetAlpha(optimizedImage.get(), flags, SDL_ALPHA_OPAQUE); // doubles the fps :o LOG4CXX_DEBUG(m_logger, "Image at " << filename << " loaded successfully. Alpha blending is " << (alpha ? "enabled." : "disabled.")); return optimizedImage; }