From d37a59d1c98e3bb24d22023667fe216d6369f55b Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 17 Mar 2010 22:32:12 +1300 Subject: [PATCH] proper handling of dirty sheets (about 2 years overdue) --- OpenRA.Game/Graphics/Sheet.cs | 17 ++++++++++------- OpenRA.Game/Graphics/SheetBuilder.cs | 1 + OpenRA.Game/Shroud.cs | 2 -- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/OpenRA.Game/Graphics/Sheet.cs b/OpenRA.Game/Graphics/Sheet.cs index f0f0934b83..d407ee039a 100644 --- a/OpenRA.Game/Graphics/Sheet.cs +++ b/OpenRA.Game/Graphics/Sheet.cs @@ -28,8 +28,8 @@ namespace OpenRA.Graphics { readonly Renderer renderer; protected readonly Bitmap bitmap; - ITexture texture; + bool dirty; internal Sheet(Renderer renderer, Size size) { @@ -43,17 +43,18 @@ namespace OpenRA.Graphics this.bitmap = (Bitmap)Image.FromStream(FileSystem.Open(filename)); } - void Resolve() - { - texture = renderer.Device.CreateTexture(bitmap); - } - public ITexture Texture { get { if (texture == null) - Resolve(); + texture = renderer.Device.CreateTexture(bitmap); + + if (dirty) + { + texture.SetData(bitmap); + dirty = false; + } return texture; } @@ -68,5 +69,7 @@ namespace OpenRA.Graphics } public Bitmap Bitmap { get { return bitmap; } } // for perf + + public void MakeDirty() { dirty = true; } } } diff --git a/OpenRA.Game/Graphics/SheetBuilder.cs b/OpenRA.Game/Graphics/SheetBuilder.cs index 7462490ee9..6af79654b7 100644 --- a/OpenRA.Game/Graphics/SheetBuilder.cs +++ b/OpenRA.Game/Graphics/SheetBuilder.cs @@ -111,6 +111,7 @@ namespace OpenRA.Graphics } Sprite rect = new Sprite(current, new Rectangle(p, imageSize), channel.Value); + current.MakeDirty(); p.X += imageSize.Width; return rect; diff --git a/OpenRA.Game/Shroud.cs b/OpenRA.Game/Shroud.cs index c9395eacb3..b2a127b504 100644 --- a/OpenRA.Game/Shroud.cs +++ b/OpenRA.Game/Shroud.cs @@ -53,8 +53,6 @@ namespace OpenRA sprites = new Sprite[map.MapSize, map.MapSize]; gapField = new int[map.MapSize, map.MapSize]; gapActive = new bool[map.MapSize, map.MapSize]; - - shadowBits[0].sheet.Texture.SetData(shadowBits[0].sheet.Bitmap); // HACK } public bool HasGPS