Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

/Users/blackie/Documents/myRepository/phobosengine-vc2005/phobosengine/phobosengine/TextureDatabase.cpp

Go to the documentation of this file.
00001 
00002 
00003 #include "TextureDatabase.h"
00004 
00005 #include "Configuration.h"
00006 #include "Texture.h"
00007 #include "TextureFactory.h"
00008 #include "TextureResourceFile.h"
00009 
00010 
00011 namespace pge {
00012 
00013 
00014         //****************************************************************************
00015         //
00016         //
00017         //
00018         //****************************************************************************
00019         TextureDatabase::TextureDatabase(void) {
00020                 m_textureList = std::vector<Texture*>();
00021 
00022                 m_resFile = new TextureResourceFile(TEXTURE_RESOURCE_FILE);
00023 
00024                 m_defaultTexture = TextureFactory::createTexture2D(TEXTURE_PREFIX.append(DEFAULT_TEXTURE_FILE), "default", true);
00025                 if(m_defaultTexture == NULL) {
00026                         printf("WARNING: [%s] Could not load default texture!\n", __FILE__);
00027                 }
00028         }
00029 
00030 
00031         //****************************************************************************
00032         //
00033         //
00034         //
00035         //****************************************************************************
00036         TextureDatabase::~TextureDatabase(void) {
00037                 destroy();
00038         }
00039 
00040 
00041         //****************************************************************************
00042         //
00043         //
00044         //
00045         //****************************************************************************
00046         TextureDatabase* TextureDatabase::getInstance(void) {
00047                 static TextureDatabase instance;
00048                 return &instance;
00049         }
00050 
00051 
00052         //****************************************************************************
00053         //
00054         //
00055         //
00056         //****************************************************************************
00057         void TextureDatabase::destroy(void) {
00058                 std::vector<Texture*>::iterator it;
00059 
00060 
00061                 for(it = m_textureList.begin(); it != m_textureList.end(); it++) {
00062                         if(*it != NULL) {
00063                                 delete *it;
00064                         }
00065                 }
00066 
00067                 if(m_defaultTexture != NULL) {
00068                         delete m_defaultTexture;
00069                         m_defaultTexture = NULL;
00070                 }
00071 
00072                 if(m_resFile != NULL) {
00073                         delete m_resFile;
00074                         m_resFile = NULL;
00075                 }
00076         }
00077 
00078 
00079         //****************************************************************************
00080         //
00081         //
00082         //
00083         //****************************************************************************
00084         Texture* TextureDatabase::getDefaultTexture(void) {
00085                 return m_defaultTexture;
00086         }
00087 
00088 
00089         //****************************************************************************
00090         //
00091         //
00092         //
00093         //****************************************************************************
00094         Texture* TextureDatabase::addTexture(const std::string &filename) {
00095                 if(containsTexture(filename)) {
00096                         return getTextureByName(filename);
00097                 }
00098 
00099                 Texture *tex;
00100 
00101                 // If there is a texture resource defined.
00102                 if(m_resFile->hasResource(filename)) {
00103                         TextureResourceFile::TextureResource res = m_resFile->getResource(filename);
00104 
00105                         tex = TextureFactory::createTexture2D(TEXTURE_PREFIX.append(filename), filename, res.m_doMipmap, res.m_alphaEnabled,
00106                                 res.m_alphaRed, res.m_alphaGreen, res.m_alphaBlue, res.m_minFilter,
00107                                 res.m_magFilter, res.m_wrapS, res.m_wrapT);
00108                 } else {
00109                         tex = TextureFactory::createTexture2D(TEXTURE_PREFIX.append(filename), filename, true);
00110                 }
00111 
00112                 if(tex != NULL) {
00113                         m_textureList.push_back(tex);
00114                         return tex;
00115                 } else {
00116                         return m_defaultTexture;
00117                 }
00118         }
00119 
00120 
00121         //****************************************************************************
00122         //
00123         //
00124         //
00125         //****************************************************************************
00126         Texture* TextureDatabase::addTexture(const std::string &filename, const std::string &name,
00127                 bool mipmap, bool alpha) {
00128 
00129                         if(containsTexture(name)) {
00130                                 return getTextureByName(name);
00131                         }
00132 
00133                         Texture *tex;
00134 
00135                         // If there is a texture resource defined.
00136                         if(m_resFile->hasResource(filename)) {
00137                                 TextureResourceFile::TextureResource res = m_resFile->getResource(filename);
00138 
00139                                 tex = TextureFactory::createTexture2D(TEXTURE_PREFIX.append(filename), name, mipmap, alpha,
00140                                         res.m_alphaRed, res.m_alphaGreen, res.m_alphaBlue, res.m_minFilter,
00141                                         res.m_magFilter, res.m_wrapS, res.m_wrapT);
00142                         } else {
00143 
00144                                 if(mipmap) {
00145                                         tex = TextureFactory::createTexture2D(TEXTURE_PREFIX.append(filename), name, mipmap, alpha,
00146                                                 ALPHA_COLOR_R, ALPHA_COLOR_G, ALPHA_COLOR_B, TEXTURE_MINFILTER_MIPMAP,
00147                                                 TEXTURE_MAGFILTER, TEXTURE_WRAPS, TEXTURE_WRAPT);
00148                                 } else {
00149                                         tex = TextureFactory::createTexture2D(TEXTURE_PREFIX.append(filename), name, mipmap, alpha,
00150                                                 ALPHA_COLOR_R, ALPHA_COLOR_G, ALPHA_COLOR_B, TEXTURE_MINFILTER,
00151                                                 TEXTURE_MAGFILTER, TEXTURE_WRAPS, TEXTURE_WRAPT);
00152                                 }
00153                         }
00154 
00155                         if(tex != NULL) {
00156                                 m_textureList.push_back(tex);
00157                                 return tex;
00158                         } else {
00159                                 return m_defaultTexture;
00160                         }
00161         }
00162 
00163 
00164         //****************************************************************************
00165         //
00166         //
00167         //
00168         //****************************************************************************
00169         Texture* TextureDatabase::addTexture(const std::string &filename, const std::string &name, bool mipmap,
00170                 GLuint wrapS, GLuint wrapT, GLuint minFilter, GLuint magFilter, bool alpha,
00171                 int alphaRed, int alphaGreen, int alphaBlue) {
00172 
00173                         if(containsTexture(name)) {
00174                                 return getTextureByName(name);
00175                         }
00176 
00177                         Texture *tex;
00178 
00179                         tex = TextureFactory::createTexture2D(TEXTURE_PREFIX.append(filename), name, mipmap, alpha, alphaRed, alphaGreen,
00180                                 alphaBlue, minFilter, magFilter, wrapS, wrapT);
00181 
00182                         if(tex != NULL) {
00183                                 m_textureList.push_back(tex);
00184                                 return tex;
00185                         } else {
00186                                 return m_defaultTexture;
00187                         }
00188         }
00189 
00190 
00191         //****************************************************************************
00192         //
00193         //
00194         //
00195         //****************************************************************************
00196         bool TextureDatabase::containsTexture(const std::string &name) {
00197                 std::vector<Texture*>::iterator it;
00198 
00199 
00200                 for(it = m_textureList.begin(); it != m_textureList.end(); it++) {
00201                         Texture *t = *it;
00202                         if(t->getName().compare(name) == 0) {
00203                                 return true;
00204                         }
00205                 }
00206                 return false;
00207         }
00208 
00209 
00210         //****************************************************************************
00211         //
00212         //
00213         //
00214         //****************************************************************************
00215         Texture* TextureDatabase::getTextureByName(const std::string &name) {
00216                 std::vector<Texture*>::iterator it;
00217 
00218 
00219                 for(it = m_textureList.begin(); it != m_textureList.end(); it++) {
00220                         Texture *t = *it;
00221                         if(t->getName().compare(name) == 0) {
00222                                 return t;
00223                         }
00224                 }
00225 
00226                 return NULL;
00227         }
00228 }

Generated on Mon Oct 16 12:08:11 2006 for Phobosengine by doxygen 1.3.4