From e819ff832b92b2a4b5dc5877a2769058f1681f67 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 28 Sep 2015 18:23:25 +0100 Subject: [PATCH] Record the SheetType in each Sheet. --- OpenRA.Game/Graphics/ChromeProvider.cs | 2 +- OpenRA.Game/Graphics/Sheet.cs | 11 ++++++++--- OpenRA.Game/Graphics/SheetBuilder.cs | 6 +++--- OpenRA.Game/Graphics/Theater.cs | 2 +- OpenRA.Game/Graphics/VoxelLoader.cs | 2 +- OpenRA.Game/Graphics/VoxelRenderer.cs | 2 +- OpenRA.Mods.Cnc/CncLoadScreen.cs | 2 +- .../LoadScreens/LogoStripeLoadScreen.cs | 2 +- .../LoadScreens/ModChooserLoadScreen.cs | 2 +- OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs | 2 +- OpenRA.Mods.Common/Widgets/HueSliderWidget.cs | 2 +- OpenRA.Mods.Common/Widgets/RadarWidget.cs | 2 +- OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs | 4 ++-- 13 files changed, 23 insertions(+), 18 deletions(-) diff --git a/OpenRA.Game/Graphics/ChromeProvider.cs b/OpenRA.Game/Graphics/ChromeProvider.cs index 5744924ac4..74fa3bcf0b 100644 --- a/OpenRA.Game/Graphics/ChromeProvider.cs +++ b/OpenRA.Game/Graphics/ChromeProvider.cs @@ -106,7 +106,7 @@ namespace OpenRA.Graphics sheet = cachedSheets[mi.Src]; else { - sheet = new Sheet(mi.Src); + sheet = new Sheet(SheetType.BGRA, mi.Src); cachedSheets.Add(mi.Src, sheet); } diff --git a/OpenRA.Game/Graphics/Sheet.cs b/OpenRA.Game/Graphics/Sheet.cs index 2cb7643afd..aaee749448 100644 --- a/OpenRA.Game/Graphics/Sheet.cs +++ b/OpenRA.Game/Graphics/Sheet.cs @@ -24,6 +24,8 @@ namespace OpenRA.Graphics byte[] data; public readonly Size Size; + public readonly SheetType Type; + public byte[] GetData() { CreateBuffer(); @@ -32,18 +34,20 @@ namespace OpenRA.Graphics public bool Buffered { get { return data != null || texture == null; } } - public Sheet(Size size) + public Sheet(SheetType type, Size size) { + Type = type; Size = size; } - public Sheet(ITexture texture) + public Sheet(SheetType type, ITexture texture) { + Type = type; this.texture = texture; Size = texture.Size; } - public Sheet(string filename) + public Sheet(SheetType type, string filename) { using (var stream = GlobalFileSystem.Open(filename)) using (var bitmap = (Bitmap)Image.FromStream(stream)) @@ -54,6 +58,7 @@ namespace OpenRA.Graphics Util.FastCopyIntoSprite(new Sprite(this, bitmap.Bounds(), TextureChannel.Red), bitmap); } + Type = type; ReleaseBuffer(); } diff --git a/OpenRA.Game/Graphics/SheetBuilder.cs b/OpenRA.Game/Graphics/SheetBuilder.cs index d4e0d859aa..73d42ca056 100644 --- a/OpenRA.Game/Graphics/SheetBuilder.cs +++ b/OpenRA.Game/Graphics/SheetBuilder.cs @@ -40,16 +40,16 @@ namespace OpenRA.Graphics int rowHeight = 0; Point p; - public static Sheet AllocateSheet(int sheetSize) + public static Sheet AllocateSheet(SheetType type, int sheetSize) { - return new Sheet(new Size(sheetSize, sheetSize)); + return new Sheet(type, new Size(sheetSize, sheetSize)); } public SheetBuilder(SheetType t) : this(t, Game.Settings.Graphics.SheetSize) { } public SheetBuilder(SheetType t, int sheetSize) - : this(t, () => AllocateSheet(sheetSize)) { } + : this(t, () => AllocateSheet(t, sheetSize)) { } public SheetBuilder(SheetType t, Func allocateSheet) { diff --git a/OpenRA.Game/Graphics/Theater.cs b/OpenRA.Game/Graphics/Theater.cs index 15227b2993..116c1ba6d0 100644 --- a/OpenRA.Game/Graphics/Theater.cs +++ b/OpenRA.Game/Graphics/Theater.cs @@ -49,7 +49,7 @@ namespace OpenRA.Graphics throw new SheetOverflowException("Terrain sheet overflow. Try increasing the tileset SheetSize parameter."); allocated = true; - return new Sheet(new Size(tileset.SheetSize, tileset.SheetSize)); + return new Sheet(SheetType.Indexed, new Size(tileset.SheetSize, tileset.SheetSize)); }; sheetBuilder = new SheetBuilder(SheetType.Indexed, allocate); diff --git a/OpenRA.Game/Graphics/VoxelLoader.cs b/OpenRA.Game/Graphics/VoxelLoader.cs index 8cc81fe017..7fb70a9c57 100644 --- a/OpenRA.Game/Graphics/VoxelLoader.cs +++ b/OpenRA.Game/Graphics/VoxelLoader.cs @@ -52,7 +52,7 @@ namespace OpenRA.Graphics if (allocated) throw new SheetOverflowException(""); allocated = true; - return SheetBuilder.AllocateSheet(Game.Settings.Graphics.SheetSize); + return SheetBuilder.AllocateSheet(SheetType.DualIndexed, Game.Settings.Graphics.SheetSize); }; return new SheetBuilder(SheetType.DualIndexed, allocate); diff --git a/OpenRA.Game/Graphics/VoxelRenderer.cs b/OpenRA.Game/Graphics/VoxelRenderer.cs index 1f66be1fea..37e806d17f 100644 --- a/OpenRA.Game/Graphics/VoxelRenderer.cs +++ b/OpenRA.Game/Graphics/VoxelRenderer.cs @@ -331,7 +331,7 @@ namespace OpenRA.Graphics var size = new Size(renderer.SheetSize, renderer.SheetSize); var framebuffer = renderer.Device.CreateFrameBuffer(size); - var sheet = new Sheet(framebuffer.Texture); + var sheet = new Sheet(SheetType.DualIndexed, framebuffer.Texture); mappedBuffers.Add(sheet, framebuffer); return sheet; diff --git a/OpenRA.Mods.Cnc/CncLoadScreen.cs b/OpenRA.Mods.Cnc/CncLoadScreen.cs index 945a686e2f..2d75becf2e 100644 --- a/OpenRA.Mods.Cnc/CncLoadScreen.cs +++ b/OpenRA.Mods.Cnc/CncLoadScreen.cs @@ -41,7 +41,7 @@ namespace OpenRA.Mods.Cnc r = Game.Renderer; if (r == null) return; - sheet = new Sheet(Platform.ResolvePath(loadInfo["Image"])); + sheet = new Sheet(SheetType.BGRA, Platform.ResolvePath(loadInfo["Image"])); var res = r.Resolution; bounds = new Rectangle(0, 0, res.Width, res.Height); diff --git a/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs index 28b926fe25..ebfc11a7a2 100644 --- a/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.LoadScreens if (info.ContainsKey("Image")) { - sheet = new Sheet(Platform.ResolvePath(info["Image"])); + sheet = new Sheet(SheetType.BGRA, Platform.ResolvePath(info["Image"])); logo = new Sprite(sheet, new Rectangle(0, 0, 256, 256), TextureChannel.Alpha); stripe = new Sprite(sheet, new Rectangle(256, 0, 256, 256), TextureChannel.Alpha); stripeRect = new Rectangle(0, r.Resolution.Height / 2 - 128, r.Resolution.Width, 256); diff --git a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs index d744f8ccdc..13f5f24d7d 100644 --- a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs @@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.LoadScreens public void Init(Manifest m, Dictionary info) { - var sheet = new Sheet(info["Image"]); + var sheet = new Sheet(SheetType.BGRA, info["Image"]); var res = Game.Renderer.Resolution; bounds = new Rectangle(0, 0, res.Width, res.Height); sprite = new Sprite(sheet, new Rectangle(0, 0, 1024, 480), TextureChannel.Alpha); diff --git a/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs b/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs index c46dedb04b..f9ba46404f 100644 --- a/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ColorMixerWidget.cs @@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Widgets back = new byte[4 * 256 * 256]; 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)); + var mixerSheet = new Sheet(SheetType.BGRA, new Size(256, 256)); mixerSheet.GetTexture().SetData(front, 256, 256); mixerSprite = new Sprite(mixerSheet, rect, TextureChannel.Alpha); GenerateBitmap(); diff --git a/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs b/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs index 9323433333..c5d173dc0f 100644 --- a/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs +++ b/OpenRA.Mods.Common/Widgets/HueSliderWidget.cs @@ -28,7 +28,7 @@ namespace OpenRA.Mods.Common.Widgets using (var hueBitmap = new Bitmap(256, 256)) { - var hueSheet = new Sheet(new Size(256, 256)); + var hueSheet = new Sheet(SheetType.BGRA, new Size(256, 256)); hueSprite = new Sprite(hueSheet, new Rectangle(0, 0, 256, 1), TextureChannel.Alpha); var bitmapData = hueBitmap.LockBits(hueBitmap.Bounds(), diff --git a/OpenRA.Mods.Common/Widgets/RadarWidget.cs b/OpenRA.Mods.Common/Widgets/RadarWidget.cs index deefde107f..b58dc7a92b 100644 --- a/OpenRA.Mods.Common/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.Common/Widgets/RadarWidget.cs @@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Widgets base.Initialize(args); // The four layers are stored in a 2x2 grid within a single texture - radarSheet = new Sheet(new Size(2 * previewWidth, 2 * previewHeight).NextPowerOf2()); + radarSheet = new Sheet(SheetType.BGRA, new Size(2 * previewWidth, 2 * previewHeight).NextPowerOf2()); radarSheet.CreateBuffer(); radarData = radarSheet.GetData(); diff --git a/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs b/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs index 495e18ebd7..359c91efeb 100644 --- a/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs @@ -69,7 +69,7 @@ namespace OpenRA.Mods.Common.Widgets var size = Math.Max(video.Width, video.Height); var textureSize = Exts.NextPowerOf2(size); - var videoSheet = new Sheet(new Size(textureSize, textureSize)); + var videoSheet = new Sheet(SheetType.BGRA, new Size(textureSize, textureSize)); videoSheet.GetTexture().ScaleFilter = TextureScaleFilter.Linear; videoSheet.GetTexture().SetData(video.FrameData); @@ -99,7 +99,7 @@ namespace OpenRA.Mods.Common.Widgets for (var y = 0; y < scaledHeight; y += 2) overlay[y, 0] = black; - var overlaySheet = new Sheet(new Size(1, Exts.NextPowerOf2(scaledHeight))); + var overlaySheet = new Sheet(SheetType.BGRA, new Size(1, Exts.NextPowerOf2(scaledHeight))); overlaySheet.GetTexture().SetData(overlay); overlaySprite = new Sprite(overlaySheet, new Rectangle(0, 0, 1, scaledHeight), TextureChannel.Alpha); }