From a5a08b4140bf9b5c619f12cbcfb8f6b55b6a4327 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Wed, 3 Apr 2013 12:15:53 -0400 Subject: [PATCH] Why, hello there, world... --- LICENSE | 25 ++++ README | 32 +++++ SDL2#.csproj | 59 ++++++++ SDL2#.dll.config | 26 ++++ SDL2#.sln | 20 +++ src/SDL2.cs | 352 ++++++++++++++++++++++++++++++++++++++++++++++ src/SDL2_image.cs | 47 +++++++ src/SDL2_mixer.cs | 47 +++++++ src/SDL2_net.cs | 47 +++++++ src/SDL2_rtf.cs | 47 +++++++ src/SDL2_ttf.cs | 47 +++++++ 11 files changed, 749 insertions(+) create mode 100644 LICENSE create mode 100644 README create mode 100644 SDL2#.csproj create mode 100644 SDL2#.dll.config create mode 100644 SDL2#.sln create mode 100644 src/SDL2.cs create mode 100644 src/SDL2_image.cs create mode 100644 src/SDL2_mixer.cs create mode 100644 src/SDL2_net.cs create mode 100644 src/SDL2_rtf.cs create mode 100644 src/SDL2_ttf.cs diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5c80593 --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +/* SDL2# - C# Wrapper for SDL2 + * + * Copyright (c) 2013 Ethan Lee. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. + * + * Ethan "flibitijibibo" Lee + * + */ diff --git a/README b/README new file mode 100644 index 0000000..bdabdd8 --- /dev/null +++ b/README @@ -0,0 +1,32 @@ +This is SDL2#, a C# wrapper for SDL2. + +License +------- +SDL2 and SDL2# are released under the zlib license. See LICENSE for details. + +About SDL2 +---------- +For more information about SDL2, visit the SDL wiki: + +http://wiki.libsdl.org/moin.fcg/FrontPage + +About the C# Wrapper +-------------------- +The C# wrapper was written to be used for MonoGame's desktop platforms. However, +this is written in a way that can be used for any general Mono application. + +The wrapper will include bindings for the following libraries: +- SDL2 +- SDL2_image +- SDL2_mixer +- SDL2_net +- SDL2_rtf +- SDL2_ttf + +Roadmap +------- +- Implement the SDL2 libraries. + - For SDL2 itself, organize it according to this API reference page: + http://wiki.libsdl.org/moin.fcg/APIByCategory +- Add OpenGL and OpenAL support. + - Just rip this off of OpenTK for now. Too much work, not enough time... diff --git a/SDL2#.csproj b/SDL2#.csproj new file mode 100644 index 0000000..664a337 --- /dev/null +++ b/SDL2#.csproj @@ -0,0 +1,59 @@ + + + + Debug + x86 + 9.0.21022 + 2.0 + {85480198-8711-4355-830E-72FD794AD3F6} + Library + SDL2 + SDL2# + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + x86 + false + + + none + false + bin\Release + prompt + 4 + x86 + false + + + + + + + + + + + + + Always + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SDL2#.dll.config b/SDL2#.dll.config new file mode 100644 index 0000000..d90394d --- /dev/null +++ b/SDL2#.dll.config @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SDL2#.sln b/SDL2#.sln new file mode 100644 index 0000000..bd8306a --- /dev/null +++ b/SDL2#.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDL2#", "SDL2#.csproj", "{85480198-8711-4355-830E-72FD794AD3F6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {85480198-8711-4355-830E-72FD794AD3F6}.Debug|x86.ActiveCfg = Debug|x86 + {85480198-8711-4355-830E-72FD794AD3F6}.Debug|x86.Build.0 = Debug|x86 + {85480198-8711-4355-830E-72FD794AD3F6}.Release|x86.ActiveCfg = Release|x86 + {85480198-8711-4355-830E-72FD794AD3F6}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = SDL2#.csproj + EndGlobalSection +EndGlobal diff --git a/src/SDL2.cs b/src/SDL2.cs new file mode 100644 index 0000000..da158e3 --- /dev/null +++ b/src/SDL2.cs @@ -0,0 +1,352 @@ +#region License +/* SDL2# - C# Wrapper for SDL2 + * + * Copyright (c) 2013 Ethan Lee. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. + * + * Ethan "flibitijibibo" Lee + * + */ +#endregion + +#region Using Statements +using System; +using System.Runtime.InteropServices; +#endregion + +namespace SDL2 +{ + public static class SDL2 + { + #region SDL2# Variables + + /* Used by DllImport to load the native library. */ + internal const String nativeLibName = "SDL2.dll"; + + #endregion + + #region SDL_stdinc.h + + public enum SDL_bool + { + SDL_FALSE = 0, + SDL_TRUE = 1 + } + + #endregion + + #region SDL.h + + public const uint SDL_INIT_TIMER = 0x00000001; + public const uint SDL_INIT_AUDIO = 0x00000010; + public const uint SDL_INIT_VIDEO = 0x00000020; + public const uint SDL_INIT_JOYSTICK = 0x00000200; + public const uint SDL_INIT_HAPTIC = 0x00001000; + public const uint SDL_INIT_GAMECONTROLLER = 0x00002000; + public const uint SDL_INIT_NOPARACHUTE = 0x00100000; + public const uint SDL_INIT_EVERYTHING = ( + SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | + SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER + ); + + [DllImport(nativeLibName)] + public static extern int SDL_Init(uint flags); + + [DllImport(nativeLibName)] + public static extern int SDL_InitSubSystem(uint flags); + + [DllImport(nativeLibName)] + public static extern void SDL_Quit(); + + [DllImport(nativeLibName)] + public static extern void SDL_QuitSubSystem(uint flags); + + [DllImport(nativeLibName)] + public static extern uint SDL_WasInit(uint flags); + + #endregion + + #region SDL_hints.h + + public const string SDL_HINT_FRAMEBUFFER_ACCELERATION = + "SDL_FRAMEBUFFER_ACCELERATION"; + public const string SDL_HINT_RENDER_DRIVER = + "SDL_RENDER_DRIVER"; + public const string SDL_HINT_RENDER_OPENGL_SHADERS = + "SDL_RENDER_OPENGL_SHADERS"; + public const string SDL_HINT_RENDER_VSYNC = + "SDL_RENDER_VSYNC"; + public const string SDL_HINT_VIDEO_X11_XVIDMODE = + "SDL_VIDEO_X11_XVIDMODE"; + public const string SDL_HINT_VIDEO_X11_XINERAMA = + "SDL_VIDEO_X11_XINERAMA"; + public const string SDL_HINT_VIDEO_X11_XRANDR = + "SDL_VIDEO_X11_XRANDR"; + public const string SDL_HINT_GRAB_KEYBOARD = + "SDL_GRAB_KEYBOARD"; + public const string SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS = + "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS"; + public const string SDL_HINT_IDLE_TIMER_DISABLED = + "SDL_IOS_DLE_TIMER_DISABLED"; + public const string SDL_HINT_ORIENTATIONS = + "SDL_IOS_ORIENTATIONS"; + public const string SDL_HINT_XINPUT_ENABLED = + "SDL_XINPUT_ENABLED"; + public const string SDL_HINT_GAMECONTROLLERCONFIG = + "SDL_GAMECONTROLLERCONFIG"; + public const string SDL_HINT_ALLOW_TOPMOST = + "SDL_ALLOW_TOPMOST"; + + public enum SDL_HintPriority + { + SDL_HINT_DEFAULT, + SDL_HINT_NORMAL, + SDL_HINT_OVERRIDE + } + + [DllImport(nativeLibName)] + public static extern void SDL_ClearHints(); + + [DllImport(nativeLibName, EntryPoint = "SDL_GetHint")] + private static extern IntPtr INTERNAL_SDL_GetHint( + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string name + ); + public static string SDL_GetHint(string name) + { + return Marshal.PtrToStringAnsi(INTERNAL_SDL_GetHint(name)); + } + + [DllImport(nativeLibName)] + public static extern SDL_bool SDL_SetHint( + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string name, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string value + ); + + [DllImport(nativeLibName)] + public static extern SDL_bool SDL_SetHintWithPriority( + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string name, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string value, + SDL_HintPriority priority + ); + + #endregion + + #region SDL_error.h + + [DllImport(nativeLibName)] + public static extern void SDL_ClearError(); + + [DllImport(nativeLibName, EntryPoint = "SDL_GetError")] + private static extern IntPtr INTERNAL_SDL_GetError(); + public static string SDL_GetError() + { + return Marshal.PtrToStringAnsi(INTERNAL_SDL_GetError()); + } + + [DllImport(nativeLibName)] + public static extern void SDL_SetError( + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + #endregion + + #region SDL_log.h + + /* Begin nameless enum SDL_LOG_CATEGORY */ + public const int SDL_LOG_CATEGORY_APPLICATION = 0; + public const int SDL_LOG_CATEGORY_ERROR = 1; + public const int SDL_LOG_CATEGORY_ASSERT = 2; + public const int SDL_LOG_CATEGORY_SYSTEM = 3; + public const int SDL_LOG_CATEGORY_AUDIO = 4; + public const int SDL_LOG_CATEGORY_VIDEO = 5; + public const int SDL_LOG_CATEGORY_RENDER = 6; + public const int SDL_LOG_CATEGORY_INPUT = 7; + public const int SDL_LOG_CATEGORY_TEST = 8; + + /* Reserved for future SDL library use */ + public const int SDL_LOG_CATEGORY_RESERVED1 = 9; + public const int SDL_LOG_CATEGORY_RESERVED2 = 10; + public const int SDL_LOG_CATEGORY_RESERVED3 = 11; + public const int SDL_LOG_CATEGORY_RESERVED4 = 12; + public const int SDL_LOG_CATEGORY_RESERVED5 = 13; + public const int SDL_LOG_CATEGORY_RESERVED6 = 14; + public const int SDL_LOG_CATEGORY_RESERVED7 = 15; + public const int SDL_LOG_CATEGORY_RESERVED8 = 16; + public const int SDL_LOG_CATEGORY_RESERVED9 = 17; + public const int SDL_LOG_CATEGORY_RESERVED10 = 18; + + /* Beyond this point is reserved for application use, e.g. + enum { + MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, + MYAPP_CATEGORY_AWESOME2, + MYAPP_CATEGORY_AWESOME3, + ... + }; + */ + public const int SDL_LOG_CATEGORY_CUSTOM = 19; + /* End nameless enum SDL_LOG_CATEGORY */ + + public enum SDL_LogPriority + { + SDL_LOG_PRIORITY_VERBOSE = 1, + SDL_LOG_PRIORITY_DEBUG, + SDL_LOG_PRIORITY_INFO, + SDL_LOG_PRIORITY_WARN, + SDL_LOG_PRIORITY_ERROR, + SDL_LOG_PRIORITY_CRITICAL, + SDL_NUM_LOG_PRIORITIES + } + + [DllImport(nativeLibName)] + public static extern void SDL_Log( + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogVerbose( + int category, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogDebug( + int category, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogInfo( + int category, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogWarn( + int category, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogError( + int category, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogCritical( + int category, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogMessage( + int category, + SDL_LogPriority priority, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogMessageV( + int category, + SDL_LogPriority priority, + [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] + string fmt, + __arglist + ); + + [DllImport(nativeLibName)] + public static extern SDL_LogPriority SDL_LogGetPriority(int category); + + [DllImport(nativeLibName)] + public static extern void SDL_LogSetPriority( + int category, + SDL_LogPriority priority + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogSetAllPriority( + SDL_LogPriority priority + ); + + [DllImport(nativeLibName)] + public static extern void SDL_LogResetPriorities(); + + // TODO: SDL_LogGetOutputFunction + // TODO: SDL_LogSetOutputFunction + + #endregion + + #region SDL_version.h, SDL_revision.h + + [StructLayout(LayoutKind.Sequential)] + public struct SDL_version + { + public byte major; + public byte minor; + public byte patch; + } + + [DllImport(nativeLibName, EntryPoint = "SDL_GetVersion")] + private static extern void INTERNAL_SDL_GetVersion(IntPtr ver); + public static void SDL_GetVersion(ref SDL_version ver) + { + IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ver)); + Marshal.StructureToPtr(ver, ptr, false); + INTERNAL_SDL_GetVersion(ptr); + ver = (SDL_version) Marshal.PtrToStructure(ptr, ver.GetType()); + Marshal.FreeHGlobal(ptr); + } + + [DllImport(nativeLibName, EntryPoint = "SDL_GetRevision")] + private static extern IntPtr INTERNAL_SDL_GetRevision(); + public static string SDL_GetRevision() + { + return Marshal.PtrToStringAnsi(INTERNAL_SDL_GetRevision()); + } + + [DllImport(nativeLibName)] + public static extern int SDL_GetRevisionNumber(); + + #endregion + } +} \ No newline at end of file diff --git a/src/SDL2_image.cs b/src/SDL2_image.cs new file mode 100644 index 0000000..2cc853b --- /dev/null +++ b/src/SDL2_image.cs @@ -0,0 +1,47 @@ +#region License +/* SDL2# - C# Wrapper for SDL2 + * + * Copyright (c) 2013 Ethan Lee. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. + * + * Ethan "flibitijibibo" Lee + * + */ +#endregion + +#region Using Statements +using System; +using System.Runtime.InteropServices; +#endregion + +namespace SDL2 +{ + public static class SDL2_image + { + #region SDL2# Variables + + /* Used by DllImport to load the native library. */ + internal const String nativeLibName = "SDL2_image.dll"; + + #endregion + + // TODO: SDL2_image API + } +} \ No newline at end of file diff --git a/src/SDL2_mixer.cs b/src/SDL2_mixer.cs new file mode 100644 index 0000000..1f5e931 --- /dev/null +++ b/src/SDL2_mixer.cs @@ -0,0 +1,47 @@ +#region License +/* SDL2# - C# Wrapper for SDL2 + * + * Copyright (c) 2013 Ethan Lee. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. + * + * Ethan "flibitijibibo" Lee + * + */ +#endregion + +#region Using Statements +using System; +using System.Runtime.InteropServices; +#endregion + +namespace SDL2 +{ + public static class SDL2_mixer + { + #region SDL2# Variables + + /* Used by DllImport to load the native library. */ + internal const String nativeLibName = "SDL2_mixer.dll"; + + #endregion + + // TODO: SDL2_mixer API + } +} \ No newline at end of file diff --git a/src/SDL2_net.cs b/src/SDL2_net.cs new file mode 100644 index 0000000..87296a2 --- /dev/null +++ b/src/SDL2_net.cs @@ -0,0 +1,47 @@ +#region License +/* SDL2# - C# Wrapper for SDL2 + * + * Copyright (c) 2013 Ethan Lee. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. + * + * Ethan "flibitijibibo" Lee + * + */ +#endregion + +#region Using Statements +using System; +using System.Runtime.InteropServices; +#endregion + +namespace SDL2 +{ + public static class SDL2_net + { + #region SDL2# Variables + + /* Used by DllImport to load the native library. */ + internal const String nativeLibName = "SDL2_net.dll"; + + #endregion + + // TODO: SDL2_net API + } +} \ No newline at end of file diff --git a/src/SDL2_rtf.cs b/src/SDL2_rtf.cs new file mode 100644 index 0000000..c6ad16e --- /dev/null +++ b/src/SDL2_rtf.cs @@ -0,0 +1,47 @@ +#region License +/* SDL2# - C# Wrapper for SDL2 + * + * Copyright (c) 2013 Ethan Lee. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. + * + * Ethan "flibitijibibo" Lee + * + */ +#endregion + +#region Using Statements +using System; +using System.Runtime.InteropServices; +#endregion + +namespace SDL2 +{ + public static class SDL2_rtf + { + #region SDL2# Variables + + /* Used by DllImport to load the native library. */ + internal const String nativeLibName = "SDL2_rtf.dll"; + + #endregion + + // TODO: SDL2_rtf API + } +} \ No newline at end of file diff --git a/src/SDL2_ttf.cs b/src/SDL2_ttf.cs new file mode 100644 index 0000000..c18b881 --- /dev/null +++ b/src/SDL2_ttf.cs @@ -0,0 +1,47 @@ +#region License +/* SDL2# - C# Wrapper for SDL2 + * + * Copyright (c) 2013 Ethan Lee. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. + * + * Ethan "flibitijibibo" Lee + * + */ +#endregion + +#region Using Statements +using System; +using System.Runtime.InteropServices; +#endregion + +namespace SDL2 +{ + public static class SDL2_ttf + { + #region SDL2# Variables + + /* Used by DllImport to load the native library. */ + internal const String nativeLibName = "SDL2_ttf.dll"; + + #endregion + + // TODO: SDL2_ttf API + } +} \ No newline at end of file