00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "ShaderCache.h"
00018
00019 using namespace Fluxus;
00020
00021 std::map<std::string,GLSLShaderPair *> ShaderCache::m_Cache;
00022
00023 ShaderCache::ShaderCache()
00024 {
00025 }
00026
00027 ShaderCache::~ShaderCache()
00028 {
00029 Clear();
00030 }
00031
00032 GLSLShader *ShaderCache::Get(const string &vert, const string &frag)
00033 {
00034
00035 string key = vert+" "+frag;
00036 map<string, GLSLShaderPair *>::iterator i = m_Cache.find(key);
00037 if (i!=m_Cache.end()) return new GLSLShader(*i->second);
00038
00039 GLSLShaderPair *pair = new GLSLShaderPair(vert,frag);
00040 m_Cache[key] = pair;
00041 return new GLSLShader(*pair);
00042 }
00043
00044 void ShaderCache::Clear()
00045 {
00046 for (map<string, GLSLShaderPair *>::iterator i=m_Cache.begin();
00047 i!=m_Cache.end(); ++i)
00048 {
00049 delete i->second;
00050 }
00051 m_Cache.clear();
00052 }
00053
00054 void ShaderCache::Dump()
00055 {
00056 for (map<string, GLSLShaderPair *>::iterator i=m_Cache.begin();
00057 i!=m_Cache.end(); ++i)
00058 {
00059 Trace::Stream<<i->first<<endl;
00060 }
00061 m_Cache.clear();
00062 }