From 2c3435837209330d8ee32b3270f9cb90e4738aa3 Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Sun, 4 Jan 2015 19:22:41 +0000 Subject: [PATCH] Avoid initialization of graphical elements for a server. Avoid allocating memory and resources for graphical elements that will never be drawn when starting a dedicated server. This reduces the server memory footprint by approx 17 MiB. --- OpenRA.Game/Game.cs | 7 ++++--- OpenRA.Game/Graphics/ChromeProvider.cs | 3 ++- OpenRA.Game/Graphics/Renderer.cs | 9 ++++++--- OpenRA.Game/Graphics/VoxelLoader.cs | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 0315daef3c..cb8c4c33ee 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -300,10 +300,11 @@ namespace OpenRA Sound.StopVideo(); Sound.Initialize(); - ModData = new ModData(mod, true); - - Renderer.InitializeFonts(ModData.Manifest); + ModData = new ModData(mod, !Settings.Server.Dedicated); ModData.InitializeLoaders(); + if (!Settings.Server.Dedicated) + Renderer.InitializeFonts(ModData.Manifest); + using (new PerfTimer("LoadMaps")) ModData.MapCache.LoadMaps(); diff --git a/OpenRA.Game/Graphics/ChromeProvider.cs b/OpenRA.Game/Graphics/ChromeProvider.cs index 490a686c2d..025ce9380d 100644 --- a/OpenRA.Game/Graphics/ChromeProvider.cs +++ b/OpenRA.Game/Graphics/ChromeProvider.cs @@ -70,7 +70,8 @@ namespace OpenRA.Graphics static void LoadCollection(string name, MiniYaml yaml) { - Game.ModData.LoadScreen.Display(); + if (Game.ModData.LoadScreen != null) + Game.ModData.LoadScreen.Display(); var collection = new Collection() { Src = yaml.Value, diff --git a/OpenRA.Game/Graphics/Renderer.cs b/OpenRA.Game/Graphics/Renderer.cs index b90574a7b1..b8711b4ac6 100644 --- a/OpenRA.Game/Graphics/Renderer.cs +++ b/OpenRA.Game/Graphics/Renderer.cs @@ -52,9 +52,12 @@ namespace OpenRA.Graphics Device = CreateDevice(Assembly.LoadFile(rendererPath), resolution.Width, resolution.Height, graphicSettings.Mode); - TempBufferSize = graphicSettings.BatchSize; - TempBufferCount = graphicSettings.NumTempBuffers; - SheetSize = graphicSettings.SheetSize; + if (!serverSettings.Dedicated) + { + TempBufferSize = graphicSettings.BatchSize; + TempBufferCount = graphicSettings.NumTempBuffers; + SheetSize = graphicSettings.SheetSize; + } WorldSpriteRenderer = new SpriteRenderer(this, Device.CreateShader("shp")); WorldRgbaSpriteRenderer = new SpriteRenderer(this, Device.CreateShader("rgba")); diff --git a/OpenRA.Game/Graphics/VoxelLoader.cs b/OpenRA.Game/Graphics/VoxelLoader.cs index b32a80d00a..3b3fc6675b 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.Renderer.SheetSize); + return SheetBuilder.AllocateSheet(Game.Settings.Graphics.SheetSize); }; return new SheetBuilder(SheetType.DualIndexed, allocate);