Resource* GLSLShaderManager::createImpl(const String& name, ResourceHandle handle, const String& group, bool isManual, ManualResourceLoader* loader, GpuProgramType gptype, const String& syntaxCode) { ShaderMap::const_iterator iter = mShaderMap.find(syntaxCode); if (iter == mShaderMap.end()) { // No factory, this is an unsupported syntax code, probably for another rendersystem // Create a basic one, it doesn't matter what it is since it won't be used // we have to forward the syntax code though GpuProgram* ret = new GLSLShader(this, name, handle, group, isManual, loader); ret->setSyntaxCode(syntaxCode); return ret; } return (iter->second)(this, name, handle, group, isManual, loader, gptype, syntaxCode); }
void GpuProgram::CmdSyntax::doSet(void* target, const String& val) { GpuProgram* t = static_cast<GpuProgram*>(target); t->setSyntaxCode(val); }
Resource* GLSLShaderManager::createImpl(const String& name, ResourceHandle handle, const String& group, bool isManual, ManualResourceLoader* loader, const NameValuePairList* params) { NameValuePairList::const_iterator paramSyntax, paramType; if (!params || (paramSyntax = params->find("syntax")) == params->end() || (paramType = params->find("type")) == params->end()) { OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "You must supply 'syntax' and 'type' parameters", "GLSLShaderManager::createImpl"); } ShaderMap::const_iterator iter = mShaderMap.find(paramSyntax->second); if(iter == mShaderMap.end()) { // No factory, this is an unsupported syntax code, probably for another rendersystem // Create a basic one, it doesn't matter what it is since it won't be used // we have to forward the syntax code though GpuProgram* ret = new GLSLShader(this, name, handle, group, isManual, loader); ret->setSyntaxCode(paramSyntax->second); return ret; } GpuProgramType gpt; if (paramType->second == "vertex_program") { gpt = GPT_VERTEX_PROGRAM; } else if (paramType->second == "tesselation_hull_program") { gpt = GPT_HULL_PROGRAM; } else if (paramType->second == "tesselation_domain_program") { gpt = GPT_DOMAIN_PROGRAM; } else if (paramType->second == "geometry_program") { gpt = GPT_GEOMETRY_PROGRAM; } else if (paramType->second == "fragment_program") { gpt = GPT_FRAGMENT_PROGRAM; } else if (paramType->second == "compute_program") { gpt = GPT_COMPUTE_PROGRAM; } else { OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "Unknown or unimplemented program type " + paramType->second, "GLSLShaderManager::createImpl"); } return (iter->second)(this, name, handle, group, isManual, loader, gpt, paramSyntax->second); }