//----------------------------------------------------------------------------- ParameterPtr Function::resolveLocalParameter(Parameter::Semantic semantic, int index, const String& name, GpuConstantType type) { ParameterPtr param; param = getParameterByName(mLocalParameters, name); if (param.get() != NULL) { if (param->getType() == type && param->getSemantic() == semantic && param->getIndex() == index) { return param; } else { OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "Can not resolve local parameter due to type mismatch. Function <" + getName() + ">", "Function::resolveLocalParameter" ); } } param = ParameterPtr(OGRE_NEW Parameter(type, name, semantic, index, Parameter::SPC_UNKNOWN)); addParameter(mLocalParameters, param); return param; }
//----------------------------------------------------------------------------- void Program::addParameter(UniformParameterPtr parameter) { if (getParameterByName(parameter->getName()).get() != NULL) { OGRE_EXCEPT( Exception::ERR_INVALIDPARAMS, "Parameter <" + parameter->getName() + "> already declared in program.", "Program::addParameter" ); } mParameters.push_back(parameter); }
//----------------------------------------------------------------------------- void Function::addParameter(ShaderParameterList& parameterList, ParameterPtr parameter) { // Check that parameter with the same name doest exist in input parameters list. if (getParameterByName(mInputParameters, parameter->getName()).get() != NULL) { OGRE_EXCEPT( Exception::ERR_INVALIDPARAMS, "Parameter <" + parameter->getName() + "> already declared in function <" + getName() + ">", "Function::addParameter" ); } // Check that parameter with the same name doest exist in output parameters list. if (getParameterByName(mOutputParameters, parameter->getName()).get() != NULL) { OGRE_EXCEPT( Exception::ERR_INVALIDPARAMS, "Parameter <" + parameter->getName() + "> already declared in function <" + getName() + ">", "Function::addParameter" ); } // Add to given parameters list. parameterList.push_back(parameter); }