home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 March / ENTER.ISO / files / fwp-0.0.6-win32-installer.exe / TextureHandler.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-06  |  1.4 KB  |  64 lines

  1. #include "TextureHandler.h"
  2.  
  3. #include "Tokenizer.h"
  4. #include "log.h"
  5.  
  6. // init of static members
  7. std::vector<textureRefCounterPair_t> TextureHandler::textures;
  8.  
  9. Texture* TextureHandler::getTexture(const char* filename){
  10.  
  11.     std::vector<textureRefCounterPair_t>::iterator i;
  12.     for(i=textures.begin();i<textures.end();i++){
  13.         if(i->first->filename!=NULL && streq(filename, i->first->filename)){
  14.             i->second++;
  15.             return i->first;
  16.         }
  17.     }
  18.  
  19.     return loadTexture(filename);
  20. }
  21.  
  22. int TextureHandler::getNumTextures(){
  23.     return textures.size();
  24. }
  25.  
  26. Texture* TextureHandler::loadTexture(const char* filename){
  27.     Texture* t = new Texture(filename);
  28.  
  29.     textureRefCounterPair_t p(t, 1);
  30.     textures.push_back(p);
  31.  
  32.     return t;
  33. }
  34.  
  35. void TextureHandler::releaseTexture(Texture* tex){
  36.     if(tex==NULL)
  37.         return;
  38.  
  39.     std::vector<textureRefCounterPair_t>::iterator i;
  40.     for(i=textures.begin();i<textures.end();i++){
  41.         if(i->first==tex){
  42.             i->second--;
  43.             if(i->second==0){
  44. //                if(i->first->filename!=NULL)
  45. //                    log("TextureHandler::releaseTexture(): Texture '%s' not referenced any more (I'll delete it).\n", i->first->filename);
  46.                 delete i->first;
  47.                 textures.erase(i);
  48.             }
  49.         }
  50.     }
  51. }
  52.  
  53. void TextureHandler::reloadTextures(){
  54.     log("reloading textures...\n");
  55.  
  56.     std::vector<textureRefCounterPair_t>::iterator i;
  57.     for(i=textures.begin();i<textures.end();i++){
  58.         if(i->first->filename!=NULL){
  59.             i->first->reload();
  60.         }
  61.     }
  62.  
  63. }
  64.