示例#1
0
        private static string BuildPreamble(CommonMaterialProgramSpec spec)
        {
            var preamble = "";

            if (spec.SkinEnabled)
            {
                preamble += "#define SKIN_ENABLED\n";
            }
            if (spec.DiffuseTextureEnabled)
            {
                preamble += "#define DIFFUSE_TEXTURE_ENABLED\n";
            }
            if (spec.FogMode != FogMode.None)
            {
                preamble += "#define FOG_ENABLED\n";
                if (spec.FogMode == FogMode.Linear)
                {
                    preamble += "#define FOG_LINEAR\n";
                }
                else if (spec.FogMode == FogMode.Exp)
                {
                    preamble += "#define FOG_EXP\n";
                }
                else if (spec.FogMode == FogMode.ExpSquared)
                {
                    preamble += "#define FOG_EXP_SQUARED\n";
                }
            }
            return(preamble);
        }
示例#2
0
 private static Sampler[] GetSamplers(CommonMaterialProgramSpec spec)
 {
     return(new[] {
         new Sampler {
             Name = "u_DiffuseTexture", Stage = DiffuseTextureStage
         }
     });
 }
示例#3
0
        private static Shader[] GetShaders(CommonMaterialProgramSpec spec)
        {
            var preamble = BuildPreamble(spec);

            return(new Shader[] {
                new VertexShader(preamble + VertexShader),
                new FragmentShader(preamble + FragmentShader)
            });
        }
示例#4
0
        private static Sampler[] GetSamplers(CommonMaterialProgramSpec spec)
        {
            var samplers = new System.Collections.Generic.List <Sampler>(2);

            samplers.Add(new Sampler {
                Name = "u_DiffuseTexture", Stage = DiffuseTextureStage
            });
            if (spec.RecieveShadows)
            {
                samplers.Add(new Sampler {
                    Name = "u_ShadowMapTexture", Stage = ShadowMapTextureStage
                });
            }

            return(samplers.ToArray());
        }
示例#5
0
        private static string BuildPreamble(CommonMaterialProgramSpec spec)
        {
            var preamble = "";

            if (spec.SkinEnabled)
            {
                preamble += "#define SKIN_ENABLED\n";
            }
            if (spec.DiffuseTextureEnabled)
            {
                preamble += "#define DIFFUSE_TEXTURE_ENABLED\n";
            }
            if (spec.FogMode != FogMode.None)
            {
                preamble += "#define FOG_ENABLED\n";
                if (spec.FogMode == FogMode.Linear)
                {
                    preamble += "#define FOG_LINEAR\n";
                }
                else if (spec.FogMode == FogMode.Exp)
                {
                    preamble += "#define FOG_EXP\n";
                }
                else if (spec.FogMode == FogMode.ExpSquared)
                {
                    preamble += "#define FOG_EXP_SQUARED\n";
                }
            }
            if (spec.ProcessLightning)
            {
                preamble += "#define LIGHTNING_ENABLED\n";
            }
            if (spec.RecieveShadows)
            {
                preamble += "#define RECIEVE_SHADOWS\n";
                preamble += "#define SHADOW_MAP_TEXEL_X " + (1f / (spec.ShadowMapSize.X <= 0 ? 1024 : spec.ShadowMapSize.X)) + "\n";
                preamble += "#define SHADOW_MAP_TEXEL_Y " + (1f / (spec.ShadowMapSize.Y <= 0 ? 1024 : spec.ShadowMapSize.Y)) + "\n";

                if (spec.SmoothShadows)
                {
                    preamble += "#define SMOOTH_SHADOW\n";
                    preamble += "#define TEXTURE_PCF " + (spec.HighQualitySmoothShadows ? "texture2DPCF16" : "texture2DPCF4") + "\n";
                }
            }

            return(preamble);
        }
示例#6
0
 public CommonMaterialProgram(CommonMaterialProgramSpec spec)
     : base(GetShaders(spec), GetAttribLocations(), GetSamplers(spec))
 {
 }