protected static void ProcessAutoProgramParam( int index, string commandName, string[] parameters, MaterialScriptContext context )
{
bool extras = false;
object val = ScriptEnumAttribute.Lookup( parameters[ 1 ], typeof( GpuProgramParameters.AutoConstantType ) );
if ( val != null )
{
bool isFloat = false;
GpuProgramParameters.AutoConstantType constantType = (GpuProgramParameters.AutoConstantType)val;
// these types require extra data
if ( constantType == GpuProgramParameters.AutoConstantType.LightDiffuseColor ||
constantType == GpuProgramParameters.AutoConstantType.LightSpecularColor ||
constantType == GpuProgramParameters.AutoConstantType.LightAttenuation ||
constantType == GpuProgramParameters.AutoConstantType.LightPosition ||
constantType == GpuProgramParameters.AutoConstantType.LightDirection ||
constantType == GpuProgramParameters.AutoConstantType.LightPositionObjectSpace ||
constantType == GpuProgramParameters.AutoConstantType.LightDirectionObjectSpace ||
constantType == GpuProgramParameters.AutoConstantType.Custom )
{
extras = true;
isFloat = false;
}
else if ( constantType == GpuProgramParameters.AutoConstantType.Time_0_X ||
constantType == GpuProgramParameters.AutoConstantType.SinTime_0_X )
{
extras = true;
isFloat = true;
}
// do we require extra data for this parameter?
if ( extras )
{
if ( parameters.Length != 3 )
{
LogParseError( context, "Invalid {0} attribute - Expected 3 parameters.", commandName );
return;
}
}
if ( isFloat && extras )
context.programParams.SetAutoConstant( index, constantType, float.Parse( parameters[ 2 ] ) );
else if ( extras )
context.programParams.SetAutoConstant( index, constantType, int.Parse( parameters[ 2 ] ) );
else if ( constantType == GpuProgramParameters.AutoConstantType.Time )
{
if ( parameters.Length == 3 )
context.programParams.SetAutoConstant( index, constantType, float.Parse( parameters[ 2 ] ) );
else
context.programParams.SetAutoConstant( index, constantType, 1.0f );
}
else
context.programParams.SetAutoConstant( index, constantType, 0 );
}
else
{
string legalValues = ScriptEnumAttribute.GetLegalValues( typeof( GpuProgramParameters.AutoConstantType ) );
LogParseError( context, "Bad auto gpu program param - Invalid param type '{0}', valid values are {1}.", parameters[ 1 ], legalValues );
return;
}
}