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(); }
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(); }
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(); }