From eed38b3da4f45d7fa0576d183646496723c136fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 31 Oct 2013 21:24:28 +0100 Subject: [PATCH 1/3] fallback to defaults when something goes wrong --- OpenRA.Game/Game.cs | 27 ++++++++++++++++++++--- OpenRA.Game/Graphics/Renderer.cs | 6 ++--- OpenRA.Renderer.SdlCommon/ErrorHandler.cs | 1 - 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 406c755a2e..e31eb60907 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -285,6 +285,7 @@ namespace OpenRA Log.AddChannel("sync", "syncreport.log"); Log.AddChannel("server", "server.log"); Log.AddChannel("sound", "sound.log"); + Log.AddChannel("graphics", "graphics.log"); if (Settings.Server.DiscoverNatDevices) UPnP.TryNatDiscovery(); @@ -295,14 +296,34 @@ namespace OpenRA } FileSystem.Mount("."); // Needed to access shaders - Renderer.Initialize( Game.Settings.Graphics.Mode ); + try + { + Renderer.Initialize(Game.Settings.Graphics.Mode); + } + catch (Exception e) + { + Log.Write("graphics", "{0}", e); + Console.WriteLine("Renderer initialization failed. Fallback in place. Check graphics.log for details."); + Settings.Graphics.Renderer = new GraphicSettings().Renderer; + Renderer.Initialize(Settings.Graphics.Mode); + } Renderer = new Renderer(); + try + { + Sound.Create(Settings.Sound.Engine); + } + catch (Exception e) + { + Log.Write("sound", "{0}", e); + Console.WriteLine("Creating the sound engine failed. Fallback in place. Check sound.log for details."); + Settings.Sound.Engine = "Null"; + Sound.Create(Settings.Sound.Engine); + } + Console.WriteLine("Available mods:"); foreach(var mod in Mod.AllMods) Console.WriteLine("\t{0}: {1} ({2})", mod.Key, mod.Value.Title, mod.Value.Version); - - Sound.Create(Settings.Sound.Engine); InitializeWithMods(Settings.Game.Mods); if (Settings.Server.DiscoverNatDevices) diff --git a/OpenRA.Game/Graphics/Renderer.cs b/OpenRA.Game/Graphics/Renderer.cs index f75316a2d9..417d616481 100644 --- a/OpenRA.Game/Graphics/Renderer.cs +++ b/OpenRA.Game/Graphics/Renderer.cs @@ -137,10 +137,10 @@ namespace OpenRA.Graphics FixOSX(); var resolution = GetResolution(windowMode); - - string renderer = Game.Settings.Server.Dedicated ? "Null" : Game.Settings.Graphics.Renderer; + + var renderer = Game.Settings.Server.Dedicated ? "Null" : Game.Settings.Graphics.Renderer; var rendererPath = Path.GetFullPath("OpenRA.Renderer.{0}.dll".F(renderer)); - + device = CreateDevice(Assembly.LoadFile(rendererPath), resolution.Width, resolution.Height, windowMode); } diff --git a/OpenRA.Renderer.SdlCommon/ErrorHandler.cs b/OpenRA.Renderer.SdlCommon/ErrorHandler.cs index 912b96e891..2e140f2f53 100644 --- a/OpenRA.Renderer.SdlCommon/ErrorHandler.cs +++ b/OpenRA.Renderer.SdlCommon/ErrorHandler.cs @@ -48,7 +48,6 @@ namespace OpenRA.Renderer.SdlCommon public static void WriteGraphicsLog(string message) { - Log.AddChannel("graphics", "graphics.log"); Log.Write("graphics", message); Log.Write("graphics", ""); Log.Write("graphics", "OpenGL Information:"); From 5d35dc0cc06744523e2351568bb3496853c766a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 9 Nov 2013 10:57:25 +0100 Subject: [PATCH 2/3] reflect that renderers are input + rendering in console output --- OpenRA.Renderer.Cg/GraphicsDevice.cs | 6 +++--- OpenRA.Renderer.Gl/GraphicsDevice.cs | 2 +- OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/OpenRA.Renderer.Cg/GraphicsDevice.cs b/OpenRA.Renderer.Cg/GraphicsDevice.cs index a6ede53884..7da81d7b5e 100755 --- a/OpenRA.Renderer.Cg/GraphicsDevice.cs +++ b/OpenRA.Renderer.Cg/GraphicsDevice.cs @@ -22,7 +22,7 @@ namespace OpenRA.Renderer.Cg { public IGraphicsDevice Create(Size size, WindowMode windowMode) { - Console.WriteLine("Using Cg renderer"); + Console.WriteLine("Using SDL 1.2 with Cg renderer"); return new GraphicsDevice(size, windowMode); } } @@ -43,9 +43,9 @@ namespace OpenRA.Renderer.Cg static Tao.Cg.Cg.CGerrorCallbackFuncDelegate errorCallback = () => { var err = Tao.Cg.Cg.cgGetError(); - var msg = "CG Error: {0}: {1}".F(err, Tao.Cg.Cg.cgGetErrorString(err)); + var msg = "Cg Error: {0}: {1}".F(err, Tao.Cg.Cg.cgGetErrorString(err)); ErrorHandler.WriteGraphicsLog(msg); - throw new InvalidOperationException("CG Error. See graphics.log for details"); + throw new InvalidOperationException("Cg Error. See graphics.log for details"); }; public GraphicsDevice(Size size, WindowMode window) diff --git a/OpenRA.Renderer.Gl/GraphicsDevice.cs b/OpenRA.Renderer.Gl/GraphicsDevice.cs index 844f0d2fd4..e82e9ab3ac 100755 --- a/OpenRA.Renderer.Gl/GraphicsDevice.cs +++ b/OpenRA.Renderer.Gl/GraphicsDevice.cs @@ -21,7 +21,7 @@ namespace OpenRA.Renderer.Glsl { public IGraphicsDevice Create(Size size, WindowMode windowMode) { - Console.WriteLine("Using Gl renderer"); + Console.WriteLine("Using SDL 1.2 with OpenGL renderer"); return new GraphicsDevice(size, windowMode); } } diff --git a/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs b/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs index df2820afb0..ad5805f44f 100755 --- a/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs +++ b/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs @@ -25,7 +25,7 @@ namespace OpenRA.Renderer.Sdl2 { public IGraphicsDevice Create(Size size, WindowMode windowMode) { - Console.WriteLine("Using SDL2 renderer"); + Console.WriteLine("Using SDL 2 with OpenGL renderer"); return new Sdl2GraphicsDevice(size, windowMode); } } From 0f17b03d7e57c18a20a21c606a1809ffdbe6e4d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 9 Nov 2013 11:06:02 +0100 Subject: [PATCH 3/3] try all available renderers from a prioritized list --- OpenRA.Game/Game.cs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index e31eb60907..2626b01b6d 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -296,16 +296,20 @@ namespace OpenRA } FileSystem.Mount("."); // Needed to access shaders - try + var renderers = new [] { Settings.Graphics.Renderer, "Sdl2", "Gl", "Cg" }; + foreach (var r in renderers) { - Renderer.Initialize(Game.Settings.Graphics.Mode); - } - catch (Exception e) - { - Log.Write("graphics", "{0}", e); - Console.WriteLine("Renderer initialization failed. Fallback in place. Check graphics.log for details."); - Settings.Graphics.Renderer = new GraphicSettings().Renderer; - Renderer.Initialize(Settings.Graphics.Mode); + Settings.Graphics.Renderer = r; + try + { + Renderer.Initialize(Settings.Graphics.Mode); + break; + } + catch (Exception e) + { + Log.Write("graphics", "{0}", e); + Console.WriteLine("Renderer initialization failed. Fallback in place. Check graphics.log for details."); + } } Renderer = new Renderer();