void SetCustomGpuParameter( GpuParameters parameter, Vec4 value, bool vertex, bool fragment, bool needForShadowCasterMaterial ) { string parameterAsString = null; int materialCount = needForShadowCasterMaterial ? 4 : 1; for( int nMaterial = 0; nMaterial < materialCount; nMaterial++ ) { Material material = null; switch( nMaterial ) { case 0: material = BaseMaterial; break; case 1: material = BaseMaterial.GetShadowTextureCasterMaterial( RenderLightType.Point ); break; case 2: material = BaseMaterial.GetShadowTextureCasterMaterial( RenderLightType.Directional ); break; case 3: material = BaseMaterial.GetShadowTextureCasterMaterial( RenderLightType.Spot ); break; } if( material == null ) continue; foreach( Technique technique in material.Techniques ) { foreach( Pass pass in technique.Passes ) { GpuProgramParameters vertexParameters = pass.VertexProgramParameters; GpuProgramParameters fragmentParameters = pass.FragmentProgramParameters; if( vertexParameters != null || fragmentParameters != null ) { if( vertex && vertexParameters != null ) { if( !pass.IsCustomGpuParameterInitialized( (int)parameter ) ) { if( parameterAsString == null ) parameterAsString = parameter.ToString(); vertexParameters.SetNamedAutoConstant( parameterAsString, GpuProgramParameters.AutoConstantType.Custom, (int)parameter ); } } if( fragment && fragmentParameters != null ) { if( !pass.IsCustomGpuParameterInitialized( (int)parameter ) ) { if( parameterAsString == null ) parameterAsString = parameter.ToString(); fragmentParameters.SetNamedAutoConstant( parameterAsString, GpuProgramParameters.AutoConstantType.Custom, (int)parameter ); } } pass.SetCustomGpuParameter( (int)parameter, value ); } } } } }
void SetCustomGpuParameter( GpuParameters parameter, Vec4 value ) { for( int nMaterial = 0; nMaterial < 2; nMaterial++ ) { Material material; if( nMaterial == 0 ) { material = BaseMaterial; } else { material = BaseMaterial.ShadowTextureCasterMaterial; if( material == null ) continue; } foreach( Technique technique in material.Techniques ) { foreach( Pass pass in technique.Passes ) { if( pass.VertexProgramParameters != null || pass.FragmentProgramParameters != null ) { if( pass.VertexProgramParameters != null ) { if( !pass.IsCustomGpuParameterInitialized( (int)parameter ) ) { pass.VertexProgramParameters.SetNamedAutoConstant( parameter.ToString(), GpuProgramParameters.AutoConstantType.Custom, (int)parameter ); } } if( pass.FragmentProgramParameters != null ) { if( !pass.IsCustomGpuParameterInitialized( (int)parameter ) ) { pass.FragmentProgramParameters.SetNamedAutoConstant( parameter.ToString(), GpuProgramParameters.AutoConstantType.Custom, (int)parameter ); } } pass.SetCustomGpuParameter( (int)parameter, value ); } } } } }