63 lines
1.5 KiB
C++
63 lines
1.5 KiB
C++
#include "ProgramManager.hpp"
|
|
#include <sstream>
|
|
#include "Platform.hpp"
|
|
|
|
#define PROGRAM_MANAGER_DEBUG 0
|
|
|
|
namespace Diggler {
|
|
|
|
std::string ProgramManager::getShadersName(int flags) const {
|
|
std::ostringstream sstm;
|
|
if (flags & PM_3D)
|
|
sstm << "3d";
|
|
else
|
|
sstm << "2d";
|
|
if (flags & PM_TEXTURED)
|
|
sstm << "Textured";
|
|
if (flags & PM_TEXSHIFT)
|
|
sstm << "Texshift";
|
|
if (flags & PM_COLORED)
|
|
sstm << "Colored";
|
|
if (flags & PM_FOG)
|
|
sstm << "Fog";
|
|
return sstm.str();
|
|
}
|
|
|
|
ProgramManager::ProgramManager() {
|
|
|
|
}
|
|
|
|
const Program* ProgramManager::getProgram(int flags) {
|
|
auto it = m_programs.find(flags);
|
|
if (it != m_programs.end())
|
|
return it->second;
|
|
std::string shaderName = getShadersName(flags);
|
|
Program* prog = new Program(getAssetPath(shaderName + ".v.glsl"), getAssetPath(shaderName + ".f.glsl"));
|
|
prog->link();
|
|
m_programs.insert(std::pair<int, Program*>(flags, prog));
|
|
#if PROGRAM_MANAGER_DEBUG
|
|
getDebugStream() << "Added " << shaderName << ':' << prog->getId() << std::endl;
|
|
#endif
|
|
return prog;
|
|
}
|
|
|
|
const Program *ProgramManager::getSpecialProgram(const std::string &name) {
|
|
Program* prog = new Program(getAssetPath(name + ".v.glsl"), getAssetPath(name + ".f.glsl"));
|
|
prog->link();
|
|
m_specialPrograms.push_back(prog);
|
|
#if PROGRAM_MANAGER_DEBUG
|
|
getDebugStream() << "AddSpecial " << name << ':' << prog->getId() << std::endl;
|
|
#endif
|
|
return prog;
|
|
}
|
|
|
|
ProgramManager::~ProgramManager() {
|
|
for (const std::pair<const int, Program*> pair : m_programs) {
|
|
delete pair.second;
|
|
}
|
|
for (const Program* prog : m_specialPrograms) {
|
|
delete prog;
|
|
}
|
|
}
|
|
|
|
} |