Record the SheetType in each Sheet.

This commit is contained in:
Paul Chote
2015-09-28 18:23:25 +01:00
parent 426e187a4c
commit e819ff832b
13 changed files with 23 additions and 18 deletions

View File

@@ -106,7 +106,7 @@ namespace OpenRA.Graphics
sheet = cachedSheets[mi.Src]; sheet = cachedSheets[mi.Src];
else else
{ {
sheet = new Sheet(mi.Src); sheet = new Sheet(SheetType.BGRA, mi.Src);
cachedSheets.Add(mi.Src, sheet); cachedSheets.Add(mi.Src, sheet);
} }

View File

@@ -24,6 +24,8 @@ namespace OpenRA.Graphics
byte[] data; byte[] data;
public readonly Size Size; public readonly Size Size;
public readonly SheetType Type;
public byte[] GetData() public byte[] GetData()
{ {
CreateBuffer(); CreateBuffer();
@@ -32,18 +34,20 @@ namespace OpenRA.Graphics
public bool Buffered { get { return data != null || texture == null; } } public bool Buffered { get { return data != null || texture == null; } }
public Sheet(Size size) public Sheet(SheetType type, Size size)
{ {
Type = type;
Size = size; Size = size;
} }
public Sheet(ITexture texture) public Sheet(SheetType type, ITexture texture)
{ {
Type = type;
this.texture = texture; this.texture = texture;
Size = texture.Size; Size = texture.Size;
} }
public Sheet(string filename) public Sheet(SheetType type, string filename)
{ {
using (var stream = GlobalFileSystem.Open(filename)) using (var stream = GlobalFileSystem.Open(filename))
using (var bitmap = (Bitmap)Image.FromStream(stream)) using (var bitmap = (Bitmap)Image.FromStream(stream))
@@ -54,6 +58,7 @@ namespace OpenRA.Graphics
Util.FastCopyIntoSprite(new Sprite(this, bitmap.Bounds(), TextureChannel.Red), bitmap); Util.FastCopyIntoSprite(new Sprite(this, bitmap.Bounds(), TextureChannel.Red), bitmap);
} }
Type = type;
ReleaseBuffer(); ReleaseBuffer();
} }

View File

@@ -40,16 +40,16 @@ namespace OpenRA.Graphics
int rowHeight = 0; int rowHeight = 0;
Point p; 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) public SheetBuilder(SheetType t)
: this(t, Game.Settings.Graphics.SheetSize) { } : this(t, Game.Settings.Graphics.SheetSize) { }
public SheetBuilder(SheetType t, int sheetSize) public SheetBuilder(SheetType t, int sheetSize)
: this(t, () => AllocateSheet(sheetSize)) { } : this(t, () => AllocateSheet(t, sheetSize)) { }
public SheetBuilder(SheetType t, Func<Sheet> allocateSheet) public SheetBuilder(SheetType t, Func<Sheet> allocateSheet)
{ {

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Graphics
throw new SheetOverflowException("Terrain sheet overflow. Try increasing the tileset SheetSize parameter."); throw new SheetOverflowException("Terrain sheet overflow. Try increasing the tileset SheetSize parameter.");
allocated = true; 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); sheetBuilder = new SheetBuilder(SheetType.Indexed, allocate);

View File

@@ -52,7 +52,7 @@ namespace OpenRA.Graphics
if (allocated) if (allocated)
throw new SheetOverflowException(""); throw new SheetOverflowException("");
allocated = true; allocated = true;
return SheetBuilder.AllocateSheet(Game.Settings.Graphics.SheetSize); return SheetBuilder.AllocateSheet(SheetType.DualIndexed, Game.Settings.Graphics.SheetSize);
}; };
return new SheetBuilder(SheetType.DualIndexed, allocate); return new SheetBuilder(SheetType.DualIndexed, allocate);

View File

