Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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)));
                        }
                    }
                }
            }
        }