public override void EndFrameRendering()
        {
            GraphicsDevice graphicsDevice = base.GraphicsDeviceManager.GraphicsDevice;

            graphicsDevice.BlendState        = BlendState.Opaque;
            graphicsDevice.DepthStencilState = DepthStencilState.None;
            graphicsDevice.RasterizerState   = RasterizerState.CullNone;

            CustomFrameBufferCollection buffers = SceneState.FrameBuffers.GetCustomFrameBufferCollection("colorcorrect", true);

            if (buffers.Count == 0)
            {
                SurfaceFormat surfaceFormat = SurfaceFormat.Color;
                buffers.Add(new RenderTarget2D(graphicsDevice, _viewport.Width, _viewport.Height, false, surfaceFormat, DepthFormat.None, 0, RenderTargetUsage.PlatformContents));
                graphicsDevice.SetRenderTarget(null);
            }

            graphicsDevice.SetRenderTarget(PreviousRenderTarget);
            _colorCorrectEffect.CurrentTechnique = _colorCorrectEffect.Techniques["ColorCorrect"];

            _colorCorrectEffect.Parameters["SceneTexture"].SetValue(ProcessorRenderTarget);
            _colorCorrectEffect.Parameters["Brightness"].SetValue(_brightness);

            _colorCorrectEffect.CurrentTechnique.Passes[0].Apply();
            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);

            base.EndFrameRendering();
        }
Example #2
0
        public override void EndFrameRendering()
        {
            GraphicsDevice graphicsDevice = base.GraphicsDeviceManager.GraphicsDevice;

            graphicsDevice.BlendState = BlendState.Opaque;
            graphicsDevice.BlendState = new BlendState()
            {
                ColorSourceBlend = Blend.SourceColor, ColorDestinationBlend = Blend.DestinationColor, AlphaSourceBlend = Blend.SourceColor, AlphaDestinationBlend = Blend.InverseSourceColor, AlphaBlendFunction = BlendFunction.Add, BlendFactor = Color.White, ColorBlendFunction = BlendFunction.Add
            };
            graphicsDevice.DepthStencilState = DepthStencilState.None;
            graphicsDevice.RasterizerState   = RasterizerState.CullNone;

            CustomFrameBufferCollection bloomBuffers = SceneState.FrameBuffers.GetCustomFrameBufferCollection("bloom", true);

            if (bloomBuffers.Count == 0)
            {
                SurfaceFormat surfaceFormat = SurfaceFormat.Color;
                bloomBuffers.Add(new RenderTarget2D(graphicsDevice, SceneState.FrameBuffers.Width / 2, SceneState.FrameBuffers.Height / 2, false, surfaceFormat, DepthFormat.None, 0, RenderTargetUsage.PlatformContents));
                bloomBuffers.Add(new RenderTarget2D(graphicsDevice, SceneState.FrameBuffers.Width / 2, SceneState.FrameBuffers.Height / 2, false, surfaceFormat, DepthFormat.None, 0, RenderTargetUsage.PlatformContents));
                bloomBuffers.Add(new RenderTarget2D(graphicsDevice, SceneState.FrameBuffers.Width / 2, SceneState.FrameBuffers.Height / 2, false, surfaceFormat, DepthFormat.None, 0, RenderTargetUsage.PlatformContents));
                graphicsDevice.SetRenderTarget(null);
            }

            // BLOOM EXTRACT PreviousRenderTarget
            graphicsDevice.SetRenderTarget(bloomBuffers[0]);
            _bloomExtractEffect.CurrentTechnique = _bloomExtractEffect.Techniques["BloomExtract"];
            _bloomExtractEffect.Parameters["SceneTexture"].SetValue(ProcessorRenderTarget);
            _bloomExtractEffect.Parameters["BloomThreshold"].SetValue(_bloomThreshold);
            _bloomExtractEffect.CurrentTechnique.Passes[0].Apply();
            graphicsDevice.SamplerStates.Reset();
            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);


            // HORIZONTAL BLUR
            graphicsDevice.SetRenderTarget(bloomBuffers[1]);
            _gaussianBlurEffect.CurrentTechnique = _gaussianBlurEffect.Techniques["GaussianBlur"];
            _gaussianBlurEffect.Parameters["SceneTexture"].SetValue(bloomBuffers[0]);
            _gaussianBlurEffect.Parameters["weights"].SetValue(_blurKernel);
            _gaussianBlurEffect.Parameters["offsets"].SetValue(_blurHorizOffsets);
            _gaussianBlurEffect.CurrentTechnique.Passes[0].Apply();
            graphicsDevice.SamplerStates.Reset();
            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);

            // VERTICAL BLUR
            graphicsDevice.SetRenderTarget(bloomBuffers[2]);
            _gaussianBlurEffect.Parameters["SceneTexture"].SetValue(bloomBuffers[1]);
            _gaussianBlurEffect.Parameters["offsets"].SetValue(_blurVertOffsets);
            _gaussianBlurEffect.CurrentTechnique.Passes[0].Apply();
            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);

            //// BLOOM COMBINE
            graphicsDevice.SetRenderTarget(PreviousRenderTarget);
            _bloomCombineEffect.CurrentTechnique = _bloomCombineEffect.Techniques["BloomCombine"];

            _bloomCombineEffect.Parameters["BloomIntensity"].SetValue(_bloomIntensity);
            _bloomCombineEffect.Parameters["BaseIntensity"].SetValue(_baseIntensity);
            _bloomCombineEffect.Parameters["BloomSaturation"].SetValue(_bloomSaturation);
            _bloomCombineEffect.Parameters["BaseSaturation"].SetValue(_baseSaturation);

            _bloomCombineEffect.Parameters["BaseMap"].SetValue(ProcessorRenderTarget);
            _bloomCombineEffect.Parameters["BloomMap"].SetValue(bloomBuffers[2]);

            _bloomCombineEffect.CurrentTechnique.Passes[0].Apply();
            graphicsDevice.SamplerStates.Reset();
            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);

            graphicsDevice.BlendState        = BlendState.Opaque;
            graphicsDevice.DepthStencilState = DepthStencilState.Default;
            graphicsDevice.RasterizerState   = RasterizerState.CullCounterClockwise;
            graphicsDevice.SamplerStates.Reset();

            base.EndFrameRendering();
        }
