diff options
Diffstat (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Graphics/RenderTarget2DExtensions.cs')
-rw-r--r-- | Plugins/MonoGame.Extended/source/MonoGame.Extended.Graphics/RenderTarget2DExtensions.cs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Graphics/RenderTarget2DExtensions.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Graphics/RenderTarget2DExtensions.cs new file mode 100644 index 0000000..f090603 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Graphics/RenderTarget2DExtensions.cs @@ -0,0 +1,41 @@ +using System; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace MonoGame.Extended.Graphics +{ + public static class RenderTarget2DExtensions + { + public static IDisposable BeginDraw(this RenderTarget2D renderTarget, GraphicsDevice graphicsDevice, + Color backgroundColor) + { + return new RenderTargetOperation(renderTarget, graphicsDevice, backgroundColor); + } + + private class RenderTargetOperation : IDisposable + { + private readonly GraphicsDevice _graphicsDevice; + private readonly RenderTargetUsage _previousRenderTargetUsage; + private readonly Viewport _viewport; + + public RenderTargetOperation(RenderTarget2D renderTarget, GraphicsDevice graphicsDevice, + Color backgroundColor) + { + _graphicsDevice = graphicsDevice; + _viewport = _graphicsDevice.Viewport; + _previousRenderTargetUsage = _graphicsDevice.PresentationParameters.RenderTargetUsage; + + _graphicsDevice.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents; + _graphicsDevice.SetRenderTarget(renderTarget); + _graphicsDevice.Clear(backgroundColor); + } + + public void Dispose() + { + _graphicsDevice.SetRenderTarget(null); + _graphicsDevice.PresentationParameters.RenderTargetUsage = _previousRenderTargetUsage; + _graphicsDevice.Viewport = _viewport; + } + } + } +}
\ No newline at end of file |