SDL2-CS/src/SDL2.cs

352 lines
9.7 KiB
C#
Raw Normal View History

2013-04-03 16:15:53 +00:00
#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 <flibitijibibo@flibitijibibo.com>
*
*/
#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
}
}