public MyEffectPointLight()
            : base("Effects2\\Lights\\MyEffectPointLight")
        {
            m_normalsRT = m_D3DEffect.GetParameter(null, "NormalsRT");
            m_diffuseRT = m_D3DEffect.GetParameter(null, "DiffuseRT");
            m_depthsRT  = m_D3DEffect.GetParameter(null, "DepthsRT");
            m_halfPixel = m_D3DEffect.GetParameter(null, "HalfPixel");
            m_scale     = m_D3DEffect.GetParameter(null, "Scale");

            m_lightPosition      = m_D3DEffect.GetParameter(null, "LightPosition");
            m_lightRadius        = m_D3DEffect.GetParameter(null, "LightRadius");
            m_lightColor         = m_D3DEffect.GetParameter(null, "LightColor");
            m_lightSpecularColor = m_D3DEffect.GetParameter(null, "LightSpecularColor");
            m_lightIntensity     = m_D3DEffect.GetParameter(null, "LightIntensity");
            m_lightFalloff       = m_D3DEffect.GetParameter(null, "Falloff");

            m_worldViewProjMatrix = m_D3DEffect.GetParameter(null, "WorldViewProjMatrix");
            m_viewProjMatrix      = m_D3DEffect.GetParameter(null, "ViewProjMatrix");
            m_worldMatrix         = m_D3DEffect.GetParameter(null, "WorldMatrix");
            m_viewMatrix          = m_D3DEffect.GetParameter(null, "ViewMatrix");
            m_lightViewProjection = m_D3DEffect.GetParameter(null, "LightViewProjection");

            m_cameraPosition           = m_D3DEffect.GetParameter(null, "CameraPosition");
            m_reflectorDirection       = m_D3DEffect.GetParameter(null, "ReflectorDirection");
            m_reflectorConeMaxAngleCos = m_D3DEffect.GetParameter(null, "ReflectorConeMaxAngleCos");
            m_reflectorColor           = m_D3DEffect.GetParameter(null, "ReflectorColor");
            m_reflectorRange           = m_D3DEffect.GetParameter(null, "ReflectorRange");
            m_reflectorIntensity       = m_D3DEffect.GetParameter(null, "ReflectorIntensity");
            m_reflectorFalloff         = m_D3DEffect.GetParameter(null, "ReflectorFalloff");
            m_reflectorTexture         = m_D3DEffect.GetParameter(null, "ReflectorTexture");
            m_reflectorTextureEnabled  = m_D3DEffect.GetParameter(null, "ReflectorTextureEnabled");

            m_nearSlopeBiasDistance = m_D3DEffect.GetParameter(null, "NearSlopeBiasDistance");

            m_pointTechnique = m_D3DEffect.GetTechnique("Technique_Lighting");

            m_pointWithReflectorTechnique = m_D3DEffect.GetTechnique("Technique_LightingWithReflector");
            m_spotTechnique        = m_D3DEffect.GetTechnique("Technique_Spot");
            m_spotShadowsTechnique = m_D3DEffect.GetTechnique("Technique_SpotShadows");

            // Reflector texture disabled unless set
            m_D3DEffect.SetValue(m_reflectorTextureEnabled, false);

            DefaultTechnique           = MyEffectPointLightTechnique.Default;
            DefaultPointTechnique      = MyEffectPointLightTechnique.Default;
            DefaultHemisphereTechnique = MyEffectPointLightTechnique.Default;

            DefaultReflectorTechnique  = MyEffectPointLightTechnique.Reflector;
            DefaultSpotTechnique       = MyEffectPointLightTechnique.Spot;
            DefaultSpotShadowTechnique = MyEffectPointLightTechnique.SpotShadows;

            SetTechnique(DefaultTechnique);
        }
        public void SetTechnique(MyEffectPointLightTechnique technique)
        {
            switch (technique)
            {
            case MyEffectPointLightTechnique.Point:
                m_D3DEffect.Technique = m_pointTechnique;
                break;

            case MyEffectPointLightTechnique.PointShadows:
                m_D3DEffect.Technique = m_pointShadowsTechnique;
                break;

            case MyEffectPointLightTechnique.Spot:
                m_D3DEffect.Technique = m_spotTechnique;
                break;

            case MyEffectPointLightTechnique.SpotShadows:
                m_D3DEffect.Technique = m_spotShadowsTechnique;
                break;

            default:
                throw new InvalidBranchException();
            }
        }
        public void SetTechnique(MyEffectPointLightTechnique technique)
        {
            switch (technique)
            {
            case MyEffectPointLightTechnique.Default:
                m_D3DEffect.Technique = m_pointTechnique;
                break;

            case MyEffectPointLightTechnique.Reflector:
                m_D3DEffect.Technique = m_pointWithReflectorTechnique;
                break;

            case MyEffectPointLightTechnique.Spot:
                m_D3DEffect.Technique = m_spotTechnique;
                break;

            case MyEffectPointLightTechnique.SpotShadows:
                m_D3DEffect.Technique = m_spotShadowsTechnique;
                break;

            default:
                throw new MyMwcExceptionApplicationShouldNotGetHere();
            }
        }
        public MyEffectPointLight()
            : base("Effects2\\Lights\\MyEffectPointLight")
        {
            m_normalsRT = m_D3DEffect.GetParameter(null, "NormalsRT");
            m_diffuseRT = m_D3DEffect.GetParameter(null, "DiffuseRT");
            m_depthsRT = m_D3DEffect.GetParameter(null, "DepthsRT");
            m_halfPixel = m_D3DEffect.GetParameter(null, "HalfPixel");
            m_scale = m_D3DEffect.GetParameter(null, "Scale");

            m_lightPosition = m_D3DEffect.GetParameter(null, "LightPosition");
            m_lightRadius = m_D3DEffect.GetParameter(null, "LightRadius");
            m_lightColor = m_D3DEffect.GetParameter(null, "LightColor");
            m_lightSpecularColor = m_D3DEffect.GetParameter(null, "LightSpecularColor");
            m_lightIntensity = m_D3DEffect.GetParameter(null, "LightIntensity");
            m_lightFalloff = m_D3DEffect.GetParameter(null, "Falloff");

            m_worldViewProjMatrix = m_D3DEffect.GetParameter(null, "WorldViewProjMatrix");
            m_viewProjMatrix = m_D3DEffect.GetParameter(null, "ViewProjMatrix");
            m_worldMatrix = m_D3DEffect.GetParameter(null, "WorldMatrix");
            m_viewMatrix = m_D3DEffect.GetParameter(null, "ViewMatrix");
            m_lightViewProjection = m_D3DEffect.GetParameter(null, "LightViewProjection");
            
            m_cameraPosition = m_D3DEffect.GetParameter(null, "CameraPosition");
            m_reflectorDirection = m_D3DEffect.GetParameter(null, "ReflectorDirection");
            m_reflectorConeMaxAngleCos = m_D3DEffect.GetParameter(null, "ReflectorConeMaxAngleCos");
            m_reflectorColor = m_D3DEffect.GetParameter(null, "ReflectorColor");
            m_reflectorRange = m_D3DEffect.GetParameter(null, "ReflectorRange");
            m_reflectorIntensity = m_D3DEffect.GetParameter(null, "ReflectorIntensity");
            m_reflectorFalloff = m_D3DEffect.GetParameter(null, "ReflectorFalloff");
            m_reflectorTexture = m_D3DEffect.GetParameter(null, "ReflectorTexture");
            m_reflectorTextureEnabled = m_D3DEffect.GetParameter(null, "ReflectorTextureEnabled");

            m_nearSlopeBiasDistance = m_D3DEffect.GetParameter(null, "NearSlopeBiasDistance");

            m_pointTechnique = m_D3DEffect.GetTechnique("Technique_Lighting");

            m_pointWithReflectorTechnique = m_D3DEffect.GetTechnique("Technique_LightingWithReflector");
            m_spotTechnique = m_D3DEffect.GetTechnique("Technique_Spot");
            m_spotShadowsTechnique = m_D3DEffect.GetTechnique("Technique_SpotShadows");

            // Reflector texture disabled unless set
            m_D3DEffect.SetValue(m_reflectorTextureEnabled, false);

            DefaultTechnique = MyEffectPointLightTechnique.Default;
            DefaultPointTechnique = MyEffectPointLightTechnique.Default;
            DefaultHemisphereTechnique = MyEffectPointLightTechnique.Default;

            DefaultReflectorTechnique = MyEffectPointLightTechnique.Reflector;
            DefaultSpotTechnique = MyEffectPointLightTechnique.Spot;
            DefaultSpotShadowTechnique = MyEffectPointLightTechnique.SpotShadows;

            SetTechnique(DefaultTechnique);
        }
        public void SetTechnique(MyEffectPointLightTechnique technique)
        {
            switch (technique)
            {
                case MyEffectPointLightTechnique.Default:
                    m_D3DEffect.Technique = m_pointTechnique;
                    break;

                case MyEffectPointLightTechnique.Reflector:
                    m_D3DEffect.Technique = m_pointWithReflectorTechnique;
                    break;

                case MyEffectPointLightTechnique.Spot:
                    m_D3DEffect.Technique = m_spotTechnique;
                    break;

                case MyEffectPointLightTechnique.SpotShadows:
                    m_D3DEffect.Technique = m_spotShadowsTechnique;
                    break;

                default:
                    throw new MyMwcExceptionApplicationShouldNotGetHere();
            }
        }
        public void SetTechnique(MyEffectPointLightTechnique technique)
        {
            switch (technique)
            {
                case MyEffectPointLightTechnique.Point:
                    m_D3DEffect.Technique = m_pointTechnique;
                    break;

                case MyEffectPointLightTechnique.PointShadows:
                    m_D3DEffect.Technique = m_pointShadowsTechnique;
                    break;

                case MyEffectPointLightTechnique.Spot:
                    m_D3DEffect.Technique = m_spotTechnique;
                    break;

                case MyEffectPointLightTechnique.SpotShadows:
                    m_D3DEffect.Technique = m_spotShadowsTechnique;
                    break;

                default:
                    throw new InvalidBranchException();
            }
        }