Пример #1
0
    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);
    }
Пример #2
0
 void GpuProgram::CmdSyntax::doSet(void* target, const String& val)
 {
     GpuProgram* t = static_cast<GpuProgram*>(target);
     t->setSyntaxCode(val);
 }
Пример #3
0
    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);
    }