diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index 9f6542433f..8eb2d4f19d 100644 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -39,7 +39,7 @@ namespace OpenRa.Game Provider sheetProvider = delegate { - Sheet t = new Sheet( new Bitmap(pageSize.Width, pageSize.Height)); + Sheet t = new Sheet( new Bitmap(pageSize.Width, pageSize.Height),renderer.Device); sheets.Add(t); return t; }; @@ -63,22 +63,18 @@ namespace OpenRa.Game } } - foreach (Sheet s in sheets) - s.LoadTexture(renderer.Device); - world = new World(renderer.Device); treeCache = new TreeCache(renderer.Device, map, TileMix, pal); foreach (TreeReference treeReference in map.Trees) world.Add(new Tree(treeReference, treeCache, map)); + UnitSheetBuilder.Initialize(renderer.Device); UnitSheetBuilder.AddUnit( "mcv", playerPal ); UnitSheetBuilder.AddUnit("1tnk", playerPal); UnitSheetBuilder.AddUnit("2tnk", playerPal); UnitSheetBuilder.AddUnit("3tnk", playerPal); - UnitSheetBuilder.Resolve(renderer.Device); - world.Add( new Mcv( new PointF( 24 * 5, 24 * 5 ) ) ); } @@ -207,7 +203,7 @@ namespace OpenRa.Game renderer.DrawBatch(vertexBuffer, batch.Value, new Range(verticesPerRow * firstRow, verticesPerRow * lastRow), new Range(indicesPerRow * firstRow, indicesPerRow * lastRow), - batch.Key.texture); + batch.Key.Texture); }); } diff --git a/OpenRa.Game/Sheet.cs b/OpenRa.Game/Sheet.cs index 35fd7555d0..aa68852d16 100644 --- a/OpenRa.Game/Sheet.cs +++ b/OpenRa.Game/Sheet.cs @@ -11,11 +11,24 @@ namespace OpenRa.Game class Sheet { public readonly Bitmap bitmap; - public Texture texture; + + readonly GraphicsDevice device; + Texture texture; - public Sheet(Bitmap b) { bitmap = b; } + public Sheet(Bitmap b, GraphicsDevice d) { bitmap = b; device = d; } - public void LoadTexture(GraphicsDevice device) + public Texture Texture + { + get + { + if (texture == null) + LoadTexture(); + + return texture; + } + } + + void LoadTexture() { string tempFile = string.Format("../../../block-cache-{0}.png", suffix++); bitmap.Save(tempFile); diff --git a/OpenRa.Game/TreeCache.cs b/OpenRa.Game/TreeCache.cs index 16b5278e77..3bfdf25e0c 100644 --- a/OpenRa.Game/TreeCache.cs +++ b/OpenRa.Game/TreeCache.cs @@ -20,7 +20,7 @@ namespace OpenRa.Game Provider sheetProvider = delegate { - Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height)); + Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height), device); sheets.Add(sheet); return sheet; }; @@ -42,9 +42,6 @@ namespace OpenRa.Game trees.Add(r.Image, rect); } - foreach (Sheet sheet in sheets) - sheet.LoadTexture(device); - sh = sheets[0]; } diff --git a/OpenRa.Game/UnitSheetBuilder.cs b/OpenRa.Game/UnitSheetBuilder.cs index fa8a56a2eb..941ae6d18c 100644 --- a/OpenRa.Game/UnitSheetBuilder.cs +++ b/OpenRa.Game/UnitSheetBuilder.cs @@ -16,11 +16,11 @@ namespace OpenRa.Game static List sheets = new List(); static Size pageSize = new Size(1024, 512); - static UnitSheetBuilder() + public static void Initialize( GraphicsDevice device ) { Provider sheetProvider = delegate { - Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height)); + Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height), device); sheets.Add(sheet); return sheet; }; @@ -28,12 +28,6 @@ namespace OpenRa.Game builder = new TileSheetBuilder(pageSize, sheetProvider); } - public static void Resolve( GraphicsDevice device ) - { - foreach (Sheet sheet in sheets) - sheet.LoadTexture(device); - } - public static void AddUnit( string name, Palette pal ) { ShpReader reader = new ShpReader( unitsPackage.GetContent( name + ".shp" ) ); diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index 2282dcaed5..514cfa97fa 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -89,7 +89,7 @@ namespace OpenRa.Game renderer.DrawBatch(vb, ib, new Range(0, vertices.Count), new Range(0, indices.Count), - sheet.texture); + sheet.Texture); }); } }