Commit Graph

134 Commits

Author SHA1 Message Date
Susko3 a19e75b298 Change SDL sources to use more proper types
This helps consumers avoid having to do ugly casts
as was previously done in `SDL_quit.cs`.

It's very important that the underlying type doesn't change
as that might break ABI compat.
2024-04-06 14:43:18 +02:00
Susko3 95056ef317 Add friendly `string?` overloads to C `(const) char *` functions
This is done by adding a `Unsafe_` prefix to `(const) char *` (C# `byte*`) functions.
I am using `string?` instead of `ReadOnlyMemory<byte>?` because the returned pointer can
get invalidated and cause memory-safety issues.

The returned pointer is automatically freed if the return type is `char *`.
I've checked that the documentation for all functions (except in SDL_stdinc.h)
requires calling `SDL_free()` on the pointer.
2024-04-06 14:36:36 +02:00
Susko3 bad4e097ae Add source generator for `ReadOnlySpan<byte>` overloads of C `const char *` functions 2024-04-06 14:24:33 +02:00
Susko3 a8f1d7f1ba Add memory safe IDisposable overloads to array-returning functions
This could be done with a source generator, but this is simpler.
2024-04-06 14:20:08 +02:00
Susko3 f3d13fe6dc Add C# type-friendly properties/getters to some structs 2024-04-06 14:12:44 +02:00
Susko3 8a2f47fd97 Add `PtrToStringUTF8()` for `byte *` 2024-04-06 14:08:42 +02:00
Susko3 8624db0eae Add `void *` overload for `SDL_free()`
Useful as any pointer type can implicitly covert to void *.
2024-04-06 14:07:38 +02:00
Susko3 77ab7fed42 Manually implement macro functions
All of these get "Function like macro definition records are not supported: [...] Generated bindings may be incomplete."
warnings when running ClangSharp.
2024-04-06 14:05:52 +02:00
Susko3 182482217d Move `SDL_Keycode` typdef to global python script to avoid duplicate definition 2024-04-06 13:47:08 +02:00
Susko3 7d9502ee82 Remap `SDL_KeyCode` enum to `SDL_Keycode` typedef
This doesn't compile because of duplicate `SDL_Keycode` definition
2024-04-06 13:45:49 +02:00
Susko3 7b8ea9767f Manually implement endianness-specific audio formats 2024-04-06 13:42:10 +02:00
Susko3 c9c9782e48 Define `SDL_FUNCTION_POINTER_IS_VOID_POINTER` 2024-04-06 13:38:13 +02:00
Susko3 d2bc4e7605 Manually define broken constants 2024-04-06 13:33:00 +02:00
Susko3 a4ecfd1c75 Fix invalid `int` -> `SDL_bool` conversion by manually changing SDL headers 2024-04-06 13:33:00 +02:00
Susko3 556c6cd1a3 Add C# enum "typedefs" for C typedefs
This doesn't compile as ClangSharp fails to emit `unchecked`
in `SDL_pen.g.cs` and `SDL_touch.g.cs`.
And `(SDL_bool)` casts in `SDL_rect.g.cs`.
2024-04-06 13:32:55 +02:00
Susko3 0b0906bfea Add `[Flags]` attribute to mask/flags enums 2024-04-06 12:58:35 +02:00
Susko3 0196aeb249 Add [UnsupportedOSPlatform("windows")] to `SDL_CreateThread()` functions
See commit: 72353a8ab9
2024-04-06 12:54:12 +02:00
Susko3 e5f25b9957 Don't log potential typedef remappings
Produces a lot of noise about unused remappings (as we're processing a header at a time).
All remappings (except `SDL_JoystickGUID`) have been added.

`SDL_JoystickGUID` is a remapping of a struct, so it's harded to do programatically.
2024-04-06 12:37:14 +02:00
Susko3 03613e6a4e Remap C `void *` to C# `IntPtr` 2024-04-06 12:34:11 +02:00
Susko3 61d2486e4f Map C `char` to C# `byte` instead of `sbyte`
This matches .NET's UTF-8 `ReadOnlySpan<byte>` (see `SDL_hints.g.cs`).
2024-04-06 12:31:32 +02:00
Susko3 b904699261 Remap `wchar_t *` to `IntPtr`
These map to 16-bit `ushort` on windows, but are 32-bit on Unix.
2024-04-06 12:28:16 +02:00
Susko3 8d1a377e72 Add recommended remapping for `SDL_hidapi.h` 2024-04-06 12:22:50 +02:00
Susko3 2788460013 Exclude `SDL_main()` from DllImport as it isn't exported by SDL3.dll 2024-04-06 01:59:38 +02:00
Susko3 5cf5bb69d7 Add custom definition for win32 MSG struct
The win32 types are kinda cursed, but it makes it easy to copy&paste and check.
2024-04-06 01:42:45 +02:00
Susko3 a123a3c904 Fix missing <endian.h> when cross-compiling on windows
This works because SDL checks <endian.h> iff SDL_BYTEORDER isn't defined.
6ad390fc50/include/SDL3/SDL_endian.h (L58-L60)
2024-04-06 01:37:05 +02:00
Susko3 b01fa42bff Fix duplicate `XEvent` struct definitions 2024-04-06 01:34:10 +02:00
Susko3 a8553fab6e Add platform specific generation for `SDL_main.h` and `SDL_system.h`
Doesn't compile because of duplicate `_XEvent` definitions.
Linux fails crossgen on Windows due to missing `endian.h`
2024-04-06 01:31:16 +02:00
Susko3 48c9b12f2d Add simple check for generated functions
There are warnings for platform-specific functions.
2024-04-06 01:17:00 +02:00
Susko3 4f065d18f7 Fix errors in `SDL_stdinc.g.cs` with define magic 2024-04-06 01:00:29 +02:00
Susko3 3cff0fd872 Fix errors in `SDL_pixels.g.cs` by specifying enum types 2024-04-06 01:00:29 +02:00
Susko3 5d61c2483e Undefine _WIN32 to generate only platform-agnostic APIs
Probably needs similar undefines on Linux and macOS.

Notice that the signatures of `SDL_CreateThread` and `SDL_CreateThreadWithStackSize`
have changed.
2024-04-06 01:00:29 +02:00
Susko3 61bf25730a Initial SDL3-CS binding project with ClangSharp
The bindings don't yet compile. There are errors in SDL_pixels.g.cs, SDL_stdinc.g.cs and SDL_thread.g.cs,
a bunch of warnings about "Function like macro definition records are not supported",
and a few "Info: Potential missing remapping".

Built on SDL commit:
6ad390fc50
2024-04-06 00:57:07 +02:00
Susko3 dec67a186e Add global/base files 2024-04-05 23:59:34 +02:00
Dan Balasescu ecfe9e2771 Add README 2024-04-04 03:12:48 +09:00