Example #1
0
        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 );
                        }
                    }
                }
            }
        }