mirror of
https://github.com/Ryujinx/Opentk.git
synced 2024-12-25 05:35:38 +00:00
Squashed 'Source/OpenTK/Platform/SDL2/sdl2-cs/' content from commit b434bac
git-subtree-dir: Source/OpenTK/Platform/SDL2/sdl2-cs git-subtree-split: b434bacba859a036b11ec3ac76c3baa058764769
This commit is contained in:
commit
ed45dddb98
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
bin/
|
||||
obj/
|
||||
*.userprefs
|
25
LICENSE
Normal file
25
LICENSE
Normal file
|
@ -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 <flibitijibibo@flibitijibibo.com>
|
||||
*
|
||||
*/
|
45
README
Normal file
45
README
Normal file
|
@ -0,0 +1,45 @@
|
|||
This is SDL2#, a C# wrapper for SDL2.
|
||||
|
||||
Project Website: https://github.com/flibitijibibo/SDL2-CS
|
||||
|
||||
License
|
||||
-------
|
||||
SDL2 and SDL2# are released under the zlib license. See LICENSE for details.
|
||||
|
||||
SDL2# currently uses parts of OpenTK, which is released under the MIT license.
|
||||
See opentk.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 C# application.
|
||||
|
||||
The wrapper provides bindings for the following libraries:
|
||||
- SDL2
|
||||
- SDL2_image
|
||||
- SDL2_mixer
|
||||
- SDL2_ttf
|
||||
|
||||
We also provide bindings for OpenGL and OpenAL, taken from OpenTK.
|
||||
|
||||
Note that SDL2# will not provide every single SDL2 function. This is due to
|
||||
limitations in the C# language that would cause major conflicts with the native
|
||||
SDL2 library and its extensions.
|
||||
|
||||
SDL2# is a pure port of the C headers. The naming schemes for this library will
|
||||
be exactly as they are done in the C library, with little-to-no concern for
|
||||
"appropriate" C# style. The namespace indicates that this is SDL2, the class
|
||||
names will indicate which library file the function/type/value exists in, and
|
||||
everything else will be as close to the C version as technically possible.
|
||||
|
||||
Roadmap
|
||||
-------
|
||||
To see the current roadmap for SDL2#, visit the GitHub issues page:
|
||||
|
||||
https://github.com/flibitijibibo/SDL2-CS/issues
|
106
src/LPUtf8StrMarshaler.cs
Normal file
106
src/LPUtf8StrMarshaler.cs
Normal file
|
@ -0,0 +1,106 @@
|
|||
/* 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>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SDL2
|
||||
{
|
||||
internal unsafe class LPUtf8StrMarshaler : ICustomMarshaler
|
||||
{
|
||||
public const string LeaveAllocated = "LeaveAllocated";
|
||||
|
||||
private static ICustomMarshaler
|
||||
_leaveAllocatedInstance = new LPUtf8StrMarshaler(true),
|
||||
_defaultInstance = new LPUtf8StrMarshaler(false);
|
||||
|
||||
public static ICustomMarshaler GetInstance(string cookie)
|
||||
{
|
||||
switch (cookie)
|
||||
{
|
||||
case "LeaveAllocated":
|
||||
return _leaveAllocatedInstance;
|
||||
default:
|
||||
return _defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
private bool _leaveAllocated;
|
||||
|
||||
public LPUtf8StrMarshaler(bool leaveAllocated)
|
||||
{
|
||||
_leaveAllocated = leaveAllocated;
|
||||
}
|
||||
|
||||
public object MarshalNativeToManaged(IntPtr pNativeData)
|
||||
{
|
||||
if (pNativeData == IntPtr.Zero)
|
||||
return null;
|
||||
var ptr = (byte*)pNativeData;
|
||||
while (*ptr != 0)
|
||||
{
|
||||
ptr++;
|
||||
}
|
||||
var bytes = new byte[ptr - (byte*)pNativeData];
|
||||
Marshal.Copy(pNativeData, bytes, 0, bytes.Length);
|
||||
return Encoding.UTF8.GetString(bytes);
|
||||
}
|
||||
|
||||
public IntPtr MarshalManagedToNative(object ManagedObj)
|
||||
{
|
||||
if (ManagedObj == null)
|
||||
return IntPtr.Zero;
|
||||
var str = ManagedObj as string;
|
||||
if (str == null)
|
||||
{
|
||||
throw new ArgumentException("ManagedObj must be a string.", "ManagedObj");
|
||||
}
|
||||
var bytes = Encoding.UTF8.GetBytes(str);
|
||||
var mem = Marshal.AllocHGlobal(bytes.Length + 1);
|
||||
Marshal.Copy(bytes, 0, mem, bytes.Length);
|
||||
((byte*)mem)[bytes.Length] = 0;
|
||||
return mem;
|
||||
}
|
||||
|
||||
public void CleanUpManagedData(object ManagedObj)
|
||||
{
|
||||
}
|
||||
|
||||
public void CleanUpNativeData(IntPtr pNativeData)
|
||||
{
|
||||
if (!_leaveAllocated)
|
||||
{
|
||||
Marshal.FreeHGlobal(pNativeData);
|
||||
}
|
||||
}
|
||||
|
||||
public int GetNativeDataSize ()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
5227
src/SDL2.cs
Normal file
5227
src/SDL2.cs
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue