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); }
private static Sampler[] GetSamplers(CommonMaterialProgramSpec spec) { return(new[] { new Sampler { Name = "u_DiffuseTexture", Stage = DiffuseTextureStage } }); }
private static Shader[] GetShaders(CommonMaterialProgramSpec spec) { var preamble = BuildPreamble(spec); return(new Shader[] { new VertexShader(preamble + VertexShader), new FragmentShader(preamble + FragmentShader) }); }
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()); }
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); }
public CommonMaterialProgram(CommonMaterialProgramSpec spec) : base(GetShaders(spec), GetAttribLocations(), GetSamplers(spec)) { }