diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 406c755a2e..2626b01b6d 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,38 @@ namespace OpenRA } FileSystem.Mount("."); // Needed to access shaders - Renderer.Initialize( Game.Settings.Graphics.Mode ); + var renderers = new [] { Settings.Graphics.Renderer, "Sdl2", "Gl", "Cg" }; + foreach (var r in renderers) + { + 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(); + 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.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); } } 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:");