RenderTarget2DExtensions.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using Microsoft.Xna.Framework;
  3. using Microsoft.Xna.Framework.Graphics;
  4. namespace MonoGame.Extended.Graphics
  5. {
  6. public static class RenderTarget2DExtensions
  7. {
  8. public static IDisposable BeginDraw(this RenderTarget2D renderTarget, GraphicsDevice graphicsDevice,
  9. Color backgroundColor)
  10. {
  11. return new RenderTargetOperation(renderTarget, graphicsDevice, backgroundColor);
  12. }
  13. private class RenderTargetOperation : IDisposable
  14. {
  15. private readonly GraphicsDevice _graphicsDevice;
  16. private readonly RenderTargetUsage _previousRenderTargetUsage;
  17. private readonly Viewport _viewport;
  18. public RenderTargetOperation(RenderTarget2D renderTarget, GraphicsDevice graphicsDevice,
  19. Color backgroundColor)
  20. {
  21. _graphicsDevice = graphicsDevice;
  22. _viewport = _graphicsDevice.Viewport;
  23. _previousRenderTargetUsage = _graphicsDevice.PresentationParameters.RenderTargetUsage;
  24. _graphicsDevice.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;
  25. _graphicsDevice.SetRenderTarget(renderTarget);
  26. _graphicsDevice.Clear(backgroundColor);
  27. }
  28. public void Dispose()
  29. {
  30. _graphicsDevice.SetRenderTarget(null);
  31. _graphicsDevice.PresentationParameters.RenderTargetUsage = _previousRenderTargetUsage;
  32. _graphicsDevice.Viewport = _viewport;
  33. }
  34. }
  35. }
  36. }