GL3ShaderProgram *GL3ShaderManager::getShader(GL3ShaderType type) { if (_programCache[static_cast<size_t>(type)]) { return _programCache[static_cast<size_t>(type)].get(); } _programCache[static_cast<size_t>(type)].reset(new GL3ShaderProgram(_fileLoader, getShaderDefinition(type))); return _programCache[static_cast<size_t>(type)].get(); }
GLuint GL3ShaderManager::getProgram(ShaderType type, ShaderFlags flags) { auto iter = _programCache.find(std::make_pair(type, flags)); if (iter != _programCache.end()) { return iter->second; } auto definition = getShaderDefinition(type); auto prog = compileProgram(_fileLoader, definition, getHeader(flags)); bindLocations(prog, definition); _programCache.insert(std::make_pair(std::make_pair(type, flags), prog)); return prog; }