private EffectTechnique GetTechnique(BasicEffect11 effect, bool texture, bool reflection, NumberOfLights lights) { string fieldName; switch (lights) { case NumberOfLights.One: fieldName = "Light1"; break; case NumberOfLights.Two: fieldName = "Light2"; break; case NumberOfLights.Three: fieldName = "Light3"; break; default: throw new ArgumentOutOfRangeException(); } if (texture) { fieldName += "Tex"; } if (reflection) { fieldName += "Reflect"; } fieldName += "Tech"; var prop = effect.GetType().GetProperty(fieldName); return(prop.GetValue(effect) as EffectTechnique); }
private void InitializeTechniqueTable(BasicEffect11 basicFx, NormalMapEffect11 normalMapFx, DisplacementMapEffect11 displacementMapFx) { var dict1 = new Dictionary <SurfaceMapping, BasicEffect11>() { [SurfaceMapping.Simple] = basicFx, [SurfaceMapping.NormalMapping] = normalMapFx, [SurfaceMapping.DisplacementMapping] = displacementMapFx }; // reflection, texture, surface, lights // non-ref, ref, model foreach (var surface in new[] { SurfaceMapping.Simple, SurfaceMapping.NormalMapping, SurfaceMapping.DisplacementMapping }) { foreach (var reflect in new[] { true, false }) { foreach (var texture in new[] { true, false }) { foreach (var lights in new[] { NumberOfLights.One, NumberOfLights.Two, NumberOfLights.Three }) { _techniqueTable.Add(new Tuple <bool, bool, SurfaceMapping, NumberOfLights>(reflect, texture, surface, lights), new Tuple <EffectTechnique, EffectTechnique, EffectTechnique>( GetTechnique(dict1[surface], texture, false, lights), GetTechnique(basicFx, texture, true, lights), GetTechnique(basicFx, texture, reflect, lights))); } } } } }