diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2006-08-13 10:20:19 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2006-08-13 10:20:19 +0000 |
commit | d3385829ca6f7d52e21706b25b14fe1083cfe984 (patch) | |
tree | aea368b2434a49864b33183f95b6aae36abef3b7 /src/resources | |
parent | 7d287027babe615e01ddcf20edc1057f7d778c58 (diff) | |
download | mana-client-d3385829ca6f7d52e21706b25b14fe1083cfe984.tar.gz mana-client-d3385829ca6f7d52e21706b25b14fe1083cfe984.tar.bz2 mana-client-d3385829ca6f7d52e21706b25b14fe1083cfe984.tar.xz mana-client-d3385829ca6f7d52e21706b25b14fe1083cfe984.zip |
Merged Guichan 0.5.0 support from guichan-0.5.0 branch, plus several updates
from the 0.1.0 branch.
Diffstat (limited to 'src/resources')
-rw-r--r-- | src/resources/openglsdlimageloader.cpp | 38 | ||||
-rw-r--r-- | src/resources/openglsdlimageloader.h | 37 | ||||
-rw-r--r-- | src/resources/resourcemanager.cpp | 17 | ||||
-rw-r--r-- | src/resources/resourcemanager.h | 8 | ||||
-rw-r--r-- | src/resources/sdlimageloader.cpp | 53 | ||||
-rw-r--r-- | src/resources/sdlimageloader.h | 4 |
6 files changed, 104 insertions, 53 deletions
diff --git a/src/resources/openglsdlimageloader.cpp b/src/resources/openglsdlimageloader.cpp new file mode 100644 index 00000000..c7ddec74 --- /dev/null +++ b/src/resources/openglsdlimageloader.cpp @@ -0,0 +1,38 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: sdlimageloader.cpp 2121 2006-01-31 02:55:26Z der_doener $ + */ + +#ifdef USE_OPENGL + +#include "openglsdlimageloader.h" + +#include <string> + +#include "resourcemanager.h" + +SDL_Surface* OpenGLSDLImageLoader::loadSDLSurface(const std::string& filename) +{ + ResourceManager *resman = ResourceManager::getInstance(); + return resman->loadSDLSurface(filename); +} + +#endif diff --git a/src/resources/openglsdlimageloader.h b/src/resources/openglsdlimageloader.h new file mode 100644 index 00000000..29be294c --- /dev/null +++ b/src/resources/openglsdlimageloader.h @@ -0,0 +1,37 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: sdlimageloader.h 1724 2005-09-12 22:15:35Z der_doener $ + */ + +#ifndef _TMW_OPENGLSDLIMAGELOADER_H +#define _TMW_OPENGLSDLIMAGELOADER_H + +#include <iosfwd> + +#include <guichan/opengl/openglsdlimageloader.hpp> + +class OpenGLSDLImageLoader : public gcn::OpenGLSDLImageLoader +{ + protected: + SDL_Surface* loadSDLSurface(const std::string& filename); +}; + +#endif diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index 26899d77..1c1eb5db 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -26,6 +26,7 @@ #include <cassert> #include <sstream> #include <physfs.h> +#include <SDL_image.h> #include "image.h" #include "music.h" @@ -297,3 +298,19 @@ ResourceManager::loadTextFile(const std::string &fileName) free(fileContents); return lines; } + +SDL_Surface* +ResourceManager::loadSDLSurface(const std::string& filename) +{ + int fileSize; + void *buffer = loadFile(filename, fileSize); + SDL_Surface *tmp = NULL; + + if (buffer) { + SDL_RWops *rw = SDL_RWFromMem(buffer, fileSize); + tmp = IMG_Load_RW(rw, 1); + ::free(buffer); + } + + return tmp; +} diff --git a/src/resources/resourcemanager.h b/src/resources/resourcemanager.h index f254a8b4..0086b167 100644 --- a/src/resources/resourcemanager.h +++ b/src/resources/resourcemanager.h @@ -27,6 +27,7 @@ #include <iosfwd> #include <map> #include <vector> +#include <SDL.h> class Resource; class Image; @@ -164,6 +165,13 @@ class ResourceManager loadTextFile(const std::string &fileName); /** + * Loads the given filename as an SDL surface. The returned surface is + * expected to be freed by the caller using SDL_FreeSurface. + */ + SDL_Surface* + loadSDLSurface(const std::string& filename); + + /** * Returns an instance of the class, creating one if it does not * already exist. */ diff --git a/src/resources/sdlimageloader.cpp b/src/resources/sdlimageloader.cpp index 88c4143e..ae4f4dcb 100644 --- a/src/resources/sdlimageloader.cpp +++ b/src/resources/sdlimageloader.cpp @@ -24,60 +24,11 @@ #include "sdlimageloader.h" #include <string> -#include <SDL_image.h> - -#include <guichan/exception.hpp> #include "resourcemanager.h" -void SDLImageLoader::prepare(const std::string &filename) +SDL_Surface* SDLImageLoader::loadSDLSurface(const std::string& filename) { - if (mCurrentImage) - { - throw GCN_EXCEPTION("Function called before finalizing or discarding last loaded image."); - } - ResourceManager *resman = ResourceManager::getInstance(); - - int fileSize; - void *buffer = resman->loadFile(filename, fileSize); - - SDL_Surface *tmp = NULL; - if (buffer) { - SDL_RWops *rw = SDL_RWFromMem(buffer, fileSize); - tmp = IMG_Load_RW(rw, 1); - ::free(buffer); - } - - if (!tmp) - { - throw GCN_EXCEPTION(std::string("Unable to load image file: ")+filename); - } - - Uint32 rmask, gmask, bmask, amask; -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - rmask = 0xff000000; - gmask = 0x00ff0000; - bmask = 0x0000ff00; - amask = 0x000000ff; -#else - rmask = 0x000000ff; - gmask = 0x0000ff00; - bmask = 0x00ff0000; - amask = 0xff000000; -#endif - - mCurrentImage = SDL_CreateRGBSurface(SDL_SWSURFACE, 0, 0, 32, - rmask, gmask, bmask, amask); - - if (!mCurrentImage) - { - throw GCN_EXCEPTION(std::string("Not enough memory to load: ")+filename); - } - - SDL_Surface* tmp2 = SDL_ConvertSurface(tmp, mCurrentImage->format, SDL_SWSURFACE); - SDL_FreeSurface(tmp); - SDL_FreeSurface(mCurrentImage); - - mCurrentImage = tmp2; + return resman->loadSDLSurface(filename); } diff --git a/src/resources/sdlimageloader.h b/src/resources/sdlimageloader.h index b34b98fe..50b1d4f1 100644 --- a/src/resources/sdlimageloader.h +++ b/src/resources/sdlimageloader.h @@ -30,8 +30,8 @@ class SDLImageLoader : public gcn::SDLImageLoader { - public: - void prepare(const std::string &filename); + protected: + SDL_Surface* loadSDLSurface(const std::string& filename); }; #endif |