Record the SheetType in each Sheet.
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user