nuclear@20: #include nuclear@20: #include nuclear@20: #include nuclear@20: #include "shader.h" nuclear@20: #include "sdr.h" nuclear@20: #include "opengl.h" nuclear@20: nuclear@20: std::map sdrdb; nuclear@20: nuclear@21: const SdrProg *SdrProg::active; nuclear@21: nuclear@20: SdrProg::SdrProg() nuclear@20: { nuclear@20: prog = 0; nuclear@20: valid = false; nuclear@20: } nuclear@20: nuclear@20: SdrProg::~SdrProg() nuclear@20: { nuclear@20: destroy(); nuclear@20: } nuclear@20: nuclear@20: void SdrProg::create() nuclear@20: { nuclear@20: destroy(); nuclear@20: prog = glCreateProgram(); nuclear@20: } nuclear@20: nuclear@20: void SdrProg::destroy() nuclear@20: { nuclear@20: if(prog) { nuclear@20: glDeleteProgram(prog); nuclear@20: } nuclear@20: valid = false; nuclear@20: nuclear@20: for(size_t i=0; i::const_iterator it = sdrdb.find(name); nuclear@20: if(it != sdrdb.end()) { nuclear@20: return it->second; nuclear@20: } nuclear@20: nuclear@20: unsigned int sdr = load_shader(name, type); nuclear@20: if(!sdr) { nuclear@20: return 0; nuclear@20: } nuclear@20: nuclear@20: sdrdb[name] = sdr; nuclear@20: return sdr; nuclear@20: } nuclear@21: nuclear@21: SdrProg *get_sdrprog(const char *vfile, const char *pfile) nuclear@21: { nuclear@21: SdrProg *sp = new SdrProg; nuclear@21: if(!sp->load(vfile, pfile)) { nuclear@21: delete sp; nuclear@21: return 0; nuclear@21: } nuclear@21: return sp; nuclear@21: }