private ShaderEffect MakeMaterial(MaterialContainer mc) { ShaderCodeBuilder scb = new ShaderCodeBuilder(mc, null); var effectParameters = AssembleEffectParamers(mc, scb); ShaderEffect ret = new ShaderEffect(new [] { new EffectPassDeclaration() { VS = scb.VS, PS = scb.PS, StateSet = new RenderStateSet() { ZEnable = true, AlphaBlendEnable = false } } }, effectParameters ); return ret; }
private List<EffectParameterDeclaration> AssembleEffectParamers(MaterialContainer mc, ShaderCodeBuilder scb) { List<EffectParameterDeclaration> effectParameters = new List<EffectParameterDeclaration>(); if (mc.HasDiffuse) { effectParameters.Add(new EffectParameterDeclaration { Name = scb.DiffuseColorName, Value = (object) mc.Diffuse.Color }); if (mc.Diffuse.Texture != null) { effectParameters.Add(new EffectParameterDeclaration { Name = scb.DiffuseMixName, Value = mc.Diffuse.Mix }); effectParameters.Add(new EffectParameterDeclaration { Name = scb.DiffuseTextureName, Value = LoadTexture(mc.Diffuse.Texture) }); } } if (mc.HasSpecular) { effectParameters.Add(new EffectParameterDeclaration { Name = scb.SpecularColorName, Value = (object) mc.Specular.Color }); effectParameters.Add(new EffectParameterDeclaration { Name = scb.SpecularShininessName, Value = (object) mc.Specular.Shininess }); effectParameters.Add(new EffectParameterDeclaration { Name = scb.SpecularIntensityName, Value = (object) mc.Specular.Intensity }); if (mc.Specular.Texture != null) { effectParameters.Add(new EffectParameterDeclaration { Name = scb.SpecularMixName, Value = mc.Specular.Mix }); effectParameters.Add(new EffectParameterDeclaration { Name = scb.SpecularTextureName, Value = LoadTexture(mc.Specular.Texture) }); } } if (mc.HasEmissive) { effectParameters.Add(new EffectParameterDeclaration { Name = scb.EmissiveColorName, Value = (object) mc.Emissive.Color }); if (mc.Emissive.Texture != null) { effectParameters.Add(new EffectParameterDeclaration { Name = scb.EmissiveMixName, Value = mc.Emissive.Mix }); effectParameters.Add(new EffectParameterDeclaration { Name = scb.EmissiveTextureName, Value = LoadTexture(mc.Emissive.Texture) }); } } if (mc.HasBump) { effectParameters.Add(new EffectParameterDeclaration { Name = scb.BumpIntensityName, Value = mc.Bump.Intensity }); effectParameters.Add(new EffectParameterDeclaration { Name = scb.BumpTextureName, Value = LoadTexture(mc.Bump.Texture) }); } // Any light calculation needed at all? if (mc.HasDiffuse || mc.HasSpecular) { // Light calculation parameters effectParameters.Add(new EffectParameterDeclaration { Name = ShaderCodeBuilder.LightColorName, Value = new float3(1, 1, 1) }); effectParameters.Add(new EffectParameterDeclaration { Name = ShaderCodeBuilder.LightIntensityName, Value = (float) 1 }); effectParameters.Add(new EffectParameterDeclaration { Name = ShaderCodeBuilder.LightDirectionName, Value = new float3(0, 0, 1) }); } return effectParameters; }