diff --git a/spine-xna/src/Util.cs b/spine-xna/src/Util.cs index 1c9135c84..6db93e95d 100644 --- a/spine-xna/src/Util.cs +++ b/spine-xna/src/Util.cs @@ -76,7 +76,19 @@ namespace Spine { // Release the GPU back to drawing to the screen device.SetRenderTarget(null); - return result as Texture2D; + // RenderTarget2D are volatile and will be lost on screen resolution changes. + // So instead of using this directly, we create a non-voliate Texture2D. + // This is computationally slower, but should be safe as long as it is done + // on load. + Texture2D resultTexture = new Texture2D(device, file.Width, file.Height); + Color[] resultContent = new Color[Convert.ToInt32(file.Width * file.Height)]; + result.GetData(resultContent); + resultTexture.SetData(resultContent); + + // Dispose of the RenderTarget2D immediately. + result.Dispose(); + + return resultTexture; } } }