Example #3
0
        public override void EndFrameRendering()
        {
            GraphicsDevice graphicsDevice = GraphicsDeviceManager.GraphicsDevice;

            graphicsDevice.BlendState        = BlendState.Opaque;
            graphicsDevice.DepthStencilState = DepthStencilState.None;
            graphicsDevice.RasterizerState   = RasterizerState.CullNone;

            // CREATE BUFFERS FOR BLUR
            CustomFrameBufferCollection blurBuffers = SceneState.FrameBuffers.GetCustomFrameBufferCollection("DepthOfField", true);

            if (blurBuffers.Count == 0)
            {
                const SurfaceFormat surfaceFormat = SurfaceFormat.Color;
                blurBuffers.Add(new RenderTarget2D(graphicsDevice, _viewport.Width / 2, _viewport.Height / 2, false, surfaceFormat, DepthFormat.None, 0, RenderTargetUsage.PlatformContents));
                blurBuffers.Add(new RenderTarget2D(graphicsDevice, _viewport.Width / 2, _viewport.Height / 2, false, surfaceFormat, DepthFormat.None, 0, RenderTargetUsage.PlatformContents));
                graphicsDevice.SetRenderTarget(null);
            }

            // HORIZONTAL BLUR
            graphicsDevice.SetRenderTarget(blurBuffers[0]);
            _blurEffect.CurrentTechnique = _blurEffect.Techniques["GaussianBlur"];
            _blurEffect.Parameters["SceneTexture"].SetValue(ProcessorRenderTarget);
            _blurEffect.Parameters["weights"].SetValue(_blurKernel);
            _blurEffect.Parameters["offsets"].SetValue(_blurHorizOffsets);
            _blurEffect.CurrentTechnique.Passes[0].Apply();

            graphicsDevice.SamplerStates.Reset();

            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);

            // VERTICAL BLUR
            graphicsDevice.SetRenderTarget(blurBuffers[1]);
            _blurEffect.Parameters["SceneTexture"].SetValue(blurBuffers[0]);
            _blurEffect.Parameters["offsets"].SetValue(_blurVertOffsets);
            _blurEffect.CurrentTechnique.Passes[0].Apply();
            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);

            // DOF DEPTH COMBINE
            RenderTarget2D depth = SceneState.FrameBuffers.GetBuffer(FrameBufferType.DeferredDepthAndSpecularPower, false);

            graphicsDevice.SetRenderTarget(PreviousRenderTarget);

            _dofEffect.CurrentTechnique = _dofEffect.Techniques["DofPostProcess"];

            _dofEffect.Parameters["FocalDistance"].SetValue(FocalDistance);
            _dofEffect.Parameters["FocalWidth"].SetValue(FocalWidth);
            _dofEffect.Parameters["FarClip"].SetValue(FarClip);

            _dofEffect.Parameters["Attenuation"].SetValue(Attenuation);

            _dofEffect.Parameters["BlurScene"].SetValue(blurBuffers[1]);
            _dofEffect.Parameters["DepthMap"].SetValue(depth);
            _dofEffect.Parameters["DiffuseMap"].SetValue(ProcessorRenderTarget);
            _dofEffect.CurrentTechnique.Passes[0].Apply();

            graphicsDevice.SamplerStates.Reset();

            FullFrameQuad.Render(graphicsDevice, _viewport.Width, _viewport.Height);

            base.EndFrameRendering();
        }