@@ -331,7 +331,7 @@ namespace OpenRA.Graphics
var size = new Size(renderer.SheetSize, renderer.SheetSize); var size = new Size(renderer.SheetSize, renderer.SheetSize);
var framebuffer = renderer.Device.CreateFrameBuffer(size); var framebuffer = renderer.Device.CreateFrameBuffer(size);
var sheet = new Sheet(framebuffer.Texture); var sheet = new Sheet(SheetType.DualIndexed, framebuffer.Texture);
mappedBuffers.Add(sheet, framebuffer); mappedBuffers.Add(sheet, framebuffer);
return sheet; return sheet;

View File

@@ -41,7 +41,7 @@ namespace OpenRA.Mods.Cnc
r = Game.Renderer; r = Game.Renderer;
if (r == null) return; if (r == null) return;
sheet = new Sheet(Platform.ResolvePath(loadInfo["Image"])); sheet = new Sheet(SheetType.BGRA, Platform.ResolvePath(loadInfo["Image"]));
var res = r.Resolution; var res = r.Resolution;
bounds = new Rectangle(0, 0, res.Width, res.Height); bounds = new Rectangle(0, 0, res.Width, res.Height);

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.LoadScreens
if (info.ContainsKey("Image")) 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); logo = new Sprite(sheet, new Rectangle(0, 0, 256, 256), TextureChannel.Alpha);
stripe = new Sprite(sheet, new Rectangle(256, 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); stripeRect = new Rectangle(0, r.Resolution.Height / 2 - 128, r.Resolution.Width, 256);

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.LoadScreens
public void Init(Manifest m, Dictionary<string, string> info) public void Init(Manifest m, Dictionary<string, string> info)
{ {
var sheet = new Sheet(info["Image"]); var sheet = new Sheet(SheetType.BGRA, info["Image"]);
var res = Game.Renderer.Resolution; var res = Game.Renderer.Resolution;
bounds = new Rectangle(0, 0, res.Width, res.Height); bounds = new Rectangle(0, 0, res.Width, res.Height);
sprite = new Sprite(sheet, new Rectangle(0, 0, 1024, 480), TextureChannel.Alpha); sprite = new Sprite(sheet, new Rectangle(0, 0, 1024, 480), TextureChannel.Alpha);

View File

@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Widgets
back = new byte[4 * 256 * 256]; 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 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); mixerSheet.GetTexture().SetData(front, 256, 256);
mixerSprite = new Sprite(mixerSheet, rect, TextureChannel.Alpha); mixerSprite = new Sprite(mixerSheet, rect, TextureChannel.Alpha);
GenerateBitmap(); GenerateBitmap();

View File

@@ -28,7 +28,7 @@ namespace OpenRA.Mods.Common.Widgets
using (var hueBitmap = new Bitmap(256, 256)) 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); hueSprite = new Sprite(hueSheet, new Rectangle(0, 0, 256, 1), TextureChannel.Alpha);
var bitmapData = hueBitmap.LockBits(hueBitmap.Bounds(), var bitmapData = hueBitmap.LockBits(hueBitmap.Bounds(),

View File

@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Widgets
base.Initialize(args); base.Initialize(args);
// The four layers are stored in a 2x2 grid within a single texture // 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(); radarSheet.CreateBuffer();
radarData = radarSheet.GetData(); radarData = radarSheet.GetData();

View File

@@ -69,7 +69,7 @@ namespace OpenRA.Mods.Common.Widgets
var size = Math.Max(video.Width, video.Height); var size = Math.Max(video.Width, video.Height);
var textureSize = Exts.NextPowerOf2(size); 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().ScaleFilter = TextureScaleFilter.Linear;
videoSheet.GetTexture().SetData(video.FrameData); videoSheet.GetTexture().SetData(video.FrameData);
@@ -99,7 +99,7 @@ namespace OpenRA.Mods.Common.Widgets
for (var y = 0; y < scaledHeight; y += 2) for (var y = 0; y < scaledHeight; y += 2)
overlay[y, 0] = black; 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); overlaySheet.GetTexture().SetData(overlay);
overlaySprite = new Sprite(overlaySheet, new Rectangle(0, 0, 1, scaledHeight), TextureChannel.Alpha); overlaySprite = new Sprite(overlaySheet, new Rectangle(0, 0, 1, scaledHeight), TextureChannel.Alpha);
} }