public SSAOEffect(Game game, float radius, float intensity, float scale, float bias)
            : base(game)
        {
            ssao = new SSAO(game, radius, intensity, scale, bias);

            posMap = new WorldPositionMap(game);

            blur = new PoissonDiscBlur(game);
            blur.Sampler = SamplerState.PointClamp;

            blend = new SceneBlend(game);
            blend.Blend = true;
            blend.Sampler = SamplerState.PointClamp;


            AddPostProcess(posMap);
            AddPostProcess(ssao);
            AddPostProcess(blur);
            AddPostProcess(blend);
        }
        public override void Load()
        {
            base.Load();

            if (GraphicsDevice != null)
            {
                // Effects
                m_ClearGBufferEffect = RenderManager.Instance.LoadEffect("Shaders/Deferred Rendering/ClearGBuffer");

                // Post Processing 
                m_GaussianEffect = RenderManager.Instance.GetEffect("GaussianBlurPostProcessor");
                m_DepthOfFieldEffect = RenderManager.Instance.GetEffect("DOFPostProcessor");
                m_BloomEffect = RenderManager.Instance.GetEffect("BloomPostProcessor");
                m_MergeEffect = RenderManager.Instance.GetEffect("MergeBloomPostProcessor");
                m_EdgeDetectionEffect = RenderManager.Instance.GetEffect("EdgeDetectionPostProcessor");
                m_MLAAEffect = RenderManager.Instance.GetEffect("MLAAPostProcessor");
                m_FilmGrainEffect = RenderManager.Instance.GetEffect("FilmMappingPostProcessor");
                m_SSAOEffect = RenderManager.Instance.GetEffect("SSAO");
                m_SSAOBlurEffect = RenderManager.Instance.GetEffect("SSAOBlur");
                m_SSAOMergeEffect = RenderManager.Instance.GetEffect("SSAOMerge");
                m_FXAAEffect = RenderManager.Instance.GetEffect("FXAA");

                // Post Processor
                m_MLAAProcessor = new MLAA(GraphicsDevice, m_MLAAEffect, m_EdgeDetectionEffect);
                m_SSAOProcessor = new SSAO(GraphicsDevice, m_SSAOEffect, m_SSAOBlurEffect, m_SSAOMergeEffect);
                m_FXAAProcessor = new FXAA(GraphicsDevice, m_FXAAEffect);

                // These post processors were created up front so just assign the effect so them
                m_DepthOfFieldPostProcessor.Effect = m_DepthOfFieldEffect;
                m_DepthOfFieldPostProcessor.BlurEffect = m_GaussianEffect;
                m_BloomPostProcessor.Effect = m_BloomEffect;
                m_BloomPostProcessor.BlurEffect = m_GaussianEffect;
                m_BloomPostProcessor.MergeEffect = m_MergeEffect;
                m_FilmGrainProcessor.Effect = m_FilmGrainEffect;
            }
        }