From a6f5a21ed4ee66a85b5c48511024f9063bfde89e Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Tue, 14 Oct 2014 17:02:48 +0100 Subject: [PATCH] Made Sheet.Texture into Sheet.GetTexture() since we will want to call it for side-effects. Do the same for Sheet.Data since it has the side effect of generating a buffer. --- OpenRA.Game/Graphics/Sheet.cs | 20 +++++++------------ OpenRA.Game/Graphics/SpriteFont.cs | 2 +- OpenRA.Game/Graphics/SpriteRenderer.cs | 4 ++-- OpenRA.Game/Graphics/Util.cs | 4 ++-- OpenRA.Game/Graphics/VoxelRenderer.cs | 2 +- OpenRA.Game/Widgets/VqaPlayerWidget.cs | 10 +++++----- .../Widgets/ColorMixerWidget.cs | 4 ++-- OpenRA.Mods.Common/Widgets/HueSliderWidget.cs | 2 +- OpenRA.Mods.Common/Widgets/RadarWidget.cs | 8 ++++---- 9 files changed, 25 insertions(+), 31 deletions(-) diff --git a/OpenRA.Game/Graphics/Sheet.cs b/OpenRA.Game/Graphics/Sheet.cs index 116bf7f671..e3b4c7ee62 100644 --- a/OpenRA.Game/Graphics/Sheet.cs +++ b/OpenRA.Game/Graphics/Sheet.cs @@ -25,10 +25,8 @@ namespace OpenRA.Graphics byte[] data; public readonly Size Size; - public byte[] Data + public byte[] GetData() { - get - { if (data != null) return data; if (texture == null) @@ -36,8 +34,7 @@ namespace OpenRA.Graphics else data = texture.GetData(); releaseBufferOnCommit = false; - return data; - } + return data; } public bool Buffered { get { return data != null || texture == null; } } @@ -72,15 +69,12 @@ namespace OpenRA.Graphics ReleaseBuffer(); } - public ITexture Texture + public ITexture GetTexture() { // This is only called from the main thread but 'dirty' // is set from other threads too via CommitData(). - get - { - GenerateTexture(); - return texture; - } + GenerateTexture(); + return texture; } void GenerateTexture() @@ -108,7 +102,7 @@ namespace OpenRA.Graphics public Bitmap AsBitmap() { - var d = Data; + var d = GetData(); var dataStride = 4 * Size.Width; var bitmap = new Bitmap(Size.Width, Size.Height); @@ -123,7 +117,7 @@ namespace OpenRA.Graphics public Bitmap AsBitmap(TextureChannel channel, IPalette pal) { - var d = Data; + var d = GetData(); var dataStride = 4 * Size.Width; var bitmap = new Bitmap(Size.Width, Size.Height); var channelOffset = (int)channel; diff --git a/OpenRA.Game/Graphics/SpriteFont.cs b/OpenRA.Game/Graphics/SpriteFont.cs index f246fdae64..562b302855 100644 --- a/OpenRA.Game/Graphics/SpriteFont.cs +++ b/OpenRA.Game/Graphics/SpriteFont.cs @@ -118,7 +118,7 @@ namespace OpenRA.Graphics unsafe { var p = (byte*)bitmap.Buffer; - var dest = s.sheet.Data; + var dest = s.sheet.GetData(); var destStride = s.sheet.Size.Width * 4; for (var j = 0; j < s.size.Y; j++) diff --git a/OpenRA.Game/Graphics/SpriteRenderer.cs b/OpenRA.Game/Graphics/SpriteRenderer.cs index 8c076e7bc5..0ac6b2e82e 100644 --- a/OpenRA.Game/Graphics/SpriteRenderer.cs +++ b/OpenRA.Game/Graphics/SpriteRenderer.cs @@ -32,7 +32,7 @@ namespace OpenRA.Graphics { if (nv > 0) { - shader.SetTexture("DiffuseTexture", currentSheet.Texture); + shader.SetTexture("DiffuseTexture", currentSheet.GetTexture()); renderer.Device.SetBlendMode(currentBlend); shader.Render(() => @@ -109,7 +109,7 @@ namespace OpenRA.Graphics public void DrawVertexBuffer(IVertexBuffer buffer, int start, int length, PrimitiveType type, Sheet sheet) { - shader.SetTexture("DiffuseTexture", sheet.Texture); + shader.SetTexture("DiffuseTexture", sheet.GetTexture()); renderer.Device.SetBlendMode(BlendMode.Alpha); shader.Render(() => renderer.DrawBatch(buffer, start, length, type)); renderer.Device.SetBlendMode(BlendMode.None); diff --git a/OpenRA.Game/Graphics/Util.cs b/OpenRA.Game/Graphics/Util.cs index 1ebb4b3c3e..7dcf6cfc73 100644 --- a/OpenRA.Game/Graphics/Util.cs +++ b/OpenRA.Game/Graphics/Util.cs @@ -43,7 +43,7 @@ namespace OpenRA.Graphics public static void FastCopyIntoChannel(Sprite dest, byte[] src) { FastCopyIntoChannel(dest, 0, src); } public static void FastCopyIntoChannel(Sprite dest, int channelOffset, byte[] src) { - var data = dest.sheet.Data; + var data = dest.sheet.GetData(); var srcStride = dest.bounds.Width; var destStride = dest.sheet.Size.Width * 4; var destOffset = destStride * dest.bounds.Top + dest.bounds.Left * 4 + channelMasks[(int)dest.channel + channelOffset]; @@ -64,7 +64,7 @@ namespace OpenRA.Graphics public static void FastCopyIntoSprite(Sprite dest, Bitmap src) { - var data = dest.sheet.Data; + var data = dest.sheet.GetData(); var dataStride = dest.sheet.Size.Width * 4; var x = dest.bounds.Left * 4; var width = dest.bounds.Width * 4; diff --git a/OpenRA.Game/Graphics/VoxelRenderer.cs b/OpenRA.Game/Graphics/VoxelRenderer.cs index 8ffd3bbb06..3afa4c611b 100644 --- a/OpenRA.Game/Graphics/VoxelRenderer.cs +++ b/OpenRA.Game/Graphics/VoxelRenderer.cs @@ -257,7 +257,7 @@ namespace OpenRA.Graphics float[] ambientLight, float[] diffuseLight, int colorPalette, int normalsPalette) { - shader.SetTexture("DiffuseTexture", renderData.Sheet.Texture); + shader.SetTexture("DiffuseTexture", renderData.Sheet.GetTexture()); shader.SetVec("PaletteRows", (colorPalette + 0.5f) / HardwarePalette.MaxPalettes, (normalsPalette + 0.5f) / HardwarePalette.MaxPalettes); shader.SetMatrix("TransformMatrix", t); diff --git a/OpenRA.Game/Widgets/VqaPlayerWidget.cs b/OpenRA.Game/Widgets/VqaPlayerWidget.cs index d7eca7ce55..1ea729de04 100644 --- a/OpenRA.Game/Widgets/VqaPlayerWidget.cs +++ b/OpenRA.Game/Widgets/VqaPlayerWidget.cs @@ -63,8 +63,8 @@ namespace OpenRA.Widgets var textureSize = Exts.NextPowerOf2(size); var videoSheet = new Sheet(new Size(textureSize, textureSize)); - videoSheet.Texture.ScaleFilter = TextureScaleFilter.Linear; - videoSheet.Texture.SetData(video.FrameData); + videoSheet.GetTexture().ScaleFilter = TextureScaleFilter.Linear; + videoSheet.GetTexture().SetData(video.FrameData); videoSprite = new Sprite(videoSheet, new Rectangle( @@ -90,7 +90,7 @@ namespace OpenRA.Widgets overlay[y, 0] = black; var overlaySheet = new Sheet(new Size(1, Exts.NextPowerOf2(scaledHeight))); - overlaySheet.Texture.SetData(overlay); + overlaySheet.GetTexture().SetData(overlay); overlaySprite = new Sprite(overlaySheet, new Rectangle(0, 0, 1, scaledHeight), TextureChannel.Alpha); } @@ -117,7 +117,7 @@ namespace OpenRA.Widgets while (nextFrame > video.CurrentFrame) { video.AdvanceFrame(); - videoSprite.sheet.Texture.SetData(video.FrameData); + videoSprite.sheet.GetTexture().SetData(video.FrameData); skippedFrames++; } @@ -185,7 +185,7 @@ namespace OpenRA.Widgets paused = true; Sound.StopVideo(); video.Reset(); - videoSprite.sheet.Texture.SetData(video.FrameData); + videoSprite.sheet.GetTexture().SetData(video.FrameData); world.AddFrameEndTask(_ => onComplete()); } } diff --git a/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs b/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs index 38130c9b5f..3e90ec4465 100644 --- a/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs @@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Widgets var rect = new Rectangle((int)(255*SRange[0]), (int)(255*(1 - VRange[1])), (int)(255*(SRange[1] - SRange[0]))+1, (int)(255*(VRange[1] - VRange[0])) + 1); var mixerSheet = new Sheet(new Size(256, 256)); - mixerSheet.Texture.SetData(front, 256, 256); + mixerSheet.GetTexture().SetData(front, 256, 256); mixerSprite = new Sprite(mixerSheet, rect, TextureChannel.Alpha); } @@ -123,7 +123,7 @@ namespace OpenRA.Mods.Common.Widgets { try { - mixerSprite.sheet.Texture.SetData(front, 256, 256); + mixerSprite.sheet.GetTexture().SetData(front, 256, 256); } finally { diff --git a/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs b/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs index 988244c731..2681d50c78 100644 --- a/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs +++ b/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Widgets *(c + h) = HSLColor.FromHSV(h / 255f, 1, 1).RGB.ToArgb(); } hueBitmap.UnlockBits(bitmapData); - hueSheet.Texture.SetData(hueBitmap); + hueSheet.GetTexture().SetData(hueBitmap); } } diff --git a/OpenRA.Mods.Common/Widgets/RadarWidget.cs b/OpenRA.Mods.Common/Widgets/RadarWidget.cs index 088d2aecff..9bca1134c3 100644 --- a/OpenRA.Mods.Common/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.Common/Widgets/RadarWidget.cs @@ -74,7 +74,7 @@ namespace OpenRA.Mods.Common.Widgets var r = new Rectangle(0, 0, width, height); var s = new Size(terrainBitmap.Width, terrainBitmap.Height); var terrainSheet = new Sheet(s); - terrainSheet.Texture.SetData(terrainBitmap); + terrainSheet.GetTexture().SetData(terrainBitmap); terrainSprite = new Sprite(terrainSheet, r, TextureChannel.Alpha); // Data is set in Tick() @@ -203,16 +203,16 @@ namespace OpenRA.Mods.Common.Widgets { updateTicks = 12; using (var bitmap = Minimap.CustomTerrainBitmap(world)) - customTerrainSprite.sheet.Texture.SetData(bitmap); + customTerrainSprite.sheet.GetTexture().SetData(bitmap); } if (updateTicks == 8) using (var bitmap = Minimap.ActorsBitmap(world)) - actorSprite.sheet.Texture.SetData(bitmap); + actorSprite.sheet.GetTexture().SetData(bitmap); if (updateTicks == 4) using (var bitmap = Minimap.ShroudBitmap(world)) - shroudSprite.sheet.Texture.SetData(bitmap); + shroudSprite.sheet.GetTexture().SetData(bitmap); // Enable/Disable the radar var enabled = IsEnabled();