Record the SheetType in each Sheet.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Sheet> allocateSheet)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.LoadScreens
|
||||
|
||||
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;
|
||||
bounds = new Rectangle(0, 0, res.Width, res.Height);
|
||||
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];
|
||||
|
||||
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();
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user