home *** CD-ROM | disk | FTP | other *** search
- #include "ShaderHandler.h"
-
- #include "Tokenizer.h"
- #include "log.h"
-
- // init of static members
- std::vector<shaderRefCounterPair_t> ShaderHandler::shaders;
-
- Shader* ShaderHandler::getShader(const char* filename){
-
- char* pFile=Shader::findShaderForImageFile(filename);
- if(pFile==NULL)
- pFile=(char*)filename;
-
- std::vector<shaderRefCounterPair_t>::iterator i;
- for(i=shaders.begin();i<shaders.end();i++){
- if(i->first->filename!=NULL && streq(pFile, i->first->filename)){
- i->second++;
- return i->first;
- }
- }
-
- return loadShader(filename);
- }
-
- int ShaderHandler::getNumShaders(){
- return shaders.size();
- }
-
- Shader* ShaderHandler::loadShader(const char* filename){
- Shader* s=new Shader(filename);
-
- shaderRefCounterPair_t p(s, 1);
- shaders.push_back(p);
-
- return s;
- }
-
- void ShaderHandler::releaseShader(Shader* sha){
- if(sha==NULL)
- return;
-
- std::vector<shaderRefCounterPair_t>::iterator i;
- for(i=shaders.begin();i<shaders.end();i++){
- if(i->first==sha){
- i->second--;
- if(i->second==0){
- // if(i->first->filename!=NULL)
- // log("ShaderHandler::releaseShader(): Shader '%s' not referenced any more (I'll delete it).\n", i->first->name);
- delete i->first;
- shaders.erase(i);
- }
- }
- }
- }
-
- bool ShaderHandler::hasShaderForImageFile(const char* filename){
- char* t=Shader::findShaderForImageFile(filename);
- if(t==NULL)
- return false;
- else{
- delete[] t;
- return true;
- }
- }
-