Shader::IProgramObject* CShaderHandler::CreateProgramObject(const std::string& poClass, const std::string& poName, bool arbProgram) { Shader::IProgramObject* po = Shader::nullProgramObject; const char* poType = arbProgram? "ARB": "GLSL"; if (programObjects.find(poClass) != programObjects.end()) { if (programObjects[poClass].find(poName) != programObjects[poClass].end()) { LOG_L(L_WARNING, "[SH::%s] program-object \"%s\" already exists", __func__, poName.c_str()); return (programObjects[poClass][poName]); } } else { programObjects[poClass] = ProgramObjMap(); } if (arbProgram) { if (globalRendering->haveARB) po = new Shader::ARBProgramObject(poName); } else { if (globalRendering->haveGLSL) po = new Shader::GLSLProgramObject(poName); } if (po == Shader::nullProgramObject) LOG_L(L_ERROR, "[SH::%s] hardware does not support creating (%s) program-object \"%s\"", __func__, poType, poName.c_str()); programObjects[poClass][poName] = po; return po; }
Shader::IProgramObject* CShaderHandler::CreateProgramObject(const std::string& poClass, const std::string& poName, bool arbProgram) { Shader::IProgramObject* po = NULL; if (programObjects.find(poClass) != programObjects.end()) { if (programObjects[poClass].find(poName) != programObjects[poClass].end()) { return (programObjects[poClass][poName]); } } else { programObjects[poClass] = ProgramObjMap(); } if (arbProgram) { po = new Shader::ARBProgramObject(); } else { po = new Shader::GLSLProgramObject(); } programObjects[poClass][poName] = po; return po; }