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

  1. #include "ShaderHandler.h"
  2.  
  3. #include "Tokenizer.h"
  4. #include "log.h"
  5.  
  6. // init of static members
  7. std::vector<shaderRefCounterPair_t> ShaderHandler::shaders;
  8.  
  9. Shader* ShaderHandler::getShader(const char* filename){
  10.  
  11.     char* pFile=Shader::findShaderForImageFile(filename);
  12.     if(pFile==NULL)
  13.         pFile=(char*)filename;
  14.  
  15.     std::vector<shaderRefCounterPair_t>::iterator i;
  16.     for(i=shaders.begin();i<shaders.end();i++){
  17.         if(i->first->filename!=NULL && streq(pFile, i->first->filename)){
  18.             i->second++;
  19.             return i->first;
  20.         }
  21.     }
  22.  
  23.     return loadShader(filename);
  24. }
  25.  
  26. int ShaderHandler::getNumShaders(){
  27.     return shaders.size();
  28. }
  29.  
  30. Shader* ShaderHandler::loadShader(const char* filename){
  31.     Shader* s=new Shader(filename);
  32.  
  33.     shaderRefCounterPair_t p(s, 1);
  34.     shaders.push_back(p);
  35.  
  36.     return s;
  37. }
  38.  
  39. void ShaderHandler::releaseShader(Shader* sha){
  40.     if(sha==NULL)
  41.         return;
  42.  
  43.     std::vector<shaderRefCounterPair_t>::iterator i;
  44.     for(i=shaders.begin();i<shaders.end();i++){
  45.         if(i->first==sha){
  46.             i->second--;
  47.             if(i->second==0){
  48. //                if(i->first->filename!=NULL)
  49. //                    log("ShaderHandler::releaseShader(): Shader '%s' not referenced any more (I'll delete it).\n", i->first->name);
  50.                 delete i->first;
  51.                 shaders.erase(i);
  52.             }
  53.         }
  54.     }
  55. }
  56.  
  57. bool ShaderHandler::hasShaderForImageFile(const char* filename){
  58.     char* t=Shader::findShaderForImageFile(filename);
  59.     if(t==NULL)
  60.         return false;
  61.     else{
  62.         delete[] t;
  63.         return true;
  64.     }
  65. }
  66.