diff --git a/src/FNAPlatform.cs b/src/FNAPlatform.cs index d205340..b56e43a 100644 --- a/src/FNAPlatform.cs +++ b/src/FNAPlatform.cs @@ -70,6 +70,11 @@ namespace Microsoft.Xna.Framework #region Public Static Methods + public static void UnhookLogger() + { + Log = SDL2_FNAPlatform.Log; + } + public delegate GameWindow CreateWindowFunc(); public static CreateWindowFunc CreateWindow; @@ -154,8 +159,7 @@ namespace Microsoft.Xna.Framework public delegate bool IsStoragePathConnectedFunc(string path); public static IsStoragePathConnectedFunc IsStoragePathConnected; - public delegate void LogFunc(string message); - public static LogFunc Log; + public static Action Log; public delegate void ShowRuntimeErrorFunc(string title, string message); public static ShowRuntimeErrorFunc ShowRuntimeError; diff --git a/src/Game.cs b/src/Game.cs index 40fa04f..b3cad12 100644 --- a/src/Game.cs +++ b/src/Game.cs @@ -1248,5 +1248,21 @@ namespace Microsoft.Xna.Framework } #endregion + + #region FNA Extensions + + public static void LogHookEXT(Action logFunc) + { + if (logFunc == null) + { + FNAPlatform.UnhookLogger(); + } + else + { + FNAPlatform.Log = logFunc; + } + } + + #endregion } } diff --git a/src/SDL2/SDL2_FNAPlatform.cs b/src/SDL2/SDL2_FNAPlatform.cs index f397bcd..abb7150 100644 --- a/src/SDL2/SDL2_FNAPlatform.cs +++ b/src/SDL2/SDL2_FNAPlatform.cs @@ -151,7 +151,7 @@ namespace Microsoft.Xna.Framework ) == "1"; if (SDL2_KeyboardUtil.UseScancodes) { - Log("Using scancodes instead of keycodes!"); + FNAPlatform.Log("Using scancodes instead of keycodes!"); } // Active Key List @@ -432,7 +432,7 @@ namespace Microsoft.Xna.Framework } catch(DllNotFoundException e) { - Log("OpenAL not found! Need FNA.dll.config?"); + FNAPlatform.Log("OpenAL not found! Need FNA.dll.config?"); throw e; } catch(Exception) @@ -457,11 +457,11 @@ namespace Microsoft.Xna.Framework { if (SDL.SDL_GL_SetSwapInterval(-1) != -1) { - Log("Using EXT_swap_control_tear VSync!"); + FNAPlatform.Log("Using EXT_swap_control_tear VSync!"); } else { - Log("EXT_swap_control_tear unsupported. Fall back to standard VSync."); + FNAPlatform.Log("EXT_swap_control_tear unsupported. Fall back to standard VSync."); SDL.SDL_ClearError(); SDL.SDL_GL_SetSwapInterval(1); } @@ -1222,7 +1222,7 @@ namespace Microsoft.Xna.Framework INTERNAL_haptics[which] = SDL.SDL_HapticOpenFromJoystick(thisJoystick); if (INTERNAL_haptics[which] == IntPtr.Zero) { - Log("HAPTIC OPEN ERROR: " + SDL.SDL_GetError()); + FNAPlatform.Log("HAPTIC OPEN ERROR: " + SDL.SDL_GetError()); } } if (INTERNAL_haptics[which] != IntPtr.Zero) @@ -1377,7 +1377,7 @@ namespace Microsoft.Xna.Framework } // Print controller information to stdout. - Log( + FNAPlatform.Log( "Controller " + which.ToString() + ": " + SDL.SDL_GameControllerName(INTERNAL_devices[which]) ); @@ -1405,7 +1405,7 @@ namespace Microsoft.Xna.Framework // A lot of errors can happen here, but honestly, they can be ignored... SDL.SDL_ClearError(); - Log("Removed device, player: " + output.ToString()); + FNAPlatform.Log("Removed device, player: " + output.ToString()); } // GetState can convert stick values to button values diff --git a/src/SDL2/SDL2_KeyboardUtil.cs b/src/SDL2/SDL2_KeyboardUtil.cs index 9dfdb7d..c470679 100644 --- a/src/SDL2/SDL2_KeyboardUtil.cs +++ b/src/SDL2/SDL2_KeyboardUtil.cs @@ -432,7 +432,7 @@ namespace Microsoft.Xna.Framework.Input return retVal; } } - SDL2_FNAPlatform.Log( + FNAPlatform.Log( "KEY/SCANCODE MISSING FROM SDL2->XNA DICTIONARY: " + key.sym.ToString() + " " + key.scancode.ToString() @@ -449,7 +449,7 @@ namespace Microsoft.Xna.Framework.Input } else { - SDL2_FNAPlatform.Log("SCANCODE MISSING FROM XNA->SDL2 DICTIONARY: " + scancode.ToString()); + FNAPlatform.Log("SCANCODE MISSING FROM XNA->SDL2 DICTIONARY: " + scancode.ToString()); return Keys.None; } }