diff --git a/.gitmodules b/.gitmodules
index 5b93a7fe..c65d8586 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
+[submodule "external/SDL"]
+ path = external/SDL
+ url = https://github.com/libsdl-org/SDL.git
[submodule "external/jpeg"]
path = external/jpeg
url = https://github.com/libsdl-org/jpeg.git
diff --git a/Xcode/SDL/SDL3.xcframework/Info.plist b/Xcode/SDL/SDL3.xcframework/Info.plist
deleted file mode 100644
index 97884596..00000000
--- a/Xcode/SDL/SDL3.xcframework/Info.plist
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
- AvailableLibraries
-
-
- LibraryIdentifier
- tvos-arm64_x86_64-simulator
- LibraryPath
- SDL3.framework
- SupportedArchitectures
-
- arm64
- x86_64
-
- SupportedPlatform
- tvos
- SupportedPlatformVariant
- simulator
-
-
- LibraryIdentifier
- ios-arm64_x86_64-simulator
- LibraryPath
- SDL3.framework
- SupportedArchitectures
-
- arm64
- x86_64
-
- SupportedPlatform
- ios
- SupportedPlatformVariant
- simulator
-
-
- LibraryIdentifier
- macos-arm64_x86_64
- LibraryPath
- SDL3.framework
- SupportedArchitectures
-
- arm64
- x86_64
-
- SupportedPlatform
- macos
-
-
- LibraryIdentifier
- ios-arm64
- LibraryPath
- SDL3.framework
- SupportedArchitectures
-
- arm64
-
- SupportedPlatform
- ios
-
-
- LibraryIdentifier
- tvos-arm64
- LibraryPath
- SDL3.framework
- SupportedArchitectures
-
- arm64
-
- SupportedPlatform
- tvos
-
-
- CFBundlePackageType
- XFWK
- XCFrameworkFormatVersion
- 1.0
-
-
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/CMake/sdl3-config-version.cmake b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/CMake/sdl3-config-version.cmake
deleted file mode 100644
index 6dbcf129..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/CMake/sdl3-config-version.cmake
+++ /dev/null
@@ -1,48 +0,0 @@
-# based on the files generated by CMake's write_basic_package_version_file
-
-# SDL CMake version configuration file:
-# This file is meant to be placed in Resources/CMake of a SDL3 framework
-
-if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h")
- message(AUTHOR_WARNING "Could not find SDL_version.h. This script is meant to be placed in the Resources/CMake directory of SDL3.framework")
- return()
-endif()
-
-file(READ "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h" _sdl_version_h)
-string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_version_h}")
-set(_sdl_major "${CMAKE_MATCH_1}")
-string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_version_h}")
-set(_sdl_minor "${CMAKE_MATCH_1}")
-string(REGEX MATCH "#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)" _sdl_patch_re "${_sdl_version_h}")
-set(_sdl_patch "${CMAKE_MATCH_1}")
-if(_sdl_major_re AND _sdl_minor_re AND _sdl_patch_re)
- set(PACKAGE_VERSION "${_sdl_major}.${_sdl_minor}.${_sdl_patch}")
-else()
- message(AUTHOR_WARNING "Could not extract version from SDL_version.h.")
- return()
-endif()
-
-if(PACKAGE_FIND_VERSION_RANGE)
- # Package version must be in the requested version range
- if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
- OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
- OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
- set(PACKAGE_VERSION_COMPATIBLE FALSE)
- else()
- set(PACKAGE_VERSION_COMPATIBLE TRUE)
- endif()
-else()
- if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
- set(PACKAGE_VERSION_COMPATIBLE FALSE)
- else()
- set(PACKAGE_VERSION_COMPATIBLE TRUE)
- if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
- set(PACKAGE_VERSION_EXACT TRUE)
- endif()
- endif()
-endif()
-
-# if the using project doesn't have CMAKE_SIZEOF_VOID_P set, fail.
-if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "")
- set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/CMake/sdl3-config.cmake b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/CMake/sdl3-config.cmake
deleted file mode 100644
index 5a4e7b43..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/CMake/sdl3-config.cmake
+++ /dev/null
@@ -1,104 +0,0 @@
-# SDL CMake configuration file:
-# This file is meant to be placed in Resources/CMake of a SDL3 framework
-
-# INTERFACE_LINK_OPTIONS needs CMake 3.12
-cmake_minimum_required(VERSION 3.12)
-
-include(FeatureSummary)
-set_package_properties(SDL3 PROPERTIES
- URL "https://www.libsdl.org/"
- DESCRIPTION "low level access to audio, keyboard, mouse, joystick, and graphics hardware"
-)
-
-# Copied from `configure_package_config_file`
-macro(set_and_check _var _file)
- set(${_var} "${_file}")
- if(NOT EXISTS "${_file}")
- message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
- endif()
-endmacro()
-
-# Copied from `configure_package_config_file`
-macro(check_required_components _NAME)
- foreach(comp ${${_NAME}_FIND_COMPONENTS})
- if(NOT ${_NAME}_${comp}_FOUND)
- if(${_NAME}_FIND_REQUIRED_${comp})
- set(${_NAME}_FOUND FALSE)
- endif()
- endif()
- endforeach()
-endmacro()
-
-set(SDL3_FOUND TRUE)
-
-# Compute the installation prefix relative to this file.
-get_filename_component(_sdl3_framework_path "${CMAKE_CURRENT_LIST_FILE}" PATH) # /SDL3.framework/Resources/CMake/
-get_filename_component(_sdl3_framework_path "${_IMPORT_PREFIX}" PATH) # /SDL3.framework/Resources/
-get_filename_component(_sdl3_framework_path "${_IMPORT_PREFIX}" PATH) # /SDL3.framework/
-get_filename_component(_sdl3_framework_parent_path "${_sdl3_framework_path}" PATH) # /
-
-set_and_check(_sdl3_include_dirs "${_sdl3_framework_path}/Headers")
-
-set(SDL3_LIBRARIES "SDL3::SDL3")
-
-# All targets are created, even when some might not be requested though COMPONENTS.
-# This is done for compatibility with CMake generated SDL3-target.cmake files.
-
-if(NOT TARGET SDL3::Headers)
- add_library(SDL3::Headers INTERFACE IMPORTED)
- set_target_properties(SDL3::Headers
- PROPERTIES
- INTERFACE_COMPILE_OPTIONS "SHELL:-F \"${_sdl3_framework_parent_path}\""
- INTERFACE_INCLUDE_DIRECTORIES "${_sdl3_include_dirs}"
- )
-endif()
-set(SDL3_Headers_FOUND TRUE)
-unset(_sdl3_include_dirs)
-
-if(NOT TARGET SDL3::SDL3-shared)
- add_library(SDL3::SDL3-shared SHARED IMPORTED)
- set_target_properties(SDL3::SDL3-shared
- PROPERTIES
- FRAMEWORK "TRUE"
- INTERFACE_LINK_LIBRARIES "SDL3::Headers"
- IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3"
- IMPORTED_SONAME "${_sdl3_framework_path}/SDL3"
- COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED"
- INTERFACE_SDL3_SHARED "ON"
- COMPATIBLE_INTERFACE_STRING "SDL_VERSION"
- INTERFACE_SDL_VERSION "SDL3"
- )
-endif()
-set(SDL3_SDL3-shared_FOUND TRUE)
-
-set(SDL3_SDL3-static FALSE)
-
-set(SDL3_SDL3_test FALSE)
-
-unset(_sdl3_framework_parent_path)
-unset(_sdl3_framework_path)
-
-if(SDL3_SDL3-shared_FOUND OR SDL3_SDL3-static_FOUND)
- set(SDL3_SDL3_FOUND TRUE)
-endif()
-
-function(_sdl_create_target_alias_compat NEW_TARGET TARGET)
- if(CMAKE_VERSION VERSION_LESS "3.18")
- # Aliasing local targets is not supported on CMake < 3.18, so make it global.
- add_library(${NEW_TARGET} INTERFACE IMPORTED)
- set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}")
- else()
- add_library(${NEW_TARGET} ALIAS ${TARGET})
- endif()
-endfunction()
-
-# Make sure SDL3::SDL3 always exists
-if(NOT TARGET SDL3::SDL3)
- if(TARGET SDL3::SDL3-shared)
- _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-shared)
- else()
- _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-static)
- endif()
-endif()
-
-check_required_components(SDL3)
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL.h
deleted file mode 100644
index cb51cd7a..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL.h
- *
- * Main include header for the SDL library
- */
-
-
-#ifndef SDL_h_
-#define SDL_h_
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#endif /* SDL_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_assert.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_assert.h
deleted file mode 100644
index 12eb6356..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_assert.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_assert.h
- *
- * \brief Header file for assertion SDL API functions
- */
-
-#ifndef SDL_assert_h_
-#define SDL_assert_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef SDL_ASSERT_LEVEL
-#ifdef SDL_DEFAULT_ASSERT_LEVEL
-#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL
-#elif defined(_DEBUG) || defined(DEBUG) || \
- (defined(__GNUC__) && !defined(__OPTIMIZE__))
-#define SDL_ASSERT_LEVEL 2
-#else
-#define SDL_ASSERT_LEVEL 1
-#endif
-#endif /* SDL_ASSERT_LEVEL */
-
-/*
-These are macros and not first class functions so that the debugger breaks
-on the assertion line and not in some random guts of SDL, and so each
-assert can have unique static variables associated with it.
-*/
-
-#ifdef _MSC_VER
-/* Don't include intrin.h here because it contains C++ code */
- extern void __cdecl __debugbreak(void);
- #define SDL_TriggerBreakpoint() __debugbreak()
-#elif defined(ANDROID)
- #include
- #define SDL_TriggerBreakpoint() assert(0)
-#elif SDL_HAS_BUILTIN(__builtin_debugtrap)
- #define SDL_TriggerBreakpoint() __builtin_debugtrap()
-#elif (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
- #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
-#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */
- #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" )
-#elif defined(__APPLE__) && defined(__arm__)
- #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" )
-#elif defined(__386__) && defined(__WATCOMC__)
- #define SDL_TriggerBreakpoint() { _asm { int 0x03 } }
-#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__)
- #include
- #define SDL_TriggerBreakpoint() raise(SIGTRAP)
-#else
- /* How do we trigger breakpoints on this platform? */
- #define SDL_TriggerBreakpoint()
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */
-# define SDL_FUNCTION __func__
-#elif ((defined(__GNUC__) && (__GNUC__ >= 2)) || defined(_MSC_VER) || defined (__WATCOMC__))
-# define SDL_FUNCTION __FUNCTION__
-#else
-# define SDL_FUNCTION "???"
-#endif
-#define SDL_FILE __FILE__
-#define SDL_LINE __LINE__
-
-/*
-sizeof (x) makes the compiler still parse the expression even without
-assertions enabled, so the code is always checked at compile time, but
-doesn't actually generate code for it, so there are no side effects or
-expensive checks at run time, just the constant size of what x WOULD be,
-which presumably gets optimized out as unused.
-This also solves the problem of...
-
- int somevalue = blah();
- SDL_assert(somevalue == 1);
-
-...which would cause compiles to complain that somevalue is unused if we
-disable assertions.
-*/
-
-/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking
- this condition isn't constant. And looks like an owl's face! */
-#ifdef _MSC_VER /* stupid /W4 warnings. */
-#define SDL_NULL_WHILE_LOOP_CONDITION (0,0)
-#else
-#define SDL_NULL_WHILE_LOOP_CONDITION (0)
-#endif
-
-#define SDL_disabled_assert(condition) \
- do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION)
-
-typedef enum
-{
- SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */
- SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */
- SDL_ASSERTION_ABORT, /**< Terminate the program. */
- SDL_ASSERTION_IGNORE, /**< Ignore the assert. */
- SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */
-} SDL_AssertState;
-
-typedef struct SDL_AssertData
-{
- int always_ignore;
- unsigned int trigger_count;
- const char *condition;
- const char *filename;
- int linenum;
- const char *function;
- const struct SDL_AssertData *next;
-} SDL_AssertData;
-
-/**
- * Never call this directly.
- *
- * Use the SDL_assert* macros.
- *
- * \param data assert data structure
- * \param func function name
- * \param file file name
- * \param line line number
- * \returns assert state
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *data,
- const char *func,
- const char *file, int line)
-#ifdef __clang__
-#if __has_feature(attribute_analyzer_noreturn)
- __attribute__((analyzer_noreturn))
-#endif
-#endif
-;
-/* Previous 'analyzer_noreturn' attribute tells Clang's static analysis that we're a custom assert function,
- and that the analyzer should assume the condition was always true past this
- SDL_assert test. */
-
-
-/* Define the trigger breakpoint call used in asserts */
-#ifndef SDL_AssertBreakpoint
-#if defined(ANDROID) && defined(assert)
-/* Define this as empty in case assert() is defined as SDL_assert */
-#define SDL_AssertBreakpoint()
-#else
-#define SDL_AssertBreakpoint() SDL_TriggerBreakpoint()
-#endif
-#endif /* !SDL_AssertBreakpoint */
-
-/* the do {} while(0) avoids dangling else problems:
- if (x) SDL_assert(y); else blah();
- ... without the do/while, the "else" could attach to this macro's "if".
- We try to handle just the minimum we need here in a macro...the loop,
- the static vars, and break points. The heavy lifting is handled in
- SDL_ReportAssertion(), in SDL_assert.c.
-*/
-#define SDL_enabled_assert(condition) \
- do { \
- while ( !(condition) ) { \
- static struct SDL_AssertData sdl_assert_data = { 0, 0, #condition, 0, 0, 0, 0 }; \
- const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \
- if (sdl_assert_state == SDL_ASSERTION_RETRY) { \
- continue; /* go again. */ \
- } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \
- SDL_AssertBreakpoint(); \
- } \
- break; /* not retrying. */ \
- } \
- } while (SDL_NULL_WHILE_LOOP_CONDITION)
-
-/* Enable various levels of assertions. */
-#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */
-# define SDL_assert(condition) SDL_disabled_assert(condition)
-# define SDL_assert_release(condition) SDL_disabled_assert(condition)
-# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition)
-#elif SDL_ASSERT_LEVEL == 1 /* release settings. */
-# define SDL_assert(condition) SDL_disabled_assert(condition)
-# define SDL_assert_release(condition) SDL_enabled_assert(condition)
-# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition)
-#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */
-# define SDL_assert(condition) SDL_enabled_assert(condition)
-# define SDL_assert_release(condition) SDL_enabled_assert(condition)
-# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition)
-#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */
-# define SDL_assert(condition) SDL_enabled_assert(condition)
-# define SDL_assert_release(condition) SDL_enabled_assert(condition)
-# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition)
-#else
-# error Unknown assertion level.
-#endif
-
-/* this assertion is never disabled at any level. */
-#define SDL_assert_always(condition) SDL_enabled_assert(condition)
-
-
-/**
- * A callback that fires when an SDL assertion fails.
- *
- * \param data a pointer to the SDL_AssertData structure corresponding to the
- * current assertion
- * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler()
- * \returns an SDL_AssertState value indicating how to handle the failure.
- */
-typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)(
- const SDL_AssertData* data, void* userdata);
-
-/**
- * Set an application-defined assertion handler.
- *
- * This function allows an application to show its own assertion UI and/or
- * force the response to an assertion failure. If the application doesn't
- * provide this, SDL will try to do the right thing, popping up a
- * system-specific GUI dialog, and probably minimizing any fullscreen windows.
- *
- * This callback may fire from any thread, but it runs wrapped in a mutex, so
- * it will only fire from one thread at a time.
- *
- * This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
- *
- * \param handler the SDL_AssertionHandler function to call when an assertion
- * fails or NULL for the default handler
- * \param userdata a pointer that is passed to `handler`
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetAssertionHandler
- */
-extern DECLSPEC void SDLCALL SDL_SetAssertionHandler(
- SDL_AssertionHandler handler,
- void *userdata);
-
-/**
- * Get the default assertion handler.
- *
- * This returns the function pointer that is called by default when an
- * assertion is triggered. This is an internal function provided by SDL, that
- * is used for assertions when SDL_SetAssertionHandler() hasn't been used to
- * provide a different function.
- *
- * \returns the default SDL_AssertionHandler that is called when an assert
- * triggers.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetAssertionHandler
- */
-extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void);
-
-/**
- * Get the current assertion handler.
- *
- * This returns the function pointer that is called when an assertion is
- * triggered. This is either the value last passed to
- * SDL_SetAssertionHandler(), or if no application-specified function is set,
- * is equivalent to calling SDL_GetDefaultAssertionHandler().
- *
- * The parameter `puserdata` is a pointer to a void*, which will store the
- * "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value
- * will always be NULL for the default handler. If you don't care about this
- * data, it is safe to pass a NULL pointer to this function to ignore it.
- *
- * \param puserdata pointer which is filled with the "userdata" pointer that
- * was passed to SDL_SetAssertionHandler()
- * \returns the SDL_AssertionHandler that is called when an assert triggers.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetAssertionHandler
- */
-extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata);
-
-/**
- * Get a list of all assertion failures.
- *
- * This function gets all assertions triggered since the last call to
- * SDL_ResetAssertionReport(), or the start of the program.
- *
- * The proper way to examine this data looks something like this:
- *
- * ```c
- * const SDL_AssertData *item = SDL_GetAssertionReport();
- * while (item) {
- * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n",
- * item->condition, item->function, item->filename,
- * item->linenum, item->trigger_count,
- * item->always_ignore ? "yes" : "no");
- * item = item->next;
- * }
- * ```
- *
- * \returns a list of all failed assertions or NULL if the list is empty. This
- * memory should not be modified or freed by the application.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ResetAssertionReport
- */
-extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void);
-
-/**
- * Clear the list of all assertion failures.
- *
- * This function will clear the list of all assertions triggered up to that
- * point. Immediately following this call, SDL_GetAssertionReport will return
- * no items. In addition, any previously-triggered assertions will be reset to
- * a trigger_count of zero, and their always_ignore state will be false.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetAssertionReport
- */
-extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_assert_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_atomic.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_atomic.h
deleted file mode 100644
index f0c652aa..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_atomic.h
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_atomic.h
- *
- * \brief Atomic operations.
- *
- * IMPORTANT:
- * If you are not an expert in concurrent lockless programming, you should
- * only be using the atomic lock and reference counting functions in this
- * file. In all other cases you should be protecting your data structures
- * with full mutexes.
- *
- * The list of "safe" functions to use are:
- * SDL_AtomicLock()
- * SDL_AtomicUnlock()
- * SDL_AtomicIncRef()
- * SDL_AtomicDecRef()
- *
- * Seriously, here be dragons!
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * You can find out a little more about lockless programming and the
- * subtle issues that can arise here:
- * https://learn.microsoft.com/en-us/windows/win32/dxtecharts/lockless-programming
- *
- * There's also lots of good information here:
- * http://www.1024cores.net/home/lock-free-algorithms
- * http://preshing.com/
- *
- * These operations may or may not actually be implemented using
- * processor specific atomic operations. When possible they are
- * implemented as true processor specific atomic operations. When that
- * is not possible the are implemented using locks that *do* use the
- * available atomic operations.
- *
- * All of the atomic operations that modify memory are full memory barriers.
- */
-
-#ifndef SDL_atomic_h_
-#define SDL_atomic_h_
-
-#include
-#include
-
-#include
-
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \name SDL AtomicLock
- *
- * The atomic locks are efficient spinlocks using CPU instructions,
- * but are vulnerable to starvation and can spin forever if a thread
- * holding a lock has been terminated. For this reason you should
- * minimize the code executed inside an atomic lock and never do
- * expensive things like API or system calls while holding them.
- *
- * They are also vulnerable to starvation if the thread holding
- * the lock is lower priority than other threads and doesn't get
- * scheduled. In general you should use mutexes instead, since
- * they have better performance and contention behavior.
- *
- * The atomic locks are not safe to lock recursively.
- *
- * Porting Note:
- * The spin lock functions and type are required and can not be
- * emulated because they are used in the atomic emulation code.
- */
-/* @{ */
-
-typedef int SDL_SpinLock;
-
-/**
- * Try to lock a spin lock by setting it to a non-zero value.
- *
- * ***Please note that spinlocks are dangerous if you don't know what you're
- * doing. Please be careful using any sort of spinlock!***
- *
- * \param lock a pointer to a lock variable
- * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already
- * held.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicLock
- * \sa SDL_AtomicUnlock
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock);
-
-/**
- * Lock a spin lock by setting it to a non-zero value.
- *
- * ***Please note that spinlocks are dangerous if you don't know what you're
- * doing. Please be careful using any sort of spinlock!***
- *
- * \param lock a pointer to a lock variable
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicTryLock
- * \sa SDL_AtomicUnlock
- */
-extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock);
-
-/**
- * Unlock a spin lock by setting it to 0.
- *
- * Always returns immediately.
- *
- * ***Please note that spinlocks are dangerous if you don't know what you're
- * doing. Please be careful using any sort of spinlock!***
- *
- * \param lock a pointer to a lock variable
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicLock
- * \sa SDL_AtomicTryLock
- */
-extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock);
-
-/* @} *//* SDL AtomicLock */
-
-
-/**
- * The compiler barrier prevents the compiler from reordering
- * reads and writes to globally visible variables across the call.
- */
-#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__)
-void _ReadWriteBarrier(void);
-#pragma intrinsic(_ReadWriteBarrier)
-#define SDL_CompilerBarrier() _ReadWriteBarrier()
-#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
-/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */
-#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory")
-#elif defined(__WATCOMC__)
-extern __inline void SDL_CompilerBarrier(void);
-#pragma aux SDL_CompilerBarrier = "" parm [] modify exact [];
-#else
-#define SDL_CompilerBarrier() \
-{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); }
-#endif
-
-/**
- * Memory barriers are designed to prevent reads and writes from being
- * reordered by the compiler and being seen out of order on multi-core CPUs.
- *
- * A typical pattern would be for thread A to write some data and a flag, and
- * for thread B to read the flag and get the data. In this case you would
- * insert a release barrier between writing the data and the flag,
- * guaranteeing that the data write completes no later than the flag is
- * written, and you would insert an acquire barrier between reading the flag
- * and reading the data, to ensure that all the reads associated with the flag
- * have completed.
- *
- * In this pattern you should always see a release barrier paired with an
- * acquire barrier and you should gate the data reads/writes with a single
- * flag variable.
- *
- * For more information on these semantics, take a look at the blog post:
- * http://preshing.com/20120913/acquire-and-release-semantics
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void);
-
-/*
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void);
-
-#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
-#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory")
-#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory")
-#elif defined(__GNUC__) && defined(__aarch64__)
-#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
-#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory")
-#elif defined(__GNUC__) && defined(__arm__)
-#if 0 /* defined(__LINUX__) || defined(__ANDROID__) */
-/* Information from:
- https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19
-
- The Linux kernel provides a helper function which provides the right code for a memory barrier,
- hard-coded at address 0xffff0fa0
-*/
-typedef void (*SDL_KernelMemoryBarrierFunc)();
-#define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)()
-#define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)()
-#else
-#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__)
-#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
-#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory")
-#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_5TE__)
-#ifdef __thumb__
-/* The mcr instruction isn't available in thumb mode, use real functions */
-#define SDL_MEMORY_BARRIER_USES_FUNCTION
-#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction()
-#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction()
-#else
-#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
-#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
-#endif /* __thumb__ */
-#else
-#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory")
-#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory")
-#endif /* __LINUX__ || __ANDROID__ */
-#endif /* __GNUC__ && __arm__ */
-#else
-#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
-/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */
-#include
-#define SDL_MemoryBarrierRelease() __machine_rel_barrier()
-#define SDL_MemoryBarrierAcquire() __machine_acq_barrier()
-#else
-/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */
-#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier()
-#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier()
-#endif
-#endif
-
-/* "REP NOP" is PAUSE, coded for tools that don't know it by that name. */
-#if (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
- #define SDL_CPUPauseInstruction() __asm__ __volatile__("pause\n") /* Some assemblers can't do REP NOP, so go with PAUSE. */
-#elif (defined(__arm__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7) || defined(__aarch64__)
- #define SDL_CPUPauseInstruction() __asm__ __volatile__("yield" ::: "memory")
-#elif (defined(__powerpc__) || defined(__powerpc64__))
- #define SDL_CPUPauseInstruction() __asm__ __volatile__("or 27,27,27");
-#elif (defined(__riscv) && __riscv_xlen == 64)
- #define SDL_CPUPauseInstruction() __asm__ __volatile__(".insn i 0x0F, 0, x0, x0, 0x010");
-#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
- #define SDL_CPUPauseInstruction() _mm_pause() /* this is actually "rep nop" and not a SIMD instruction. No inline asm in MSVC x86-64! */
-#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64))
- #define SDL_CPUPauseInstruction() __yield()
-#elif defined(__WATCOMC__) && defined(__386__)
- extern __inline void SDL_CPUPauseInstruction(void);
- #pragma aux SDL_CPUPauseInstruction = ".686p" ".xmm2" "pause"
-#else
- #define SDL_CPUPauseInstruction()
-#endif
-
-
-/**
- * \brief A type representing an atomic integer value. It is a struct
- * so people don't accidentally use numeric operations on it.
- */
-typedef struct { int value; } SDL_AtomicInt;
-
-/**
- * Set an atomic variable to a new value if it is currently an old value.
- *
- * ***Note: If you don't know what this function is for, you shouldn't use
- * it!***
- *
- * \param a a pointer to an SDL_AtomicInt variable to be modified
- * \param oldval the old value
- * \param newval the new value
- * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicCASPtr
- * \sa SDL_AtomicGet
- * \sa SDL_AtomicSet
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_AtomicInt *a, int oldval, int newval);
-
-/**
- * Set an atomic variable to a value.
- *
- * This function also acts as a full memory barrier.
- *
- * ***Note: If you don't know what this function is for, you shouldn't use
- * it!***
- *
- * \param a a pointer to an SDL_AtomicInt variable to be modified
- * \param v the desired value
- * \returns the previous value of the atomic variable.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicGet
- */
-extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_AtomicInt *a, int v);
-
-/**
- * Get the value of an atomic variable.
- *
- * ***Note: If you don't know what this function is for, you shouldn't use
- * it!***
- *
- * \param a a pointer to an SDL_AtomicInt variable
- * \returns the current value of an atomic variable.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicSet
- */
-extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_AtomicInt *a);
-
-/**
- * Add to an atomic variable.
- *
- * This function also acts as a full memory barrier.
- *
- * ***Note: If you don't know what this function is for, you shouldn't use
- * it!***
- *
- * \param a a pointer to an SDL_AtomicInt variable to be modified
- * \param v the desired value to add
- * \returns the previous value of the atomic variable.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicDecRef
- * \sa SDL_AtomicIncRef
- */
-extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_AtomicInt *a, int v);
-
-/**
- * \brief Increment an atomic variable used as a reference count.
- */
-#ifndef SDL_AtomicIncRef
-#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1)
-#endif
-
-/**
- * \brief Decrement an atomic variable used as a reference count.
- *
- * \return SDL_TRUE if the variable reached zero after decrementing,
- * SDL_FALSE otherwise
- */
-#ifndef SDL_AtomicDecRef
-#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1)
-#endif
-
-/**
- * Set a pointer to a new value if it is currently an old value.
- *
- * ***Note: If you don't know what this function is for, you shouldn't use
- * it!***
- *
- * \param a a pointer to a pointer
- * \param oldval the old pointer value
- * \param newval the new pointer value
- * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicCAS
- * \sa SDL_AtomicGetPtr
- * \sa SDL_AtomicSetPtr
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval);
-
-/**
- * Set a pointer to a value atomically.
- *
- * ***Note: If you don't know what this function is for, you shouldn't use
- * it!***
- *
- * \param a a pointer to a pointer
- * \param v the desired pointer value
- * \returns the previous value of the pointer.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicCASPtr
- * \sa SDL_AtomicGetPtr
- */
-extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v);
-
-/**
- * Get the value of a pointer atomically.
- *
- * ***Note: If you don't know what this function is for, you shouldn't use
- * it!***
- *
- * \param a a pointer to a pointer
- * \returns the current value of a pointer.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AtomicCASPtr
- * \sa SDL_AtomicSetPtr
- */
-extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-
-#include
-
-#endif /* SDL_atomic_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_audio.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_audio.h
deleted file mode 100644
index 1dd39fc6..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_audio.h
+++ /dev/null
@@ -1,1272 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/* !!! FIXME: several functions in here need Doxygen comments. */
-
-/**
- * \file SDL_audio.h
- *
- * \brief Access to the raw audio mixing buffer for the SDL library.
- */
-
-#ifndef SDL_audio_h_
-#define SDL_audio_h_
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief Audio format flags.
- *
- * These are what the 16 bits in SDL_AudioFormat currently mean...
- * (Unspecified bits are always zero).
- *
- * \verbatim
- ++-----------------------sample is signed if set
- ||
- || ++-----------sample is bigendian if set
- || ||
- || || ++---sample is float if set
- || || ||
- || || || +---sample bit size---+
- || || || | |
- 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
- \endverbatim
- *
- * There are macros in SDL 2.0 and later to query these bits.
- */
-typedef Uint16 SDL_AudioFormat;
-
-/**
- * \name Audio flags
- */
-/* @{ */
-
-#define SDL_AUDIO_MASK_BITSIZE (0xFF)
-#define SDL_AUDIO_MASK_DATATYPE (1<<8)
-#define SDL_AUDIO_MASK_ENDIAN (1<<12)
-#define SDL_AUDIO_MASK_SIGNED (1<<15)
-#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE)
-#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE)
-#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN)
-#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED)
-#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x))
-#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x))
-#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x))
-
-/**
- * \name Audio format flags
- *
- * Defaults to LSB byte order.
- */
-/* @{ */
-#define SDL_AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */
-#define SDL_AUDIO_S8 0x8008 /**< Signed 8-bit samples */
-#define SDL_AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */
-#define SDL_AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */
-#define SDL_AUDIO_S16 SDL_AUDIO_S16LSB
-/* @} */
-
-/**
- * \name int32 support
- */
-/* @{ */
-#define SDL_AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */
-#define SDL_AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */
-#define SDL_AUDIO_S32 SDL_AUDIO_S32LSB
-/* @} */
-
-/**
- * \name float32 support
- */
-/* @{ */
-#define SDL_AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */
-#define SDL_AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */
-#define SDL_AUDIO_F32 SDL_AUDIO_F32LSB
-/* @} */
-
-/**
- * \name Native audio byte ordering
- */
-/* @{ */
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
-#define SDL_AUDIO_S16SYS SDL_AUDIO_S16LSB
-#define SDL_AUDIO_S32SYS SDL_AUDIO_S32LSB
-#define SDL_AUDIO_F32SYS SDL_AUDIO_F32LSB
-#else
-#define SDL_AUDIO_S16SYS SDL_AUDIO_S16MSB
-#define SDL_AUDIO_S32SYS SDL_AUDIO_S32MSB
-#define SDL_AUDIO_F32SYS SDL_AUDIO_F32MSB
-#endif
-/* @} */
-
-/**
- * \name Allow change flags
- *
- * Which audio format changes are allowed when opening a device.
- */
-/* @{ */
-#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001
-#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002
-#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004
-#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008
-#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE)
-/* @} */
-
-/* @} *//* Audio flags */
-
-/**
- * This function is called when the audio device needs more data.
- *
- * \param userdata An application-specific parameter saved in
- * the SDL_AudioSpec structure
- * \param stream A pointer to the audio data buffer.
- * \param len The length of that buffer in bytes.
- *
- * Once the callback returns, the buffer will no longer be valid.
- * Stereo samples are stored in a LRLRLR ordering.
- *
- * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if
- * you like. Just open your audio device with a NULL callback.
- */
-typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,
- int len);
-
-/**
- * The calculated values in this structure are calculated by SDL_OpenAudioDevice().
- *
- * For multi-channel audio, the default SDL channel mapping is:
- * 2: FL FR (stereo)
- * 3: FL FR LFE (2.1 surround)
- * 4: FL FR BL BR (quad)
- * 5: FL FR LFE BL BR (4.1 surround)
- * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR)
- * 7: FL FR FC LFE BC SL SR (6.1 surround)
- * 8: FL FR FC LFE BL BR SL SR (7.1 surround)
- */
-typedef struct SDL_AudioSpec
-{
- int freq; /**< DSP frequency -- samples per second */
- SDL_AudioFormat format; /**< Audio data format */
- Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */
- Uint8 silence; /**< Audio buffer silence value (calculated) */
- Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */
- Uint16 padding; /**< Necessary for some compile environments */
- Uint32 size; /**< Audio buffer size in bytes (calculated) */
- SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */
- void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */
-} SDL_AudioSpec;
-
-
-/* Function prototypes */
-
-/**
- * \name Driver discovery functions
- *
- * These functions return the list of built in audio drivers, in the
- * order that they are normally initialized by default.
- */
-/* @{ */
-
-/**
- * Use this function to get the number of built-in audio drivers.
- *
- * This function returns a hardcoded number. This never returns a negative
- * value; if there are no drivers compiled into this build of SDL, this
- * function returns zero. The presence of a driver in this list does not mean
- * it will function, it just means SDL is capable of interacting with that
- * interface. For example, a build of SDL might have esound support, but if
- * there's no esound server available, SDL's esound driver would fail if used.
- *
- * By default, SDL tries all drivers, in its preferred order, until one is
- * found to be usable.
- *
- * \returns the number of built-in audio drivers.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetAudioDriver
- */
-extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void);
-
-/**
- * Use this function to get the name of a built in audio driver.
- *
- * The list of audio drivers is given in the order that they are normally
- * initialized by default; the drivers that seem more reasonable to choose
- * first (as far as the SDL developers believe) are earlier in the list.
- *
- * The names of drivers are all simple, low-ASCII identifiers, like "alsa",
- * "coreaudio" or "xaudio2". These never have Unicode characters, and are not
- * meant to be proper names.
- *
- * \param index the index of the audio driver; the value ranges from 0 to
- * SDL_GetNumAudioDrivers() - 1
- * \returns the name of the audio driver at the requested index, or NULL if an
- * invalid index was specified.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetNumAudioDrivers
- */
-extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index);
-/* @} */
-
-/**
- * Get the name of the current audio driver.
- *
- * The returned string points to internal static memory and thus never becomes
- * invalid, even if you quit the audio subsystem and initialize a new driver
- * (although such a case would return a different static string from another
- * call to this function, of course). As such, you should not modify or free
- * the returned string.
- *
- * \returns the name of the current audio driver or NULL if no driver has been
- * initialized.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void);
-
-/**
- * SDL Audio Device IDs.
- */
-typedef Uint32 SDL_AudioDeviceID;
-
-/**
- * Get the number of built-in audio devices.
- *
- * This function is only valid after successfully initializing the audio
- * subsystem.
- *
- * Note that audio capture support is not implemented as of SDL 2.0.4, so the
- * `iscapture` parameter is for future expansion and should always be zero for
- * now.
- *
- * This function will return -1 if an explicit list of devices can't be
- * determined. Returning -1 is not an error. For example, if SDL is set up to
- * talk to a remote audio server, it can't list every one available on the
- * Internet, but it will still allow a specific host to be specified in
- * SDL_OpenAudioDevice().
- *
- * In many common cases, when this function returns a value <= 0, it can still
- * successfully open the default device (NULL for first argument of
- * SDL_OpenAudioDevice()).
- *
- * This function may trigger a complete redetect of available hardware. It
- * should not be called for each iteration of a loop, but rather once at the
- * start of a loop:
- *
- * ```c
- * // Don't do this:
- * for (int i = 0; i < SDL_GetNumAudioDevices(0); i++)
- *
- * // do this instead:
- * const int count = SDL_GetNumAudioDevices(0);
- * for (int i = 0; i < count; ++i) { do_something_here(); }
- * ```
- *
- * \param iscapture zero to request playback devices, non-zero to request
- * recording devices
- * \returns the number of available devices exposed by the current driver or
- * -1 if an explicit list of devices can't be determined. A return
- * value of -1 does not necessarily mean an error condition.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetAudioDeviceName
- * \sa SDL_OpenAudioDevice
- */
-extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture);
-
-/**
- * Get the human-readable name of a specific audio device.
- *
- * This function is only valid after successfully initializing the audio
- * subsystem. The values returned by this function reflect the latest call to
- * SDL_GetNumAudioDevices(); re-call that function to redetect available
- * hardware.
- *
- * The string returned by this function is UTF-8 encoded, read-only, and
- * managed internally. You are not to free it. If you need to keep the string
- * for any length of time, you should make your own copy of it, as it will be
- * invalid next time any of several other SDL functions are called.
- *
- * \param index the index of the audio device; valid values range from 0 to
- * SDL_GetNumAudioDevices() - 1
- * \param iscapture non-zero to query the list of recording devices, zero to
- * query the list of output devices.
- * \returns the name of the audio device at the requested index, or NULL on
- * error.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetNumAudioDevices
- * \sa SDL_GetDefaultAudioInfo
- */
-extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index,
- int iscapture);
-
-/**
- * Get the preferred audio format of a specific audio device.
- *
- * This function is only valid after a successfully initializing the audio
- * subsystem. The values returned by this function reflect the latest call to
- * SDL_GetNumAudioDevices(); re-call that function to redetect available
- * hardware.
- *
- * `spec` will be filled with the sample rate, sample format, and channel
- * count.
- *
- * \param index the index of the audio device; valid values range from 0 to
- * SDL_GetNumAudioDevices() - 1
- * \param iscapture non-zero to query the list of recording devices, zero to
- * query the list of output devices.
- * \param spec The SDL_AudioSpec to be initialized by this function.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetNumAudioDevices
- * \sa SDL_GetDefaultAudioInfo
- */
-extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index,
- int iscapture,
- SDL_AudioSpec *spec);
-
-
-/**
- * Get the name and preferred format of the default audio device.
- *
- * Some (but not all!) platforms have an isolated mechanism to get information
- * about the "default" device. This can actually be a completely different
- * device that's not in the list you get from SDL_GetAudioDeviceSpec(). It can
- * even be a network address! (This is discussed in SDL_OpenAudioDevice().)
- *
- * As a result, this call is not guaranteed to be performant, as it can query
- * the sound server directly every time, unlike the other query functions. You
- * should call this function sparingly!
- *
- * `spec` will be filled with the sample rate, sample format, and channel
- * count, if a default device exists on the system. If `name` is provided,
- * will be filled with either a dynamically-allocated UTF-8 string or NULL.
- *
- * \param name A pointer to be filled with the name of the default device (can
- * be NULL). Please call SDL_free() when you are done with this
- * pointer!
- * \param spec The SDL_AudioSpec to be initialized by this function.
- * \param iscapture non-zero to query the default recording device, zero to
- * query the default output device.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetAudioDeviceName
- * \sa SDL_GetAudioDeviceSpec
- * \sa SDL_OpenAudioDevice
- */
-extern DECLSPEC int SDLCALL SDL_GetDefaultAudioInfo(char **name,
- SDL_AudioSpec *spec,
- int iscapture);
-
-
-/**
- * Open a specific audio device.
- *
- * Passing in a `device` name of NULL requests the most reasonable default.
- * The `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(),
- * but some drivers allow arbitrary and driver-specific strings, such as a
- * hostname/IP address for a remote audio server, or a filename in the
- * diskaudio driver.
- *
- * An opened audio device starts out paused, and should be enabled for playing
- * by calling SDL_PlayAudioDevice(devid) when you are ready for your audio
- * callback function to be called. Since the audio driver may modify the
- * requested size of the audio buffer, you should allocate any local mixing
- * buffers after you open the audio device.
- *
- * The audio callback runs in a separate thread in most cases; you can prevent
- * race conditions between your callback and other threads without fully
- * pausing playback with SDL_LockAudioDevice(). For more information about the
- * callback, see SDL_AudioSpec.
- *
- * Managing the audio spec via 'desired' and 'obtained':
- *
- * When filling in the desired audio spec structure:
- *
- * - `desired->freq` should be the frequency in sample-frames-per-second (Hz).
- * - `desired->format` should be the audio format (`SDL_AUDIO_S16SYS`, etc).
- * - `desired->samples` is the desired size of the audio buffer, in _sample
- * frames_ (with stereo output, two samples--left and right--would make a
- * single sample frame). This number should be a power of two, and may be
- * adjusted by the audio driver to a value more suitable for the hardware.
- * Good values seem to range between 512 and 8096 inclusive, depending on
- * the application and CPU speed. Smaller values reduce latency, but can
- * lead to underflow if the application is doing heavy processing and cannot
- * fill the audio buffer in time. Note that the number of sample frames is
- * directly related to time by the following formula: `ms =
- * (sampleframes*1000)/freq`
- * - `desired->size` is the size in _bytes_ of the audio buffer, and is
- * calculated by SDL_OpenAudioDevice(). You don't initialize this.
- * - `desired->silence` is the value used to set the buffer to silence, and is
- * calculated by SDL_OpenAudioDevice(). You don't initialize this.
- * - `desired->callback` should be set to a function that will be called when
- * the audio device is ready for more data. It is passed a pointer to the
- * audio buffer, and the length in bytes of the audio buffer. This function
- * usually runs in a separate thread, and so you should protect data
- * structures that it accesses by calling SDL_LockAudioDevice() and
- * SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL
- * pointer here, and call SDL_QueueAudio() with some frequency, to queue
- * more audio samples to be played (or for capture devices, call
- * SDL_DequeueAudio() with some frequency, to obtain audio samples).
- * - `desired->userdata` is passed as the first parameter to your callback
- * function. If you passed a NULL callback, this value is ignored.
- *
- * `allowed_changes` can have the following flags OR'd together:
- *
- * - `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE`
- * - `SDL_AUDIO_ALLOW_FORMAT_CHANGE`
- * - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE`
- * - `SDL_AUDIO_ALLOW_SAMPLES_CHANGE`
- * - `SDL_AUDIO_ALLOW_ANY_CHANGE`
- *
- * These flags specify how SDL should behave when a device cannot offer a
- * specific feature. If the application requests a feature that the hardware
- * doesn't offer, SDL will always try to get the closest equivalent.
- *
- * For example, if you ask for float32 audio format, but the sound card only
- * supports int16, SDL will set the hardware to int16. If you had set
- * SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained`
- * structure. If that flag was *not* set, SDL will prepare to convert your
- * callback's float32 audio to int16 before feeding it to the hardware and
- * will keep the originally requested format in the `obtained` structure.
- *
- * The resulting audio specs, varying depending on hardware and on what
- * changes were allowed, will then be written back to `obtained`.
- *
- * If your application can only handle one specific data format, pass a zero
- * for `allowed_changes` and let SDL transparently handle any differences.
- *
- * \param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a
- * driver-specific name as appropriate. NULL requests the most
- * reasonable default device.
- * \param iscapture non-zero to specify a device should be opened for
- * recording, not playback
- * \param desired an SDL_AudioSpec structure representing the desired output
- * format
- * \param obtained an SDL_AudioSpec structure filled in with the actual output
- * format
- * \param allowed_changes 0, or one or more flags OR'd together
- * \returns a valid device ID that is > 0 on success or 0 on failure; call
- * SDL_GetError() for more information.
- *
- * For compatibility with SDL 1.2, this will never return 1, since
- * SDL reserves that ID for the legacy SDL_OpenAudio() function.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CloseAudioDevice
- * \sa SDL_GetAudioDeviceName
- * \sa SDL_LockAudioDevice
- * \sa SDL_PlayAudioDevice
- * \sa SDL_PauseAudioDevice
- * \sa SDL_UnlockAudioDevice
- */
-extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice(
- const char *device,
- int iscapture,
- const SDL_AudioSpec *desired,
- SDL_AudioSpec *obtained,
- int allowed_changes);
-
-
-
-/**
- * \name Audio state
- *
- * Get the current audio state.
- */
-/* @{ */
-typedef enum
-{
- SDL_AUDIO_STOPPED = 0,
- SDL_AUDIO_PLAYING,
- SDL_AUDIO_PAUSED
-} SDL_AudioStatus;
-
-/**
- * Use this function to get the current audio state of an audio device.
- *
- * \param dev the ID of an audio device previously opened with
- * SDL_OpenAudioDevice()
- * \returns the SDL_AudioStatus of the specified audio device.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PlayAudioDevice
- * \sa SDL_PauseAudioDevice
- */
-extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev);
-/* @} *//* Audio State */
-
-/**
- * Use this function to play audio on a specified device.
- *
- * Newly-opened audio devices start in the paused state, so you must call this
- * function after opening the specified audio device to start playing sound.
- * This allows you to safely initialize data for your callback function after
- * opening the audio device. Silence will be written to the audio device while
- * paused, and the audio callback is guaranteed to not be called. Pausing one
- * device does not prevent other unpaused devices from running their
- * callbacks.
- *
- * \param dev a device opened by SDL_OpenAudioDevice()
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LockAudioDevice
- * \sa SDL_PauseAudioDevice
- */
-extern DECLSPEC int SDLCALL SDL_PlayAudioDevice(SDL_AudioDeviceID dev);
-
-
-
-/**
- * Use this function to pause audio playback on a specified device.
- *
- * This function pauses the audio callback processing for a given device.
- * Silence will be written to the audio device while paused, and the audio
- * callback is guaranteed to not be called. Pausing one device does not
- * prevent other unpaused devices from running their callbacks.
- *
- * If you just need to protect a few variables from race conditions vs your
- * callback, you shouldn't pause the audio device, as it will lead to dropouts
- * in the audio playback. Instead, you should use SDL_LockAudioDevice().
- *
- * \param dev a device opened by SDL_OpenAudioDevice()
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LockAudioDevice
- * \sa SDL_PlayAudioDevice
- */
-extern DECLSPEC int SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev);
-
-
-/**
- * Load the audio data of a WAVE file into memory.
- *
- * Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to
- * be valid pointers. The entire data portion of the file is then loaded into
- * memory and decoded if necessary.
- *
- * Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and
- * 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and
- * A-law and mu-law (8 bits). Other formats are currently unsupported and
- * cause an error.
- *
- * If this function succeeds, the pointer returned by it is equal to `spec`
- * and the pointer to the audio data allocated by the function is written to
- * `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec
- * members `freq`, `channels`, and `format` are set to the values of the audio
- * data in the buffer. The `samples` member is set to a sane default and all
- * others are set to zero.
- *
- * It's necessary to use SDL_free() to free the audio data returned in
- * `audio_buf` when it is no longer used.
- *
- * Because of the underspecification of the .WAV format, there are many
- * problematic files in the wild that cause issues with strict decoders. To
- * provide compatibility with these files, this decoder is lenient in regards
- * to the truncation of the file, the fact chunk, and the size of the RIFF
- * chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`,
- * `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to
- * tune the behavior of the loading process.
- *
- * Any file that is invalid (due to truncation, corruption, or wrong values in
- * the headers), too big, or unsupported causes an error. Additionally, any
- * critical I/O error from the data source will terminate the loading process
- * with an error. The function returns NULL on error and in all cases (with
- * the exception of `src` being NULL), an appropriate error message will be
- * set.
- *
- * It is required that the data source supports seeking.
- *
- * Example:
- *
- * ```c
- * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len);
- * ```
- *
- * Note that the SDL_LoadWAV macro does this same thing for you, but in a less
- * messy way:
- *
- * ```c
- * SDL_LoadWAV("sample.wav", &spec, &buf, &len);
- * ```
- *
- * \param src The data source for the WAVE data
- * \param freesrc if SDL_TRUE, calls SDL_RWclose() on `src` before returning,
- * even in the case of an error
- * \param spec An SDL_AudioSpec that will be filled in with the wave file's
- * format details
- * \param audio_buf A pointer filled with the audio data, allocated by the
- * function
- * \param audio_len A pointer filled with the length of the audio data buffer
- * in bytes
- * \returns This function, if successfully called, returns `spec`, which will
- * be filled with the audio data format of the wave source data.
- * `audio_buf` will be filled with a pointer to an allocated buffer
- * containing the audio data, and `audio_len` is filled with the
- * length of that audio buffer in bytes.
- *
- * This function returns NULL if the .WAV file cannot be opened, uses
- * an unknown data format, or is corrupt; call SDL_GetError() for
- * more information.
- *
- * When the application is done with the data returned in
- * `audio_buf`, it should call SDL_free() to dispose of it.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_free
- * \sa SDL_LoadWAV
- */
-extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src,
- SDL_bool freesrc,
- SDL_AudioSpec * spec,
- Uint8 ** audio_buf,
- Uint32 * audio_len);
-
-/**
- * Loads a WAV from a file.
- * Compatibility convenience function.
- */
-#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \
- SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len)
-
-
-/* SDL_AudioStream is an audio conversion interface.
- - It can handle resampling data in chunks without generating
- artifacts, when it doesn't have the complete buffer available.
- - It can handle incoming data in any variable size.
- - You push data as you have it, and pull it when you need it
- - It can also function as a basic audio data queue even if you
- just have sound that needs to pass from one place to another.
- */
-struct SDL_AudioStream; /* this is opaque to the outside world. */
-typedef struct SDL_AudioStream SDL_AudioStream;
-
-/**
- * Create a new audio stream.
- *
- * \param src_format The format of the source audio
- * \param src_channels The number of channels of the source audio
- * \param src_rate The sampling rate of the source audio
- * \param dst_format The format of the desired audio output
- * \param dst_channels The number of channels of the desired audio output
- * \param dst_rate The sampling rate of the desired audio output
- * \returns 0 on success, or -1 on error.
- *
- * \threadsafety It is safe to call this function from any thread.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PutAudioStreamData
- * \sa SDL_GetAudioStreamData
- * \sa SDL_GetAudioStreamAvailable
- * \sa SDL_FlushAudioStream
- * \sa SDL_ClearAudioStream
- * \sa SDL_ChangeAudioStreamOutput
- * \sa SDL_DestroyAudioStream
- */
-extern DECLSPEC SDL_AudioStream *SDLCALL SDL_CreateAudioStream(SDL_AudioFormat src_format,
- int src_channels,
- int src_rate,
- SDL_AudioFormat dst_format,
- int dst_channels,
- int dst_rate);
-
-
-/**
- * Query the current format of an audio stream.
- *
- * \param stream the SDL_AudioStream to query.
- * \param src_format Where to store the input audio format; ignored if NULL.
- * \param src_channels Where to store the input channel count; ignored if
- * NULL.
- * \param src_rate Where to store the input sample rate; ignored if NULL.
- * \param dst_format Where to store the output audio format; ignored if NULL.
- * \param dst_channels Where to store the output channel count; ignored if
- * NULL.
- * \param dst_rate Where to store the output sample rate; ignored if NULL.
- * \returns 0 on success, or -1 on error.
- *
- * \threadsafety It is safe to call this function from any thread, as it holds
- * a stream-specific mutex while running.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetAudioStreamFormat(SDL_AudioStream *stream,
- SDL_AudioFormat *src_format,
- int *src_channels,
- int *src_rate,
- SDL_AudioFormat *dst_format,
- int *dst_channels,
- int *dst_rate);
-
-/**
- * Change the input and output formats of an audio stream.
- *
- * Future calls to and SDL_GetAudioStreamAvailable and SDL_GetAudioStreamData
- * will reflect the new format, and future calls to SDL_PutAudioStreamData
- * must provide data in the new input formats.
- *
- * \param stream The stream the format is being changed
- * \param src_format The format of the audio input
- * \param src_channels The number of channels of the audio input
- * \param src_rate The sampling rate of the audio input
- * \param dst_format The format of the desired audio output
- * \param dst_channels The number of channels of the desired audio output
- * \param dst_rate The sampling rate of the desired audio output
- * \returns 0 on success, or -1 on error.
- *
- * \threadsafety It is safe to call this function from any thread, as it holds
- * a stream-specific mutex while running.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetAudioStreamFormat
- * \sa SDL_PutAudioStreamData
- * \sa SDL_GetAudioStreamData
- * \sa SDL_GetAudioStreamAvailable
- */
-extern DECLSPEC int SDLCALL SDL_SetAudioStreamFormat(SDL_AudioStream *stream,
- SDL_AudioFormat src_format,
- int src_channels,
- int src_rate,
- SDL_AudioFormat dst_format,
- int dst_channels,
- int dst_rate);
-
-/**
- * Add data to be converted/resampled to the stream.
- *
- * This data must match the format/channels/samplerate specified in the latest
- * call to SDL_SetAudioStreamFormat, or the format specified when creating the
- * stream if it hasn't been changed.
- *
- * Note that this call simply queues unconverted data for later. This is
- * different than SDL2, where data was converted during the Put call and the
- * Get call would just dequeue the previously-converted data.
- *
- * \param stream The stream the audio data is being added to
- * \param buf A pointer to the audio data to add
- * \param len The number of bytes to write to the stream
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CreateAudioStream
- * \sa SDL_GetAudioStreamData
- * \sa SDL_GetAudioStreamAvailable
- * \sa SDL_FlushAudioStream
- * \sa SDL_ClearAudioStream
- * \sa SDL_DestroyAudioStream
- */
-extern DECLSPEC int SDLCALL SDL_PutAudioStreamData(SDL_AudioStream *stream, const void *buf, int len);
-
-/**
- * Get converted/resampled data from the stream.
- *
- * The input/output data format/channels/samplerate is specified when creating
- * the stream, and can be changed after creation by calling
- * SDL_SetAudioStreamFormat.
- *
- * Note that any conversion and resampling necessary is done during this call,
- * and SDL_PutAudioStreamData simply queues unconverted data for later. This
- * is different than SDL2, where that work was done while inputting new data
- * to the stream and requesting the output just copied the converted data.
- *
- * \param stream The stream the audio is being requested from
- * \param buf A buffer to fill with audio data
- * \param len The maximum number of bytes to fill
- * \returns the number of bytes read from the stream, or -1 on error
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CreateAudioStream
- * \sa SDL_PutAudioStreamData
- * \sa SDL_GetAudioStreamAvailable
- * \sa SDL_SetAudioStreamFormat
- * \sa SDL_FlushAudioStream
- * \sa SDL_ClearAudioStream
- * \sa SDL_DestroyAudioStream
- */
-extern DECLSPEC int SDLCALL SDL_GetAudioStreamData(SDL_AudioStream *stream, void *buf, int len);
-
-/**
- * Get the number of converted/resampled bytes available.
- *
- * The stream may be buffering data behind the scenes until it has enough to
- * resample correctly, so this number might be lower than what you expect, or
- * even be zero. Add more data or flush the stream if you need the data now.
- *
- * If the stream has so much data that it would overflow an int, the return
- * value is clamped to a maximum value, but no queued data is lost; if there
- * are gigabytes of data queued, the app might need to read some of it with
- * SDL_GetAudioStreamData before this function's return value is no longer
- * clamped.
- *
- * \param stream The audio stream to query
- * \returns the number of converted/resampled bytes available.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CreateAudioStream
- * \sa SDL_PutAudioStreamData
- * \sa SDL_GetAudioStreamData
- * \sa SDL_FlushAudioStream
- * \sa SDL_ClearAudioStream
- * \sa SDL_DestroyAudioStream
- */
-extern DECLSPEC int SDLCALL SDL_GetAudioStreamAvailable(SDL_AudioStream *stream);
-
-/**
- * Tell the stream that you're done sending data, and anything being buffered
- * should be converted/resampled and made available immediately.
- *
- * It is legal to add more data to a stream after flushing, but there will be
- * audio gaps in the output. Generally this is intended to signal the end of
- * input, so the complete output becomes available.
- *
- * \param stream The audio stream to flush
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CreateAudioStream
- * \sa SDL_PutAudioStreamData
- * \sa SDL_GetAudioStreamData
- * \sa SDL_GetAudioStreamAvailable
- * \sa SDL_ClearAudioStream
- * \sa SDL_DestroyAudioStream
- */
-extern DECLSPEC int SDLCALL SDL_FlushAudioStream(SDL_AudioStream *stream);
-
-/**
- * Clear any pending data in the stream without converting it
- *
- * \param stream The audio stream to clear
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CreateAudioStream
- * \sa SDL_PutAudioStreamData
- * \sa SDL_GetAudioStreamData
- * \sa SDL_GetAudioStreamAvailable
- * \sa SDL_FlushAudioStream
- * \sa SDL_DestroyAudioStream
- */
-extern DECLSPEC int SDLCALL SDL_ClearAudioStream(SDL_AudioStream *stream);
-
-/**
- * Free an audio stream
- *
- * \param stream The audio stream to free
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CreateAudioStream
- * \sa SDL_PutAudioStreamData
- * \sa SDL_GetAudioStreamData
- * \sa SDL_GetAudioStreamAvailable
- * \sa SDL_FlushAudioStream
- * \sa SDL_ClearAudioStream
- */
-extern DECLSPEC void SDLCALL SDL_DestroyAudioStream(SDL_AudioStream *stream);
-
-#define SDL_MIX_MAXVOLUME 128
-
-/**
- * Mix audio data in a specified format.
- *
- * This takes an audio buffer `src` of `len` bytes of `format` data and mixes
- * it into `dst`, performing addition, volume adjustment, and overflow
- * clipping. The buffer pointed to by `dst` must also be `len` bytes of
- * `format` data.
- *
- * This is provided for convenience -- you can mix your own audio data.
- *
- * Do not use this function for mixing together more than two streams of
- * sample data. The output from repeated application of this function may be
- * distorted by clipping, because there is no accumulator with greater range
- * than the input (not to mention this being an inefficient way of doing it).
- *
- * It is a common misconception that this function is required to write audio
- * data to an output stream in an audio callback. While you can do that,
- * SDL_MixAudioFormat() is really only needed when you're mixing a single
- * audio stream with a volume adjustment.
- *
- * \param dst the destination for the mixed audio
- * \param src the source audio buffer to be mixed
- * \param format the SDL_AudioFormat structure representing the desired audio
- * format
- * \param len the length of the audio buffer in bytes
- * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME
- * for full audio volume
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_MixAudioFormat(Uint8 * dst,
- const Uint8 * src,
- SDL_AudioFormat format,
- Uint32 len, int volume);
-
-/**
- * Queue more audio on non-callback devices.
- *
- * If you are looking to retrieve queued audio from a non-callback capture
- * device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return
- * -1 to signify an error if you use it with capture devices.
- *
- * SDL offers two ways to feed audio to the device: you can either supply a
- * callback that SDL triggers with some frequency to obtain more audio (pull
- * method), or you can supply no callback, and then SDL will expect you to
- * supply data at regular intervals (push method) with this function.
- *
- * There are no limits on the amount of data you can queue, short of
- * exhaustion of address space. Queued data will drain to the device as
- * necessary without further intervention from you. If the device needs audio
- * but there is not enough queued, it will play silence to make up the
- * difference. This means you will have skips in your audio playback if you
- * aren't routinely queueing sufficient data.
- *
- * This function copies the supplied data, so you are safe to free it when the
- * function returns. This function is thread-safe, but queueing to the same
- * device from two threads at once does not promise which buffer will be
- * queued first.
- *
- * You may not queue audio on a device that is using an application-supplied
- * callback; doing so returns an error. You have to use the audio callback or
- * queue audio with this function, but not both.
- *
- * You should not call SDL_LockAudio() on the device before queueing; SDL
- * handles locking internally for this function.
- *
- * Note that SDL does not support planar audio. You will need to resample from
- * planar audio formats into a non-planar one (see SDL_AudioFormat) before
- * queuing audio.
- *
- * \param dev the device ID to which we will queue audio
- * \param data the data to queue to the device for later playback
- * \param len the number of bytes (not samples!) to which `data` points
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ClearQueuedAudio
- * \sa SDL_GetQueuedAudioSize
- */
-extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len);
-
-/**
- * Dequeue more audio on non-callback devices.
- *
- * If you are looking to queue audio for output on a non-callback playback
- * device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always
- * return 0 if you use it with playback devices.
- *
- * SDL offers two ways to retrieve audio from a capture device: you can either
- * supply a callback that SDL triggers with some frequency as the device
- * records more audio data, (push method), or you can supply no callback, and
- * then SDL will expect you to retrieve data at regular intervals (pull
- * method) with this function.
- *
- * There are no limits on the amount of data you can queue, short of
- * exhaustion of address space. Data from the device will keep queuing as
- * necessary without further intervention from you. This means you will
- * eventually run out of memory if you aren't routinely dequeueing data.
- *
- * Capture devices will not queue data when paused; if you are expecting to
- * not need captured audio for some length of time, use SDL_PauseAudioDevice()
- * to stop the capture device from queueing more data. This can be useful
- * during, say, level loading times. When unpaused, capture devices will start
- * queueing data from that point, having flushed any capturable data available
- * while paused.
- *
- * This function is thread-safe, but dequeueing from the same device from two
- * threads at once does not promise which thread will dequeue data first.
- *
- * You may not dequeue audio from a device that is using an
- * application-supplied callback; doing so returns an error. You have to use
- * the audio callback, or dequeue audio with this function, but not both.
- *
- * You should not call SDL_LockAudio() on the device before dequeueing; SDL
- * handles locking internally for this function.
- *
- * \param dev the device ID from which we will dequeue audio
- * \param data a pointer into where audio data should be copied
- * \param len the number of bytes (not samples!) to which (data) points
- * \returns the number of bytes dequeued, which could be less than requested;
- * call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ClearQueuedAudio
- * \sa SDL_GetQueuedAudioSize
- */
-extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len);
-
-/**
- * Get the number of bytes of still-queued audio.
- *
- * For playback devices: this is the number of bytes that have been queued for
- * playback with SDL_QueueAudio(), but have not yet been sent to the hardware.
- *
- * Once we've sent it to the hardware, this function can not decide the exact
- * byte boundary of what has been played. It's possible that we just gave the
- * hardware several kilobytes right before you called this function, but it
- * hasn't played any of it yet, or maybe half of it, etc.
- *
- * For capture devices, this is the number of bytes that have been captured by
- * the device and are waiting for you to dequeue. This number may grow at any
- * time, so this only informs of the lower-bound of available data.
- *
- * You may not queue or dequeue audio on a device that is using an
- * application-supplied callback; calling this function on such a device
- * always returns 0. You have to use the audio callback or queue audio, but
- * not both.
- *
- * You should not call SDL_LockAudio() on the device before querying; SDL
- * handles locking internally for this function.
- *
- * \param dev the device ID of which we will query queued audio size
- * \returns the number of bytes (not samples!) of queued audio.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ClearQueuedAudio
- * \sa SDL_QueueAudio
- * \sa SDL_DequeueAudio
- */
-extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
-
-/**
- * Drop any queued audio data waiting to be sent to the hardware.
- *
- * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For
- * output devices, the hardware will start playing silence if more audio isn't
- * queued. For capture devices, the hardware will start filling the empty
- * queue with new data if the capture device isn't paused.
- *
- * This will not prevent playback of queued audio that's already been sent to
- * the hardware, as we can not undo that, so expect there to be some fraction
- * of a second of audio that might still be heard. This can be useful if you
- * want to, say, drop any pending music or any unprocessed microphone input
- * during a level change in your game.
- *
- * You may not queue or dequeue audio on a device that is using an
- * application-supplied callback; calling this function on such a device
- * always returns 0. You have to use the audio callback or queue audio, but
- * not both.
- *
- * You should not call SDL_LockAudio() on the device before clearing the
- * queue; SDL handles locking internally for this function.
- *
- * This function always succeeds and thus returns void.
- *
- * \param dev the device ID of which to clear the audio queue
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetQueuedAudioSize
- * \sa SDL_QueueAudio
- * \sa SDL_DequeueAudio
- */
-extern DECLSPEC int SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev);
-
-
-/**
- * \name Audio lock functions
- *
- * The lock manipulated by these functions protects the callback function.
- * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that
- * the callback function is not running. Do not call these from the callback
- * function or you will cause deadlock.
- */
-/* @{ */
-
-/**
- * Use this function to lock out the audio callback function for a specified
- * device.
- *
- * The lock manipulated by these functions protects the audio callback
- * function specified in SDL_OpenAudioDevice(). During a
- * SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed
- * that the callback function for that device is not running, even if the
- * device is not paused. While a device is locked, any other unpaused,
- * unlocked devices may still run their callbacks.
- *
- * Calling this function from inside your audio callback is unnecessary. SDL
- * obtains this lock before calling your function, and releases it when the
- * function returns.
- *
- * You should not hold the lock longer than absolutely necessary. If you hold
- * it too long, you'll experience dropouts in your audio playback. Ideally,
- * your application locks the device, sets a few variables and unlocks again.
- * Do not do heavy work while holding the lock for a device.
- *
- * It is safe to lock the audio device multiple times, as long as you unlock
- * it an equivalent number of times. The callback will not run until the
- * device has been unlocked completely in this way. If your application fails
- * to unlock the device appropriately, your callback will never run, you might
- * hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably
- * deadlock.
- *
- * Internally, the audio device lock is a mutex; if you lock from two threads
- * at once, not only will you block the audio callback, you'll block the other
- * thread.
- *
- * \param dev the ID of the device to be locked
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_UnlockAudioDevice
- */
-extern DECLSPEC int SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev);
-
-/**
- * Use this function to unlock the audio callback function for a specified
- * device.
- *
- * This function should be paired with a previous SDL_LockAudioDevice() call.
- *
- * \param dev the ID of the device to be unlocked
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LockAudioDevice
- */
-extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev);
-/* @} *//* Audio lock functions */
-
-/**
- * Use this function to shut down audio processing and close the audio device.
- *
- * The application should close open audio devices once they are no longer
- * needed. Calling this function will wait until the device's audio callback
- * is not running, release the audio hardware and then clean up internal
- * state. No further audio will play from this device once this function
- * returns.
- *
- * This function may block briefly while pending audio data is played by the
- * hardware, so that applications don't drop the last buffer of data they
- * supplied.
- *
- * The device ID is invalid as soon as the device is closed, and is eligible
- * for reuse in a new SDL_OpenAudioDevice() call immediately.
- *
- * \param dev an audio device previously opened with SDL_OpenAudioDevice()
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_OpenAudioDevice
- */
-extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev);
-
-/**
- * Convert some audio data of one format to another format.
- *
- * Please note that this function is for convenience, but should not be used
- * to resample audio in blocks, as it will introduce audio artifacts on the
- * boundaries. You should only use this function if you are converting audio
- * data in its entirety in one call. If you want to convert audio in smaller
- * chunks, use an SDL_AudioStream, which is designed for this situation.
- *
- * Internally, this function creates and destroys an SDL_AudioStream on each
- * use, so it's also less efficient than using one directly, if you need to
- * convert multiple times.
- *
- * \param src_format The format of the source audio
- * \param src_channels The number of channels of the source audio
- * \param src_rate The sampling rate of the source audio
- * \param src_data The audio data to be converted
- * \param src_len The len of src_data
- * \param dst_format The format of the desired audio output
- * \param dst_channels The number of channels of the desired audio output
- * \param dst_rate The sampling rate of the desired audio output
- * \param dst_data Will be filled with a pointer to converted audio data,
- * which should be freed with SDL_free(). On error, it will be
- * NULL.
- * \param dst_len Will be filled with the len of dst_data
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CreateAudioStream
- */
-extern DECLSPEC int SDLCALL SDL_ConvertAudioSamples(SDL_AudioFormat src_format,
- Uint8 src_channels,
- int src_rate,
- const Uint8 *src_data,
- int src_len,
- SDL_AudioFormat dst_format,
- Uint8 dst_channels,
- int dst_rate,
- Uint8 **dst_data,
- int *dst_len);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_audio_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_begin_code.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_begin_code.h
deleted file mode 100644
index 99d7aa76..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_begin_code.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_begin_code.h
- *
- * This file sets things up for C dynamic library function definitions,
- * static inlined functions, and structures aligned at 4-byte alignment.
- * If you don't like ugly C preprocessor code, don't look at this file. :)
- */
-
-/* This shouldn't be nested -- included it around code only. */
-#ifdef SDL_begin_code_h
-#error Nested inclusion of SDL_begin_code.h
-#endif
-#define SDL_begin_code_h
-
-#ifndef SDL_DEPRECATED
-# if defined(__GNUC__) && (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */
-# define SDL_DEPRECATED __attribute__((deprecated))
-# else
-# define SDL_DEPRECATED
-# endif
-#endif
-
-#ifndef SDL_UNUSED
-# ifdef __GNUC__
-# define SDL_UNUSED __attribute__((unused))
-# else
-# define SDL_UNUSED
-# endif
-#endif
-
-/* Some compilers use a special export keyword */
-#ifndef DECLSPEC
-# if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) || defined(__GDK__)
-# ifdef DLL_EXPORT
-# define DECLSPEC __declspec(dllexport)
-# else
-# define DECLSPEC
-# endif
-# else
-# if defined(__GNUC__) && __GNUC__ >= 4
-# define DECLSPEC __attribute__ ((visibility("default")))
-# else
-# define DECLSPEC
-# endif
-# endif
-#endif
-
-/* By default SDL uses the C calling convention */
-#ifndef SDLCALL
-#if (defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__)) && !defined(__GNUC__)
-#define SDLCALL __cdecl
-#else
-#define SDLCALL
-#endif
-#endif /* SDLCALL */
-
-/* Force structure packing at 4 byte alignment.
- This is necessary if the header is included in code which has structure
- packing set to an alternate value, say for loading structures from disk.
- The packing is reset to the previous value in SDL_close_code.h
- */
-#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__)
-#ifdef _MSC_VER
-#pragma warning(disable: 4103)
-#endif
-#ifdef __clang__
-#pragma clang diagnostic ignored "-Wpragma-pack"
-#endif
-#ifdef __BORLANDC__
-#pragma nopackwarning
-#endif
-#ifdef _WIN64
-/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */
-#pragma pack(push,8)
-#else
-#pragma pack(push,4)
-#endif
-#endif /* Compiler needs structure packing set */
-
-#ifndef SDL_INLINE
-#ifdef __GNUC__
-#define SDL_INLINE __inline__
-#elif defined(_MSC_VER) || defined(__BORLANDC__) || \
- defined(__DMC__) || defined(__SC__) || \
- defined(__WATCOMC__) || defined(__LCC__) || \
- defined(__DECC) || defined(__CC_ARM)
-#define SDL_INLINE __inline
-#ifndef __inline__
-#define __inline__ __inline
-#endif
-#else
-#define SDL_INLINE inline
-#ifndef __inline__
-#define __inline__ inline
-#endif
-#endif
-#endif /* SDL_INLINE not defined */
-
-#ifndef SDL_FORCE_INLINE
-#ifdef _MSC_VER
-#define SDL_FORCE_INLINE __forceinline
-#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) )
-#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__
-#else
-#define SDL_FORCE_INLINE static SDL_INLINE
-#endif
-#endif /* SDL_FORCE_INLINE not defined */
-
-#ifndef SDL_NORETURN
-#ifdef __GNUC__
-#define SDL_NORETURN __attribute__((noreturn))
-#elif defined(_MSC_VER)
-#define SDL_NORETURN __declspec(noreturn)
-#else
-#define SDL_NORETURN
-#endif
-#endif /* SDL_NORETURN not defined */
-
-/* Apparently this is needed by several Windows compilers */
-#ifndef __MACH__
-#ifndef NULL
-#ifdef __cplusplus
-#define NULL 0
-#else
-#define NULL ((void *)0)
-#endif
-#endif /* NULL */
-#endif /* ! macOS - breaks precompiled headers */
-
-#ifndef SDL_FALLTHROUGH
-#if (defined(__cplusplus) && __cplusplus >= 201703L) || \
- (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L)
-#define SDL_FALLTHROUGH [[fallthrough]]
-#else
-#ifdef __has_attribute
-#define SDL_HAS_FALLTHROUGH __has_attribute(__fallthrough__)
-#else
-#define SDL_HAS_FALLTHROUGH 0
-#endif /* __has_attribute */
-#if SDL_HAS_FALLTHROUGH && \
- ((defined(__GNUC__) && __GNUC__ >= 7) || \
- (defined(__clang_major__) && __clang_major__ >= 10))
-#define SDL_FALLTHROUGH __attribute__((__fallthrough__))
-#else
-#define SDL_FALLTHROUGH do {} while (0) /* fallthrough */
-#endif /* SDL_HAS_FALLTHROUGH */
-#undef SDL_HAS_FALLTHROUGH
-#endif /* C++17 or C2x */
-#endif /* SDL_FALLTHROUGH not defined */
-
-#ifndef SDL_MALLOC
-#if defined(__GNUC__) && (__GNUC__ >= 3)
-#define SDL_MALLOC __attribute__((malloc))
-/** FIXME
-#elif defined(_MSC_VER)
-#define SDL_MALLOC __declspec(allocator) __desclspec(restrict)
-**/
-#else
-#define SDL_MALLOC
-#endif
-#endif /* SDL_MALLOC not defined */
-
-#ifndef SDL_ALLOC_SIZE
-#if (defined(__clang__) && __clang_major__ >= 4) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
-#define SDL_ALLOC_SIZE(p) __attribute__((alloc_size(p)))
-#elif defined(_MSC_VER)
-#define SDL_ALLOC_SIZE(p)
-#else
-#define SDL_ALLOC_SIZE(p)
-#endif
-#endif /* SDL_ALLOC_SIZE not defined */
-
-#ifndef SDL_ALLOC_SIZE2
-#if (defined(__clang__) && __clang_major__ >= 4) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
-#define SDL_ALLOC_SIZE2(p1, p2) __attribute__((alloc_size(p1, p2)))
-#elif defined(_MSC_VER)
-#define SDL_ALLOC_SIZE2(p1, p2)
-#else
-#define SDL_ALLOC_SIZE2(p1, p2)
-#endif
-#endif /* SDL_ALLOC_SIZE2 not defined */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_bits.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_bits.h
deleted file mode 100644
index ffee5ad7..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_bits.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_bits.h
- *
- * \brief Functions for fiddling with bits and bitmasks.
- */
-
-#ifndef SDL_bits_h_
-#define SDL_bits_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file SDL_bits.h
- */
-
-/**
- * Get the index of the most significant bit. Result is undefined when called
- * with 0. This operation can also be stated as "count leading zeroes" and
- * "log base 2".
- *
- * \return the index of the most significant bit, or -1 if the value is 0.
- */
-#if defined(__WATCOMC__) && defined(__386__)
-extern __inline int _SDL_bsr_watcom(Uint32);
-#pragma aux _SDL_bsr_watcom = \
- "bsr eax, eax" \
- parm [eax] nomemory \
- value [eax] \
- modify exact [eax] nomemory;
-#endif
-
-SDL_FORCE_INLINE int
-SDL_MostSignificantBitIndex32(Uint32 x)
-{
-#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
- /* Count Leading Zeroes builtin in GCC.
- * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html
- */
- if (x == 0) {
- return -1;
- }
- return 31 - __builtin_clz(x);
-#elif defined(__WATCOMC__) && defined(__386__)
- if (x == 0) {
- return -1;
- }
- return _SDL_bsr_watcom(x);
-#elif defined(_MSC_VER)
- unsigned long index;
- if (_BitScanReverse(&index, x)) {
- return index;
- }
- return -1;
-#else
- /* Based off of Bit Twiddling Hacks by Sean Eron Anderson
- * , released in the public domain.
- * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
- */
- const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
- const int S[] = {1, 2, 4, 8, 16};
-
- int msbIndex = 0;
- int i;
-
- if (x == 0) {
- return -1;
- }
-
- for (i = 4; i >= 0; i--)
- {
- if (x & b[i])
- {
- x >>= S[i];
- msbIndex |= S[i];
- }
- }
-
- return msbIndex;
-#endif
-}
-
-SDL_FORCE_INLINE SDL_bool
-SDL_HasExactlyOneBitSet32(Uint32 x)
-{
- if (x && !(x & (x - 1))) {
- return SDL_TRUE;
- }
- return SDL_FALSE;
-}
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_bits_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_blendmode.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_blendmode.h
deleted file mode 100644
index 7276c923..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_blendmode.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_blendmode.h
- *
- * \brief Header file declaring the SDL_BlendMode enumeration
- */
-
-#ifndef SDL_blendmode_h_
-#define SDL_blendmode_h_
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief The blend mode used in SDL_RenderTexture() and drawing operations.
- */
-typedef enum
-{
- SDL_BLENDMODE_NONE = 0x00000000, /**< no blending
- dstRGBA = srcRGBA */
- SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending
- dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA))
- dstA = srcA + (dstA * (1-srcA)) */
- SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending
- dstRGB = (srcRGB * srcA) + dstRGB
- dstA = dstA */
- SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate
- dstRGB = srcRGB * dstRGB
- dstA = dstA */
- SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply
- dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA))
- dstA = dstA */
- SDL_BLENDMODE_INVALID = 0x7FFFFFFF
-
- /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */
-
-} SDL_BlendMode;
-
-/**
- * \brief The blend operation used when combining source and destination pixel components
- */
-typedef enum
-{
- SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */
- SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */
- SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */
- SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */
- SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */
-} SDL_BlendOperation;
-
-/**
- * \brief The normalized factor used to multiply pixel components
- */
-typedef enum
-{
- SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */
- SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */
- SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */
- SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */
- SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */
- SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */
- SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */
- SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */
- SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */
- SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */
-} SDL_BlendFactor;
-
-/**
- * Compose a custom blend mode for renderers.
- *
- * The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept
- * the SDL_BlendMode returned by this function if the renderer supports it.
- *
- * A blend mode controls how the pixels from a drawing operation (source) get
- * combined with the pixels from the render target (destination). First, the
- * components of the source and destination pixels get multiplied with their
- * blend factors. Then, the blend operation takes the two products and
- * calculates the result that will get stored in the render target.
- *
- * Expressed in pseudocode, it would look like this:
- *
- * ```c
- * dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor);
- * dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor);
- * ```
- *
- * Where the functions `colorOperation(src, dst)` and `alphaOperation(src,
- * dst)` can return one of the following:
- *
- * - `src + dst`
- * - `src - dst`
- * - `dst - src`
- * - `min(src, dst)`
- * - `max(src, dst)`
- *
- * The red, green, and blue components are always multiplied with the first,
- * second, and third components of the SDL_BlendFactor, respectively. The
- * fourth component is not used.
- *
- * The alpha component is always multiplied with the fourth component of the
- * SDL_BlendFactor. The other components are not used in the alpha
- * calculation.
- *
- * Support for these blend modes varies for each renderer. To check if a
- * specific SDL_BlendMode is supported, create a renderer and pass it to
- * either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will
- * return with an error if the blend mode is not supported.
- *
- * This list describes the support of custom blend modes for each renderer in
- * SDL 2.0.6. All renderers support the four blend modes listed in the
- * SDL_BlendMode enumeration.
- *
- * - **direct3d**: Supports all operations with all factors. However, some
- * factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and
- * `SDL_BLENDOPERATION_MAXIMUM`.
- * - **direct3d11**: Same as Direct3D 9.
- * - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all
- * factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL
- * 2.0.6.
- * - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all
- * factors. Color and alpha factors need to be the same. OpenGL ES 1
- * implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT`
- * and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha
- * operations being different from each other. May support color and alpha
- * factors being different from each other.
- * - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`,
- * `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT`
- * operations with all factors.
- * - **psp**: No custom blend mode support.
- * - **software**: No custom blend mode support.
- *
- * Some renderers do not provide an alpha component for the default render
- * target. The `SDL_BLENDFACTOR_DST_ALPHA` and
- * `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this
- * case.
- *
- * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and
- * blue components of the source pixels
- * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and
- * blue components of the destination pixels
- * \param colorOperation the SDL_BlendOperation used to combine the red,
- * green, and blue components of the source and
- * destination pixels
- * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of
- * the source pixels
- * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of
- * the destination pixels
- * \param alphaOperation the SDL_BlendOperation used to combine the alpha
- * component of the source and destination pixels
- * \returns an SDL_BlendMode that represents the chosen factors and
- * operations.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetRenderDrawBlendMode
- * \sa SDL_GetRenderDrawBlendMode
- * \sa SDL_SetTextureBlendMode
- * \sa SDL_GetTextureBlendMode
- */
-extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor,
- SDL_BlendFactor dstColorFactor,
- SDL_BlendOperation colorOperation,
- SDL_BlendFactor srcAlphaFactor,
- SDL_BlendFactor dstAlphaFactor,
- SDL_BlendOperation alphaOperation);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_blendmode_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_clipboard.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_clipboard.h
deleted file mode 100644
index e5979646..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_clipboard.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_clipboard.h
- *
- * \brief Include file for SDL clipboard handling
- */
-
-#ifndef SDL_clipboard_h_
-#define SDL_clipboard_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Function prototypes */
-
-/**
- * Put UTF-8 text into the clipboard.
- *
- * \param text the text to store in the clipboard
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetClipboardText
- * \sa SDL_HasClipboardText
- */
-extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text);
-
-/**
- * Get UTF-8 text from the clipboard, which must be freed with SDL_free().
- *
- * This functions returns empty string if there was not enough memory left for
- * a copy of the clipboard's content.
- *
- * \returns the clipboard text on success or an empty string on failure; call
- * SDL_GetError() for more information. Caller must call SDL_free()
- * on the returned pointer when done with it (even if there was an
- * error).
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasClipboardText
- * \sa SDL_SetClipboardText
- */
-extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void);
-
-/**
- * Query whether the clipboard exists and contains a non-empty text string.
- *
- * \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetClipboardText
- * \sa SDL_SetClipboardText
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void);
-
-/**
- * Put UTF-8 text into the primary selection.
- *
- * \param text the text to store in the primary selection
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetPrimarySelectionText
- * \sa SDL_HasPrimarySelectionText
- */
-extern DECLSPEC int SDLCALL SDL_SetPrimarySelectionText(const char *text);
-
-/**
- * Get UTF-8 text from the primary selection, which must be freed with
- * SDL_free().
- *
- * This functions returns empty string if there was not enough memory left for
- * a copy of the primary selection's content.
- *
- * \returns the primary selection text on success or an empty string on
- * failure; call SDL_GetError() for more information. Caller must
- * call SDL_free() on the returned pointer when done with it (even if
- * there was an error).
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasPrimarySelectionText
- * \sa SDL_SetPrimarySelectionText
- */
-extern DECLSPEC char * SDLCALL SDL_GetPrimarySelectionText(void);
-
-/**
- * Query whether the primary selection exists and contains a non-empty text
- * string.
- *
- * \returns SDL_TRUE if the primary selection has text, or SDL_FALSE if it
- * does not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetPrimarySelectionText
- * \sa SDL_SetPrimarySelectionText
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasPrimarySelectionText(void);
-
-/**
- * Callback function that will be called when data for the specified mime-type
- * is requested by the OS.
- *
- * The callback function is called with NULL as the mime_type when the clipboard
- * is cleared or new data is set. The clipboard is automatically cleared in SDL_Quit().
- *
- * \param userdata A pointer to provided user data
- * \param mime_type The requested mime-type
- * \param size A pointer filled in with the length of the returned data
- * \returns a pointer to the data for the provided mime-type. Returning NULL or
- * setting length to 0 will cause no data to be sent to the "receiver". It is
- * up to the receiver to handle this. Essentially returning no data is more or
- * less undefined behavior and may cause breakage in receiving applications.
- * The returned data will not be freed so it needs to be retained and dealt
- * with internally.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetClipboardData
- */
-typedef const void *(SDLCALL *SDL_ClipboardDataCallback)(void *userdata, const char *mime_type, size_t *size);
-
-/**
- * Callback function that will be called when the clipboard is cleared, or new data is set.
- *
- * \param userdata A pointer to provided user data
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetClipboardData
- */
-typedef void (SDLCALL *SDL_ClipboardCleanupCallback)(void *userdata);
-
-/**
- * Offer clipboard data to the OS
- *
- * Tell the operating system that the application is offering clipboard data
- * for each of the proivded mime-types. Once another application requests the
- * data the callback function will be called allowing it to generate and
- * respond with the data for the requested mime-type.
- *
- * The size of text data does not include any terminator, and the text does
- * not need to be null terminated (e.g. you can directly copy a portion of a
- * document)
- *
- * \param callback A function pointer to the function that provides the
- * clipboard data
- * \param cleanup A function pointer to the function that cleans up the
- * clipboard data
- * \param userdata An opaque pointer that will be forwarded to the callbacks
- * \param mime_types A list of mime-types that are being offered
- * \param num_mime_types The number of mime-types in the mime_types list
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ClipboardDataCallback
- * \sa SDL_SetClipboardData
- * \sa SDL_GetClipboardData
- * \sa SDL_HasClipboardData
- */
-extern DECLSPEC int SDLCALL SDL_SetClipboardData(SDL_ClipboardDataCallback callback, SDL_ClipboardCleanupCallback cleanup, void *userdata, const char **mime_types, size_t num_mime_types);
-
-/**
- * Clear the clipboard data
- *
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetClipboardData
- */
-extern DECLSPEC int SDLCALL SDL_ClearClipboardData(void);
-
-/**
- * Get the data from clipboard for a given mime type
- *
- * The size of text data does not include the terminator, but the text is
- * guaranteed to be null terminated.
- *
- * \param mime_type The mime type to read from the clipboard
- * \param size A pointer filled in with the length of the returned data
- * \returns the retrieved data buffer or NULL on failure; call SDL_GetError()
- * for more information. Caller must call SDL_free() on the returned
- * pointer when done with it.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetClipboardData
- */
-extern DECLSPEC void *SDLCALL SDL_GetClipboardData(const char *mime_type, size_t *size);
-
-/**
- * Query whether there is data in the clipboard for the provided mime type
- *
- * \param mime_type The mime type to check for data for
- * \returns SDL_TRUE if there exists data in clipboard for the provided mime
- * type, SDL_FALSE if it does not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetClipboardData
- * \sa SDL_GetClipboardData
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardData(const char *mime_type);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_clipboard_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_close_code.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_close_code.h
deleted file mode 100644
index 55cf3ff3..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_close_code.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_close_code.h
- *
- * This file reverses the effects of SDL_begin_code.h and should be included
- * after you finish any function and structure declarations in your headers
- */
-
-#ifndef SDL_begin_code_h
-#error SDL_close_code.h included without matching SDL_begin_code.h
-#endif
-#undef SDL_begin_code_h
-
-/* Reset structure packing at previous byte alignment */
-#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__)
-#ifdef __BORLANDC__
-#pragma nopackwarning
-#endif
-#pragma pack(pop)
-#endif /* Compiler needs structure packing set */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_copying.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_copying.h
deleted file mode 100644
index 4b9c1dea..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_copying.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_copying.h
- *
- * \brief Header file containing SDL's license.
- */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_cpuinfo.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_cpuinfo.h
deleted file mode 100644
index 50b889f6..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_cpuinfo.h
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_cpuinfo.h
- *
- * \brief CPU feature detection for SDL.
- */
-
-#ifndef SDL_cpuinfo_h_
-#define SDL_cpuinfo_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* This is a guess for the cacheline size used for padding.
- * Most x86 processors have a 64 byte cache line.
- * The 64-bit PowerPC processors have a 128 byte cache line.
- * We'll use the larger value to be generally safe.
- */
-#define SDL_CACHELINE_SIZE 128
-
-/**
- * Get the number of CPU cores available.
- *
- * \returns the total number of logical CPU cores. On CPUs that include
- * technologies such as hyperthreading, the number of logical cores
- * may be more than the number of physical cores.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetCPUCount(void);
-
-/**
- * Determine the L1 cache line size of the CPU.
- *
- * This is useful for determining multi-threaded structure padding or SIMD
- * prefetch sizes.
- *
- * \returns the L1 cache line size of the CPU, in bytes.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void);
-
-/**
- * Determine whether the CPU has AltiVec features.
- *
- * This always returns false on CPUs that aren't using PowerPC instruction
- * sets.
- *
- * \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void);
-
-/**
- * Determine whether the CPU has MMX features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void);
-
-/**
- * Determine whether the CPU has SSE features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void);
-
-/**
- * Determine whether the CPU has SSE2 features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void);
-
-/**
- * Determine whether the CPU has SSE3 features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void);
-
-/**
- * Determine whether the CPU has SSE4.1 features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void);
-
-/**
- * Determine whether the CPU has SSE4.2 features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void);
-
-/**
- * Determine whether the CPU has AVX features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX2
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void);
-
-/**
- * Determine whether the CPU has AVX2 features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX512F
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void);
-
-/**
- * Determine whether the CPU has AVX-512F (foundation) features.
- *
- * This always returns false on CPUs that aren't using Intel instruction sets.
- *
- * \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasAltiVec
- * \sa SDL_HasAVX
- * \sa SDL_HasAVX2
- * \sa SDL_HasMMX
- * \sa SDL_HasSSE
- * \sa SDL_HasSSE2
- * \sa SDL_HasSSE3
- * \sa SDL_HasSSE41
- * \sa SDL_HasSSE42
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void);
-
-/**
- * Determine whether the CPU has ARM SIMD (ARMv6) features.
- *
- * This is different from ARM NEON, which is a different instruction set.
- *
- * This always returns false on CPUs that aren't using ARM instruction sets.
- *
- * \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasNEON
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void);
-
-/**
- * Determine whether the CPU has NEON (ARM SIMD) features.
- *
- * This always returns false on CPUs that aren't using ARM instruction sets.
- *
- * \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void);
-
-/**
- * Determine whether the CPU has LSX (LOONGARCH SIMD) features.
- *
- * This always returns false on CPUs that aren't using LOONGARCH instruction
- * sets.
- *
- * \returns SDL_TRUE if the CPU has LOONGARCH LSX features or SDL_FALSE if
- * not.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasLSX(void);
-
-/**
- * Determine whether the CPU has LASX (LOONGARCH SIMD) features.
- *
- * This always returns false on CPUs that aren't using LOONGARCH instruction
- * sets.
- *
- * \returns SDL_TRUE if the CPU has LOONGARCH LASX features or SDL_FALSE if
- * not.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasLASX(void);
-
-/**
- * Get the amount of RAM configured in the system.
- *
- * \returns the amount of RAM configured in the system in MiB.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void);
-
-/**
- * Report the alignment this system needs for SIMD allocations.
- *
- * This will return the minimum number of bytes to which a pointer must be
- * aligned to be compatible with SIMD instructions on the current machine. For
- * example, if the machine supports SSE only, it will return 16, but if it
- * supports AVX-512F, it'll return 64 (etc). This only reports values for
- * instruction sets SDL knows about, so if your SDL build doesn't have
- * SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and
- * not 64 for the AVX-512 instructions that exist but SDL doesn't know about.
- * Plan accordingly.
- *
- * \returns the alignment in bytes needed for available, known SIMD
- * instructions.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_aligned_alloc
- * \sa SDL_aligned_free
- */
-extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_cpuinfo_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_egl.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_egl.h
deleted file mode 100644
index d9c5d679..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_egl.h
+++ /dev/null
@@ -1,2355 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_egl.h
- *
- * \brief This is a simple file to encapsulate the EGL API headers.
- */
-
-#if !defined(_MSC_VER) && !defined(__ANDROID__) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS)
-
-#if defined(__vita__) || defined(__psp2__)
-#include
-#include
-#include
-#endif
-
-#include
-#include
-
-#else /* _MSC_VER */
-
-/* EGL headers for Visual Studio */
-
-#ifndef __khrplatform_h_
-#define __khrplatform_h_
-
-/*
-** Copyright (c) 2008-2018 The Khronos Group Inc.
-**
-** Permission is hereby granted, free of charge, to any person obtaining a
-** copy of this software and/or associated documentation files (the
-** "Materials"), to deal in the Materials without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Materials, and to
-** permit persons to whom the Materials are furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be included
-** in all copies or substantial portions of the Materials.
-**
-** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
-*/
-
-/* Khronos platform-specific types and definitions.
- *
- * The master copy of khrplatform.h is maintained in the Khronos EGL
- * Registry repository at https://github.com/KhronosGroup/EGL-Registry
- * The last semantic modification to khrplatform.h was at commit ID:
- * 67a3e0864c2d75ea5287b9f3d2eb74a745936692
- *
- * Adopters may modify this file to suit their platform. Adopters are
- * encouraged to submit platform specific modifications to the Khronos
- * group so that they can be included in future versions of this file.
- * Please submit changes by filing pull requests or issues on
- * the EGL Registry repository linked above.
- *
- *
- * See the Implementer's Guidelines for information about where this file
- * should be located on your system and for more details of its use:
- * http://www.khronos.org/registry/implementers_guide.pdf
- *
- * This file should be included as
- * #include
- * by Khronos client API header files that use its types and defines.
- *
- * The types in khrplatform.h should only be used to define API-specific types.
- *
- * Types defined in khrplatform.h:
- * khronos_int8_t signed 8 bit
- * khronos_uint8_t unsigned 8 bit
- * khronos_int16_t signed 16 bit
- * khronos_uint16_t unsigned 16 bit
- * khronos_int32_t signed 32 bit
- * khronos_uint32_t unsigned 32 bit
- * khronos_int64_t signed 64 bit
- * khronos_uint64_t unsigned 64 bit
- * khronos_intptr_t signed same number of bits as a pointer
- * khronos_uintptr_t unsigned same number of bits as a pointer
- * khronos_ssize_t signed size
- * khronos_usize_t unsigned size
- * khronos_float_t signed 32 bit floating point
- * khronos_time_ns_t unsigned 64 bit time in nanoseconds
- * khronos_utime_nanoseconds_t unsigned time interval or absolute time in
- * nanoseconds
- * khronos_stime_nanoseconds_t signed time interval in nanoseconds
- * khronos_boolean_enum_t enumerated boolean type. This should
- * only be used as a base type when a client API's boolean type is
- * an enum. Client APIs which use an integer or other type for
- * booleans cannot use this as the base type for their boolean.
- *
- * Tokens defined in khrplatform.h:
- *
- * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
- *
- * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
- * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
- *
- * Calling convention macros defined in this file:
- * KHRONOS_APICALL
- * KHRONOS_APIENTRY
- * KHRONOS_APIATTRIBUTES
- *
- * These may be used in function prototypes as:
- *
- * KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
- * int arg1,
- * int arg2) KHRONOS_APIATTRIBUTES;
- */
-
-#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC)
-# define KHRONOS_STATIC 1
-#endif
-
-/*-------------------------------------------------------------------------
- * Definition of KHRONOS_APICALL
- *-------------------------------------------------------------------------
- * This precedes the return type of the function in the function prototype.
- */
-#if defined(KHRONOS_STATIC)
- /* If the preprocessor constant KHRONOS_STATIC is defined, make the
- * header compatible with static linking. */
-# define KHRONOS_APICALL
-#elif defined(_WIN32)
-# define KHRONOS_APICALL __declspec(dllimport)
-#elif defined (__SYMBIAN32__)
-# define KHRONOS_APICALL IMPORT_C
-#elif defined(__ANDROID__)
-# define KHRONOS_APICALL __attribute__((visibility("default")))
-#else
-# define KHRONOS_APICALL
-#endif
-
-/*-------------------------------------------------------------------------
- * Definition of KHRONOS_APIENTRY
- *-------------------------------------------------------------------------
- * This follows the return type of the function and precedes the function
- * name in the function prototype.
- */
-#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
- /* Win32 but not WinCE */
-# define KHRONOS_APIENTRY __stdcall
-#else
-# define KHRONOS_APIENTRY
-#endif
-
-/*-------------------------------------------------------------------------
- * Definition of KHRONOS_APIATTRIBUTES
- *-------------------------------------------------------------------------
- * This follows the closing parenthesis of the function prototype arguments.
- */
-#if defined (__ARMCC_2__)
-#define KHRONOS_APIATTRIBUTES __softfp
-#else
-#define KHRONOS_APIATTRIBUTES
-#endif
-
-/*-------------------------------------------------------------------------
- * basic type definitions
- *-----------------------------------------------------------------------*/
-#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
-
-
-/*
- * Using
- */
-#include
-typedef int32_t khronos_int32_t;
-typedef uint32_t khronos_uint32_t;
-typedef int64_t khronos_int64_t;
-typedef uint64_t khronos_uint64_t;
-#define KHRONOS_SUPPORT_INT64 1
-#define KHRONOS_SUPPORT_FLOAT 1
-/*
- * To support platform where unsigned long cannot be used interchangeably with
- * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t.
- * Ideally, we could just use (u)intptr_t everywhere, but this could result in
- * ABI breakage if khronos_uintptr_t is changed from unsigned long to
- * unsigned long long or similar (this results in different C++ name mangling).
- * To avoid changes for existing platforms, we restrict usage of intptr_t to
- * platforms where the size of a pointer is larger than the size of long.
- */
-#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__)
-#if __SIZEOF_POINTER__ > __SIZEOF_LONG__
-#define KHRONOS_USE_INTPTR_T
-#endif
-#endif
-
-#elif defined(__VMS ) || defined(__sgi)
-
-/*
- * Using
- */
-#include
-typedef int32_t khronos_int32_t;
-typedef uint32_t khronos_uint32_t;
-typedef int64_t khronos_int64_t;
-typedef uint64_t khronos_uint64_t;
-#define KHRONOS_SUPPORT_INT64 1
-#define KHRONOS_SUPPORT_FLOAT 1
-
-#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
-
-/*
- * Win32
- */
-typedef __int32 khronos_int32_t;
-typedef unsigned __int32 khronos_uint32_t;
-typedef __int64 khronos_int64_t;
-typedef unsigned __int64 khronos_uint64_t;
-#define KHRONOS_SUPPORT_INT64 1
-#define KHRONOS_SUPPORT_FLOAT 1
-
-#elif defined(__sun__) || defined(__digital__)
-
-/*
- * Sun or Digital
- */
-typedef int khronos_int32_t;
-typedef unsigned int khronos_uint32_t;
-#if defined(__arch64__) || defined(_LP64)
-typedef long int khronos_int64_t;
-typedef unsigned long int khronos_uint64_t;
-#else
-typedef long long int khronos_int64_t;
-typedef unsigned long long int khronos_uint64_t;
-#endif /* __arch64__ */
-#define KHRONOS_SUPPORT_INT64 1
-#define KHRONOS_SUPPORT_FLOAT 1
-
-#elif 0
-
-/*
- * Hypothetical platform with no float or int64 support
- */
-typedef int khronos_int32_t;
-typedef unsigned int khronos_uint32_t;
-#define KHRONOS_SUPPORT_INT64 0
-#define KHRONOS_SUPPORT_FLOAT 0
-
-#else
-
-/*
- * Generic fallback
- */
-#include
-typedef int32_t khronos_int32_t;
-typedef uint32_t khronos_uint32_t;
-typedef int64_t khronos_int64_t;
-typedef uint64_t khronos_uint64_t;
-#define KHRONOS_SUPPORT_INT64 1
-#define KHRONOS_SUPPORT_FLOAT 1
-
-#endif
-
-
-/*
- * Types that are (so far) the same on all platforms
- */
-typedef signed char khronos_int8_t;
-typedef unsigned char khronos_uint8_t;
-typedef signed short int khronos_int16_t;
-typedef unsigned short int khronos_uint16_t;
-
-/*
- * Types that differ between LLP64 and LP64 architectures - in LLP64,
- * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
- * to be the only LLP64 architecture in current use.
- */
-#ifdef KHRONOS_USE_INTPTR_T
-typedef intptr_t khronos_intptr_t;
-typedef uintptr_t khronos_uintptr_t;
-#elif defined(_WIN64)
-typedef signed long long int khronos_intptr_t;
-typedef unsigned long long int khronos_uintptr_t;
-#else
-typedef signed long int khronos_intptr_t;
-typedef unsigned long int khronos_uintptr_t;
-#endif
-
-#if defined(_WIN64)
-typedef signed long long int khronos_ssize_t;
-typedef unsigned long long int khronos_usize_t;
-#else
-typedef signed long int khronos_ssize_t;
-typedef unsigned long int khronos_usize_t;
-#endif
-
-#if KHRONOS_SUPPORT_FLOAT
-/*
- * Float type
- */
-typedef float khronos_float_t;
-#endif
-
-#if KHRONOS_SUPPORT_INT64
-/* Time types
- *
- * These types can be used to represent a time interval in nanoseconds or
- * an absolute Unadjusted System Time. Unadjusted System Time is the number
- * of nanoseconds since some arbitrary system event (e.g. since the last
- * time the system booted). The Unadjusted System Time is an unsigned
- * 64 bit value that wraps back to 0 every 584 years. Time intervals
- * may be either signed or unsigned.
- */
-typedef khronos_uint64_t khronos_utime_nanoseconds_t;
-typedef khronos_int64_t khronos_stime_nanoseconds_t;
-#endif
-
-/*
- * Dummy value used to pad enum types to 32 bits.
- */
-#ifndef KHRONOS_MAX_ENUM
-#define KHRONOS_MAX_ENUM 0x7FFFFFFF
-#endif
-
-/*
- * Enumerated boolean type
- *
- * Values other than zero should be considered to be true. Therefore
- * comparisons should not be made against KHRONOS_TRUE.
- */
-typedef enum {
- KHRONOS_FALSE = 0,
- KHRONOS_TRUE = 1,
- KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
-} khronos_boolean_enum_t;
-
-#endif /* __khrplatform_h_ */
-
-
-#ifndef __eglplatform_h_
-#define __eglplatform_h_
-
-/*
-** Copyright 2007-2020 The Khronos Group Inc.
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/* Platform-specific types and definitions for egl.h
- *
- * Adopters may modify khrplatform.h and this file to suit their platform.
- * You are encouraged to submit all modifications to the Khronos group so that
- * they can be included in future versions of this file. Please submit changes
- * by filing an issue or pull request on the public Khronos EGL Registry, at
- * https://www.github.com/KhronosGroup/EGL-Registry/
- */
-
-/*#include */
-
-/* Macros used in EGL function prototype declarations.
- *
- * EGL functions should be prototyped as:
- *
- * EGLAPI return-type EGLAPIENTRY eglFunction(arguments);
- * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments);
- *
- * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h
- */
-
-#ifndef EGLAPI
-#define EGLAPI KHRONOS_APICALL
-#endif
-
-#ifndef EGLAPIENTRY
-#define EGLAPIENTRY KHRONOS_APIENTRY
-#endif
-#define EGLAPIENTRYP EGLAPIENTRY*
-
-/* The types NativeDisplayType, NativeWindowType, and NativePixmapType
- * are aliases of window-system-dependent types, such as X Display * or
- * Windows Device Context. They must be defined in platform-specific
- * code below. The EGL-prefixed versions of Native*Type are the same
- * types, renamed in EGL 1.3 so all types in the API start with "EGL".
- *
- * Khronos STRONGLY RECOMMENDS that you use the default definitions
- * provided below, since these changes affect both binary and source
- * portability of applications using EGL running on different EGL
- * implementations.
- */
-
-#if defined(EGL_NO_PLATFORM_SPECIFIC_TYPES)
-
-typedef void *EGLNativeDisplayType;
-typedef void *EGLNativePixmapType;
-typedef void *EGLNativeWindowType;
-
-#elif defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN 1
-#endif
-#include
-
-typedef HDC EGLNativeDisplayType;
-typedef HBITMAP EGLNativePixmapType;
-typedef HWND EGLNativeWindowType;
-
-#elif defined(__EMSCRIPTEN__)
-
-typedef int EGLNativeDisplayType;
-typedef int EGLNativePixmapType;
-typedef int EGLNativeWindowType;
-
-#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
-
-typedef int EGLNativeDisplayType;
-typedef void *EGLNativePixmapType;
-typedef void *EGLNativeWindowType;
-
-#elif defined(WL_EGL_PLATFORM)
-
-typedef struct wl_display *EGLNativeDisplayType;
-typedef struct wl_egl_pixmap *EGLNativePixmapType;
-typedef struct wl_egl_window *EGLNativeWindowType;
-
-#elif defined(__GBM__)
-
-typedef struct gbm_device *EGLNativeDisplayType;
-typedef struct gbm_bo *EGLNativePixmapType;
-typedef void *EGLNativeWindowType;
-
-#elif defined(__ANDROID__) || defined(ANDROID)
-
-struct ANativeWindow;
-struct egl_native_pixmap_t;
-
-typedef void* EGLNativeDisplayType;
-typedef struct egl_native_pixmap_t* EGLNativePixmapType;
-typedef struct ANativeWindow* EGLNativeWindowType;
-
-#elif defined(USE_OZONE)
-
-typedef intptr_t EGLNativeDisplayType;
-typedef intptr_t EGLNativePixmapType;
-typedef intptr_t EGLNativeWindowType;
-
-#elif defined(USE_X11)
-
-/* X11 (tentative) */
-#include
-#include
-
-typedef Display *EGLNativeDisplayType;
-typedef Pixmap EGLNativePixmapType;
-typedef Window EGLNativeWindowType;
-
-#elif defined(__unix__)
-
-typedef void *EGLNativeDisplayType;
-typedef khronos_uintptr_t EGLNativePixmapType;
-typedef khronos_uintptr_t EGLNativeWindowType;
-
-#elif defined(__APPLE__)
-
-typedef int EGLNativeDisplayType;
-typedef void *EGLNativePixmapType;
-typedef void *EGLNativeWindowType;
-
-#elif defined(__HAIKU__)
-
-#include
-
-typedef void *EGLNativeDisplayType;
-typedef khronos_uintptr_t EGLNativePixmapType;
-typedef khronos_uintptr_t EGLNativeWindowType;
-
-#elif defined(__Fuchsia__)
-
-typedef void *EGLNativeDisplayType;
-typedef khronos_uintptr_t EGLNativePixmapType;
-typedef khronos_uintptr_t EGLNativeWindowType;
-
-#else
-#error "Platform not recognized"
-#endif
-
-/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
-typedef EGLNativeDisplayType NativeDisplayType;
-typedef EGLNativePixmapType NativePixmapType;
-typedef EGLNativeWindowType NativeWindowType;
-
-
-/* Define EGLint. This must be a signed integral type large enough to contain
- * all legal attribute names and values passed into and out of EGL, whether
- * their type is boolean, bitmask, enumerant (symbolic constant), integer,
- * handle, or other. While in general a 32-bit integer will suffice, if
- * handles are 64 bit types, then EGLint should be defined as a signed 64-bit
- * integer type.
- */
-typedef khronos_int32_t EGLint;
-
-
-/* C++ / C typecast macros for special EGL handle values */
-#if defined(__cplusplus)
-#define EGL_CAST(type, value) (static_cast(value))
-#else
-#define EGL_CAST(type, value) ((type) (value))
-#endif
-
-#endif /* __eglplatform_h */
-
-
-#ifndef __egl_h_
-#define __egl_h_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
-** Copyright 2013-2020 The Khronos Group Inc.
-** SPDX-License-Identifier: Apache-2.0
-**
-** This header is generated from the Khronos EGL XML API Registry.
-** The current version of the Registry, generator scripts
-** used to make the header, and the header can be found at
-** http://www.khronos.org/registry/egl
-**
-** Khronos $Git commit SHA1: 6fb1daea15 $ on $Git commit date: 2022-05-25 09:41:13 -0600 $
-*/
-
-/*#include */
-
-#ifndef EGL_EGL_PROTOTYPES
-#define EGL_EGL_PROTOTYPES 1
-#endif
-
-/* Generated on date 20220525 */
-
-/* Generated C header for:
- * API: egl
- * Versions considered: .*
- * Versions emitted: .*
- * Default extensions included: None
- * Additional extensions included: _nomatch_^
- * Extensions removed: _nomatch_^
- */
-
-#ifndef EGL_VERSION_1_0
-#define EGL_VERSION_1_0 1
-typedef unsigned int EGLBoolean;
-typedef void *EGLDisplay;
-/*#include */
-/*#include */
-typedef void *EGLConfig;
-typedef void *EGLSurface;
-typedef void *EGLContext;
-typedef void (*__eglMustCastToProperFunctionPointerType)(void);
-#define EGL_ALPHA_SIZE 0x3021
-#define EGL_BAD_ACCESS 0x3002
-#define EGL_BAD_ALLOC 0x3003
-#define EGL_BAD_ATTRIBUTE 0x3004
-#define EGL_BAD_CONFIG 0x3005
-#define EGL_BAD_CONTEXT 0x3006
-#define EGL_BAD_CURRENT_SURFACE 0x3007
-#define EGL_BAD_DISPLAY 0x3008
-#define EGL_BAD_MATCH 0x3009
-#define EGL_BAD_NATIVE_PIXMAP 0x300A
-#define EGL_BAD_NATIVE_WINDOW 0x300B
-#define EGL_BAD_PARAMETER 0x300C
-#define EGL_BAD_SURFACE 0x300D
-#define EGL_BLUE_SIZE 0x3022
-#define EGL_BUFFER_SIZE 0x3020
-#define EGL_CONFIG_CAVEAT 0x3027
-#define EGL_CONFIG_ID 0x3028
-#define EGL_CORE_NATIVE_ENGINE 0x305B
-#define EGL_DEPTH_SIZE 0x3025
-#define EGL_DONT_CARE EGL_CAST(EGLint,-1)
-#define EGL_DRAW 0x3059
-#define EGL_EXTENSIONS 0x3055
-#define EGL_FALSE 0
-#define EGL_GREEN_SIZE 0x3023
-#define EGL_HEIGHT 0x3056
-#define EGL_LARGEST_PBUFFER 0x3058
-#define EGL_LEVEL 0x3029
-#define EGL_MAX_PBUFFER_HEIGHT 0x302A
-#define EGL_MAX_PBUFFER_PIXELS 0x302B
-#define EGL_MAX_PBUFFER_WIDTH 0x302C
-#define EGL_NATIVE_RENDERABLE 0x302D
-#define EGL_NATIVE_VISUAL_ID 0x302E
-#define EGL_NATIVE_VISUAL_TYPE 0x302F
-#define EGL_NONE 0x3038
-#define EGL_NON_CONFORMANT_CONFIG 0x3051
-#define EGL_NOT_INITIALIZED 0x3001
-#define EGL_NO_CONTEXT EGL_CAST(EGLContext,0)
-#define EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0)
-#define EGL_NO_SURFACE EGL_CAST(EGLSurface,0)
-#define EGL_PBUFFER_BIT 0x0001
-#define EGL_PIXMAP_BIT 0x0002
-#define EGL_READ 0x305A
-#define EGL_RED_SIZE 0x3024
-#define EGL_SAMPLES 0x3031
-#define EGL_SAMPLE_BUFFERS 0x3032
-#define EGL_SLOW_CONFIG 0x3050
-#define EGL_STENCIL_SIZE 0x3026
-#define EGL_SUCCESS 0x3000
-#define EGL_SURFACE_TYPE 0x3033
-#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
-#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
-#define EGL_TRANSPARENT_RED_VALUE 0x3037
-#define EGL_TRANSPARENT_RGB 0x3052
-#define EGL_TRANSPARENT_TYPE 0x3034
-#define EGL_TRUE 1
-#define EGL_VENDOR 0x3053
-#define EGL_VERSION 0x3054
-#define EGL_WIDTH 0x3057
-#define EGL_WINDOW_BIT 0x0004
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOPYBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
-typedef EGLContext (EGLAPIENTRYP PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGSPROC) (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETCURRENTDISPLAYPROC) (void);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLGETCURRENTSURFACEPROC) (EGLint readdraw);
-typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id);
-typedef EGLint (EGLAPIENTRYP PFNEGLGETERRORPROC) (void);
-typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP PFNEGLGETPROCADDRESSPROC) (const char *procname);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint *major, EGLint *minor);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
-typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLTERMINATEPROC) (EGLDisplay dpy);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITGLPROC) (void);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITNATIVEPROC) (EGLint engine);
-#if EGL_EGL_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
-EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void);
-EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw);
-EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id);
-EGLAPI EGLint EGLAPIENTRY eglGetError (void);
-EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname);
-EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor);
-EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
-EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name);
-EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface);
-EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy);
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void);
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
-#endif
-#endif /* EGL_VERSION_1_0 */
-
-#ifndef EGL_VERSION_1_1
-#define EGL_VERSION_1_1 1
-#define EGL_BACK_BUFFER 0x3084
-#define EGL_BIND_TO_TEXTURE_RGB 0x3039
-#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
-#define EGL_CONTEXT_LOST 0x300E
-#define EGL_MIN_SWAP_INTERVAL 0x303B
-#define EGL_MAX_SWAP_INTERVAL 0x303C
-#define EGL_MIPMAP_TEXTURE 0x3082
-#define EGL_MIPMAP_LEVEL 0x3083
-#define EGL_NO_TEXTURE 0x305C
-#define EGL_TEXTURE_2D 0x305F
-#define EGL_TEXTURE_FORMAT 0x3080
-#define EGL_TEXTURE_RGB 0x305D
-#define EGL_TEXTURE_RGBA 0x305E
-#define EGL_TEXTURE_TARGET 0x3081
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDTEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSURFACEATTRIBPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval);
-#if EGL_EGL_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval);
-#endif
-#endif /* EGL_VERSION_1_1 */
-
-#ifndef EGL_VERSION_1_2
-#define EGL_VERSION_1_2 1
-typedef unsigned int EGLenum;
-typedef void *EGLClientBuffer;
-#define EGL_ALPHA_FORMAT 0x3088
-#define EGL_ALPHA_FORMAT_NONPRE 0x308B
-#define EGL_ALPHA_FORMAT_PRE 0x308C
-#define EGL_ALPHA_MASK_SIZE 0x303E
-#define EGL_BUFFER_PRESERVED 0x3094
-#define EGL_BUFFER_DESTROYED 0x3095
-#define EGL_CLIENT_APIS 0x308D
-#define EGL_COLORSPACE 0x3087
-#define EGL_COLORSPACE_sRGB 0x3089
-#define EGL_COLORSPACE_LINEAR 0x308A
-#define EGL_COLOR_BUFFER_TYPE 0x303F
-#define EGL_CONTEXT_CLIENT_TYPE 0x3097
-#define EGL_DISPLAY_SCALING 10000
-#define EGL_HORIZONTAL_RESOLUTION 0x3090
-#define EGL_LUMINANCE_BUFFER 0x308F
-#define EGL_LUMINANCE_SIZE 0x303D
-#define EGL_OPENGL_ES_BIT 0x0001
-#define EGL_OPENVG_BIT 0x0002
-#define EGL_OPENGL_ES_API 0x30A0
-#define EGL_OPENVG_API 0x30A1
-#define EGL_OPENVG_IMAGE 0x3096
-#define EGL_PIXEL_ASPECT_RATIO 0x3092
-#define EGL_RENDERABLE_TYPE 0x3040
-#define EGL_RENDER_BUFFER 0x3086
-#define EGL_RGB_BUFFER 0x308E
-#define EGL_SINGLE_BUFFER 0x3085
-#define EGL_SWAP_BEHAVIOR 0x3093
-#define EGL_UNKNOWN EGL_CAST(EGLint,-1)
-#define EGL_VERTICAL_RESOLUTION 0x3091
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDAPIPROC) (EGLenum api);
-typedef EGLenum (EGLAPIENTRYP PFNEGLQUERYAPIPROC) (void);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC) (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETHREADPROC) (void);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITCLIENTPROC) (void);
-#if EGL_EGL_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api);
-EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void);
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
-#endif
-#endif /* EGL_VERSION_1_2 */
-
-#ifndef EGL_VERSION_1_3
-#define EGL_VERSION_1_3 1
-#define EGL_CONFORMANT 0x3042
-#define EGL_CONTEXT_CLIENT_VERSION 0x3098
-#define EGL_MATCH_NATIVE_PIXMAP 0x3041
-#define EGL_OPENGL_ES2_BIT 0x0004
-#define EGL_VG_ALPHA_FORMAT 0x3088
-#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
-#define EGL_VG_ALPHA_FORMAT_PRE 0x308C
-#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
-#define EGL_VG_COLORSPACE 0x3087
-#define EGL_VG_COLORSPACE_sRGB 0x3089
-#define EGL_VG_COLORSPACE_LINEAR 0x308A
-#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
-#endif /* EGL_VERSION_1_3 */
-
-#ifndef EGL_VERSION_1_4
-#define EGL_VERSION_1_4 1
-#define EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0)
-#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
-#define EGL_MULTISAMPLE_RESOLVE 0x3099
-#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
-#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
-#define EGL_OPENGL_API 0x30A2
-#define EGL_OPENGL_BIT 0x0008
-#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
-typedef EGLContext (EGLAPIENTRYP PFNEGLGETCURRENTCONTEXTPROC) (void);
-#if EGL_EGL_PROTOTYPES
-EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void);
-#endif
-#endif /* EGL_VERSION_1_4 */
-
-#ifndef EGL_VERSION_1_5
-#define EGL_VERSION_1_5 1
-typedef void *EGLSync;
-typedef intptr_t EGLAttrib;
-typedef khronos_utime_nanoseconds_t EGLTime;
-typedef void *EGLImage;
-#define EGL_CONTEXT_MAJOR_VERSION 0x3098
-#define EGL_CONTEXT_MINOR_VERSION 0x30FB
-#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
-#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
-#define EGL_NO_RESET_NOTIFICATION 0x31BE
-#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF
-#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
-#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
-#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
-#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
-#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
-#define EGL_OPENGL_ES3_BIT 0x00000040
-#define EGL_CL_EVENT_HANDLE 0x309C
-#define EGL_SYNC_CL_EVENT 0x30FE
-#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
-#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
-#define EGL_SYNC_TYPE 0x30F7
-#define EGL_SYNC_STATUS 0x30F1
-#define EGL_SYNC_CONDITION 0x30F8
-#define EGL_SIGNALED 0x30F2
-#define EGL_UNSIGNALED 0x30F3
-#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
-#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
-#define EGL_TIMEOUT_EXPIRED 0x30F5
-#define EGL_CONDITION_SATISFIED 0x30F6
-#define EGL_NO_SYNC EGL_CAST(EGLSync,0)
-#define EGL_SYNC_FENCE 0x30F9
-#define EGL_GL_COLORSPACE 0x309D
-#define EGL_GL_COLORSPACE_SRGB 0x3089
-#define EGL_GL_COLORSPACE_LINEAR 0x308A
-#define EGL_GL_RENDERBUFFER 0x30B9
-#define EGL_GL_TEXTURE_2D 0x30B1
-#define EGL_GL_TEXTURE_LEVEL 0x30BC
-#define EGL_GL_TEXTURE_3D 0x30B2
-#define EGL_GL_TEXTURE_ZOFFSET 0x30BD
-#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
-#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
-#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
-#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
-#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
-#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
-#define EGL_IMAGE_PRESERVED 0x30D2
-#define EGL_NO_IMAGE EGL_CAST(EGLImage,0)
-typedef EGLSync (EGLAPIENTRYP PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync);
-typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBPROC) (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
-typedef EGLImage (EGLAPIENTRYP PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image);
-typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags);
-#if EGL_EGL_PROTOTYPES
-EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync);
-EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
-EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image);
-EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags);
-#endif
-#endif /* EGL_VERSION_1_5 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __egl_h_ */
-
-
-#ifndef __eglext_h_
-#define __eglext_h_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
-** Copyright 2013-2020 The Khronos Group Inc.
-** SPDX-License-Identifier: Apache-2.0
-**
-** This header is generated from the Khronos EGL XML API Registry.
-** The current version of the Registry, generator scripts
-** used to make the header, and the header can be found at
-** http://www.khronos.org/registry/egl
-**
-** Khronos $Git commit SHA1: 6fb1daea15 $ on $Git commit date: 2022-05-25 09:41:13 -0600 $
-*/
-
-/*#include */
-
-#define EGL_EGLEXT_VERSION 20220525
-
-/* Generated C header for:
- * API: egl
- * Versions considered: .*
- * Versions emitted: _nomatch_^
- * Default extensions included: egl
- * Additional extensions included: _nomatch_^
- * Extensions removed: _nomatch_^
- */
-
-#ifndef EGL_KHR_cl_event
-#define EGL_KHR_cl_event 1
-#define EGL_CL_EVENT_HANDLE_KHR 0x309C
-#define EGL_SYNC_CL_EVENT_KHR 0x30FE
-#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF
-#endif /* EGL_KHR_cl_event */
-
-#ifndef EGL_KHR_cl_event2
-#define EGL_KHR_cl_event2 1
-typedef void *EGLSyncKHR;
-typedef intptr_t EGLAttribKHR;
-typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
-#endif
-#endif /* EGL_KHR_cl_event2 */
-
-#ifndef EGL_KHR_client_get_all_proc_addresses
-#define EGL_KHR_client_get_all_proc_addresses 1
-#endif /* EGL_KHR_client_get_all_proc_addresses */
-
-#ifndef EGL_KHR_config_attribs
-#define EGL_KHR_config_attribs 1
-#define EGL_CONFORMANT_KHR 0x3042
-#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020
-#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040
-#endif /* EGL_KHR_config_attribs */
-
-#ifndef EGL_KHR_context_flush_control
-#define EGL_KHR_context_flush_control 1
-#define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0
-#define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097
-#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098
-#endif /* EGL_KHR_context_flush_control */
-
-#ifndef EGL_KHR_create_context
-#define EGL_KHR_create_context 1
-#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098
-#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB
-#define EGL_CONTEXT_FLAGS_KHR 0x30FC
-#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD
-#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
-#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE
-#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF
-#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001
-#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002
-#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004
-#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001
-#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002
-#define EGL_OPENGL_ES3_BIT_KHR 0x00000040
-#endif /* EGL_KHR_create_context */
-
-#ifndef EGL_KHR_create_context_no_error
-#define EGL_KHR_create_context_no_error 1
-#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3
-#endif /* EGL_KHR_create_context_no_error */
-
-#ifndef EGL_KHR_debug
-#define EGL_KHR_debug 1
-typedef void *EGLLabelKHR;
-typedef void *EGLObjectKHR;
-typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message);
-#define EGL_OBJECT_THREAD_KHR 0x33B0
-#define EGL_OBJECT_DISPLAY_KHR 0x33B1
-#define EGL_OBJECT_CONTEXT_KHR 0x33B2
-#define EGL_OBJECT_SURFACE_KHR 0x33B3
-#define EGL_OBJECT_IMAGE_KHR 0x33B4
-#define EGL_OBJECT_SYNC_KHR 0x33B5
-#define EGL_OBJECT_STREAM_KHR 0x33B6
-#define EGL_DEBUG_MSG_CRITICAL_KHR 0x33B9
-#define EGL_DEBUG_MSG_ERROR_KHR 0x33BA
-#define EGL_DEBUG_MSG_WARN_KHR 0x33BB
-#define EGL_DEBUG_MSG_INFO_KHR 0x33BC
-#define EGL_DEBUG_CALLBACK_KHR 0x33B8
-typedef EGLint (EGLAPIENTRYP PFNEGLDEBUGMESSAGECONTROLKHRPROC) (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEBUGKHRPROC) (EGLint attribute, EGLAttrib *value);
-typedef EGLint (EGLAPIENTRYP PFNEGLLABELOBJECTKHRPROC) (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLint EGLAPIENTRY eglDebugMessageControlKHR (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDebugKHR (EGLint attribute, EGLAttrib *value);
-EGLAPI EGLint EGLAPIENTRY eglLabelObjectKHR (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label);
-#endif
-#endif /* EGL_KHR_debug */
-
-#ifndef EGL_KHR_display_reference
-#define EGL_KHR_display_reference 1
-#define EGL_TRACK_REFERENCES_KHR 0x3352
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBKHRPROC) (EGLDisplay dpy, EGLint name, EGLAttrib *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribKHR (EGLDisplay dpy, EGLint name, EGLAttrib *value);
-#endif
-#endif /* EGL_KHR_display_reference */
-
-#ifndef EGL_KHR_fence_sync
-#define EGL_KHR_fence_sync 1
-typedef khronos_utime_nanoseconds_t EGLTimeKHR;
-#ifdef KHRONOS_SUPPORT_INT64
-#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
-#define EGL_SYNC_CONDITION_KHR 0x30F8
-#define EGL_SYNC_FENCE_KHR 0x30F9
-typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
-typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
-EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
-#endif
-#endif /* KHRONOS_SUPPORT_INT64 */
-#endif /* EGL_KHR_fence_sync */
-
-#ifndef EGL_KHR_get_all_proc_addresses
-#define EGL_KHR_get_all_proc_addresses 1
-#endif /* EGL_KHR_get_all_proc_addresses */
-
-#ifndef EGL_KHR_gl_colorspace
-#define EGL_KHR_gl_colorspace 1
-#define EGL_GL_COLORSPACE_KHR 0x309D
-#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089
-#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A
-#endif /* EGL_KHR_gl_colorspace */
-
-#ifndef EGL_KHR_gl_renderbuffer_image
-#define EGL_KHR_gl_renderbuffer_image 1
-#define EGL_GL_RENDERBUFFER_KHR 0x30B9
-#endif /* EGL_KHR_gl_renderbuffer_image */
-
-#ifndef EGL_KHR_gl_texture_2D_image
-#define EGL_KHR_gl_texture_2D_image 1
-#define EGL_GL_TEXTURE_2D_KHR 0x30B1
-#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC
-#endif /* EGL_KHR_gl_texture_2D_image */
-
-#ifndef EGL_KHR_gl_texture_3D_image
-#define EGL_KHR_gl_texture_3D_image 1
-#define EGL_GL_TEXTURE_3D_KHR 0x30B2
-#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD
-#endif /* EGL_KHR_gl_texture_3D_image */
-
-#ifndef EGL_KHR_gl_texture_cubemap_image
-#define EGL_KHR_gl_texture_cubemap_image 1
-#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3
-#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4
-#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5
-#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6
-#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7
-#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8
-#endif /* EGL_KHR_gl_texture_cubemap_image */
-
-#ifndef EGL_KHR_image
-#define EGL_KHR_image 1
-typedef void *EGLImageKHR;
-#define EGL_NATIVE_PIXMAP_KHR 0x30B0
-#define EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0)
-typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
-#endif
-#endif /* EGL_KHR_image */
-
-#ifndef EGL_KHR_image_base
-#define EGL_KHR_image_base 1
-#define EGL_IMAGE_PRESERVED_KHR 0x30D2
-#endif /* EGL_KHR_image_base */
-
-#ifndef EGL_KHR_image_pixmap
-#define EGL_KHR_image_pixmap 1
-#endif /* EGL_KHR_image_pixmap */
-
-#ifndef EGL_KHR_lock_surface
-#define EGL_KHR_lock_surface 1
-#define EGL_READ_SURFACE_BIT_KHR 0x0001
-#define EGL_WRITE_SURFACE_BIT_KHR 0x0002
-#define EGL_LOCK_SURFACE_BIT_KHR 0x0080
-#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100
-#define EGL_MATCH_FORMAT_KHR 0x3043
-#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0
-#define EGL_FORMAT_RGB_565_KHR 0x30C1
-#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2
-#define EGL_FORMAT_RGBA_8888_KHR 0x30C3
-#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4
-#define EGL_LOCK_USAGE_HINT_KHR 0x30C5
-#define EGL_BITMAP_POINTER_KHR 0x30C6
-#define EGL_BITMAP_PITCH_KHR 0x30C7
-#define EGL_BITMAP_ORIGIN_KHR 0x30C8
-#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9
-#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA
-#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB
-#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC
-#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD
-#define EGL_LOWER_LEFT_KHR 0x30CE
-#define EGL_UPPER_LEFT_KHR 0x30CF
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface);
-#endif
-#endif /* EGL_KHR_lock_surface */
-
-#ifndef EGL_KHR_lock_surface2
-#define EGL_KHR_lock_surface2 1
-#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110
-#endif /* EGL_KHR_lock_surface2 */
-
-#ifndef EGL_KHR_lock_surface3
-#define EGL_KHR_lock_surface3 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
-#endif
-#endif /* EGL_KHR_lock_surface3 */
-
-#ifndef EGL_KHR_mutable_render_buffer
-#define EGL_KHR_mutable_render_buffer 1
-#define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 0x1000
-#endif /* EGL_KHR_mutable_render_buffer */
-
-#ifndef EGL_KHR_no_config_context
-#define EGL_KHR_no_config_context 1
-#define EGL_NO_CONFIG_KHR EGL_CAST(EGLConfig,0)
-#endif /* EGL_KHR_no_config_context */
-
-#ifndef EGL_KHR_partial_update
-#define EGL_KHR_partial_update 1
-#define EGL_BUFFER_AGE_KHR 0x313D
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
-#endif
-#endif /* EGL_KHR_partial_update */
-
-#ifndef EGL_KHR_platform_android
-#define EGL_KHR_platform_android 1
-#define EGL_PLATFORM_ANDROID_KHR 0x3141
-#endif /* EGL_KHR_platform_android */
-
-#ifndef EGL_KHR_platform_gbm
-#define EGL_KHR_platform_gbm 1
-#define EGL_PLATFORM_GBM_KHR 0x31D7
-#endif /* EGL_KHR_platform_gbm */
-
-#ifndef EGL_KHR_platform_wayland
-#define EGL_KHR_platform_wayland 1
-#define EGL_PLATFORM_WAYLAND_KHR 0x31D8
-#endif /* EGL_KHR_platform_wayland */
-
-#ifndef EGL_KHR_platform_x11
-#define EGL_KHR_platform_x11 1
-#define EGL_PLATFORM_X11_KHR 0x31D5
-#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6
-#endif /* EGL_KHR_platform_x11 */
-
-#ifndef EGL_KHR_reusable_sync
-#define EGL_KHR_reusable_sync 1
-#ifdef KHRONOS_SUPPORT_INT64
-#define EGL_SYNC_STATUS_KHR 0x30F1
-#define EGL_SIGNALED_KHR 0x30F2
-#define EGL_UNSIGNALED_KHR 0x30F3
-#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5
-#define EGL_CONDITION_SATISFIED_KHR 0x30F6
-#define EGL_SYNC_TYPE_KHR 0x30F7
-#define EGL_SYNC_REUSABLE_KHR 0x30FA
-#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001
-#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull
-#define EGL_NO_SYNC_KHR EGL_CAST(EGLSyncKHR,0)
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
-#endif
-#endif /* KHRONOS_SUPPORT_INT64 */
-#endif /* EGL_KHR_reusable_sync */
-
-#ifndef EGL_KHR_stream
-#define EGL_KHR_stream 1
-typedef void *EGLStreamKHR;
-typedef khronos_uint64_t EGLuint64KHR;
-#ifdef KHRONOS_SUPPORT_INT64
-#define EGL_NO_STREAM_KHR EGL_CAST(EGLStreamKHR,0)
-#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210
-#define EGL_PRODUCER_FRAME_KHR 0x3212
-#define EGL_CONSUMER_FRAME_KHR 0x3213
-#define EGL_STREAM_STATE_KHR 0x3214
-#define EGL_STREAM_STATE_CREATED_KHR 0x3215
-#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216
-#define EGL_STREAM_STATE_EMPTY_KHR 0x3217
-#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218
-#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219
-#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A
-#define EGL_BAD_STREAM_KHR 0x321B
-#define EGL_BAD_STATE_KHR 0x321C
-typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream);
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
-#endif
-#endif /* KHRONOS_SUPPORT_INT64 */
-#endif /* EGL_KHR_stream */
-
-#ifndef EGL_KHR_stream_attrib
-#define EGL_KHR_stream_attrib 1
-#ifdef KHRONOS_SUPPORT_INT64
-typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMATTRIBKHRPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamAttribKHR (EGLDisplay dpy, const EGLAttrib *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value);
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
-#endif
-#endif /* KHRONOS_SUPPORT_INT64 */
-#endif /* EGL_KHR_stream_attrib */
-
-#ifndef EGL_KHR_stream_consumer_gltexture
-#define EGL_KHR_stream_consumer_gltexture 1
-#ifdef EGL_KHR_stream
-#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream);
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream);
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream);
-#endif
-#endif /* EGL_KHR_stream */
-#endif /* EGL_KHR_stream_consumer_gltexture */
-
-#ifndef EGL_KHR_stream_cross_process_fd
-#define EGL_KHR_stream_cross_process_fd 1
-typedef int EGLNativeFileDescriptorKHR;
-#ifdef EGL_KHR_stream
-#define EGL_NO_FILE_DESCRIPTOR_KHR EGL_CAST(EGLNativeFileDescriptorKHR,-1)
-typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
-typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream);
-EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
-#endif
-#endif /* EGL_KHR_stream */
-#endif /* EGL_KHR_stream_cross_process_fd */
-
-#ifndef EGL_KHR_stream_fifo
-#define EGL_KHR_stream_fifo 1
-#ifdef EGL_KHR_stream
-#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC
-#define EGL_STREAM_TIME_NOW_KHR 0x31FD
-#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE
-#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
-#endif
-#endif /* EGL_KHR_stream */
-#endif /* EGL_KHR_stream_fifo */
-
-#ifndef EGL_KHR_stream_producer_aldatalocator
-#define EGL_KHR_stream_producer_aldatalocator 1
-#ifdef EGL_KHR_stream
-#endif /* EGL_KHR_stream */
-#endif /* EGL_KHR_stream_producer_aldatalocator */
-
-#ifndef EGL_KHR_stream_producer_eglsurface
-#define EGL_KHR_stream_producer_eglsurface 1
-#ifdef EGL_KHR_stream
-#define EGL_STREAM_BIT_KHR 0x0800
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
-#endif
-#endif /* EGL_KHR_stream */
-#endif /* EGL_KHR_stream_producer_eglsurface */
-
-#ifndef EGL_KHR_surfaceless_context
-#define EGL_KHR_surfaceless_context 1
-#endif /* EGL_KHR_surfaceless_context */
-
-#ifndef EGL_KHR_swap_buffers_with_damage
-#define EGL_KHR_swap_buffers_with_damage 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects);
-#endif
-#endif /* EGL_KHR_swap_buffers_with_damage */
-
-#ifndef EGL_KHR_vg_parent_image
-#define EGL_KHR_vg_parent_image 1
-#define EGL_VG_PARENT_IMAGE_KHR 0x30BA
-#endif /* EGL_KHR_vg_parent_image */
-
-#ifndef EGL_KHR_wait_sync
-#define EGL_KHR_wait_sync 1
-typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
-#endif
-#endif /* EGL_KHR_wait_sync */
-
-#ifndef EGL_ANDROID_GLES_layers
-#define EGL_ANDROID_GLES_layers 1
-#endif /* EGL_ANDROID_GLES_layers */
-
-#ifndef EGL_ANDROID_blob_cache
-#define EGL_ANDROID_blob_cache 1
-typedef khronos_ssize_t EGLsizeiANDROID;
-typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize);
-typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize);
-typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
-#endif
-#endif /* EGL_ANDROID_blob_cache */
-
-#ifndef EGL_ANDROID_create_native_client_buffer
-#define EGL_ANDROID_create_native_client_buffer 1
-#define EGL_NATIVE_BUFFER_USAGE_ANDROID 0x3143
-#define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID 0x00000001
-#define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID 0x00000002
-#define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID 0x00000004
-typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC) (const EGLint *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLClientBuffer EGLAPIENTRY eglCreateNativeClientBufferANDROID (const EGLint *attrib_list);
-#endif
-#endif /* EGL_ANDROID_create_native_client_buffer */
-
-#ifndef EGL_ANDROID_framebuffer_target
-#define EGL_ANDROID_framebuffer_target 1
-#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147
-#endif /* EGL_ANDROID_framebuffer_target */
-
-#ifndef EGL_ANDROID_front_buffer_auto_refresh
-#define EGL_ANDROID_front_buffer_auto_refresh 1
-#define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID 0x314C
-#endif /* EGL_ANDROID_front_buffer_auto_refresh */
-
-#ifndef EGL_ANDROID_get_frame_timestamps
-#define EGL_ANDROID_get_frame_timestamps 1
-typedef khronos_stime_nanoseconds_t EGLnsecsANDROID;
-#define EGL_TIMESTAMP_PENDING_ANDROID EGL_CAST(EGLnsecsANDROID,-2)
-#define EGL_TIMESTAMP_INVALID_ANDROID EGL_CAST(EGLnsecsANDROID,-1)
-#define EGL_TIMESTAMPS_ANDROID 0x3430
-#define EGL_COMPOSITE_DEADLINE_ANDROID 0x3431
-#define EGL_COMPOSITE_INTERVAL_ANDROID 0x3432
-#define EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID 0x3433
-#define EGL_REQUESTED_PRESENT_TIME_ANDROID 0x3434
-#define EGL_RENDERING_COMPLETE_TIME_ANDROID 0x3435
-#define EGL_COMPOSITION_LATCH_TIME_ANDROID 0x3436
-#define EGL_FIRST_COMPOSITION_START_TIME_ANDROID 0x3437
-#define EGL_LAST_COMPOSITION_START_TIME_ANDROID 0x3438
-#define EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID 0x3439
-#define EGL_DISPLAY_PRESENT_TIME_ANDROID 0x343A
-#define EGL_DEQUEUE_READY_TIME_ANDROID 0x343B
-#define EGL_READS_DONE_TIME_ANDROID 0x343C
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint name);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETNEXTFRAMEIDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint timestamp);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint name);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingANDROID (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetNextFrameIdANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint timestamp);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampsANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values);
-#endif
-#endif /* EGL_ANDROID_get_frame_timestamps */
-
-#ifndef EGL_ANDROID_get_native_client_buffer
-#define EGL_ANDROID_get_native_client_buffer 1
-struct AHardwareBuffer;
-typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC) (const struct AHardwareBuffer *buffer);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLClientBuffer EGLAPIENTRY eglGetNativeClientBufferANDROID (const struct AHardwareBuffer *buffer);
-#endif
-#endif /* EGL_ANDROID_get_native_client_buffer */
-
-#ifndef EGL_ANDROID_image_native_buffer
-#define EGL_ANDROID_image_native_buffer 1
-#define EGL_NATIVE_BUFFER_ANDROID 0x3140
-#endif /* EGL_ANDROID_image_native_buffer */
-
-#ifndef EGL_ANDROID_native_fence_sync
-#define EGL_ANDROID_native_fence_sync 1
-#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144
-#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145
-#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146
-#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1
-typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync);
-#endif
-#endif /* EGL_ANDROID_native_fence_sync */
-
-#ifndef EGL_ANDROID_presentation_time
-#define EGL_ANDROID_presentation_time 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLPRESENTATIONTIMEANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglPresentationTimeANDROID (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time);
-#endif
-#endif /* EGL_ANDROID_presentation_time */
-
-#ifndef EGL_ANDROID_recordable
-#define EGL_ANDROID_recordable 1
-#define EGL_RECORDABLE_ANDROID 0x3142
-#endif /* EGL_ANDROID_recordable */
-
-#ifndef EGL_ANGLE_d3d_share_handle_client_buffer
-#define EGL_ANGLE_d3d_share_handle_client_buffer 1
-#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
-#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
-
-#ifndef EGL_ANGLE_device_d3d
-#define EGL_ANGLE_device_d3d 1
-#define EGL_D3D9_DEVICE_ANGLE 0x33A0
-#define EGL_D3D11_DEVICE_ANGLE 0x33A1
-#endif /* EGL_ANGLE_device_d3d */
-
-#ifndef EGL_ANGLE_query_surface_pointer
-#define EGL_ANGLE_query_surface_pointer 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
-#endif
-#endif /* EGL_ANGLE_query_surface_pointer */
-
-#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
-#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
-#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
-
-#ifndef EGL_ANGLE_sync_control_rate
-#define EGL_ANGLE_sync_control_rate 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETMSCRATEANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglGetMscRateANGLE (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator);
-#endif
-#endif /* EGL_ANGLE_sync_control_rate */
-
-#ifndef EGL_ANGLE_window_fixed_size
-#define EGL_ANGLE_window_fixed_size 1
-#define EGL_FIXED_SIZE_ANGLE 0x3201
-#endif /* EGL_ANGLE_window_fixed_size */
-
-#ifndef EGL_ARM_image_format
-#define EGL_ARM_image_format 1
-#define EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM 0x3287
-#define EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM 0x3288
-#endif /* EGL_ARM_image_format */
-
-#ifndef EGL_ARM_implicit_external_sync
-#define EGL_ARM_implicit_external_sync 1
-#define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A
-#endif /* EGL_ARM_implicit_external_sync */
-
-#ifndef EGL_ARM_pixmap_multisample_discard
-#define EGL_ARM_pixmap_multisample_discard 1
-#define EGL_DISCARD_SAMPLES_ARM 0x3286
-#endif /* EGL_ARM_pixmap_multisample_discard */
-
-#ifndef EGL_EXT_bind_to_front
-#define EGL_EXT_bind_to_front 1
-#define EGL_FRONT_BUFFER_EXT 0x3464
-#endif /* EGL_EXT_bind_to_front */
-
-#ifndef EGL_EXT_buffer_age
-#define EGL_EXT_buffer_age 1
-#define EGL_BUFFER_AGE_EXT 0x313D
-#endif /* EGL_EXT_buffer_age */
-
-#ifndef EGL_EXT_client_extensions
-#define EGL_EXT_client_extensions 1
-#endif /* EGL_EXT_client_extensions */
-
-#ifndef EGL_EXT_client_sync
-#define EGL_EXT_client_sync 1
-#define EGL_SYNC_CLIENT_EXT 0x3364
-#define EGL_SYNC_CLIENT_SIGNAL_EXT 0x3365
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCLIENTSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglClientSignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
-#endif
-#endif /* EGL_EXT_client_sync */
-
-#ifndef EGL_EXT_compositor
-#define EGL_EXT_compositor 1
-#define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460
-#define EGL_EXTERNAL_REF_ID_EXT 0x3461
-#define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462
-#define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC) (const EGLint *external_ref_ids, EGLint num_entries);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC) (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC) (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC) (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC) (EGLint external_win_id);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC) (EGLint external_win_id, EGLint width, EGLint height);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC) (EGLint external_win_id, EGLint policy);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextListEXT (const EGLint *external_ref_ids, EGLint num_entries);
-EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextAttributesEXT (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries);
-EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowListEXT (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries);
-EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowAttributesEXT (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries);
-EGLAPI EGLBoolean EGLAPIENTRY eglCompositorBindTexWindowEXT (EGLint external_win_id);
-EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetSizeEXT (EGLint external_win_id, EGLint width, EGLint height);
-EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSwapPolicyEXT (EGLint external_win_id, EGLint policy);
-#endif
-#endif /* EGL_EXT_compositor */
-
-#ifndef EGL_EXT_config_select_group
-#define EGL_EXT_config_select_group 1
-#define EGL_CONFIG_SELECT_GROUP_EXT 0x34C0
-#endif /* EGL_EXT_config_select_group */
-
-#ifndef EGL_EXT_create_context_robustness
-#define EGL_EXT_create_context_robustness 1
-#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF
-#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138
-#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE
-#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF
-#endif /* EGL_EXT_create_context_robustness */
-
-#ifndef EGL_EXT_device_base
-#define EGL_EXT_device_base 1
-typedef void *EGLDeviceEXT;
-#define EGL_NO_DEVICE_EXT EGL_CAST(EGLDeviceEXT,0)
-#define EGL_BAD_DEVICE_EXT 0x322B
-#define EGL_DEVICE_EXT 0x322C
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
-typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
-EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
-#endif
-#endif /* EGL_EXT_device_base */
-
-#ifndef EGL_EXT_device_drm
-#define EGL_EXT_device_drm 1
-#define EGL_DRM_DEVICE_FILE_EXT 0x3233
-#define EGL_DRM_MASTER_FD_EXT 0x333C
-#endif /* EGL_EXT_device_drm */
-
-#ifndef EGL_EXT_device_drm_render_node
-#define EGL_EXT_device_drm_render_node 1
-#define EGL_DRM_RENDER_NODE_FILE_EXT 0x3377
-#endif /* EGL_EXT_device_drm_render_node */
-
-#ifndef EGL_EXT_device_enumeration
-#define EGL_EXT_device_enumeration 1
-#endif /* EGL_EXT_device_enumeration */
-
-#ifndef EGL_EXT_device_openwf
-#define EGL_EXT_device_openwf 1
-#define EGL_OPENWF_DEVICE_ID_EXT 0x3237
-#define EGL_OPENWF_DEVICE_EXT 0x333D
-#endif /* EGL_EXT_device_openwf */
-
-#ifndef EGL_EXT_device_persistent_id
-#define EGL_EXT_device_persistent_id 1
-#define EGL_DEVICE_UUID_EXT 0x335C
-#define EGL_DRIVER_UUID_EXT 0x335D
-#define EGL_DRIVER_NAME_EXT 0x335E
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEBINARYEXTPROC) (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceBinaryEXT (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size);
-#endif
-#endif /* EGL_EXT_device_persistent_id */
-
-#ifndef EGL_EXT_device_query
-#define EGL_EXT_device_query 1
-#endif /* EGL_EXT_device_query */
-
-#ifndef EGL_EXT_device_query_name
-#define EGL_EXT_device_query_name 1
-#define EGL_RENDERER_EXT 0x335F
-#endif /* EGL_EXT_device_query_name */
-
-#ifndef EGL_EXT_explicit_device
-#define EGL_EXT_explicit_device 1
-#endif /* EGL_EXT_explicit_device */
-
-#ifndef EGL_EXT_gl_colorspace_bt2020_linear
-#define EGL_EXT_gl_colorspace_bt2020_linear 1
-#define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F
-#endif /* EGL_EXT_gl_colorspace_bt2020_linear */
-
-#ifndef EGL_EXT_gl_colorspace_bt2020_pq
-#define EGL_EXT_gl_colorspace_bt2020_pq 1
-#define EGL_GL_COLORSPACE_BT2020_PQ_EXT 0x3340
-#endif /* EGL_EXT_gl_colorspace_bt2020_pq */
-
-#ifndef EGL_EXT_gl_colorspace_display_p3
-#define EGL_EXT_gl_colorspace_display_p3 1
-#define EGL_GL_COLORSPACE_DISPLAY_P3_EXT 0x3363
-#endif /* EGL_EXT_gl_colorspace_display_p3 */
-
-#ifndef EGL_EXT_gl_colorspace_display_p3_linear
-#define EGL_EXT_gl_colorspace_display_p3_linear 1
-#define EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT 0x3362
-#endif /* EGL_EXT_gl_colorspace_display_p3_linear */
-
-#ifndef EGL_EXT_gl_colorspace_display_p3_passthrough
-#define EGL_EXT_gl_colorspace_display_p3_passthrough 1
-#define EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT 0x3490
-#endif /* EGL_EXT_gl_colorspace_display_p3_passthrough */
-
-#ifndef EGL_EXT_gl_colorspace_scrgb
-#define EGL_EXT_gl_colorspace_scrgb 1
-#define EGL_GL_COLORSPACE_SCRGB_EXT 0x3351
-#endif /* EGL_EXT_gl_colorspace_scrgb */
-
-#ifndef EGL_EXT_gl_colorspace_scrgb_linear
-#define EGL_EXT_gl_colorspace_scrgb_linear 1
-#define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT 0x3350
-#endif /* EGL_EXT_gl_colorspace_scrgb_linear */
-
-#ifndef EGL_EXT_image_dma_buf_import
-#define EGL_EXT_image_dma_buf_import 1
-#define EGL_LINUX_DMA_BUF_EXT 0x3270
-#define EGL_LINUX_DRM_FOURCC_EXT 0x3271
-#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272
-#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273
-#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274
-#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275
-#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276
-#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277
-#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278
-#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279
-#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A
-#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B
-#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C
-#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D
-#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E
-#define EGL_ITU_REC601_EXT 0x327F
-#define EGL_ITU_REC709_EXT 0x3280
-#define EGL_ITU_REC2020_EXT 0x3281
-#define EGL_YUV_FULL_RANGE_EXT 0x3282
-#define EGL_YUV_NARROW_RANGE_EXT 0x3283
-#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284
-#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285
-#endif /* EGL_EXT_image_dma_buf_import */
-
-#ifndef EGL_EXT_image_dma_buf_import_modifiers
-#define EGL_EXT_image_dma_buf_import_modifiers 1
-#define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440
-#define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441
-#define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442
-#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443
-#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444
-#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445
-#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446
-#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447
-#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448
-#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449
-#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufFormatsEXT (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufModifiersEXT (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers);
-#endif
-#endif /* EGL_EXT_image_dma_buf_import_modifiers */
-
-#ifndef EGL_EXT_image_gl_colorspace
-#define EGL_EXT_image_gl_colorspace 1
-#define EGL_GL_COLORSPACE_DEFAULT_EXT 0x314D
-#endif /* EGL_EXT_image_gl_colorspace */
-
-#ifndef EGL_EXT_image_implicit_sync_control
-#define EGL_EXT_image_implicit_sync_control 1
-#define EGL_IMPORT_SYNC_TYPE_EXT 0x3470
-#define EGL_IMPORT_IMPLICIT_SYNC_EXT 0x3471
-#define EGL_IMPORT_EXPLICIT_SYNC_EXT 0x3472
-#endif /* EGL_EXT_image_implicit_sync_control */
-
-#ifndef EGL_EXT_multiview_window
-#define EGL_EXT_multiview_window 1
-#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134
-#endif /* EGL_EXT_multiview_window */
-
-#ifndef EGL_EXT_output_base
-#define EGL_EXT_output_base 1
-typedef void *EGLOutputLayerEXT;
-typedef void *EGLOutputPortEXT;
-#define EGL_NO_OUTPUT_LAYER_EXT EGL_CAST(EGLOutputLayerEXT,0)
-#define EGL_NO_OUTPUT_PORT_EXT EGL_CAST(EGLOutputPortEXT,0)
-#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D
-#define EGL_BAD_OUTPUT_PORT_EXT 0x322E
-#define EGL_SWAP_INTERVAL_EXT 0x322F
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
-typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
-typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
-EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
-EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
-EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
-EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
-#endif
-#endif /* EGL_EXT_output_base */
-
-#ifndef EGL_EXT_output_drm
-#define EGL_EXT_output_drm 1
-#define EGL_DRM_CRTC_EXT 0x3234
-#define EGL_DRM_PLANE_EXT 0x3235
-#define EGL_DRM_CONNECTOR_EXT 0x3236
-#endif /* EGL_EXT_output_drm */
-
-#ifndef EGL_EXT_output_openwf
-#define EGL_EXT_output_openwf 1
-#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238
-#define EGL_OPENWF_PORT_ID_EXT 0x3239
-#endif /* EGL_EXT_output_openwf */
-
-#ifndef EGL_EXT_pixel_format_float
-#define EGL_EXT_pixel_format_float 1
-#define EGL_COLOR_COMPONENT_TYPE_EXT 0x3339
-#define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT 0x333A
-#define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT 0x333B
-#endif /* EGL_EXT_pixel_format_float */
-
-#ifndef EGL_EXT_platform_base
-#define EGL_EXT_platform_base 1
-typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
-#endif
-#endif /* EGL_EXT_platform_base */
-
-#ifndef EGL_EXT_platform_device
-#define EGL_EXT_platform_device 1
-#define EGL_PLATFORM_DEVICE_EXT 0x313F
-#endif /* EGL_EXT_platform_device */
-
-#ifndef EGL_EXT_platform_wayland
-#define EGL_EXT_platform_wayland 1
-#define EGL_PLATFORM_WAYLAND_EXT 0x31D8
-#endif /* EGL_EXT_platform_wayland */
-
-#ifndef EGL_EXT_platform_x11
-#define EGL_EXT_platform_x11 1
-#define EGL_PLATFORM_X11_EXT 0x31D5
-#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6
-#endif /* EGL_EXT_platform_x11 */
-
-#ifndef EGL_EXT_platform_xcb
-#define EGL_EXT_platform_xcb 1
-#define EGL_PLATFORM_XCB_EXT 0x31DC
-#define EGL_PLATFORM_XCB_SCREEN_EXT 0x31DE
-#endif /* EGL_EXT_platform_xcb */
-
-#ifndef EGL_EXT_present_opaque
-#define EGL_EXT_present_opaque 1
-#define EGL_PRESENT_OPAQUE_EXT 0x31DF
-#endif /* EGL_EXT_present_opaque */
-
-#ifndef EGL_EXT_protected_content
-#define EGL_EXT_protected_content 1
-#define EGL_PROTECTED_CONTENT_EXT 0x32C0
-#endif /* EGL_EXT_protected_content */
-
-#ifndef EGL_EXT_protected_surface
-#define EGL_EXT_protected_surface 1
-#endif /* EGL_EXT_protected_surface */
-
-#ifndef EGL_EXT_stream_consumer_egloutput
-#define EGL_EXT_stream_consumer_egloutput 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
-#endif
-#endif /* EGL_EXT_stream_consumer_egloutput */
-
-#ifndef EGL_EXT_surface_CTA861_3_metadata
-#define EGL_EXT_surface_CTA861_3_metadata 1
-#define EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT 0x3360
-#define EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT 0x3361
-#endif /* EGL_EXT_surface_CTA861_3_metadata */
-
-#ifndef EGL_EXT_surface_SMPTE2086_metadata
-#define EGL_EXT_surface_SMPTE2086_metadata 1
-#define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT 0x3341
-#define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT 0x3342
-#define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT 0x3343
-#define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT 0x3344
-#define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT 0x3345
-#define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT 0x3346
-#define EGL_SMPTE2086_WHITE_POINT_X_EXT 0x3347
-#define EGL_SMPTE2086_WHITE_POINT_Y_EXT 0x3348
-#define EGL_SMPTE2086_MAX_LUMINANCE_EXT 0x3349
-#define EGL_SMPTE2086_MIN_LUMINANCE_EXT 0x334A
-#define EGL_METADATA_SCALING_EXT 50000
-#endif /* EGL_EXT_surface_SMPTE2086_metadata */
-
-#ifndef EGL_EXT_surface_compression
-#define EGL_EXT_surface_compression 1
-#define EGL_SURFACE_COMPRESSION_EXT 0x34B0
-#define EGL_SURFACE_COMPRESSION_PLANE1_EXT 0x328E
-#define EGL_SURFACE_COMPRESSION_PLANE2_EXT 0x328F
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT 0x34B1
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT 0x34B2
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT 0x34B4
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT 0x34B5
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT 0x34B6
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT 0x34B7
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT 0x34B8
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT 0x34B9
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT 0x34BA
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT 0x34BB
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT 0x34BC
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT 0x34BD
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT 0x34BE
-#define EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT 0x34BF
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSUPPORTEDCOMPRESSIONRATESEXTPROC) (EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, EGLint *rates, EGLint rate_size, EGLint *num_rates);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQuerySupportedCompressionRatesEXT (EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, EGLint *rates, EGLint rate_size, EGLint *num_rates);
-#endif
-#endif /* EGL_EXT_surface_compression */
-
-#ifndef EGL_EXT_swap_buffers_with_damage
-#define EGL_EXT_swap_buffers_with_damage 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects);
-#endif
-#endif /* EGL_EXT_swap_buffers_with_damage */
-
-#ifndef EGL_EXT_sync_reuse
-#define EGL_EXT_sync_reuse 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglUnsignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
-#endif
-#endif /* EGL_EXT_sync_reuse */
-
-#ifndef EGL_EXT_yuv_surface
-#define EGL_EXT_yuv_surface 1
-#define EGL_YUV_ORDER_EXT 0x3301
-#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311
-#define EGL_YUV_SUBSAMPLE_EXT 0x3312
-#define EGL_YUV_DEPTH_RANGE_EXT 0x3317
-#define EGL_YUV_CSC_STANDARD_EXT 0x330A
-#define EGL_YUV_PLANE_BPP_EXT 0x331A
-#define EGL_YUV_BUFFER_EXT 0x3300
-#define EGL_YUV_ORDER_YUV_EXT 0x3302
-#define EGL_YUV_ORDER_YVU_EXT 0x3303
-#define EGL_YUV_ORDER_YUYV_EXT 0x3304
-#define EGL_YUV_ORDER_UYVY_EXT 0x3305
-#define EGL_YUV_ORDER_YVYU_EXT 0x3306
-#define EGL_YUV_ORDER_VYUY_EXT 0x3307
-#define EGL_YUV_ORDER_AYUV_EXT 0x3308
-#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313
-#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314
-#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315
-#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318
-#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319
-#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B
-#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C
-#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D
-#define EGL_YUV_PLANE_BPP_0_EXT 0x331B
-#define EGL_YUV_PLANE_BPP_8_EXT 0x331C
-#define EGL_YUV_PLANE_BPP_10_EXT 0x331D
-#endif /* EGL_EXT_yuv_surface */
-
-#ifndef EGL_HI_clientpixmap
-#define EGL_HI_clientpixmap 1
-struct EGLClientPixmapHI {
- void *pData;
- EGLint iWidth;
- EGLint iHeight;
- EGLint iStride;
-};
-#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74
-typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
-#endif
-#endif /* EGL_HI_clientpixmap */
-
-#ifndef EGL_HI_colorformats
-#define EGL_HI_colorformats 1
-#define EGL_COLOR_FORMAT_HI 0x8F70
-#define EGL_COLOR_RGB_HI 0x8F71
-#define EGL_COLOR_RGBA_HI 0x8F72
-#define EGL_COLOR_ARGB_HI 0x8F73
-#endif /* EGL_HI_colorformats */
-
-#ifndef EGL_IMG_context_priority
-#define EGL_IMG_context_priority 1
-#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100
-#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101
-#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102
-#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103
-#endif /* EGL_IMG_context_priority */
-
-#ifndef EGL_IMG_image_plane_attribs
-#define EGL_IMG_image_plane_attribs 1
-#define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG 0x3105
-#define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG 0x3106
-#endif /* EGL_IMG_image_plane_attribs */
-
-#ifndef EGL_MESA_drm_image
-#define EGL_MESA_drm_image 1
-#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0
-#define EGL_DRM_BUFFER_USE_MESA 0x31D1
-#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2
-#define EGL_DRM_BUFFER_MESA 0x31D3
-#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4
-#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001
-#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002
-#define EGL_DRM_BUFFER_USE_CURSOR_MESA 0x00000004
-typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
-#endif
-#endif /* EGL_MESA_drm_image */
-
-#ifndef EGL_MESA_image_dma_buf_export
-#define EGL_MESA_image_dma_buf_export 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
-EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
-#endif
-#endif /* EGL_MESA_image_dma_buf_export */
-
-#ifndef EGL_MESA_platform_gbm
-#define EGL_MESA_platform_gbm 1
-#define EGL_PLATFORM_GBM_MESA 0x31D7
-#endif /* EGL_MESA_platform_gbm */
-
-#ifndef EGL_MESA_platform_surfaceless
-#define EGL_MESA_platform_surfaceless 1
-#define EGL_PLATFORM_SURFACELESS_MESA 0x31DD
-#endif /* EGL_MESA_platform_surfaceless */
-
-#ifndef EGL_MESA_query_driver
-#define EGL_MESA_query_driver 1
-typedef char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERCONFIGPROC) (EGLDisplay dpy);
-typedef const char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERNAMEPROC) (EGLDisplay dpy);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI char *EGLAPIENTRY eglGetDisplayDriverConfig (EGLDisplay dpy);
-EGLAPI const char *EGLAPIENTRY eglGetDisplayDriverName (EGLDisplay dpy);
-#endif
-#endif /* EGL_MESA_query_driver */
-
-#ifndef EGL_NOK_swap_region
-#define EGL_NOK_swap_region 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
-#endif
-#endif /* EGL_NOK_swap_region */
-
-#ifndef EGL_NOK_swap_region2
-#define EGL_NOK_swap_region2 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
-#endif
-#endif /* EGL_NOK_swap_region2 */
-
-#ifndef EGL_NOK_texture_from_pixmap
-#define EGL_NOK_texture_from_pixmap 1
-#define EGL_Y_INVERTED_NOK 0x307F
-#endif /* EGL_NOK_texture_from_pixmap */
-
-#ifndef EGL_NV_3dvision_surface
-#define EGL_NV_3dvision_surface 1
-#define EGL_AUTO_STEREO_NV 0x3136
-#endif /* EGL_NV_3dvision_surface */
-
-#ifndef EGL_NV_context_priority_realtime
-#define EGL_NV_context_priority_realtime 1
-#define EGL_CONTEXT_PRIORITY_REALTIME_NV 0x3357
-#endif /* EGL_NV_context_priority_realtime */
-
-#ifndef EGL_NV_coverage_sample
-#define EGL_NV_coverage_sample 1
-#define EGL_COVERAGE_BUFFERS_NV 0x30E0
-#define EGL_COVERAGE_SAMPLES_NV 0x30E1
-#endif /* EGL_NV_coverage_sample */
-
-#ifndef EGL_NV_coverage_sample_resolve
-#define EGL_NV_coverage_sample_resolve 1
-#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131
-#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132
-#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
-#endif /* EGL_NV_coverage_sample_resolve */
-
-#ifndef EGL_NV_cuda_event
-#define EGL_NV_cuda_event 1
-#define EGL_CUDA_EVENT_HANDLE_NV 0x323B
-#define EGL_SYNC_CUDA_EVENT_NV 0x323C
-#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D
-#endif /* EGL_NV_cuda_event */
-
-#ifndef EGL_NV_depth_nonlinear
-#define EGL_NV_depth_nonlinear 1
-#define EGL_DEPTH_ENCODING_NV 0x30E2
-#define EGL_DEPTH_ENCODING_NONE_NV 0
-#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3
-#endif /* EGL_NV_depth_nonlinear */
-
-#ifndef EGL_NV_device_cuda
-#define EGL_NV_device_cuda 1
-#define EGL_CUDA_DEVICE_NV 0x323A
-#endif /* EGL_NV_device_cuda */
-
-#ifndef EGL_NV_native_query
-#define EGL_NV_native_query 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
-#endif
-#endif /* EGL_NV_native_query */
-
-#ifndef EGL_NV_post_convert_rounding
-#define EGL_NV_post_convert_rounding 1
-#endif /* EGL_NV_post_convert_rounding */
-
-#ifndef EGL_NV_post_sub_buffer
-#define EGL_NV_post_sub_buffer 1
-#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
-#endif
-#endif /* EGL_NV_post_sub_buffer */
-
-#ifndef EGL_NV_quadruple_buffer
-#define EGL_NV_quadruple_buffer 1
-#define EGL_QUADRUPLE_BUFFER_NV 0x3231
-#endif /* EGL_NV_quadruple_buffer */
-
-#ifndef EGL_NV_robustness_video_memory_purge
-#define EGL_NV_robustness_video_memory_purge 1
-#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C
-#endif /* EGL_NV_robustness_video_memory_purge */
-
-#ifndef EGL_NV_stream_consumer_eglimage
-#define EGL_NV_stream_consumer_eglimage 1
-#define EGL_STREAM_CONSUMER_IMAGE_NV 0x3373
-#define EGL_STREAM_IMAGE_ADD_NV 0x3374
-#define EGL_STREAM_IMAGE_REMOVE_NV 0x3375
-#define EGL_STREAM_IMAGE_AVAILABLE_NV 0x3376
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMIMAGECONSUMERCONNECTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR *modifiers, const EGLAttrib *attrib_list);
-typedef EGLint (EGLAPIENTRYP PFNEGLQUERYSTREAMCONSUMEREVENTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMACQUIREIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMRELEASEIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamImageConsumerConnectNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR *modifiers, const EGLAttrib *attrib_list);
-EGLAPI EGLint EGLAPIENTRY eglQueryStreamConsumerEventNV (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux);
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamAcquireImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync);
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamReleaseImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync);
-#endif
-#endif /* EGL_NV_stream_consumer_eglimage */
-
-#ifndef EGL_NV_stream_consumer_gltexture_yuv
-#define EGL_NV_stream_consumer_gltexture_yuv 1
-#define EGL_YUV_PLANE0_TEXTURE_UNIT_NV 0x332C
-#define EGL_YUV_PLANE1_TEXTURE_UNIT_NV 0x332D
-#define EGL_YUV_PLANE2_TEXTURE_UNIT_NV 0x332E
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalAttribsNV (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
-#endif
-#endif /* EGL_NV_stream_consumer_gltexture_yuv */
-
-#ifndef EGL_NV_stream_cross_display
-#define EGL_NV_stream_cross_display 1
-#define EGL_STREAM_CROSS_DISPLAY_NV 0x334E
-#endif /* EGL_NV_stream_cross_display */
-
-#ifndef EGL_NV_stream_cross_object
-#define EGL_NV_stream_cross_object 1
-#define EGL_STREAM_CROSS_OBJECT_NV 0x334D
-#endif /* EGL_NV_stream_cross_object */
-
-#ifndef EGL_NV_stream_cross_partition
-#define EGL_NV_stream_cross_partition 1
-#define EGL_STREAM_CROSS_PARTITION_NV 0x323F
-#endif /* EGL_NV_stream_cross_partition */
-
-#ifndef EGL_NV_stream_cross_process
-#define EGL_NV_stream_cross_process 1
-#define EGL_STREAM_CROSS_PROCESS_NV 0x3245
-#endif /* EGL_NV_stream_cross_process */
-
-#ifndef EGL_NV_stream_cross_system
-#define EGL_NV_stream_cross_system 1
-#define EGL_STREAM_CROSS_SYSTEM_NV 0x334F
-#endif /* EGL_NV_stream_cross_system */
-
-#ifndef EGL_NV_stream_dma
-#define EGL_NV_stream_dma 1
-#define EGL_STREAM_DMA_NV 0x3371
-#define EGL_STREAM_DMA_SERVER_NV 0x3372
-#endif /* EGL_NV_stream_dma */
-
-#ifndef EGL_NV_stream_fifo_next
-#define EGL_NV_stream_fifo_next 1
-#define EGL_PENDING_FRAME_NV 0x3329
-#define EGL_STREAM_TIME_PENDING_NV 0x332A
-#endif /* EGL_NV_stream_fifo_next */
-
-#ifndef EGL_NV_stream_fifo_synchronous
-#define EGL_NV_stream_fifo_synchronous 1
-#define EGL_STREAM_FIFO_SYNCHRONOUS_NV 0x3336
-#endif /* EGL_NV_stream_fifo_synchronous */
-
-#ifndef EGL_NV_stream_flush
-#define EGL_NV_stream_flush 1
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMFLUSHNVPROC) (EGLDisplay dpy, EGLStreamKHR stream);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglStreamFlushNV (EGLDisplay dpy, EGLStreamKHR stream);
-#endif
-#endif /* EGL_NV_stream_flush */
-
-#ifndef EGL_NV_stream_frame_limits
-#define EGL_NV_stream_frame_limits 1
-#define EGL_PRODUCER_MAX_FRAME_HINT_NV 0x3337
-#define EGL_CONSUMER_MAX_FRAME_HINT_NV 0x3338
-#endif /* EGL_NV_stream_frame_limits */
-
-#ifndef EGL_NV_stream_metadata
-#define EGL_NV_stream_metadata 1
-#define EGL_MAX_STREAM_METADATA_BLOCKS_NV 0x3250
-#define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV 0x3251
-#define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV 0x3252
-#define EGL_PRODUCER_METADATA_NV 0x3253
-#define EGL_CONSUMER_METADATA_NV 0x3254
-#define EGL_PENDING_METADATA_NV 0x3328
-#define EGL_METADATA0_SIZE_NV 0x3255
-#define EGL_METADATA1_SIZE_NV 0x3256
-#define EGL_METADATA2_SIZE_NV 0x3257
-#define EGL_METADATA3_SIZE_NV 0x3258
-#define EGL_METADATA0_TYPE_NV 0x3259
-#define EGL_METADATA1_TYPE_NV 0x325A
-#define EGL_METADATA2_TYPE_NV 0x325B
-#define EGL_METADATA3_TYPE_NV 0x325C
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBNVPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribNV (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
-EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data);
-#endif
-#endif /* EGL_NV_stream_metadata */
-
-#ifndef EGL_NV_stream_origin
-#define EGL_NV_stream_origin 1
-#define EGL_STREAM_FRAME_ORIGIN_X_NV 0x3366
-#define EGL_STREAM_FRAME_ORIGIN_Y_NV 0x3367
-#define EGL_STREAM_FRAME_MAJOR_AXIS_NV 0x3368
-#define EGL_CONSUMER_AUTO_ORIENTATION_NV 0x3369
-#define EGL_PRODUCER_AUTO_ORIENTATION_NV 0x336A
-#define EGL_LEFT_NV 0x336B
-#define EGL_RIGHT_NV 0x336C
-#define EGL_TOP_NV 0x336D
-#define EGL_BOTTOM_NV 0x336E
-#define EGL_X_AXIS_NV 0x336F
-#define EGL_Y_AXIS_NV 0x3370
-#endif /* EGL_NV_stream_origin */
-
-#ifndef EGL_NV_stream_remote
-#define EGL_NV_stream_remote 1
-#define EGL_STREAM_STATE_INITIALIZING_NV 0x3240
-#define EGL_STREAM_TYPE_NV 0x3241
-#define EGL_STREAM_PROTOCOL_NV 0x3242
-#define EGL_STREAM_ENDPOINT_NV 0x3243
-#define EGL_STREAM_LOCAL_NV 0x3244
-#define EGL_STREAM_PRODUCER_NV 0x3247
-#define EGL_STREAM_CONSUMER_NV 0x3248
-#define EGL_STREAM_PROTOCOL_FD_NV 0x3246
-#endif /* EGL_NV_stream_remote */
-
-#ifndef EGL_NV_stream_reset
-#define EGL_NV_stream_reset 1
-#define EGL_SUPPORT_RESET_NV 0x3334
-#define EGL_SUPPORT_REUSE_NV 0x3335
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLRESETSTREAMNVPROC) (EGLDisplay dpy, EGLStreamKHR stream);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglResetStreamNV (EGLDisplay dpy, EGLStreamKHR stream);
-#endif
-#endif /* EGL_NV_stream_reset */
-
-#ifndef EGL_NV_stream_socket
-#define EGL_NV_stream_socket 1
-#define EGL_STREAM_PROTOCOL_SOCKET_NV 0x324B
-#define EGL_SOCKET_HANDLE_NV 0x324C
-#define EGL_SOCKET_TYPE_NV 0x324D
-#endif /* EGL_NV_stream_socket */
-
-#ifndef EGL_NV_stream_socket_inet
-#define EGL_NV_stream_socket_inet 1
-#define EGL_SOCKET_TYPE_INET_NV 0x324F
-#endif /* EGL_NV_stream_socket_inet */
-
-#ifndef EGL_NV_stream_socket_unix
-#define EGL_NV_stream_socket_unix 1
-#define EGL_SOCKET_TYPE_UNIX_NV 0x324E
-#endif /* EGL_NV_stream_socket_unix */
-
-#ifndef EGL_NV_stream_sync
-#define EGL_NV_stream_sync 1
-#define EGL_SYNC_NEW_FRAME_NV 0x321F
-typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
-#endif
-#endif /* EGL_NV_stream_sync */
-
-#ifndef EGL_NV_sync
-#define EGL_NV_sync 1
-typedef void *EGLSyncNV;
-typedef khronos_utime_nanoseconds_t EGLTimeNV;
-#ifdef KHRONOS_SUPPORT_INT64
-#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6
-#define EGL_SYNC_STATUS_NV 0x30E7
-#define EGL_SIGNALED_NV 0x30E8
-#define EGL_UNSIGNALED_NV 0x30E9
-#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001
-#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull
-#define EGL_ALREADY_SIGNALED_NV 0x30EA
-#define EGL_TIMEOUT_EXPIRED_NV 0x30EB
-#define EGL_CONDITION_SATISFIED_NV 0x30EC
-#define EGL_SYNC_TYPE_NV 0x30ED
-#define EGL_SYNC_CONDITION_NV 0x30EE
-#define EGL_SYNC_FENCE_NV 0x30EF
-#define EGL_NO_SYNC_NV EGL_CAST(EGLSyncNV,0)
-typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
-typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync);
-EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync);
-EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
-EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value);
-#endif
-#endif /* KHRONOS_SUPPORT_INT64 */
-#endif /* EGL_NV_sync */
-
-#ifndef EGL_NV_system_time
-#define EGL_NV_system_time 1
-typedef khronos_utime_nanoseconds_t EGLuint64NV;
-#ifdef KHRONOS_SUPPORT_INT64
-typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void);
-typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void);
-EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void);
-#endif
-#endif /* KHRONOS_SUPPORT_INT64 */
-#endif /* EGL_NV_system_time */
-
-#ifndef EGL_NV_triple_buffer
-#define EGL_NV_triple_buffer 1
-#define EGL_TRIPLE_BUFFER_NV 0x3230
-#endif /* EGL_NV_triple_buffer */
-
-#ifndef EGL_TIZEN_image_native_buffer
-#define EGL_TIZEN_image_native_buffer 1
-#define EGL_NATIVE_BUFFER_TIZEN 0x32A0
-#endif /* EGL_TIZEN_image_native_buffer */
-
-#ifndef EGL_TIZEN_image_native_surface
-#define EGL_TIZEN_image_native_surface 1
-#define EGL_NATIVE_SURFACE_TIZEN 0x32A1
-#endif /* EGL_TIZEN_image_native_surface */
-
-#ifndef EGL_WL_bind_wayland_display
-#define EGL_WL_bind_wayland_display 1
-#define PFNEGLBINDWAYLANDDISPLAYWL PFNEGLBINDWAYLANDDISPLAYWLPROC
-#define PFNEGLUNBINDWAYLANDDISPLAYWL PFNEGLUNBINDWAYLANDDISPLAYWLPROC
-#define PFNEGLQUERYWAYLANDBUFFERWL PFNEGLQUERYWAYLANDBUFFERWLPROC
-struct wl_display;
-struct wl_resource;
-#define EGL_WAYLAND_BUFFER_WL 0x31D5
-#define EGL_WAYLAND_PLANE_WL 0x31D6
-#define EGL_TEXTURE_Y_U_V_WL 0x31D7
-#define EGL_TEXTURE_Y_UV_WL 0x31D8
-#define EGL_TEXTURE_Y_XUXV_WL 0x31D9
-#define EGL_TEXTURE_EXTERNAL_WL 0x31DA
-#define EGL_WAYLAND_Y_INVERTED_WL 0x31DB
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWLPROC) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display);
-EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
-#endif
-#endif /* EGL_WL_bind_wayland_display */
-
-#ifndef EGL_WL_create_wayland_buffer_from_image
-#define EGL_WL_create_wayland_buffer_from_image 1
-#define PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC
-struct wl_buffer;
-typedef struct wl_buffer *(EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC) (EGLDisplay dpy, EGLImageKHR image);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI struct wl_buffer *EGLAPIENTRY eglCreateWaylandBufferFromImageWL (EGLDisplay dpy, EGLImageKHR image);
-#endif
-#endif /* EGL_WL_create_wayland_buffer_from_image */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __eglext_h_ */
-
-#endif /* _MSC_VER */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_endian.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_endian.h
deleted file mode 100644
index b77580df..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_endian.h
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_endian.h
- *
- * \brief Functions for reading and writing endian-specific values
- */
-
-#ifndef SDL_endian_h_
-#define SDL_endian_h_
-
-#include
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version,
- so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */
-#ifdef __clang__
-#ifndef __PRFCHWINTRIN_H
-#define __PRFCHWINTRIN_H
-static __inline__ void __attribute__((__always_inline__, __nodebug__))
-_m_prefetch(void *__P)
-{
- __builtin_prefetch(__P, 0, 3 /* _MM_HINT_T0 */);
-}
-#endif /* __PRFCHWINTRIN_H */
-#endif /* __clang__ */
-
-#include
-#endif
-
-/**
- * \name The two types of endianness
- */
-/* @{ */
-#define SDL_LIL_ENDIAN 1234
-#define SDL_BIG_ENDIAN 4321
-/* @} */
-
-#ifndef SDL_BYTEORDER
-#ifdef __linux__
-#include
-#define SDL_BYTEORDER __BYTE_ORDER
-#elif defined(__OpenBSD__) || defined(__DragonFly__)
-#include
-#define SDL_BYTEORDER BYTE_ORDER
-#elif defined(__FreeBSD__) || defined(__NetBSD__)
-#include
-#define SDL_BYTEORDER BYTE_ORDER
-/* predefs from newer gcc and clang versions: */
-#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__)
-#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-#define SDL_BYTEORDER SDL_LIL_ENDIAN
-#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
-#define SDL_BYTEORDER SDL_BIG_ENDIAN
-#else
-#error Unsupported endianness
-#endif /**/
-#else
-#if defined(__hppa__) || \
- defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
- (defined(__MIPS__) && defined(__MIPSEB__)) || \
- defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \
- defined(__sparc__)
-#define SDL_BYTEORDER SDL_BIG_ENDIAN
-#else
-#define SDL_BYTEORDER SDL_LIL_ENDIAN
-#endif
-#endif /* __linux__ */
-#endif /* !SDL_BYTEORDER */
-
-#ifndef SDL_FLOATWORDORDER
-/* predefs from newer gcc versions: */
-#if defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__FLOAT_WORD_ORDER__)
-#if (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
-#elif (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
-#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
-#else
-#error Unsupported endianness
-#endif /**/
-#elif defined(__MAVERICK__)
-/* For Maverick, float words are always little-endian. */
-#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
-#elif (defined(__arm__) || defined(__thumb__)) && !defined(__VFP_FP__) && !defined(__ARM_EABI__)
-/* For FPA, float words are always big-endian. */
-#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
-#else
-/* By default, assume that floats words follow the memory system mode. */
-#define SDL_FLOATWORDORDER SDL_BYTEORDER
-#endif /* __FLOAT_WORD_ORDER__ */
-#endif /* !SDL_FLOATWORDORDER */
-
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file SDL_endian.h
- */
-
-/* various modern compilers may have builtin swap */
-#if defined(__GNUC__) || defined(__clang__)
-# define HAS_BUILTIN_BSWAP16 (SDL_HAS_BUILTIN(__builtin_bswap16)) || \
- (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))
-# define HAS_BUILTIN_BSWAP32 (SDL_HAS_BUILTIN(__builtin_bswap32)) || \
- (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
-# define HAS_BUILTIN_BSWAP64 (SDL_HAS_BUILTIN(__builtin_bswap64)) || \
- (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
-
- /* this one is broken */
-# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95)
-#else
-# define HAS_BUILTIN_BSWAP16 0
-# define HAS_BUILTIN_BSWAP32 0
-# define HAS_BUILTIN_BSWAP64 0
-# define HAS_BROKEN_BSWAP 0
-#endif
-
-/**
- * Byte swap 16-bit integer.
- */
-#if HAS_BUILTIN_BSWAP16
-#define SDL_Swap16(x) __builtin_bswap16(x)
-#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
-#pragma intrinsic(_byteswap_ushort)
-#define SDL_Swap16(x) _byteswap_ushort(x)
-#elif defined(__i386__) && !HAS_BROKEN_BSWAP
-SDL_FORCE_INLINE Uint16
-SDL_Swap16(Uint16 x)
-{
- __asm__("xchgb %b0,%h0": "=q"(x):"0"(x));
- return x;
-}
-#elif defined(__x86_64__)
-SDL_FORCE_INLINE Uint16
-SDL_Swap16(Uint16 x)
-{
- __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x));
- return x;
-}
-#elif (defined(__powerpc__) || defined(__ppc__))
-SDL_FORCE_INLINE Uint16
-SDL_Swap16(Uint16 x)
-{
- int result;
-
- __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x));
- return (Uint16)result;
-}
-#elif (defined(__m68k__) && !defined(__mcoldfire__))
-SDL_FORCE_INLINE Uint16
-SDL_Swap16(Uint16 x)
-{
- __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc");
- return x;
-}
-#elif defined(__WATCOMC__) && defined(__386__)
-extern __inline Uint16 SDL_Swap16(Uint16);
-#pragma aux SDL_Swap16 = \
- "xchg al, ah" \
- parm [ax] \
- modify [ax];
-#else
-SDL_FORCE_INLINE Uint16
-SDL_Swap16(Uint16 x)
-{
- return SDL_static_cast(Uint16, ((x << 8) | (x >> 8)));
-}
-#endif
-
-/**
- * Byte swap 32-bit integer.
- */
-#if HAS_BUILTIN_BSWAP32
-#define SDL_Swap32(x) __builtin_bswap32(x)
-#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
-#pragma intrinsic(_byteswap_ulong)
-#define SDL_Swap32(x) _byteswap_ulong(x)
-#elif defined(__i386__) && !HAS_BROKEN_BSWAP
-SDL_FORCE_INLINE Uint32
-SDL_Swap32(Uint32 x)
-{
- __asm__("bswap %0": "=r"(x):"0"(x));
- return x;
-}
-#elif defined(__x86_64__)
-SDL_FORCE_INLINE Uint32
-SDL_Swap32(Uint32 x)
-{
- __asm__("bswapl %0": "=r"(x):"0"(x));
- return x;
-}
-#elif (defined(__powerpc__) || defined(__ppc__))
-SDL_FORCE_INLINE Uint32
-SDL_Swap32(Uint32 x)
-{
- Uint32 result;
-
- __asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x));
- __asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x));
- __asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x));
- return result;
-}
-#elif (defined(__m68k__) && !defined(__mcoldfire__))
-SDL_FORCE_INLINE Uint32
-SDL_Swap32(Uint32 x)
-{
- __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc");
- return x;
-}
-#elif defined(__WATCOMC__) && defined(__386__)
-extern __inline Uint32 SDL_Swap32(Uint32);
-#pragma aux SDL_Swap32 = \
- "bswap eax" \
- parm [eax] \
- modify [eax];
-#else
-SDL_FORCE_INLINE Uint32
-SDL_Swap32(Uint32 x)
-{
- return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) |
- ((x >> 8) & 0x0000FF00) | (x >> 24)));
-}
-#endif
-
-/**
- * Byte swap 64-bit integer.
- */
-#if HAS_BUILTIN_BSWAP64
-#define SDL_Swap64(x) __builtin_bswap64(x)
-#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
-#pragma intrinsic(_byteswap_uint64)
-#define SDL_Swap64(x) _byteswap_uint64(x)
-#elif defined(__i386__) && !HAS_BROKEN_BSWAP
-SDL_FORCE_INLINE Uint64
-SDL_Swap64(Uint64 x)
-{
- union {
- struct {
- Uint32 a, b;
- } s;
- Uint64 u;
- } v;
- v.u = x;
- __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1"
- : "=r"(v.s.a), "=r"(v.s.b)
- : "0" (v.s.a), "1"(v.s.b));
- return v.u;
-}
-#elif defined(__x86_64__)
-SDL_FORCE_INLINE Uint64
-SDL_Swap64(Uint64 x)
-{
- __asm__("bswapq %0": "=r"(x):"0"(x));
- return x;
-}
-#elif defined(__WATCOMC__) && defined(__386__)
-extern __inline Uint64 SDL_Swap64(Uint64);
-#pragma aux SDL_Swap64 = \
- "bswap eax" \
- "bswap edx" \
- "xchg eax,edx" \
- parm [eax edx] \
- modify [eax edx];
-#else
-SDL_FORCE_INLINE Uint64
-SDL_Swap64(Uint64 x)
-{
- Uint32 hi, lo;
-
- /* Separate into high and low 32-bit values and swap them */
- lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
- x >>= 32;
- hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
- x = SDL_Swap32(lo);
- x <<= 32;
- x |= SDL_Swap32(hi);
- return (x);
-}
-#endif
-
-
-/**
- * Byte swap floating point number.
- */
-SDL_FORCE_INLINE float
-SDL_SwapFloat(float x)
-{
- union {
- float f;
- Uint32 ui32;
- } swapper;
- swapper.f = x;
- swapper.ui32 = SDL_Swap32(swapper.ui32);
- return swapper.f;
-}
-
-/* remove extra macros */
-#undef HAS_BROKEN_BSWAP
-#undef HAS_BUILTIN_BSWAP16
-#undef HAS_BUILTIN_BSWAP32
-#undef HAS_BUILTIN_BSWAP64
-
-/**
- * \name Swap to native
- * Byteswap item from the specified endianness to the native endianness.
- */
-
-/**
- * \def SDL_SwapLE16
- * Swap 16-bit little endian integer to 16-bit native endian integer.
- */
-
-/**
- * \def SDL_SwapLE32
- * Swap 32-bit little endian integer to 32-bit native endian integer.
- */
-
-/**
- * \def SDL_SwapLE64
- * Swap 64-bit little endian integer to 64-bit native endian integer.
- */
-
-/**
- * \def SDL_SwapFloatLE
- * Swap little endian float to native endian float.
- */
-/**
- * \def SDL_SwapBE16
- * Swap 16-bit big endian integer to 16-bit native endian integer.
- */
-
-/**
- * \def SDL_SwapBE32
- * Swap 32-bit big endian integer to 32-bit native endian integer.
- */
-
-/**
- * \def SDL_SwapBE64
- * Swap 64-bit big endian integer to 64-bit native endian integer.
- */
-
-/**
- * \def SDL_SwapFloatBE
- * Swap endian float to native endian float.
- */
-
-/* @{ */
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
-#define SDL_SwapLE16(X) (X)
-#define SDL_SwapLE32(X) (X)
-#define SDL_SwapLE64(X) (X)
-#define SDL_SwapFloatLE(X) (X)
-#define SDL_SwapBE16(X) SDL_Swap16(X)
-#define SDL_SwapBE32(X) SDL_Swap32(X)
-#define SDL_SwapBE64(X) SDL_Swap64(X)
-#define SDL_SwapFloatBE(X) SDL_SwapFloat(X)
-#else
-#define SDL_SwapLE16(X) SDL_Swap16(X)
-#define SDL_SwapLE32(X) SDL_Swap32(X)
-#define SDL_SwapLE64(X) SDL_Swap64(X)
-#define SDL_SwapFloatLE(X) SDL_SwapFloat(X)
-#define SDL_SwapBE16(X) (X)
-#define SDL_SwapBE32(X) (X)
-#define SDL_SwapBE64(X) (X)
-#define SDL_SwapFloatBE(X) (X)
-#endif
-/* @} *//* Swap to native */
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_endian_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_error.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_error.h
deleted file mode 100644
index 9440f427..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_error.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_error.h
- *
- * Simple error message routines for SDL.
- */
-
-#ifndef SDL_error_h_
-#define SDL_error_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Public functions */
-
-
-/**
- * Set the SDL error message for the current thread.
- *
- * Calling this function will replace any previous error message that was set.
- *
- * This function always returns -1, since SDL frequently uses -1 to signify an
- * failing result, leading to this idiom:
- *
- * ```c
- * if (error_code) {
- * return SDL_SetError("This operation has failed: %d", error_code);
- * }
- * ```
- *
- * \param fmt a printf()-style message format string
- * \param ... additional parameters matching % tokens in the `fmt` string, if
- * any
- * \returns always -1.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ClearError
- * \sa SDL_GetError
- */
-extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1);
-
-/**
- * Retrieve a message about the last error that occurred on the current
- * thread.
- *
- * It is possible for multiple errors to occur before calling SDL_GetError().
- * Only the last error is returned.
- *
- * The message is only applicable when an SDL function has signaled an error.
- * You must check the return values of SDL function calls to determine when to
- * appropriately call SDL_GetError(). You should *not* use the results of
- * SDL_GetError() to decide if an error has occurred! Sometimes SDL will set
- * an error string even when reporting success.
- *
- * SDL will *not* clear the error string for successful API calls. You *must*
- * check return values for failure cases before you can assume the error
- * string applies.
- *
- * Error strings are set per-thread, so an error set in a different thread
- * will not interfere with the current thread's operation.
- *
- * The returned string is internally allocated and must not be freed by the
- * application.
- *
- * \returns a message with information about the specific error that occurred,
- * or an empty string if there hasn't been an error message set since
- * the last call to SDL_ClearError(). The message is only applicable
- * when an SDL function has signaled an error. You must check the
- * return values of SDL function calls to determine when to
- * appropriately call SDL_GetError().
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ClearError
- * \sa SDL_SetError
- */
-extern DECLSPEC const char *SDLCALL SDL_GetError(void);
-
-/**
- * Get the last error message that was set for the current thread.
- *
- * This allows the caller to copy the error string into a provided buffer, but
- * otherwise operates exactly the same as SDL_GetError().
- *
- * \param errstr A buffer to fill with the last error message that was set for
- * the current thread
- * \param maxlen The size of the buffer pointed to by the errstr parameter
- * \returns the pointer passed in as the `errstr` parameter.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetError
- */
-extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen);
-
-/**
- * Clear any previous error message for this thread.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetError
- * \sa SDL_SetError
- */
-extern DECLSPEC void SDLCALL SDL_ClearError(void);
-
-/**
- * \name Internal error functions
- *
- * \internal
- * Private error reporting function - used internally.
- */
-/* @{ */
-#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM)
-#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED)
-#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param))
-typedef enum
-{
- SDL_ENOMEM,
- SDL_EFREAD,
- SDL_EFWRITE,
- SDL_EFSEEK,
- SDL_UNSUPPORTED,
- SDL_LASTERROR
-} SDL_errorcode;
-
-/**
- * SDL_Error()
- *
- * \param code Error code
- * \returns unconditionally -1.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code);
-/* @} *//* Internal error functions */
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_error_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_events.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_events.h
deleted file mode 100644
index cc3ee292..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_events.h
+++ /dev/null
@@ -1,1143 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_events.h
- *
- * Include file for SDL event handling.
- */
-
-#ifndef SDL_events_h_
-#define SDL_events_h_
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* General keyboard/mouse state definitions */
-#define SDL_RELEASED 0
-#define SDL_PRESSED 1
-
-/**
- * The types of events that can be delivered.
- */
-typedef enum
-{
- SDL_EVENT_FIRST = 0, /**< Unused (do not remove) */
-
- /* Application events */
- SDL_EVENT_QUIT = 0x100, /**< User-requested quit */
-
- /* These application events have special meaning on iOS, see README-ios.md for details */
- SDL_EVENT_TERMINATING, /**< The application is being terminated by the OS
- Called on iOS in applicationWillTerminate()
- Called on Android in onDestroy()
- */
- SDL_EVENT_LOW_MEMORY, /**< The application is low on memory, free memory if possible.
- Called on iOS in applicationDidReceiveMemoryWarning()
- Called on Android in onLowMemory()
- */
- SDL_EVENT_WILL_ENTER_BACKGROUND, /**< The application is about to enter the background
- Called on iOS in applicationWillResignActive()
- Called on Android in onPause()
- */
- SDL_EVENT_DID_ENTER_BACKGROUND, /**< The application did enter the background and may not get CPU for some time
- Called on iOS in applicationDidEnterBackground()
- Called on Android in onPause()
- */
- SDL_EVENT_WILL_ENTER_FOREGROUND, /**< The application is about to enter the foreground
- Called on iOS in applicationWillEnterForeground()
- Called on Android in onResume()
- */
- SDL_EVENT_DID_ENTER_FOREGROUND, /**< The application is now interactive
- Called on iOS in applicationDidBecomeActive()
- Called on Android in onResume()
- */
-
- SDL_EVENT_LOCALE_CHANGED, /**< The user's locale preferences have changed. */
-
- SDL_EVENT_SYSTEM_THEME_CHANGED, /**< The system theme changed */
-
- /* Display events */
- /* 0x150 was SDL_DISPLAYEVENT, reserve the number for sdl2-compat */
- SDL_EVENT_DISPLAY_ORIENTATION = 0x151, /**< Display orientation has changed to data1 */
- SDL_EVENT_DISPLAY_CONNECTED, /**< Display has been added to the system */
- SDL_EVENT_DISPLAY_DISCONNECTED, /**< Display has been removed from the system */
- SDL_EVENT_DISPLAY_MOVED, /**< Display has changed position */
- SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED, /**< Display has changed content scale */
- SDL_EVENT_DISPLAY_FIRST = SDL_EVENT_DISPLAY_ORIENTATION,
- SDL_EVENT_DISPLAY_LAST = SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED,
-
- /* Window events */
- /* 0x200 was SDL_WINDOWEVENT, reserve the number for sdl2-compat */
- SDL_EVENT_SYSWM = 0x201, /**< System specific event */
- SDL_EVENT_WINDOW_SHOWN, /**< Window has been shown */
- SDL_EVENT_WINDOW_HIDDEN, /**< Window has been hidden */
- SDL_EVENT_WINDOW_EXPOSED, /**< Window has been exposed and should be redrawn */
- SDL_EVENT_WINDOW_MOVED, /**< Window has been moved to data1, data2 */
- SDL_EVENT_WINDOW_RESIZED, /**< Window has been resized to data1xdata2 */
- SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED,/**< The pixel size of the window has changed to data1xdata2 */
- SDL_EVENT_WINDOW_MINIMIZED, /**< Window has been minimized */
- SDL_EVENT_WINDOW_MAXIMIZED, /**< Window has been maximized */
- SDL_EVENT_WINDOW_RESTORED, /**< Window has been restored to normal size and position */
- SDL_EVENT_WINDOW_MOUSE_ENTER, /**< Window has gained mouse focus */
- SDL_EVENT_WINDOW_MOUSE_LEAVE, /**< Window has lost mouse focus */
- SDL_EVENT_WINDOW_FOCUS_GAINED, /**< Window has gained keyboard focus */
- SDL_EVENT_WINDOW_FOCUS_LOST, /**< Window has lost keyboard focus */
- SDL_EVENT_WINDOW_CLOSE_REQUESTED, /**< The window manager requests that the window be closed */
- SDL_EVENT_WINDOW_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */
- SDL_EVENT_WINDOW_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL */
- SDL_EVENT_WINDOW_ICCPROF_CHANGED, /**< The ICC profile of the window's display has changed */
- SDL_EVENT_WINDOW_DISPLAY_CHANGED, /**< Window has been moved to display data1 */
- SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED, /**< Window display scale has been changed */
- SDL_EVENT_WINDOW_OCCLUDED, /**< The window has been occluded */
- SDL_EVENT_WINDOW_DESTROYED, /**< The window with the associated ID is being or has been destroyed. If this message is being handled
- in an event watcher, the window handle is still valid and can still be used to retrieve any userdata
- associated with the window. Otherwise, the handle has already been destroyed and all resources
- associated with it are invalid */
- SDL_EVENT_WINDOW_FIRST = SDL_EVENT_WINDOW_SHOWN,
- SDL_EVENT_WINDOW_LAST = SDL_EVENT_WINDOW_DESTROYED,
-
- /* Keyboard events */
- SDL_EVENT_KEY_DOWN = 0x300, /**< Key pressed */
- SDL_EVENT_KEY_UP, /**< Key released */
- SDL_EVENT_TEXT_EDITING, /**< Keyboard text editing (composition) */
- SDL_EVENT_TEXT_INPUT, /**< Keyboard text input */
- SDL_EVENT_KEYMAP_CHANGED, /**< Keymap changed due to a system event such as an
- input language or keyboard layout change. */
- SDL_EVENT_TEXT_EDITING_EXT, /**< Extended keyboard text editing (composition) */
-
- /* Mouse events */
- SDL_EVENT_MOUSE_MOTION = 0x400, /**< Mouse moved */
- SDL_EVENT_MOUSE_BUTTON_DOWN, /**< Mouse button pressed */
- SDL_EVENT_MOUSE_BUTTON_UP, /**< Mouse button released */
- SDL_EVENT_MOUSE_WHEEL, /**< Mouse wheel motion */
-
- /* Joystick events */
- SDL_EVENT_JOYSTICK_AXIS_MOTION = 0x600, /**< Joystick axis motion */
- SDL_EVENT_JOYSTICK_HAT_MOTION = 0x602, /**< Joystick hat position change */
- SDL_EVENT_JOYSTICK_BUTTON_DOWN, /**< Joystick button pressed */
- SDL_EVENT_JOYSTICK_BUTTON_UP, /**< Joystick button released */
- SDL_EVENT_JOYSTICK_ADDED, /**< A new joystick has been inserted into the system */
- SDL_EVENT_JOYSTICK_REMOVED, /**< An opened joystick has been removed */
- SDL_EVENT_JOYSTICK_BATTERY_UPDATED, /**< Joystick battery level change */
- SDL_EVENT_JOYSTICK_UPDATE_COMPLETE, /**< Joystick update is complete (disabled by default) */
-
- /* Gamepad events */
- SDL_EVENT_GAMEPAD_AXIS_MOTION = 0x650, /**< Gamepad axis motion */
- SDL_EVENT_GAMEPAD_BUTTON_DOWN, /**< Gamepad button pressed */
- SDL_EVENT_GAMEPAD_BUTTON_UP, /**< Gamepad button released */
- SDL_EVENT_GAMEPAD_ADDED, /**< A new gamepad has been inserted into the system */
- SDL_EVENT_GAMEPAD_REMOVED, /**< An opened gamepad has been removed */
- SDL_EVENT_GAMEPAD_REMAPPED, /**< The gamepad mapping was updated */
- SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN, /**< Gamepad touchpad was touched */
- SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION, /**< Gamepad touchpad finger was moved */
- SDL_EVENT_GAMEPAD_TOUCHPAD_UP, /**< Gamepad touchpad finger was lifted */
- SDL_EVENT_GAMEPAD_SENSOR_UPDATE, /**< Gamepad sensor was updated */
- SDL_EVENT_GAMEPAD_UPDATE_COMPLETE, /**< Gamepad update is complete (disabled by default) */
-
- /* Touch events */
- SDL_EVENT_FINGER_DOWN = 0x700,
- SDL_EVENT_FINGER_UP,
- SDL_EVENT_FINGER_MOTION,
-
- /* 0x800, 0x801, and 0x802 were the Gesture events from SDL2. Do not reuse these values! sdl2-compat needs them! */
-
- /* Clipboard events */
- SDL_EVENT_CLIPBOARD_UPDATE = 0x900, /**< The clipboard or primary selection changed */
-
- /* Drag and drop events */
- SDL_EVENT_DROP_FILE = 0x1000, /**< The system requests a file open */
- SDL_EVENT_DROP_TEXT, /**< text/plain drag-and-drop event */
- SDL_EVENT_DROP_BEGIN, /**< A new set of drops is beginning (NULL filename) */
- SDL_EVENT_DROP_COMPLETE, /**< Current set of drops is now complete (NULL filename) */
- SDL_EVENT_DROP_POSITION, /**< Position while moving over the window */
-
- /* Audio hotplug events */
- SDL_EVENT_AUDIO_DEVICE_ADDED = 0x1100, /**< A new audio device is available */
- SDL_EVENT_AUDIO_DEVICE_REMOVED, /**< An audio device has been removed. */
-
- /* Sensor events */
- SDL_EVENT_SENSOR_UPDATE = 0x1200, /**< A sensor was updated */
-
- /* Render events */
- SDL_EVENT_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */
- SDL_EVENT_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */
-
- /* Internal events */
- SDL_EVENT_POLL_SENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */
-
- /** Events ::SDL_EVENT_USER through ::SDL_EVENT_LAST are for your use,
- * and should be allocated with SDL_RegisterEvents()
- */
- SDL_EVENT_USER = 0x8000,
-
- /**
- * This last event is only for bounding internal arrays
- */
- SDL_EVENT_LAST = 0xFFFF
-} SDL_EventType;
-
-/**
- * \brief Fields shared by every event
- */
-typedef struct SDL_CommonEvent
-{
- Uint32 type;
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
-} SDL_CommonEvent;
-
-/**
- * \brief Display state change event data (event.display.*)
- */
-typedef struct SDL_DisplayEvent
-{
- Uint32 type; /**< ::SDL_DISPLAYEVENT_* */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_DisplayID displayID;/**< The associated display */
- Sint32 data1; /**< event dependent data */
-} SDL_DisplayEvent;
-
-/**
- * \brief Window state change event data (event.window.*)
- */
-typedef struct SDL_WindowEvent
-{
- Uint32 type; /**< ::SDL_WINDOWEVENT_* */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID;/**< The associated window */
- Sint32 data1; /**< event dependent data */
- Sint32 data2; /**< event dependent data */
-} SDL_WindowEvent;
-
-/**
- * \brief Keyboard button event structure (event.key.*)
- */
-typedef struct SDL_KeyboardEvent
-{
- Uint32 type; /**< ::SDL_EVENT_KEY_DOWN or ::SDL_EVENT_KEY_UP */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID;/**< The window with keyboard focus, if any */
- Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
- Uint8 repeat; /**< Non-zero if this is a key repeat */
- Uint8 padding2;
- Uint8 padding3;
- SDL_Keysym keysym; /**< The key that was pressed or released */
-} SDL_KeyboardEvent;
-
-#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32)
-/**
- * \brief Keyboard text editing event structure (event.edit.*)
- */
-typedef struct SDL_TextEditingEvent
-{
- Uint32 type; /**< ::SDL_EVENT_TEXT_EDITING */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID; /**< The window with keyboard focus, if any */
- char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */
- Sint32 start; /**< The start cursor of selected editing text */
- Sint32 length; /**< The length of selected editing text */
-} SDL_TextEditingEvent;
-
-/**
- * \brief Extended keyboard text editing event structure (event.editExt.*) when text would be
- * truncated if stored in the text buffer SDL_TextEditingEvent
- */
-typedef struct SDL_TextEditingExtEvent
-{
- Uint32 type; /**< ::SDL_EVENT_TEXT_EDITING_EXT */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID; /**< The window with keyboard focus, if any */
- char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */
- Sint32 start; /**< The start cursor of selected editing text */
- Sint32 length; /**< The length of selected editing text */
-} SDL_TextEditingExtEvent;
-
-#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32)
-/**
- * \brief Keyboard text input event structure (event.text.*)
- */
-typedef struct SDL_TextInputEvent
-{
- Uint32 type; /**< ::SDL_EVENT_TEXT_INPUT */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID; /**< The window with keyboard focus, if any */
- char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */
-} SDL_TextInputEvent;
-
-/**
- * \brief Mouse motion event structure (event.motion.*)
- */
-typedef struct SDL_MouseMotionEvent
-{
- Uint32 type; /**< ::SDL_EVENT_MOUSE_MOTION */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID;/**< The window with mouse focus, if any */
- SDL_MouseID which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
- Uint32 state; /**< The current button state */
- float x; /**< X coordinate, relative to window */
- float y; /**< Y coordinate, relative to window */
- float xrel; /**< The relative motion in the X direction */
- float yrel; /**< The relative motion in the Y direction */
-} SDL_MouseMotionEvent;
-
-/**
- * \brief Mouse button event structure (event.button.*)
- */
-typedef struct SDL_MouseButtonEvent
-{
- Uint32 type; /**< ::SDL_EVENT_MOUSE_BUTTON_DOWN or ::SDL_EVENT_MOUSE_BUTTON_UP */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID;/**< The window with mouse focus, if any */
- SDL_MouseID which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
- Uint8 button; /**< The mouse button index */
- Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
- Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */
- Uint8 padding;
- float x; /**< X coordinate, relative to window */
- float y; /**< Y coordinate, relative to window */
-} SDL_MouseButtonEvent;
-
-/**
- * \brief Mouse wheel event structure (event.wheel.*)
- */
-typedef struct SDL_MouseWheelEvent
-{
- Uint32 type; /**< ::SDL_EVENT_MOUSE_WHEEL */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID;/**< The window with mouse focus, if any */
- SDL_MouseID which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
- float x; /**< The amount scrolled horizontally, positive to the right and negative to the left */
- float y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */
- Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */
- float mouseX; /**< X coordinate, relative to window */
- float mouseY; /**< Y coordinate, relative to window */
-} SDL_MouseWheelEvent;
-
-/**
- * \brief Joystick axis motion event structure (event.jaxis.*)
- */
-typedef struct SDL_JoyAxisEvent
-{
- Uint32 type; /**< ::SDL_EVENT_JOYSTICK_AXIS_MOTION */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- Uint8 axis; /**< The joystick axis index */
- Uint8 padding1;
- Uint8 padding2;
- Uint8 padding3;
- Sint16 value; /**< The axis value (range: -32768 to 32767) */
- Uint16 padding4;
-} SDL_JoyAxisEvent;
-
-/**
- * \brief Joystick hat position change event structure (event.jhat.*)
- */
-typedef struct SDL_JoyHatEvent
-{
- Uint32 type; /**< ::SDL_EVENT_JOYSTICK_HAT_MOTION */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- Uint8 hat; /**< The joystick hat index */
- Uint8 value; /**< The hat position value.
- * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP
- * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT
- * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN
- *
- * Note that zero means the POV is centered.
- */
- Uint8 padding1;
- Uint8 padding2;
-} SDL_JoyHatEvent;
-
-/**
- * \brief Joystick button event structure (event.jbutton.*)
- */
-typedef struct SDL_JoyButtonEvent
-{
- Uint32 type; /**< ::SDL_EVENT_JOYSTICK_BUTTON_DOWN or ::SDL_EVENT_JOYSTICK_BUTTON_UP */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- Uint8 button; /**< The joystick button index */
- Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
- Uint8 padding1;
- Uint8 padding2;
-} SDL_JoyButtonEvent;
-
-/**
- * \brief Joystick device event structure (event.jdevice.*)
- */
-typedef struct SDL_JoyDeviceEvent
-{
- Uint32 type; /**< ::SDL_EVENT_JOYSTICK_ADDED or ::SDL_EVENT_JOYSTICK_REMOVED or ::SDL_EVENT_JOYSTICK_UPDATE_COMPLETE */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
-} SDL_JoyDeviceEvent;
-
-/**
- * \brief Joysick battery level change event structure (event.jbattery.*)
- */
-typedef struct SDL_JoyBatteryEvent
-{
- Uint32 type; /**< ::SDL_EVENT_JOYSTICK_BATTERY_UPDATED */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- SDL_JoystickPowerLevel level; /**< The joystick battery level */
-} SDL_JoyBatteryEvent;
-
-/**
- * \brief Gamepad axis motion event structure (event.gaxis.*)
- */
-typedef struct SDL_GamepadAxisEvent
-{
- Uint32 type; /**< ::SDL_EVENT_GAMEPAD_AXIS_MOTION */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- Uint8 axis; /**< The gamepad axis (SDL_GamepadAxis) */
- Uint8 padding1;
- Uint8 padding2;
- Uint8 padding3;
- Sint16 value; /**< The axis value (range: -32768 to 32767) */
- Uint16 padding4;
-} SDL_GamepadAxisEvent;
-
-
-/**
- * \brief Gamepad button event structure (event.gbutton.*)
- */
-typedef struct SDL_GamepadButtonEvent
-{
- Uint32 type; /**< ::SDL_EVENT_GAMEPAD_BUTTON_DOWN or ::SDL_EVENT_GAMEPAD_BUTTON_UP */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- Uint8 button; /**< The gamepad button (SDL_GamepadButton) */
- Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
- Uint8 padding1;
- Uint8 padding2;
-} SDL_GamepadButtonEvent;
-
-
-/**
- * \brief Gamepad device event structure (event.gdevice.*)
- */
-typedef struct SDL_GamepadDeviceEvent
-{
- Uint32 type; /**< ::SDL_EVENT_GAMEPAD_ADDED, ::SDL_EVENT_GAMEPAD_REMOVED, or ::SDL_EVENT_GAMEPAD_REMAPPED or ::SDL_EVENT_GAMEPAD_UPDATE_COMPLETE */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
-} SDL_GamepadDeviceEvent;
-
-/**
- * \brief Gamepad touchpad event structure (event.gtouchpad.*)
- */
-typedef struct SDL_GamepadTouchpadEvent
-{
- Uint32 type; /**< ::SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN or ::SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION or ::SDL_EVENT_GAMEPAD_TOUCHPAD_UP */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- Sint32 touchpad; /**< The index of the touchpad */
- Sint32 finger; /**< The index of the finger on the touchpad */
- float x; /**< Normalized in the range 0...1 with 0 being on the left */
- float y; /**< Normalized in the range 0...1 with 0 being at the top */
- float pressure; /**< Normalized in the range 0...1 */
-} SDL_GamepadTouchpadEvent;
-
-/**
- * \brief Gamepad sensor event structure (event.gsensor.*)
- */
-typedef struct SDL_GamepadSensorEvent
-{
- Uint32 type; /**< ::SDL_EVENT_GAMEPAD_SENSOR_UPDATE */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_JoystickID which; /**< The joystick instance id */
- Sint32 sensor; /**< The type of the sensor, one of the values of ::SDL_SensorType */
- float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */
- Uint64 sensor_timestamp; /**< The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock */
-} SDL_GamepadSensorEvent;
-
-/**
- * \brief Audio device event structure (event.adevice.*)
- */
-typedef struct SDL_AudioDeviceEvent
-{
- Uint32 type; /**< ::SDL_EVENT_AUDIO_DEVICE_ADDED, or ::SDL_EVENT_AUDIO_DEVICE_REMOVED */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_AudioDeviceID which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */
- Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */
- Uint8 padding1;
- Uint8 padding2;
- Uint8 padding3;
-} SDL_AudioDeviceEvent;
-
-
-/**
- * \brief Touch finger event structure (event.tfinger.*)
- */
-typedef struct SDL_TouchFingerEvent
-{
- Uint32 type; /**< ::SDL_EVENT_FINGER_MOTION or ::SDL_EVENT_FINGER_DOWN or ::SDL_EVENT_FINGER_UP */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_TouchID touchId; /**< The touch device id */
- SDL_FingerID fingerId;
- float x; /**< Normalized in the range 0...1 */
- float y; /**< Normalized in the range 0...1 */
- float dx; /**< Normalized in the range -1...1 */
- float dy; /**< Normalized in the range -1...1 */
- float pressure; /**< Normalized in the range 0...1 */
- SDL_WindowID windowID;/**< The window underneath the finger, if any */
-} SDL_TouchFingerEvent;
-
-
-/**
- * \brief An event used to request a file open by the system (event.drop.*)
- * This event is enabled by default, you can disable it with SDL_SetEventEnabled().
- * \note If this event is enabled, you must free the filename in the event.
- */
-typedef struct SDL_DropEvent
-{
- Uint32 type; /**< ::SDL_EVENT_DROP_BEGIN or ::SDL_EVENT_DROP_FILE or ::SDL_EVENT_DROP_TEXT or ::SDL_EVENT_DROP_COMPLETE or ::SDL_EVENT_DROP_POSITION */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */
- SDL_WindowID windowID; /**< The window that was dropped on, if any */
- float x; /**< X coordinate, relative to window (not on begin) */
- float y; /**< Y coordinate, relative to window (not on begin) */
-} SDL_DropEvent;
-
-/**
- * \brief An event triggered when the clipboard contents have changed (event.clipboard.*)
- */
-typedef struct SDL_ClipboardEvent
-{
- Uint32 type; /**< ::SDL_EVENT_CLIPBOARD_UPDATE */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
-} SDL_ClipboardEvent;
-
-/**
- * \brief Sensor event structure (event.sensor.*)
- */
-typedef struct SDL_SensorEvent
-{
- Uint32 type; /**< ::SDL_EVENT_SENSOR_UPDATE */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_SensorID which; /**< The instance ID of the sensor */
- float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_GetSensorData() */
- Uint64 sensor_timestamp; /**< The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock */
-} SDL_SensorEvent;
-
-/**
- * \brief The "quit requested" event
- */
-typedef struct SDL_QuitEvent
-{
- Uint32 type; /**< ::SDL_EVENT_QUIT */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
-} SDL_QuitEvent;
-
-/**
- * \brief OS Specific event
- */
-typedef struct SDL_OSEvent
-{
- Uint32 type; /**< ::SDL_EVENT_QUIT */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
-} SDL_OSEvent;
-
-/**
- * \brief A user-defined event type (event.user.*)
- */
-typedef struct SDL_UserEvent
-{
- Uint32 type; /**< ::SDL_EVENT_USER through ::SDL_EVENT_LAST-1 */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_WindowID windowID;/**< The associated window if any */
- Sint32 code; /**< User defined event code */
- void *data1; /**< User defined data pointer */
- void *data2; /**< User defined data pointer */
-} SDL_UserEvent;
-
-
-struct SDL_SysWMmsg;
-typedef struct SDL_SysWMmsg SDL_SysWMmsg;
-
-/**
- * \brief A video driver dependent system event (event.syswm.*)
- * This event is disabled by default, you can enable it with SDL_SetEventEnabled()
- *
- * \note If you want to use this event, you should include SDL_syswm.h.
- */
-typedef struct SDL_SysWMEvent
-{
- Uint32 type; /**< ::SDL_EVENT_SYSWM */
- Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */
- SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */
-} SDL_SysWMEvent;
-
-/**
- * \brief General event structure
- */
-typedef union SDL_Event
-{
- Uint32 type; /**< Event type, shared with all events */
- SDL_CommonEvent common; /**< Common event data */
- SDL_DisplayEvent display; /**< Display event data */
- SDL_WindowEvent window; /**< Window event data */
- SDL_KeyboardEvent key; /**< Keyboard event data */
- SDL_TextEditingEvent edit; /**< Text editing event data */
- SDL_TextEditingExtEvent editExt; /**< Extended text editing event data */
- SDL_TextInputEvent text; /**< Text input event data */
- SDL_MouseMotionEvent motion; /**< Mouse motion event data */
- SDL_MouseButtonEvent button; /**< Mouse button event data */
- SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */
- SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */
- SDL_JoyHatEvent jhat; /**< Joystick hat event data */
- SDL_JoyButtonEvent jbutton; /**< Joystick button event data */
- SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */
- SDL_JoyBatteryEvent jbattery; /**< Joystick battery event data */
- SDL_GamepadAxisEvent gaxis; /**< Gamepad axis event data */
- SDL_GamepadButtonEvent gbutton; /**< Gamepad button event data */
- SDL_GamepadDeviceEvent gdevice; /**< Gamepad device event data */
- SDL_GamepadTouchpadEvent gtouchpad; /**< Gamepad touchpad event data */
- SDL_GamepadSensorEvent gsensor; /**< Gamepad sensor event data */
- SDL_AudioDeviceEvent adevice; /**< Audio device event data */
- SDL_SensorEvent sensor; /**< Sensor event data */
- SDL_QuitEvent quit; /**< Quit request event data */
- SDL_UserEvent user; /**< Custom event data */
- SDL_SysWMEvent syswm; /**< System dependent window event data */
- SDL_TouchFingerEvent tfinger; /**< Touch finger event data */
- SDL_DropEvent drop; /**< Drag and drop event data */
- SDL_ClipboardEvent clipboard; /**< Clipboard cancelled event data */
-
- /* This is necessary for ABI compatibility between Visual C++ and GCC.
- Visual C++ will respect the push pack pragma and use 52 bytes (size of
- SDL_TextEditingEvent, the largest structure for 32-bit and 64-bit
- architectures) for this union, and GCC will use the alignment of the
- largest datatype within the union, which is 8 bytes on 64-bit
- architectures.
-
- So... we'll add padding to force the size to be 56 bytes for both.
-
- On architectures where pointers are 16 bytes, this needs rounding up to
- the next multiple of 16, 64, and on architectures where pointers are
- even larger the size of SDL_UserEvent will dominate as being 3 pointers.
- */
- Uint8 padding[128];
-} SDL_Event;
-
-/* Make sure we haven't broken binary compatibility */
-SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding));
-
-
-/* Function prototypes */
-
-/**
- * Pump the event loop, gathering events from the input devices.
- *
- * This function updates the event queue and internal input device state.
- *
- * **WARNING**: This should only be run in the thread that initialized the
- * video subsystem, and for extra safety, you should consider only doing those
- * things on the main thread in any case.
- *
- * SDL_PumpEvents() gathers all the pending input information from devices and
- * places it in the event queue. Without calls to SDL_PumpEvents() no events
- * would ever be placed on the queue. Often the need for calls to
- * SDL_PumpEvents() is hidden from the user since SDL_PollEvent() and
- * SDL_WaitEvent() implicitly call SDL_PumpEvents(). However, if you are not
- * polling or waiting for events (e.g. you are filtering them), then you must
- * call SDL_PumpEvents() to force an event queue update.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PollEvent
- * \sa SDL_WaitEvent
- */
-extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
-
-/* @{ */
-typedef enum
-{
- SDL_ADDEVENT,
- SDL_PEEKEVENT,
- SDL_GETEVENT
-} SDL_eventaction;
-
-/**
- * Check the event queue for messages and optionally return them.
- *
- * `action` may be any of the following:
- *
- * - `SDL_ADDEVENT`: up to `numevents` events will be added to the back of the
- * event queue.
- * - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue,
- * within the specified minimum and maximum type, will be returned to the
- * caller and will _not_ be removed from the queue.
- * - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue,
- * within the specified minimum and maximum type, will be returned to the
- * caller and will be removed from the queue.
- *
- * You may have to call SDL_PumpEvents() before calling this function.
- * Otherwise, the events may not be ready to be filtered when you call
- * SDL_PeepEvents().
- *
- * This function is thread-safe.
- *
- * \param events destination buffer for the retrieved events
- * \param numevents if action is SDL_ADDEVENT, the number of events to add
- * back to the event queue; if action is SDL_PEEKEVENT or
- * SDL_GETEVENT, the maximum number of events to retrieve
- * \param action action to take; see [[#action|Remarks]] for details
- * \param minType minimum value of the event type to be considered;
- * SDL_EVENT_FIRST is a safe choice
- * \param maxType maximum value of the event type to be considered;
- * SDL_EVENT_LAST is a safe choice
- * \returns the number of events actually stored or a negative error code on
- * failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PollEvent
- * \sa SDL_PumpEvents
- * \sa SDL_PushEvent
- */
-extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents,
- SDL_eventaction action,
- Uint32 minType, Uint32 maxType);
-/* @} */
-
-/**
- * Check for the existence of a certain event type in the event queue.
- *
- * If you need to check for a range of event types, use SDL_HasEvents()
- * instead.
- *
- * \param type the type of event to be queried; see SDL_EventType for details
- * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if
- * events matching `type` are not present.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasEvents
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type);
-
-
-/**
- * Check for the existence of certain event types in the event queue.
- *
- * If you need to check for a single event type, use SDL_HasEvent() instead.
- *
- * \param minType the low end of event type to be queried, inclusive; see
- * SDL_EventType for details
- * \param maxType the high end of event type to be queried, inclusive; see
- * SDL_EventType for details
- * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are
- * present, or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasEvents
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType);
-
-/**
- * Clear events of a specific type from the event queue.
- *
- * This will unconditionally remove any events from the queue that match
- * `type`. If you need to remove a range of event types, use SDL_FlushEvents()
- * instead.
- *
- * It's also normal to just ignore events you don't care about in your event
- * loop without calling this function.
- *
- * This function only affects currently queued events. If you want to make
- * sure that all pending OS events are flushed, you can call SDL_PumpEvents()
- * on the main thread immediately before the flush call.
- *
- * \param type the type of event to be cleared; see SDL_EventType for details
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_FlushEvents
- */
-extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type);
-
-/**
- * Clear events of a range of types from the event queue.
- *
- * This will unconditionally remove any events from the queue that are in the
- * range of `minType` to `maxType`, inclusive. If you need to remove a single
- * event type, use SDL_FlushEvent() instead.
- *
- * It's also normal to just ignore events you don't care about in your event
- * loop without calling this function.
- *
- * This function only affects currently queued events. If you want to make
- * sure that all pending OS events are flushed, you can call SDL_PumpEvents()
- * on the main thread immediately before the flush call.
- *
- * \param minType the low end of event type to be cleared, inclusive; see
- * SDL_EventType for details
- * \param maxType the high end of event type to be cleared, inclusive; see
- * SDL_EventType for details
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_FlushEvent
- */
-extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType);
-
-/**
- * Poll for currently pending events.
- *
- * If `event` is not NULL, the next event is removed from the queue and stored
- * in the SDL_Event structure pointed to by `event`. The 1 returned refers to
- * this event, immediately stored in the SDL Event structure -- not an event
- * to follow.
- *
- * If `event` is NULL, it simply returns 1 if there is an event in the queue,
- * but will not remove it from the queue.
- *
- * As this function may implicitly call SDL_PumpEvents(), you can only call
- * this function in the thread that set the video mode.
- *
- * SDL_PollEvent() is the favored way of receiving system events since it can
- * be done from the main loop and does not suspend the main loop while waiting
- * on an event to be posted.
- *
- * The common practice is to fully process the event queue once every frame,
- * usually as a first step before updating the game's state:
- *
- * ```c
- * while (game_is_still_running) {
- * SDL_Event event;
- * while (SDL_PollEvent(&event)) { // poll until all events are handled!
- * // decide what to do with this event.
- * }
- *
- * // update game state, draw the current frame
- * }
- * ```
- *
- * \param event the SDL_Event structure to be filled with the next event from
- * the queue, or NULL
- * \returns 1 if there is a pending event or 0 if there are none available.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetEventFilter
- * \sa SDL_PeepEvents
- * \sa SDL_PushEvent
- * \sa SDL_SetEventFilter
- * \sa SDL_WaitEvent
- * \sa SDL_WaitEventTimeout
- */
-extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event);
-
-/**
- * Wait indefinitely for the next available event.
- *
- * If `event` is not NULL, the next event is removed from the queue and stored
- * in the SDL_Event structure pointed to by `event`.
- *
- * As this function may implicitly call SDL_PumpEvents(), you can only call
- * this function in the thread that initialized the video subsystem.
- *
- * \param event the SDL_Event structure to be filled in with the next event
- * from the queue, or NULL
- * \returns 1 on success or 0 if there was an error while waiting for events;
- * call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PollEvent
- * \sa SDL_PumpEvents
- * \sa SDL_WaitEventTimeout
- */
-extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event);
-
-/**
- * Wait until the specified timeout (in milliseconds) for the next available
- * event.
- *
- * If `event` is not NULL, the next event is removed from the queue and stored
- * in the SDL_Event structure pointed to by `event`.
- *
- * As this function may implicitly call SDL_PumpEvents(), you can only call
- * this function in the thread that initialized the video subsystem.
- *
- * The timeout is not guaranteed, the actual wait time could be longer due to
- * system scheduling.
- *
- * \param event the SDL_Event structure to be filled in with the next event
- * from the queue, or NULL
- * \param timeoutMS the maximum number of milliseconds to wait for the next
- * available event
- * \returns 1 on success or 0 if there was an error while waiting for events;
- * call SDL_GetError() for more information. This also returns 0 if
- * the timeout elapsed without an event arriving.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PollEvent
- * \sa SDL_PumpEvents
- * \sa SDL_WaitEvent
- */
-extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event *event, Sint32 timeoutMS);
-
-/**
- * Add an event to the event queue.
- *
- * The event queue can actually be used as a two way communication channel.
- * Not only can events be read from the queue, but the user can also push
- * their own events onto it. `event` is a pointer to the event structure you
- * wish to push onto the queue. The event is copied into the queue, and the
- * caller may dispose of the memory pointed to after SDL_PushEvent() returns.
- *
- * Note: Pushing device input events onto the queue doesn't modify the state
- * of the device within SDL.
- *
- * This function is thread-safe, and can be called from other threads safely.
- *
- * Note: Events pushed onto the queue with SDL_PushEvent() get passed through
- * the event filter but events added with SDL_PeepEvents() do not.
- *
- * For pushing application-specific events, please use SDL_RegisterEvents() to
- * get an event type that does not conflict with other code that also wants
- * its own custom event types.
- *
- * \param event the SDL_Event to be added to the queue
- * \returns 1 on success, 0 if the event was filtered, or a negative error
- * code on failure; call SDL_GetError() for more information. A
- * common reason for error is the event queue being full.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PeepEvents
- * \sa SDL_PollEvent
- * \sa SDL_RegisterEvents
- */
-extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event);
-
-/**
- * A function pointer used for callbacks that watch the event queue.
- *
- * \param userdata what was passed as `userdata` to SDL_SetEventFilter()
- * or SDL_AddEventWatch, etc
- * \param event the event that triggered the callback
- * \returns 1 to permit event to be added to the queue, and 0 to disallow
- * it. When used with SDL_AddEventWatch, the return value is ignored.
- *
- * \sa SDL_SetEventFilter
- * \sa SDL_AddEventWatch
- */
-typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event);
-
-/**
- * Set up a filter to process all events before they change internal state and
- * are posted to the internal event queue.
- *
- * If the filter function returns 1 when called, then the event will be added
- * to the internal queue. If it returns 0, then the event will be dropped from
- * the queue, but the internal state will still be updated. This allows
- * selective filtering of dynamically arriving events.
- *
- * **WARNING**: Be very careful of what you do in the event filter function,
- * as it may run in a different thread!
- *
- * On platforms that support it, if the quit event is generated by an
- * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the
- * application at the next event poll.
- *
- * There is one caveat when dealing with the ::SDL_QuitEvent event type. The
- * event filter is only called when the window manager desires to close the
- * application window. If the event filter returns 1, then the window will be
- * closed, otherwise the window will remain open if possible.
- *
- * Note: Disabled events never make it to the event filter function; see
- * SDL_SetEventEnabled().
- *
- * Note: If you just want to inspect events without filtering, you should use
- * SDL_AddEventWatch() instead.
- *
- * Note: Events pushed onto the queue with SDL_PushEvent() get passed through
- * the event filter, but events pushed onto the queue with SDL_PeepEvents() do
- * not.
- *
- * \param filter An SDL_EventFilter function to call when an event happens
- * \param userdata a pointer that is passed to `filter`
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AddEventWatch
- * \sa SDL_SetEventEnabled
- * \sa SDL_GetEventFilter
- * \sa SDL_PeepEvents
- * \sa SDL_PushEvent
- */
-extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter,
- void *userdata);
-
-/**
- * Query the current event filter.
- *
- * This function can be used to "chain" filters, by saving the existing filter
- * before replacing it with a function that will call that saved filter.
- *
- * \param filter the current callback function will be stored here
- * \param userdata the pointer that is passed to the current event filter will
- * be stored here
- * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetEventFilter
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter,
- void **userdata);
-
-/**
- * Add a callback to be triggered when an event is added to the event queue.
- *
- * `filter` will be called when an event happens, and its return value is
- * ignored.
- *
- * **WARNING**: Be very careful of what you do in the event filter function,
- * as it may run in a different thread!
- *
- * If the quit event is generated by a signal (e.g. SIGINT), it will bypass
- * the internal queue and be delivered to the watch callback immediately, and
- * arrive at the next event poll.
- *
- * Note: the callback is called for events posted by the user through
- * SDL_PushEvent(), but not for disabled events, nor for events by a filter
- * callback set with SDL_SetEventFilter(), nor for events posted by the user
- * through SDL_PeepEvents().
- *
- * \param filter an SDL_EventFilter function to call when an event happens.
- * \param userdata a pointer that is passed to `filter`
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_DelEventWatch
- * \sa SDL_SetEventFilter
- */
-extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter,
- void *userdata);
-
-/**
- * Remove an event watch callback added with SDL_AddEventWatch().
- *
- * This function takes the same input as SDL_AddEventWatch() to identify and
- * delete the corresponding callback.
- *
- * \param filter the function originally passed to SDL_AddEventWatch()
- * \param userdata the pointer originally passed to SDL_AddEventWatch()
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AddEventWatch
- */
-extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter,
- void *userdata);
-
-/**
- * Run a specific filter function on the current event queue, removing any
- * events for which the filter returns 0.
- *
- * See SDL_SetEventFilter() for more information. Unlike SDL_SetEventFilter(),
- * this function does not change the filter permanently, it only uses the
- * supplied filter until this function returns.
- *
- * \param filter the SDL_EventFilter function to call when an event happens
- * \param userdata a pointer that is passed to `filter`
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetEventFilter
- * \sa SDL_SetEventFilter
- */
-extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter,
- void *userdata);
-
-/**
- * Set the state of processing events by type.
- *
- * \param type the type of event; see SDL_EventType for details
- * \param enabled whether to process the event or not
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_IsEventEnabled
- */
-extern DECLSPEC void SDLCALL SDL_SetEventEnabled(Uint32 type, SDL_bool enabled);
-
-/**
- * Query the state of processing events by type.
- *
- * \param type the type of event; see SDL_EventType for details
- * \returns SDL_TRUE if the event is being processed, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetEventEnabled
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_EventEnabled(Uint32 type);
-
-/**
- * Allocate a set of user-defined events, and return the beginning event
- * number for that set of events.
- *
- * Calling this function with `numevents` <= 0 is an error and will return
- * (Uint32)-1.
- *
- * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or
- * 0xFFFFFFFF), but is clearer to write.
- *
- * \param numevents the number of events to be allocated
- * \returns the beginning event number, or (Uint32)-1 if there are not enough
- * user-defined events left.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PushEvent
- */
-extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_events_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_filesystem.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_filesystem.h
deleted file mode 100644
index a672365c..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_filesystem.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_filesystem.h
- *
- * \brief Include file for filesystem SDL API functions
- */
-
-#ifndef SDL_filesystem_h_
-#define SDL_filesystem_h_
-
-#include
-
-#include
-
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Get the directory where the application was run from.
- *
- * This is not necessarily a fast call, so you should call this once near
- * startup and save the string if you need it.
- *
- * **macOS and iOS Specific Functionality**: If the application is in a ".app"
- * bundle, this function returns the Resource directory (e.g.
- * MyApp.app/Contents/Resources/). This behaviour can be overridden by adding
- * a property to the Info.plist file. Adding a string key with the name
- * SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the
- * behaviour.
- *
- * Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an
- * application in /Applications/SDLApp/MyApp.app):
- *
- * - `resource`: bundle resource directory (the default). For example:
- * `/Applications/SDLApp/MyApp.app/Contents/Resources`
- * - `bundle`: the Bundle directory. For example:
- * `/Applications/SDLApp/MyApp.app/`
- * - `parent`: the containing directory of the bundle. For example:
- * `/Applications/SDLApp/`
- *
- * **Nintendo 3DS Specific Functionality**: This function returns "romfs"
- * directory of the application as it is uncommon to store resources outside
- * the executable. As such it is not a writable directory.
- *
- * The returned path is guaranteed to end with a path separator ('\' on
- * Windows, '/' on most other platforms).
- *
- * The pointer returned is owned by the caller. Please call SDL_free() on the
- * pointer when done with it.
- *
- * \returns an absolute path in UTF-8 encoding to the application data
- * directory. NULL will be returned on error or when the platform
- * doesn't implement this functionality, call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetPrefPath
- */
-extern DECLSPEC char *SDLCALL SDL_GetBasePath(void);
-
-/**
- * Get the user-and-app-specific path where files can be written.
- *
- * Get the "pref dir". This is meant to be where users can write personal
- * files (preferences and save games, etc) that are specific to your
- * application. This directory is unique per user, per application.
- *
- * This function will decide the appropriate location in the native
- * filesystem, create the directory if necessary, and return a string of the
- * absolute path to the directory in UTF-8 encoding.
- *
- * On Windows, the string might look like:
- *
- * `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\`
- *
- * On Linux, the string might look like:
- *
- * `/home/bob/.local/share/My Program Name/`
- *
- * On macOS, the string might look like:
- *
- * `/Users/bob/Library/Application Support/My Program Name/`
- *
- * You should assume the path returned by this function is the only safe place
- * to write files (and that SDL_GetBasePath(), while it might be writable, or
- * even the parent of the returned path, isn't where you should be writing
- * things).
- *
- * Both the org and app strings may become part of a directory name, so please
- * follow these rules:
- *
- * - Try to use the same org string (_including case-sensitivity_) for all
- * your applications that use this function.
- * - Always use a unique app string for each one, and make sure it never
- * changes for an app once you've decided on it.
- * - Unicode characters are legal, as long as it's UTF-8 encoded, but...
- * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game
- * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient.
- *
- * The returned path is guaranteed to end with a path separator ('\' on
- * Windows, '/' on most other platforms).
- *
- * The pointer returned is owned by the caller. Please call SDL_free() on the
- * pointer when done with it.
- *
- * \param org the name of your organization
- * \param app the name of your application
- * \returns a UTF-8 string of the user directory in platform-dependent
- * notation. NULL if there's a problem (creating directory failed,
- * etc.).
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetBasePath
- */
-extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app);
-
-/**
- * The type of the OS-provided default folder for a specific purpose.
- *
- * Note that the Trash folder isn't included here, because trashing files usually
- * involves extra OS-specific functionality to remember the file's original
- * location.
- *
- * The folders supported per platform are:
- *
- * | | Windows | macOS/iOS | tvOS | Unix (XDG) | Haiku | Emscripten |
- * | ----------- | ------- | --------- | ---- | ---------- | ----- | ---------- |
- * | HOME | X | X | | X | X | X |
- * | DESKTOP | X | X | | X | X | |
- * | DOCUMENTS | X | X | | X | | |
- * | DOWNLOADS | Vista+ | X | | X | | |
- * | MUSIC | X | X | | X | | |
- * | PICTURES | X | X | | X | | |
- * | PUBLICSHARE | | X | | X | | |
- * | SAVEDGAMES | Vista+ | | | | | |
- * | SCREENSHOTS | Vista+ | | | | | |
- * | TEMPLATES | X | X | | X | | |
- * | VIDEOS | X | X | | X | | |
- *
- * Note that on macOS/iOS, the Videos folder is called "Movies".
- *
- * \sa SDL_GetPath
- */
-typedef enum
-{
- /** The folder which contains all of the current user's data, preferences,
- and documents. It usually contains most of the other folders. If a
- requested folder does not exist, the home folder can be considered a safe
- fallback to store a user's documents. */
- SDL_FOLDER_HOME,
- /** The folder of files that are displayed on the desktop. Note that the
- existence of a desktop folder does not guarantee that the system does
- show icons on its desktop; certain GNU/Linux distros with a graphical
- environment may not have desktop icons. */
- SDL_FOLDER_DESKTOP,
- /** User document files, possibly application-specific. This is a good
- place to save a user's projects. */
- SDL_FOLDER_DOCUMENTS,
- /** Standard folder for user files downloaded from the internet. */
- SDL_FOLDER_DOWNLOADS,
- /** Music files that can be played using a standard music player (mp3,
- ogg...). */
- SDL_FOLDER_MUSIC,
- /** Image files that can be displayed using a standard viewer (png,
- jpg...). */
- SDL_FOLDER_PICTURES,
- /** Files that are meant to be shared with other users on the same
- computer. */
- SDL_FOLDER_PUBLICSHARE,
- /** Save files for games. */
- SDL_FOLDER_SAVEDGAMES,
- /** Application screenshots. */
- SDL_FOLDER_SCREENSHOTS,
- /** Template files to be used when the user requests the desktop environment
- to create a new file in a certain folder, such as "New Text File.txt".
- Any file in the Templates folder can be used as a starting point for a
- new file. */
- SDL_FOLDER_TEMPLATES,
- /** Video files that can be played using a standard video player (mp4,
- webm...). */
- SDL_FOLDER_VIDEOS
-} SDL_Folder;
-
-/**
- * Finds the most suitable OS-provided folder for @p folder, and returns its
- * path in OS-specific notation.
- *
- * Many OSes provide certain standard folders for certain purposes, such as
- * storing pictures, music or videos for a certain user. This function gives
- * the path for many of those special locations.
- *
- * Note that the function is expensive, and should be called once at the
- * beginning of the execution and kept for as long as needed.
- *
- * The returned value is owned by the caller and should be freed with
- * SDL_free().
- *
- * If NULL is returned, the error may be obtained with SDL_GetError().
- *
- * \param folder The type of folder to find
- * \returns Either a null-terminated C string containing the full path to the
- * folder, or NULL if an error happened.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Folder
- */
-extern DECLSPEC char *SDLCALL SDL_GetPath(SDL_Folder folder);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_filesystem_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_gamepad.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_gamepad.h
deleted file mode 100644
index a7d13173..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_gamepad.h
+++ /dev/null
@@ -1,1173 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_gamepad.h
- *
- * \brief Include file for SDL gamepad event handling
- */
-
-#ifndef SDL_gamepad_h_
-#define SDL_gamepad_h_
-
-#include
-#include
-#include
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file SDL_gamepad.h
- *
- * In order to use these functions, SDL_Init() must have been called
- * with the ::SDL_INIT_GAMEPAD flag. This causes SDL to scan the system
- * for gamepads, and load appropriate drivers.
- *
- * If you would like to receive gamepad updates while the application
- * is in the background, you should set the following hint before calling
- * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
- */
-
-/**
- * The structure used to identify an SDL gamepad
- */
-struct SDL_Gamepad;
-typedef struct SDL_Gamepad SDL_Gamepad;
-
-typedef enum
-{
- SDL_GAMEPAD_TYPE_UNKNOWN = 0,
- SDL_GAMEPAD_TYPE_STANDARD,
- SDL_GAMEPAD_TYPE_XBOX360,
- SDL_GAMEPAD_TYPE_XBOXONE,
- SDL_GAMEPAD_TYPE_PS3,
- SDL_GAMEPAD_TYPE_PS4,
- SDL_GAMEPAD_TYPE_PS5,
- SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO,
- SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_LEFT,
- SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT,
- SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR,
- SDL_GAMEPAD_TYPE_MAX
-} SDL_GamepadType;
-
-/**
- * The list of buttons available on a gamepad
- */
-typedef enum
-{
- SDL_GAMEPAD_BUTTON_INVALID = -1,
- SDL_GAMEPAD_BUTTON_A,
- SDL_GAMEPAD_BUTTON_B,
- SDL_GAMEPAD_BUTTON_X,
- SDL_GAMEPAD_BUTTON_Y,
- SDL_GAMEPAD_BUTTON_BACK,
- SDL_GAMEPAD_BUTTON_GUIDE,
- SDL_GAMEPAD_BUTTON_START,
- SDL_GAMEPAD_BUTTON_LEFT_STICK,
- SDL_GAMEPAD_BUTTON_RIGHT_STICK,
- SDL_GAMEPAD_BUTTON_LEFT_SHOULDER,
- SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER,
- SDL_GAMEPAD_BUTTON_DPAD_UP,
- SDL_GAMEPAD_BUTTON_DPAD_DOWN,
- SDL_GAMEPAD_BUTTON_DPAD_LEFT,
- SDL_GAMEPAD_BUTTON_DPAD_RIGHT,
- SDL_GAMEPAD_BUTTON_MISC1, /* Additional button (e.g. Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button) */
- SDL_GAMEPAD_BUTTON_PADDLE1, /* Upper or primary paddle, under your right hand (e.g. Xbox Elite paddle P1) */
- SDL_GAMEPAD_BUTTON_PADDLE2, /* Upper or primary paddle, under your left hand (e.g. Xbox Elite paddle P3) */
- SDL_GAMEPAD_BUTTON_PADDLE3, /* Lower or secondary paddle, under your right hand (e.g. Xbox Elite paddle P2) */
- SDL_GAMEPAD_BUTTON_PADDLE4, /* Lower or secondary paddle, under your left hand (e.g. Xbox Elite paddle P4) */
- SDL_GAMEPAD_BUTTON_TOUCHPAD, /* PS4/PS5 touchpad button */
- SDL_GAMEPAD_BUTTON_MAX
-} SDL_GamepadButton;
-
-/**
- * The list of axes available on a gamepad
- *
- * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX,
- * and are centered within ~8000 of zero, though advanced UI will allow users to set
- * or autodetect the dead zone, which varies between gamepads.
- *
- * Trigger axis values range from 0 to SDL_JOYSTICK_AXIS_MAX.
- */
-typedef enum
-{
- SDL_GAMEPAD_AXIS_INVALID = -1,
- SDL_GAMEPAD_AXIS_LEFTX,
- SDL_GAMEPAD_AXIS_LEFTY,
- SDL_GAMEPAD_AXIS_RIGHTX,
- SDL_GAMEPAD_AXIS_RIGHTY,
- SDL_GAMEPAD_AXIS_LEFT_TRIGGER,
- SDL_GAMEPAD_AXIS_RIGHT_TRIGGER,
- SDL_GAMEPAD_AXIS_MAX
-} SDL_GamepadAxis;
-
-/**
- * Add support for gamepads that SDL is unaware of or change the binding of an
- * existing gamepad.
- *
- * The mapping string has the format "GUID,name,mapping", where GUID is the
- * string value from SDL_GetJoystickGUIDString(), name is the human readable
- * string for the device and mappings are gamepad mappings to joystick ones.
- * Under Windows there is a reserved GUID of "xinput" that covers all XInput
- * devices. The mapping format for joystick is:
- *
- * - `bX`: a joystick button, index X
- * - `hX.Y`: hat X with value Y
- * - `aX`: axis X of the joystick
- *
- * Buttons can be used as a gamepad axes and vice versa.
- *
- * This string shows an example of a valid mapping for a gamepad:
- *
- * ```c
- * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7"
- * ```
- *
- * \param mapping the mapping string
- * \returns 1 if a new mapping is added, 0 if an existing mapping is updated,
- * -1 on error; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadMapping
- * \sa SDL_GetGamepadMappingForGUID
- */
-extern DECLSPEC int SDLCALL SDL_AddGamepadMapping(const char *mapping);
-
-/**
- * Load a set of gamepad mappings from a seekable SDL data stream.
- *
- * You can call this function several times, if needed, to load different
- * database files.
- *
- * If a new mapping is loaded for an already known gamepad GUID, the later
- * version will overwrite the one currently loaded.
- *
- * Mappings not belonging to the current platform or with no platform field
- * specified will be ignored (i.e. mappings for Linux will be ignored in
- * Windows, etc).
- *
- * This function will load the text database entirely in memory before
- * processing it, so take this into consideration if you are in a memory
- * constrained environment.
- *
- * \param src the data stream for the mappings to be added
- * \param freesrc non-zero to close the stream after being read
- * \returns the number of mappings added or -1 on error; call SDL_GetError()
- * for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AddGamepadMapping
- * \sa SDL_AddGamepadMappingsFromFile
- * \sa SDL_GetGamepadMappingForGUID
- */
-extern DECLSPEC int SDLCALL SDL_AddGamepadMappingsFromRW(SDL_RWops *src, int freesrc);
-
-/**
- * Load a set of gamepad mappings from a file.
- *
- * You can call this function several times, if needed, to load different
- * database files.
- *
- * If a new mapping is loaded for an already known gamepad GUID, the later
- * version will overwrite the one currently loaded.
- *
- * Mappings not belonging to the current platform or with no platform field
- * specified will be ignored (i.e. mappings for Linux will be ignored in
- * Windows, etc).
- *
- * \param file the mappings file to load
- * \returns the number of mappings added or -1 on error; call SDL_GetError()
- * for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AddGamepadMapping
- * \sa SDL_AddGamepadMappingsFromRW
- * \sa SDL_GetGamepadMappingForGUID
- */
-extern DECLSPEC int SDLCALL SDL_AddGamepadMappingsFromFile(const char *file);
-
-/**
- * Reinitialize the SDL mapping database to its initial state.
- *
- * This will generate gamepad events as needed if device mappings change.
- *
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_ReloadGamepadMappings(void);
-
-/**
- * Get the number of mappings installed.
- *
- * \returns the number of mappings.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetNumGamepadMappings(void);
-
-/**
- * Get the mapping at a particular index.
- *
- * \param mapping_index mapping index
- * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if
- * the index is out of range.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC char * SDLCALL SDL_GetGamepadMappingForIndex(int mapping_index);
-
-/**
- * Get the gamepad mapping string for a given GUID.
- *
- * The returned string must be freed with SDL_free().
- *
- * \param guid a structure containing the GUID for which a mapping is desired
- * \returns a mapping string or NULL on error; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickInstanceGUID
- * \sa SDL_GetJoystickGUID
- */
-extern DECLSPEC char * SDLCALL SDL_GetGamepadMappingForGUID(SDL_JoystickGUID guid);
-
-/**
- * Get the current mapping of a gamepad.
- *
- * The returned string must be freed with SDL_free().
- *
- * Details about mappings are discussed with SDL_AddGamepadMapping().
- *
- * \param gamepad the gamepad you want to get the current mapping for
- * \returns a string that has the gamepad's mapping or NULL if no mapping is
- * available; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AddGamepadMapping
- * \sa SDL_GetGamepadMappingForGUID
- * \sa SDL_SetGamepadMapping
- */
-extern DECLSPEC char * SDLCALL SDL_GetGamepadMapping(SDL_Gamepad *gamepad);
-
-/**
- * Set the current mapping of a joystick or gamepad.
- *
- * Details about mappings are discussed with SDL_AddGamepadMapping().
- *
- * \param instance_id the joystick instance ID
- * \param mapping the mapping to use for this device, or NULL to clear the
- * mapping
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AddGamepadMapping
- * \sa SDL_GetGamepadMapping
- */
-extern DECLSPEC int SDLCALL SDL_SetGamepadMapping(SDL_JoystickID instance_id, const char *mapping);
-
-/**
- * Get a list of currently connected gamepads.
- *
- * \param count a pointer filled in with the number of gamepads returned
- * \returns a 0 terminated array of joystick instance IDs which should be
- * freed with SDL_free(), or NULL on error; call SDL_GetError() for
- * more details.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC SDL_JoystickID *SDLCALL SDL_GetGamepads(int *count);
-
-/**
- * Check if the given joystick is supported by the gamepad interface.
- *
- * \param instance_id the joystick instance ID
- * \returns SDL_TRUE if the given joystick is supported by the gamepad
- * interface, SDL_FALSE if it isn't or it's an invalid index.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadNameForIndex
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_IsGamepad(SDL_JoystickID instance_id);
-
-/**
- * Get the implementation dependent name of a gamepad.
- *
- * This can be called before any gamepads are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the name of the selected gamepad. If no name can be found, this
- * function returns NULL; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadName
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC const char *SDLCALL SDL_GetGamepadInstanceName(SDL_JoystickID instance_id);
-
-/**
- * Get the implementation dependent path of a gamepad.
- *
- * This can be called before any gamepads are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the path of the selected gamepad. If no path can be found, this
- * function returns NULL; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadPath
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC const char *SDLCALL SDL_GetGamepadInstancePath(SDL_JoystickID instance_id);
-
-/**
- * Get the player index of a gamepad.
- *
- * This can be called before any gamepads are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the player index of a gamepad, or -1 if it's not available
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadPlayerIndex
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC int SDLCALL SDL_GetGamepadInstancePlayerIndex(SDL_JoystickID instance_id);
-
-/**
- * Get the implementation-dependent GUID of a gamepad.
- *
- * This can be called before any gamepads are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the GUID of the selected gamepad. If called on an invalid index,
- * this function returns a zero GUID
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadGUID
- * \sa SDL_GetGamepadGUIDString
- */
-extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_GetGamepadInstanceGUID(SDL_JoystickID instance_id);
-
-/**
- * Get the USB vendor ID of a gamepad, if available.
- *
- * This can be called before any gamepads are opened. If the vendor ID isn't
- * available this function returns 0.
- *
- * \param instance_id the joystick instance ID
- * \returns the USB vendor ID of the selected gamepad. If called on an invalid
- * index, this function returns zero
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetGamepadInstanceVendor(SDL_JoystickID instance_id);
-
-/**
- * Get the USB product ID of a gamepad, if available.
- *
- * This can be called before any gamepads are opened. If the product ID isn't
- * available this function returns 0.
- *
- * \param instance_id the joystick instance ID
- * \returns the USB product ID of the selected gamepad. If called on an
- * invalid index, this function returns zero
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetGamepadInstanceProduct(SDL_JoystickID instance_id);
-
-/**
- * Get the product version of a gamepad, if available.
- *
- * This can be called before any gamepads are opened. If the product version
- * isn't available this function returns 0.
- *
- * \param instance_id the joystick instance ID
- * \returns the product version of the selected gamepad. If called on an
- * invalid index, this function returns zero
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetGamepadInstanceProductVersion(SDL_JoystickID instance_id);
-
-/**
- * Get the type of a gamepad.
- *
- * This can be called before any gamepads are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the gamepad type.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_GamepadType SDLCALL SDL_GetGamepadInstanceType(SDL_JoystickID instance_id);
-
-/**
- * Get the type of a gamepad, ignoring any mapping override.
- *
- * This can be called before any gamepads are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the gamepad type.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_GamepadType SDLCALL SDL_GetRealGamepadInstanceType(SDL_JoystickID instance_id);
-
-/**
- * Get the mapping of a gamepad.
- *
- * This can be called before any gamepads are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if
- * no mapping is available.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC char *SDLCALL SDL_GetGamepadInstanceMapping(SDL_JoystickID instance_id);
-
-/**
- * Open a gamepad for use.
- *
- * \param instance_id the joystick instance ID
- * \returns a gamepad identifier or NULL if an error occurred; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CloseGamepad
- * \sa SDL_GetGamepadNameForIndex
- * \sa SDL_IsGamepad
- */
-extern DECLSPEC SDL_Gamepad *SDLCALL SDL_OpenGamepad(SDL_JoystickID instance_id);
-
-/**
- * Get the SDL_Gamepad associated with a joystick instance ID, if it has been
- * opened.
- *
- * \param instance_id the joystick instance ID of the gamepad
- * \returns an SDL_Gamepad on success or NULL on failure or if it hasn't been
- * opened yet; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_Gamepad *SDLCALL SDL_GetGamepadFromInstanceID(SDL_JoystickID instance_id);
-
-/**
- * Get the SDL_Gamepad associated with a player index.
- *
- * \param player_index the player index, which different from the instance ID
- * \returns the SDL_Gamepad associated with a player index.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadPlayerIndex
- * \sa SDL_SetGamepadPlayerIndex
- */
-extern DECLSPEC SDL_Gamepad *SDLCALL SDL_GetGamepadFromPlayerIndex(int player_index);
-
-/**
- * Get the instance ID of an opened gamepad.
- *
- * \param gamepad a gamepad identifier previously returned by
- * SDL_OpenGamepad()
- * \returns the instance ID of the specified gamepad on success or 0 on
- * failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC SDL_JoystickID SDLCALL SDL_GetGamepadInstanceID(SDL_Gamepad *gamepad);
-
-/**
- * Get the implementation-dependent name for an opened gamepad.
- *
- * \param gamepad a gamepad identifier previously returned by
- * SDL_OpenGamepad()
- * \returns the implementation dependent name for the gamepad, or NULL if
- * there is no name or the identifier passed is invalid.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadNameForIndex
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC const char *SDLCALL SDL_GetGamepadName(SDL_Gamepad *gamepad);
-
-/**
- * Get the implementation-dependent path for an opened gamepad.
- *
- * \param gamepad a gamepad identifier previously returned by
- * SDL_OpenGamepad()
- * \returns the implementation dependent path for the gamepad, or NULL if
- * there is no path or the identifier passed is invalid.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadInstancePath
- */
-extern DECLSPEC const char *SDLCALL SDL_GetGamepadPath(SDL_Gamepad *gamepad);
-
-/**
- * Get the type of an opened gamepad.
- *
- * \param gamepad the gamepad object to query.
- * \returns the gamepad type, or SDL_GAMEPAD_TYPE_UNKNOWN if it's not
- * available.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadInstanceType
- */
-extern DECLSPEC SDL_GamepadType SDLCALL SDL_GetGamepadType(SDL_Gamepad *gamepad);
-
-/**
- * Get the type of an opened gamepad, ignoring any mapping override.
- *
- * \param gamepad the gamepad object to query.
- * \returns the gamepad type, or SDL_GAMEPAD_TYPE_UNKNOWN if it's not
- * available.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetRealGamepadInstanceType
- */
-extern DECLSPEC SDL_GamepadType SDLCALL SDL_GetRealGamepadType(SDL_Gamepad *gamepad);
-
-/**
- * Get the player index of an opened gamepad.
- *
- * For XInput gamepads this returns the XInput user index.
- *
- * \param gamepad the gamepad object to query.
- * \returns the player index for gamepad, or -1 if it's not available.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetGamepadPlayerIndex(SDL_Gamepad *gamepad);
-
-/**
- * Set the player index of an opened gamepad.
- *
- * \param gamepad the gamepad object to adjust.
- * \param player_index Player index to assign to this gamepad, or -1 to clear
- * the player index and turn off player LEDs.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetGamepadPlayerIndex(SDL_Gamepad *gamepad, int player_index);
-
-/**
- * Get the USB vendor ID of an opened gamepad, if available.
- *
- * If the vendor ID isn't available this function returns 0.
- *
- * \param gamepad the gamepad object to query.
- * \returns the USB vendor ID, or zero if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetGamepadVendor(SDL_Gamepad *gamepad);
-
-/**
- * Get the USB product ID of an opened gamepad, if available.
- *
- * If the product ID isn't available this function returns 0.
- *
- * \param gamepad the gamepad object to query.
- * \returns the USB product ID, or zero if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetGamepadProduct(SDL_Gamepad *gamepad);
-
-/**
- * Get the product version of an opened gamepad, if available.
- *
- * If the product version isn't available this function returns 0.
- *
- * \param gamepad the gamepad object to query.
- * \returns the USB product version, or zero if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetGamepadProductVersion(SDL_Gamepad *gamepad);
-
-/**
- * Get the firmware version of an opened gamepad, if available.
- *
- * If the firmware version isn't available this function returns 0.
- *
- * \param gamepad the gamepad object to query.
- * \returns the gamepad firmware version, or zero if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetGamepadFirmwareVersion(SDL_Gamepad *gamepad);
-
-/**
- * Get the serial number of an opened gamepad, if available.
- *
- * Returns the serial number of the gamepad, or NULL if it is not available.
- *
- * \param gamepad the gamepad object to query.
- * \returns the serial number, or NULL if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC const char * SDLCALL SDL_GetGamepadSerial(SDL_Gamepad *gamepad);
-
-/**
- * Get the battery level of a gamepad, if available.
- *
- * \param gamepad a gamepad identifier previously returned by
- * SDL_OpenGamepad()
- * \returns the current battery level as SDL_JoystickPowerLevel on success or
- * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_GetGamepadPowerLevel(SDL_Gamepad *gamepad);
-
-/**
- * Check if a gamepad has been opened and is currently connected.
- *
- * \param gamepad a gamepad identifier previously returned by
- * SDL_OpenGamepad()
- * \returns SDL_TRUE if the gamepad has been opened and is currently
- * connected, or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CloseGamepad
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadConnected(SDL_Gamepad *gamepad);
-
-/**
- * Get the underlying joystick from a gamepad
- *
- * This function will give you a SDL_Joystick object, which allows you to use
- * the SDL_Joystick functions with a SDL_Gamepad object. This would be useful
- * for getting a joystick's position at any given time, even if it hasn't
- * moved (moving it would produce an event, which would have the axis' value).
- *
- * The pointer returned is owned by the SDL_Gamepad. You should not call
- * SDL_CloseJoystick() on it, for example, since doing so will likely cause
- * SDL to crash.
- *
- * \param gamepad the gamepad object that you want to get a joystick from
- * \returns an SDL_Joystick object; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_Joystick *SDLCALL SDL_GetGamepadJoystick(SDL_Gamepad *gamepad);
-
-/**
- * Set the state of gamepad event processing.
- *
- * If gamepad events are disabled, you must call SDL_UpdateGamepads() yourself
- * and check the state of the gamepad when you want gamepad information.
- *
- * \param enabled whether to process gamepad events or not
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GamepadEventsEnabled
- */
-extern DECLSPEC void SDLCALL SDL_SetGamepadEventsEnabled(SDL_bool enabled);
-
-/**
- * Query the state of gamepad event processing.
- *
- * If gamepad events are disabled, you must call SDL_UpdateGamepads() yourself
- * and check the state of the gamepad when you want gamepad information.
- *
- * \returns SDL_TRUE if gamepad events are being processed, SDL_FALSE
- * otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetGamepadEventsEnabled
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadEventsEnabled(void);
-
-/**
- * Manually pump gamepad updates if not using the loop.
- *
- * This function is called automatically by the event loop if events are
- * enabled. Under such circumstances, it will not be necessary to call this
- * function.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_UpdateGamepads(void);
-
-/**
- * Convert a string into SDL_GamepadType enum.
- *
- * This function is called internally to translate SDL_Gamepad mapping strings
- * for the underlying joystick device into the consistent SDL_Gamepad mapping.
- * You do not normally need to call this function unless you are parsing
- * SDL_Gamepad mappings in your own code.
- *
- * \param str string representing a SDL_GamepadType type
- * \returns the SDL_GamepadType enum corresponding to the input string, or
- * `SDL_GAMEPAD_TYPE_UNKNOWN` if no match was found.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadStringForType
- */
-extern DECLSPEC SDL_GamepadType SDLCALL SDL_GetGamepadTypeFromString(const char *str);
-
-/**
- * Convert from an SDL_GamepadType enum to a string.
- *
- * The caller should not SDL_free() the returned string.
- *
- * \param type an enum value for a given SDL_GamepadType
- * \returns a string for the given type, or NULL if an invalid type is
- * specified. The string returned is of the format used by
- * SDL_Gamepad mapping strings.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadTypeFromString
- */
-extern DECLSPEC const char *SDLCALL SDL_GetGamepadStringForType(SDL_GamepadType type);
-
-/**
- * Convert a string into SDL_GamepadAxis enum.
- *
- * This function is called internally to translate SDL_Gamepad mapping strings
- * for the underlying joystick device into the consistent SDL_Gamepad mapping.
- * You do not normally need to call this function unless you are parsing
- * SDL_Gamepad mappings in your own code.
- *
- * Note specially that "righttrigger" and "lefttrigger" map to
- * `SDL_GAMEPAD_AXIS_RIGHT_TRIGGER` and `SDL_GAMEPAD_AXIS_LEFT_TRIGGER`,
- * respectively.
- *
- * \param str string representing a SDL_Gamepad axis
- * \returns the SDL_GamepadAxis enum corresponding to the input string, or
- * `SDL_GAMEPAD_AXIS_INVALID` if no match was found.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadStringForAxis
- */
-extern DECLSPEC SDL_GamepadAxis SDLCALL SDL_GetGamepadAxisFromString(const char *str);
-
-/**
- * Convert from an SDL_GamepadAxis enum to a string.
- *
- * The caller should not SDL_free() the returned string.
- *
- * \param axis an enum value for a given SDL_GamepadAxis
- * \returns a string for the given axis, or NULL if an invalid axis is
- * specified. The string returned is of the format used by
- * SDL_Gamepad mapping strings.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadAxisFromString
- */
-extern DECLSPEC const char* SDLCALL SDL_GetGamepadStringForAxis(SDL_GamepadAxis axis);
-
-/**
- * Query whether a gamepad has a given axis.
- *
- * This merely reports whether the gamepad's mapping defined this axis, as
- * that is all the information SDL has about the physical device.
- *
- * \param gamepad a gamepad
- * \param axis an axis enum value (an SDL_GamepadAxis value)
- * \returns SDL_TRUE if the gamepad has this axis, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadHasAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis);
-
-/**
- * Get the current state of an axis control on a gamepad.
- *
- * The axis indices start at index 0.
- *
- * The state is a value ranging from -32768 to 32767. Triggers, however, range
- * from 0 to 32767 (they never return a negative value).
- *
- * \param gamepad a gamepad
- * \param axis an axis index (one of the SDL_GamepadAxis values)
- * \returns axis state (including 0) on success or 0 (also) on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadButton
- */
-extern DECLSPEC Sint16 SDLCALL SDL_GetGamepadAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis);
-
-/**
- * Convert a string into an SDL_GamepadButton enum.
- *
- * This function is called internally to translate SDL_Gamepad mapping strings
- * for the underlying joystick device into the consistent SDL_Gamepad mapping.
- * You do not normally need to call this function unless you are parsing
- * SDL_Gamepad mappings in your own code.
- *
- * \param str string representing a SDL_Gamepad axis
- * \returns the SDL_GamepadButton enum corresponding to the input string, or
- * `SDL_GAMEPAD_AXIS_INVALID` if no match was found.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_GamepadButton SDLCALL SDL_GetGamepadButtonFromString(const char *str);
-
-/**
- * Convert from an SDL_GamepadButton enum to a string.
- *
- * The caller should not SDL_free() the returned string.
- *
- * \param button an enum value for a given SDL_GamepadButton
- * \returns a string for the given button, or NULL if an invalid button is
- * specified. The string returned is of the format used by
- * SDL_Gamepad mapping strings.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadButtonFromString
- */
-extern DECLSPEC const char* SDLCALL SDL_GetGamepadStringForButton(SDL_GamepadButton button);
-
-/**
- * Query whether a gamepad has a given button.
- *
- * This merely reports whether the gamepad's mapping defined this button, as
- * that is all the information SDL has about the physical device.
- *
- * \param gamepad a gamepad
- * \param button a button enum value (an SDL_GamepadButton value)
- * \returns SDL_TRUE if the gamepad has this button, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadHasButton(SDL_Gamepad *gamepad, SDL_GamepadButton button);
-
-/**
- * Get the current state of a button on a gamepad.
- *
- * \param gamepad a gamepad
- * \param button a button index (one of the SDL_GamepadButton values)
- * \returns 1 for pressed state or 0 for not pressed state or error; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadAxis
- */
-extern DECLSPEC Uint8 SDLCALL SDL_GetGamepadButton(SDL_Gamepad *gamepad, SDL_GamepadButton button);
-
-/**
- * Get the number of touchpads on a gamepad.
- *
- * \param gamepad a gamepad
- * \returns number of touchpads
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetNumGamepadTouchpads(SDL_Gamepad *gamepad);
-
-/**
- * Get the number of supported simultaneous fingers on a touchpad on a game
- * gamepad.
- *
- * \param gamepad a gamepad
- * \param touchpad a touchpad
- * \returns number of supported simultaneous fingers
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetNumGamepadTouchpadFingers(SDL_Gamepad *gamepad, int touchpad);
-
-/**
- * Get the current state of a finger on a touchpad on a gamepad.
- *
- * \param gamepad a gamepad
- * \param touchpad a touchpad
- * \param finger a finger
- * \param state filled with state
- * \param x filled with x position
- * \param y filled with y position
- * \param pressure filled with pressure value
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetGamepadTouchpadFinger(SDL_Gamepad *gamepad, int touchpad, int finger, Uint8 *state, float *x, float *y, float *pressure);
-
-/**
- * Return whether a gamepad has a particular sensor.
- *
- * \param gamepad The gamepad to query
- * \param type The type of sensor to query
- * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadHasSensor(SDL_Gamepad *gamepad, SDL_SensorType type);
-
-/**
- * Set whether data reporting for a gamepad sensor is enabled.
- *
- * \param gamepad The gamepad to update
- * \param type The type of sensor to enable/disable
- * \param enabled Whether data reporting should be enabled
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetGamepadSensorEnabled(SDL_Gamepad *gamepad, SDL_SensorType type, SDL_bool enabled);
-
-/**
- * Query whether sensor data reporting is enabled for a gamepad.
- *
- * \param gamepad The gamepad to query
- * \param type The type of sensor to query
- * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadSensorEnabled(SDL_Gamepad *gamepad, SDL_SensorType type);
-
-/**
- * Get the data rate (number of events per second) of a gamepad sensor.
- *
- * \param gamepad The gamepad to query
- * \param type The type of sensor to query
- * \returns the data rate, or 0.0f if the data rate is not available.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC float SDLCALL SDL_GetGamepadSensorDataRate(SDL_Gamepad *gamepad, SDL_SensorType type);
-
-/**
- * Get the current state of a gamepad sensor.
- *
- * The number of values and interpretation of the data is sensor dependent.
- * See SDL_sensor.h for the details for each type of sensor.
- *
- * \param gamepad The gamepad to query
- * \param type The type of sensor to query
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetGamepadSensorData(SDL_Gamepad *gamepad, SDL_SensorType type, float *data, int num_values);
-
-/**
- * Start a rumble effect on a gamepad.
- *
- * Each call to this function cancels any previous rumble effect, and calling
- * it with 0 intensity stops any rumbling.
- *
- * \param gamepad The gamepad to vibrate
- * \param low_frequency_rumble The intensity of the low frequency (left)
- * rumble motor, from 0 to 0xFFFF
- * \param high_frequency_rumble The intensity of the high frequency (right)
- * rumble motor, from 0 to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if rumble isn't supported on this gamepad
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GamepadHasRumble
- */
-extern DECLSPEC int SDLCALL SDL_RumbleGamepad(SDL_Gamepad *gamepad, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
-
-/**
- * Start a rumble effect in the gamepad's triggers.
- *
- * Each call to this function cancels any previous trigger rumble effect, and
- * calling it with 0 intensity stops any rumbling.
- *
- * Note that this is rumbling of the _triggers_ and not the gamepad as a
- * whole. This is currently only supported on Xbox One gamepads. If you want
- * the (more common) whole-gamepad rumble, use SDL_RumbleGamepad() instead.
- *
- * \param gamepad The gamepad to vibrate
- * \param left_rumble The intensity of the left trigger rumble motor, from 0
- * to 0xFFFF
- * \param right_rumble The intensity of the right trigger rumble motor, from 0
- * to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GamepadHasRumbleTriggers
- */
-extern DECLSPEC int SDLCALL SDL_RumbleGamepadTriggers(SDL_Gamepad *gamepad, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms);
-
-/**
- * Query whether a gamepad has an LED.
- *
- * \param gamepad The gamepad to query
- * \returns SDL_TRUE, or SDL_FALSE if this gamepad does not have a modifiable
- * LED
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadHasLED(SDL_Gamepad *gamepad);
-
-/**
- * Query whether a gamepad has rumble support.
- *
- * \param gamepad The gamepad to query
- * \returns SDL_TRUE, or SDL_FALSE if this gamepad does not have rumble
- * support
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_RumbleGamepad
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadHasRumble(SDL_Gamepad *gamepad);
-
-/**
- * Query whether a gamepad has rumble support on triggers.
- *
- * \param gamepad The gamepad to query
- * \returns SDL_TRUE, or SDL_FALSE if this gamepad does not have trigger
- * rumble support
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_RumbleGamepadTriggers
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GamepadHasRumbleTriggers(SDL_Gamepad *gamepad);
-
-/**
- * Update a gamepad's LED color.
- *
- * \param gamepad The gamepad to update
- * \param red The intensity of the red LED
- * \param green The intensity of the green LED
- * \param blue The intensity of the blue LED
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetGamepadLED(SDL_Gamepad *gamepad, Uint8 red, Uint8 green, Uint8 blue);
-
-/**
- * Send a gamepad specific effect packet
- *
- * \param gamepad The gamepad to affect
- * \param data The data to send to the gamepad
- * \param size The size of the data to send to the gamepad
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SendGamepadEffect(SDL_Gamepad *gamepad, const void *data, int size);
-
-/**
- * Close a gamepad previously opened with SDL_OpenGamepad().
- *
- * \param gamepad a gamepad identifier previously returned by
- * SDL_OpenGamepad()
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_OpenGamepad
- */
-extern DECLSPEC void SDLCALL SDL_CloseGamepad(SDL_Gamepad *gamepad);
-
-/**
- * Return the sfSymbolsName for a given button on a gamepad on Apple
- * platforms.
- *
- * \param gamepad the gamepad to query
- * \param button a button on the gamepad
- * \returns the sfSymbolsName or NULL if the name can't be found
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadAppleSFSymbolsNameForAxis
- */
-extern DECLSPEC const char* SDLCALL SDL_GetGamepadAppleSFSymbolsNameForButton(SDL_Gamepad *gamepad, SDL_GamepadButton button);
-
-/**
- * Return the sfSymbolsName for a given axis on a gamepad on Apple platforms.
- *
- * \param gamepad the gamepad to query
- * \param axis an axis on the gamepad
- * \returns the sfSymbolsName or NULL if the name can't be found
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetGamepadAppleSFSymbolsNameForButton
- */
-extern DECLSPEC const char* SDLCALL SDL_GetGamepadAppleSFSymbolsNameForAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis);
-
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_gamepad_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_guid.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_guid.h
deleted file mode 100644
index fbd70143..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_guid.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_guid.h
- *
- * \brief Include file for handling ::SDL_GUID values.
- */
-
-#ifndef SDL_guid_h_
-#define SDL_guid_h_
-
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * An SDL_GUID is a 128-bit identifier for an input device that
- * identifies that device across runs of SDL programs on the same
- * platform. If the device is detached and then re-attached to a
- * different port, or if the base system is rebooted, the device
- * should still report the same GUID.
- *
- * GUIDs are as precise as possible but are not guaranteed to
- * distinguish physically distinct but equivalent devices. For
- * example, two game controllers from the same vendor with the same
- * product ID and revision may have the same GUID.
- *
- * GUIDs may be platform-dependent (i.e., the same device may report
- * different GUIDs on different operating systems).
- */
-typedef struct {
- Uint8 data[16];
-} SDL_GUID;
-
-/* Function prototypes */
-
-/**
- * Get an ASCII string representation for a given ::SDL_GUID.
- *
- * You should supply at least 33 bytes for pszGUID.
- *
- * \param guid the ::SDL_GUID you wish to convert to string
- * \param pszGUID buffer in which to write the ASCII string
- * \param cbGUID the size of pszGUID
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GUIDFromString
- */
-extern DECLSPEC int SDLCALL SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID);
-
-/**
- * Convert a GUID string into a ::SDL_GUID structure.
- *
- * Performs no error checking. If this function is given a string containing
- * an invalid GUID, the function will silently succeed, but the GUID generated
- * will not be useful.
- *
- * \param pchGUID string containing an ASCII representation of a GUID
- * \returns a ::SDL_GUID structure.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GUIDToString
- */
-extern DECLSPEC SDL_GUID SDLCALL SDL_GUIDFromString(const char *pchGUID);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_guid_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_haptic.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_haptic.h
deleted file mode 100644
index 7dbd3916..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_haptic.h
+++ /dev/null
@@ -1,1339 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_haptic.h
- *
- * \brief The SDL haptic subsystem allows you to control haptic (force feedback)
- * devices.
- *
- * The basic usage is as follows:
- * - Initialize the subsystem (::SDL_INIT_HAPTIC).
- * - Open a haptic device.
- * - SDL_HapticOpen() to open from index.
- * - SDL_HapticOpenFromJoystick() to open from an existing joystick.
- * - Create an effect (::SDL_HapticEffect).
- * - Upload the effect with SDL_HapticNewEffect().
- * - Run the effect with SDL_HapticRunEffect().
- * - (optional) Free the effect with SDL_HapticDestroyEffect().
- * - Close the haptic device with SDL_HapticClose().
- *
- * \par Simple rumble example:
- * \code
- * SDL_Haptic *haptic;
- *
- * // Open the device
- * haptic = SDL_HapticOpen( 0 );
- * if (haptic == NULL)
- * return -1;
- *
- * // Initialize simple rumble
- * if (SDL_HapticRumbleInit( haptic ) != 0)
- * return -1;
- *
- * // Play effect at 50% strength for 2 seconds
- * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0)
- * return -1;
- * SDL_Delay( 2000 );
- *
- * // Clean up
- * SDL_HapticClose( haptic );
- * \endcode
- *
- * \par Complete example:
- * \code
- * int test_haptic( SDL_Joystick * joystick ) {
- * SDL_Haptic *haptic;
- * SDL_HapticEffect effect;
- * int effect_id;
- *
- * // Open the device
- * haptic = SDL_HapticOpenFromJoystick( joystick );
- * if (haptic == NULL) return -1; // Most likely joystick isn't haptic
- *
- * // See if it can do sine waves
- * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) {
- * SDL_HapticClose(haptic); // No sine effect
- * return -1;
- * }
- *
- * // Create the effect
- * SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default
- * effect.type = SDL_HAPTIC_SINE;
- * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates
- * effect.periodic.direction.dir[0] = 18000; // Force comes from south
- * effect.periodic.period = 1000; // 1000 ms
- * effect.periodic.magnitude = 20000; // 20000/32767 strength
- * effect.periodic.length = 5000; // 5 seconds long
- * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength
- * effect.periodic.fade_length = 1000; // Takes 1 second to fade away
- *
- * // Upload the effect
- * effect_id = SDL_HapticNewEffect( haptic, &effect );
- *
- * // Test the effect
- * SDL_HapticRunEffect( haptic, effect_id, 1 );
- * SDL_Delay( 5000); // Wait for the effect to finish
- *
- * // We destroy the effect, although closing the device also does this
- * SDL_HapticDestroyEffect( haptic, effect_id );
- *
- * // Close the device
- * SDL_HapticClose(haptic);
- *
- * return 0; // Success
- * }
- * \endcode
- */
-
-#ifndef SDL_haptic_h_
-#define SDL_haptic_h_
-
-#include
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* FIXME: For SDL 2.1, adjust all the magnitude variables to be Uint16 (0xFFFF).
- *
- * At the moment the magnitude variables are mixed between signed/unsigned, and
- * it is also not made clear that ALL of those variables expect a max of 0x7FFF.
- *
- * Some platforms may have higher precision than that (Linux FF, Windows XInput)
- * so we should fix the inconsistency in favor of higher possible precision,
- * adjusting for platforms that use different scales.
- * -flibit
- */
-
-/**
- * \typedef SDL_Haptic
- *
- * \brief The haptic structure used to identify an SDL haptic.
- *
- * \sa SDL_HapticOpen
- * \sa SDL_HapticOpenFromJoystick
- * \sa SDL_HapticClose
- */
-struct SDL_Haptic;
-typedef struct SDL_Haptic SDL_Haptic;
-
-
-/**
- * \name Haptic features
- *
- * Different haptic features a device can have.
- */
-/* @{ */
-
-/**
- * \name Haptic effects
- */
-/* @{ */
-
-/**
- * \brief Constant effect supported.
- *
- * Constant haptic effect.
- *
- * \sa SDL_HapticCondition
- */
-#define SDL_HAPTIC_CONSTANT (1u<<0)
-
-/**
- * \brief Sine wave effect supported.
- *
- * Periodic haptic effect that simulates sine waves.
- *
- * \sa SDL_HapticPeriodic
- */
-#define SDL_HAPTIC_SINE (1u<<1)
-
-/**
- * \brief Left/Right effect supported.
- *
- * Haptic effect for direct control over high/low frequency motors.
- *
- * \sa SDL_HapticLeftRight
- * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry,
- * we ran out of bits, and this is important for XInput devices.
- */
-#define SDL_HAPTIC_LEFTRIGHT (1u<<2)
-
-/* !!! FIXME: put this back when we have more bits in 2.1 */
-/* #define SDL_HAPTIC_SQUARE (1<<2) */
-
-/**
- * \brief Triangle wave effect supported.
- *
- * Periodic haptic effect that simulates triangular waves.
- *
- * \sa SDL_HapticPeriodic
- */
-#define SDL_HAPTIC_TRIANGLE (1u<<3)
-
-/**
- * \brief Sawtoothup wave effect supported.
- *
- * Periodic haptic effect that simulates saw tooth up waves.
- *
- * \sa SDL_HapticPeriodic
- */
-#define SDL_HAPTIC_SAWTOOTHUP (1u<<4)
-
-/**
- * \brief Sawtoothdown wave effect supported.
- *
- * Periodic haptic effect that simulates saw tooth down waves.
- *
- * \sa SDL_HapticPeriodic
- */
-#define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5)
-
-/**
- * \brief Ramp effect supported.
- *
- * Ramp haptic effect.
- *
- * \sa SDL_HapticRamp
- */
-#define SDL_HAPTIC_RAMP (1u<<6)
-
-/**
- * \brief Spring effect supported - uses axes position.
- *
- * Condition haptic effect that simulates a spring. Effect is based on the
- * axes position.
- *
- * \sa SDL_HapticCondition
- */
-#define SDL_HAPTIC_SPRING (1u<<7)
-
-/**
- * \brief Damper effect supported - uses axes velocity.
- *
- * Condition haptic effect that simulates dampening. Effect is based on the
- * axes velocity.
- *
- * \sa SDL_HapticCondition
- */
-#define SDL_HAPTIC_DAMPER (1u<<8)
-
-/**
- * \brief Inertia effect supported - uses axes acceleration.
- *
- * Condition haptic effect that simulates inertia. Effect is based on the axes
- * acceleration.
- *
- * \sa SDL_HapticCondition
- */
-#define SDL_HAPTIC_INERTIA (1u<<9)
-
-/**
- * \brief Friction effect supported - uses axes movement.
- *
- * Condition haptic effect that simulates friction. Effect is based on the
- * axes movement.
- *
- * \sa SDL_HapticCondition
- */
-#define SDL_HAPTIC_FRICTION (1u<<10)
-
-/**
- * \brief Custom effect is supported.
- *
- * User defined custom haptic effect.
- */
-#define SDL_HAPTIC_CUSTOM (1u<<11)
-
-/* @} *//* Haptic effects */
-
-/* These last few are features the device has, not effects */
-
-/**
- * \brief Device can set global gain.
- *
- * Device supports setting the global gain.
- *
- * \sa SDL_HapticSetGain
- */
-#define SDL_HAPTIC_GAIN (1u<<12)
-
-/**
- * \brief Device can set autocenter.
- *
- * Device supports setting autocenter.
- *
- * \sa SDL_HapticSetAutocenter
- */
-#define SDL_HAPTIC_AUTOCENTER (1u<<13)
-
-/**
- * \brief Device can be queried for effect status.
- *
- * Device supports querying effect status.
- *
- * \sa SDL_HapticGetEffectStatus
- */
-#define SDL_HAPTIC_STATUS (1u<<14)
-
-/**
- * \brief Device can be paused.
- *
- * Devices supports being paused.
- *
- * \sa SDL_HapticPause
- * \sa SDL_HapticUnpause
- */
-#define SDL_HAPTIC_PAUSE (1u<<15)
-
-
-/**
- * \name Direction encodings
- */
-/* @{ */
-
-/**
- * \brief Uses polar coordinates for the direction.
- *
- * \sa SDL_HapticDirection
- */
-#define SDL_HAPTIC_POLAR 0
-
-/**
- * \brief Uses cartesian coordinates for the direction.
- *
- * \sa SDL_HapticDirection
- */
-#define SDL_HAPTIC_CARTESIAN 1
-
-/**
- * \brief Uses spherical coordinates for the direction.
- *
- * \sa SDL_HapticDirection
- */
-#define SDL_HAPTIC_SPHERICAL 2
-
-/**
- * \brief Use this value to play an effect on the steering wheel axis. This
- * provides better compatibility across platforms and devices as SDL will guess
- * the correct axis.
- * \sa SDL_HapticDirection
- */
-#define SDL_HAPTIC_STEERING_AXIS 3
-
-/* @} *//* Direction encodings */
-
-/* @} *//* Haptic features */
-
-/*
- * Misc defines.
- */
-
-/**
- * \brief Used to play a device an infinite number of times.
- *
- * \sa SDL_HapticRunEffect
- */
-#define SDL_HAPTIC_INFINITY 4294967295U
-
-
-/**
- * \brief Structure that represents a haptic direction.
- *
- * This is the direction where the force comes from,
- * instead of the direction in which the force is exerted.
- *
- * Directions can be specified by:
- * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates.
- * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates.
- * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates.
- *
- * Cardinal directions of the haptic device are relative to the positioning
- * of the device. North is considered to be away from the user.
- *
- * The following diagram represents the cardinal directions:
- * \verbatim
- .--.
- |__| .-------.
- |=.| |.-----.|
- |--| || ||
- | | |'-----'|
- |__|~')_____('
- [ COMPUTER ]
-
-
- North (0,-1)
- ^
- |
- |
- (-1,0) West <----[ HAPTIC ]----> East (1,0)
- |
- |
- v
- South (0,1)
-
-
- [ USER ]
- \|||/
- (o o)
- ---ooO-(_)-Ooo---
- \endverbatim
- *
- * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a
- * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses
- * the first \c dir parameter. The cardinal directions would be:
- * - North: 0 (0 degrees)
- * - East: 9000 (90 degrees)
- * - South: 18000 (180 degrees)
- * - West: 27000 (270 degrees)
- *
- * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions
- * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses
- * the first three \c dir parameters. The cardinal directions would be:
- * - North: 0,-1, 0
- * - East: 1, 0, 0
- * - South: 0, 1, 0
- * - West: -1, 0, 0
- *
- * The Z axis represents the height of the effect if supported, otherwise
- * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you
- * can use any multiple you want, only the direction matters.
- *
- * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations.
- * The first two \c dir parameters are used. The \c dir parameters are as
- * follows (all values are in hundredths of degrees):
- * - Degrees from (1, 0) rotated towards (0, 1).
- * - Degrees towards (0, 0, 1) (device needs at least 3 axes).
- *
- *
- * Example of force coming from the south with all encodings (force coming
- * from the south means the user will have to pull the stick to counteract):
- * \code
- * SDL_HapticDirection direction;
- *
- * // Cartesian directions
- * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding.
- * direction.dir[0] = 0; // X position
- * direction.dir[1] = 1; // Y position
- * // Assuming the device has 2 axes, we don't need to specify third parameter.
- *
- * // Polar directions
- * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding.
- * direction.dir[0] = 18000; // Polar only uses first parameter
- *
- * // Spherical coordinates
- * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding
- * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters.
- * \endcode
- *
- * \sa SDL_HAPTIC_POLAR
- * \sa SDL_HAPTIC_CARTESIAN
- * \sa SDL_HAPTIC_SPHERICAL
- * \sa SDL_HAPTIC_STEERING_AXIS
- * \sa SDL_HapticEffect
- * \sa SDL_HapticNumAxes
- */
-typedef struct SDL_HapticDirection
-{
- Uint8 type; /**< The type of encoding. */
- Sint32 dir[3]; /**< The encoded direction. */
-} SDL_HapticDirection;
-
-
-/**
- * \brief A structure containing a template for a Constant effect.
- *
- * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect.
- *
- * A constant effect applies a constant force in the specified direction
- * to the joystick.
- *
- * \sa SDL_HAPTIC_CONSTANT
- * \sa SDL_HapticEffect
- */
-typedef struct SDL_HapticConstant
-{
- /* Header */
- Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */
- SDL_HapticDirection direction; /**< Direction of the effect. */
-
- /* Replay */
- Uint32 length; /**< Duration of the effect. */
- Uint16 delay; /**< Delay before starting the effect. */
-
- /* Trigger */
- Uint16 button; /**< Button that triggers the effect. */
- Uint16 interval; /**< How soon it can be triggered again after button. */
-
- /* Constant */
- Sint16 level; /**< Strength of the constant effect. */
-
- /* Envelope */
- Uint16 attack_length; /**< Duration of the attack. */
- Uint16 attack_level; /**< Level at the start of the attack. */
- Uint16 fade_length; /**< Duration of the fade. */
- Uint16 fade_level; /**< Level at the end of the fade. */
-} SDL_HapticConstant;
-
-/**
- * \brief A structure containing a template for a Periodic effect.
- *
- * The struct handles the following effects:
- * - ::SDL_HAPTIC_SINE
- * - ::SDL_HAPTIC_LEFTRIGHT
- * - ::SDL_HAPTIC_TRIANGLE
- * - ::SDL_HAPTIC_SAWTOOTHUP
- * - ::SDL_HAPTIC_SAWTOOTHDOWN
- *
- * A periodic effect consists in a wave-shaped effect that repeats itself
- * over time. The type determines the shape of the wave and the parameters
- * determine the dimensions of the wave.
- *
- * Phase is given by hundredth of a degree meaning that giving the phase a value
- * of 9000 will displace it 25% of its period. Here are sample values:
- * - 0: No phase displacement.
- * - 9000: Displaced 25% of its period.
- * - 18000: Displaced 50% of its period.
- * - 27000: Displaced 75% of its period.
- * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred.
- *
- * Examples:
- * \verbatim
- SDL_HAPTIC_SINE
- __ __ __ __
- / \ / \ / \ /
- / \__/ \__/ \__/
-
- SDL_HAPTIC_SQUARE
- __ __ __ __ __
- | | | | | | | | | |
- | |__| |__| |__| |__| |
-
- SDL_HAPTIC_TRIANGLE
- /\ /\ /\ /\ /\
- / \ / \ / \ / \ /
- / \/ \/ \/ \/
-
- SDL_HAPTIC_SAWTOOTHUP
- /| /| /| /| /| /| /|
- / | / | / | / | / | / | / |
- / |/ |/ |/ |/ |/ |/ |
-
- SDL_HAPTIC_SAWTOOTHDOWN
- \ |\ |\ |\ |\ |\ |\ |
- \ | \ | \ | \ | \ | \ | \ |
- \| \| \| \| \| \| \|
- \endverbatim
- *
- * \sa SDL_HAPTIC_SINE
- * \sa SDL_HAPTIC_LEFTRIGHT
- * \sa SDL_HAPTIC_TRIANGLE
- * \sa SDL_HAPTIC_SAWTOOTHUP
- * \sa SDL_HAPTIC_SAWTOOTHDOWN
- * \sa SDL_HapticEffect
- */
-typedef struct SDL_HapticPeriodic
-{
- /* Header */
- Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT,
- ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or
- ::SDL_HAPTIC_SAWTOOTHDOWN */
- SDL_HapticDirection direction; /**< Direction of the effect. */
-
- /* Replay */
- Uint32 length; /**< Duration of the effect. */
- Uint16 delay; /**< Delay before starting the effect. */
-
- /* Trigger */
- Uint16 button; /**< Button that triggers the effect. */
- Uint16 interval; /**< How soon it can be triggered again after button. */
-
- /* Periodic */
- Uint16 period; /**< Period of the wave. */
- Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */
- Sint16 offset; /**< Mean value of the wave. */
- Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */
-
- /* Envelope */
- Uint16 attack_length; /**< Duration of the attack. */
- Uint16 attack_level; /**< Level at the start of the attack. */
- Uint16 fade_length; /**< Duration of the fade. */
- Uint16 fade_level; /**< Level at the end of the fade. */
-} SDL_HapticPeriodic;
-
-/**
- * \brief A structure containing a template for a Condition effect.
- *
- * The struct handles the following effects:
- * - ::SDL_HAPTIC_SPRING: Effect based on axes position.
- * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity.
- * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration.
- * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement.
- *
- * Direction is handled by condition internals instead of a direction member.
- * The condition effect specific members have three parameters. The first
- * refers to the X axis, the second refers to the Y axis and the third
- * refers to the Z axis. The right terms refer to the positive side of the
- * axis and the left terms refer to the negative side of the axis. Please
- * refer to the ::SDL_HapticDirection diagram for which side is positive and
- * which is negative.
- *
- * \sa SDL_HapticDirection
- * \sa SDL_HAPTIC_SPRING
- * \sa SDL_HAPTIC_DAMPER
- * \sa SDL_HAPTIC_INERTIA
- * \sa SDL_HAPTIC_FRICTION
- * \sa SDL_HapticEffect
- */
-typedef struct SDL_HapticCondition
-{
- /* Header */
- Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER,
- ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */
- SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */
-
- /* Replay */
- Uint32 length; /**< Duration of the effect. */
- Uint16 delay; /**< Delay before starting the effect. */
-
- /* Trigger */
- Uint16 button; /**< Button that triggers the effect. */
- Uint16 interval; /**< How soon it can be triggered again after button. */
-
- /* Condition */
- Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */
- Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */
- Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */
- Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */
- Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */
- Sint16 center[3]; /**< Position of the dead zone. */
-} SDL_HapticCondition;
-
-/**
- * \brief A structure containing a template for a Ramp effect.
- *
- * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect.
- *
- * The ramp effect starts at start strength and ends at end strength.
- * It augments in linear fashion. If you use attack and fade with a ramp
- * the effects get added to the ramp effect making the effect become
- * quadratic instead of linear.
- *
- * \sa SDL_HAPTIC_RAMP
- * \sa SDL_HapticEffect
- */
-typedef struct SDL_HapticRamp
-{
- /* Header */
- Uint16 type; /**< ::SDL_HAPTIC_RAMP */
- SDL_HapticDirection direction; /**< Direction of the effect. */
-
- /* Replay */
- Uint32 length; /**< Duration of the effect. */
- Uint16 delay; /**< Delay before starting the effect. */
-
- /* Trigger */
- Uint16 button; /**< Button that triggers the effect. */
- Uint16 interval; /**< How soon it can be triggered again after button. */
-
- /* Ramp */
- Sint16 start; /**< Beginning strength level. */
- Sint16 end; /**< Ending strength level. */
-
- /* Envelope */
- Uint16 attack_length; /**< Duration of the attack. */
- Uint16 attack_level; /**< Level at the start of the attack. */
- Uint16 fade_length; /**< Duration of the fade. */
- Uint16 fade_level; /**< Level at the end of the fade. */
-} SDL_HapticRamp;
-
-/**
- * \brief A structure containing a template for a Left/Right effect.
- *
- * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect.
- *
- * The Left/Right effect is used to explicitly control the large and small
- * motors, commonly found in modern game controllers. The small (right) motor
- * is high frequency, and the large (left) motor is low frequency.
- *
- * \sa SDL_HAPTIC_LEFTRIGHT
- * \sa SDL_HapticEffect
- */
-typedef struct SDL_HapticLeftRight
-{
- /* Header */
- Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */
-
- /* Replay */
- Uint32 length; /**< Duration of the effect in milliseconds. */
-
- /* Rumble */
- Uint16 large_magnitude; /**< Control of the large controller motor. */
- Uint16 small_magnitude; /**< Control of the small controller motor. */
-} SDL_HapticLeftRight;
-
-/**
- * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect.
- *
- * This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect.
- *
- * A custom force feedback effect is much like a periodic effect, where the
- * application can define its exact shape. You will have to allocate the
- * data yourself. Data should consist of channels * samples Uint16 samples.
- *
- * If channels is one, the effect is rotated using the defined direction.
- * Otherwise it uses the samples in data for the different axes.
- *
- * \sa SDL_HAPTIC_CUSTOM
- * \sa SDL_HapticEffect
- */
-typedef struct SDL_HapticCustom
-{
- /* Header */
- Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */
- SDL_HapticDirection direction; /**< Direction of the effect. */
-
- /* Replay */
- Uint32 length; /**< Duration of the effect. */
- Uint16 delay; /**< Delay before starting the effect. */
-
- /* Trigger */
- Uint16 button; /**< Button that triggers the effect. */
- Uint16 interval; /**< How soon it can be triggered again after button. */
-
- /* Custom */
- Uint8 channels; /**< Axes to use, minimum of one. */
- Uint16 period; /**< Sample periods. */
- Uint16 samples; /**< Amount of samples. */
- Uint16 *data; /**< Should contain channels*samples items. */
-
- /* Envelope */
- Uint16 attack_length; /**< Duration of the attack. */
- Uint16 attack_level; /**< Level at the start of the attack. */
- Uint16 fade_length; /**< Duration of the fade. */
- Uint16 fade_level; /**< Level at the end of the fade. */
-} SDL_HapticCustom;
-
-/**
- * \brief The generic template for any haptic effect.
- *
- * All values max at 32767 (0x7FFF). Signed values also can be negative.
- * Time values unless specified otherwise are in milliseconds.
- *
- * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767
- * value. Neither delay, interval, attack_length nor fade_length support
- * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends.
- *
- * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of
- * ::SDL_HAPTIC_INFINITY.
- *
- * Button triggers may not be supported on all devices, it is advised to not
- * use them if possible. Buttons start at index 1 instead of index 0 like
- * the joystick.
- *
- * If both attack_length and fade_level are 0, the envelope is not used,
- * otherwise both values are used.
- *
- * Common parts:
- * \code
- * // Replay - All effects have this
- * Uint32 length; // Duration of effect (ms).
- * Uint16 delay; // Delay before starting effect.
- *
- * // Trigger - All effects have this
- * Uint16 button; // Button that triggers effect.
- * Uint16 interval; // How soon before effect can be triggered again.
- *
- * // Envelope - All effects except condition effects have this
- * Uint16 attack_length; // Duration of the attack (ms).
- * Uint16 attack_level; // Level at the start of the attack.
- * Uint16 fade_length; // Duration of the fade out (ms).
- * Uint16 fade_level; // Level at the end of the fade.
- * \endcode
- *
- *
- * Here we have an example of a constant effect evolution in time:
- * \verbatim
- Strength
- ^
- |
- | effect level --> _________________
- | / \
- | / \
- | / \
- | / \
- | attack_level --> | \
- | | | <--- fade_level
- |
- +--------------------------------------------------> Time
- [--] [---]
- attack_length fade_length
-
- [------------------][-----------------------]
- delay length
- \endverbatim
- *
- * Note either the attack_level or the fade_level may be above the actual
- * effect level.
- *
- * \sa SDL_HapticConstant
- * \sa SDL_HapticPeriodic
- * \sa SDL_HapticCondition
- * \sa SDL_HapticRamp
- * \sa SDL_HapticLeftRight
- * \sa SDL_HapticCustom
- */
-typedef union SDL_HapticEffect
-{
- /* Common for all force feedback effects */
- Uint16 type; /**< Effect type. */
- SDL_HapticConstant constant; /**< Constant effect. */
- SDL_HapticPeriodic periodic; /**< Periodic effect. */
- SDL_HapticCondition condition; /**< Condition effect. */
- SDL_HapticRamp ramp; /**< Ramp effect. */
- SDL_HapticLeftRight leftright; /**< Left/Right effect. */
- SDL_HapticCustom custom; /**< Custom effect. */
-} SDL_HapticEffect;
-
-
-/* Function prototypes */
-
-/**
- * Count the number of haptic devices attached to the system.
- *
- * \returns the number of haptic devices detected on the system or a negative
- * error code on failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticName
- */
-extern DECLSPEC int SDLCALL SDL_NumHaptics(void);
-
-/**
- * Get the implementation dependent name of a haptic device.
- *
- * This can be called before any joysticks are opened. If no name can be
- * found, this function returns NULL.
- *
- * \param device_index index of the device to query.
- * \returns the name of the device or NULL on failure; call SDL_GetError() for
- * more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_NumHaptics
- */
-extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index);
-
-/**
- * Open a haptic device for use.
- *
- * The index passed as an argument refers to the N'th haptic device on this
- * system.
- *
- * When opening a haptic device, its gain will be set to maximum and
- * autocenter will be disabled. To modify these values use SDL_HapticSetGain()
- * and SDL_HapticSetAutocenter().
- *
- * \param device_index index of the device to open
- * \returns the device identifier or NULL on failure; call SDL_GetError() for
- * more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticClose
- * \sa SDL_HapticIndex
- * \sa SDL_HapticOpenFromJoystick
- * \sa SDL_HapticOpenFromMouse
- * \sa SDL_HapticPause
- * \sa SDL_HapticSetAutocenter
- * \sa SDL_HapticSetGain
- * \sa SDL_HapticStopAll
- */
-extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index);
-
-/**
- * Check if the haptic device at the designated index has been opened.
- *
- * \param device_index the index of the device to query
- * \returns 1 if it has been opened, 0 if it hasn't or on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticIndex
- * \sa SDL_HapticOpen
- */
-extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index);
-
-/**
- * Get the index of a haptic device.
- *
- * \param haptic the SDL_Haptic device to query
- * \returns the index of the specified haptic device or a negative error code
- * on failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticOpen
- * \sa SDL_HapticOpened
- */
-extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic);
-
-/**
- * Query whether or not the current mouse has haptic capabilities.
- *
- * \returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticOpenFromMouse
- */
-extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void);
-
-/**
- * Try to open a haptic device from the current mouse.
- *
- * \returns the haptic device identifier or NULL on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticOpen
- * \sa SDL_MouseIsHaptic
- */
-extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void);
-
-/**
- * Query if a joystick has haptic features.
- *
- * \param joystick the SDL_Joystick to test for haptic capabilities
- * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a
- * negative error code on failure; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticOpenFromJoystick
- */
-extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick);
-
-/**
- * Open a haptic device for use from a joystick device.
- *
- * You must still close the haptic device separately. It will not be closed
- * with the joystick.
- *
- * When opened from a joystick you should first close the haptic device before
- * closing the joystick device. If not, on some implementations the haptic
- * device will also get unallocated and you'll be unable to use force feedback
- * on that device.
- *
- * \param joystick the SDL_Joystick to create a haptic device from
- * \returns a valid haptic device identifier on success or NULL on failure;
- * call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticClose
- * \sa SDL_HapticOpen
- * \sa SDL_JoystickIsHaptic
- */
-extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick *
- joystick);
-
-/**
- * Close a haptic device previously opened with SDL_HapticOpen().
- *
- * \param haptic the SDL_Haptic device to close
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticOpen
- */
-extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic);
-
-/**
- * Get the number of effects a haptic device can store.
- *
- * On some platforms this isn't fully supported, and therefore is an
- * approximation. Always check to see if your created effect was actually
- * created and do not rely solely on SDL_HapticNumEffects().
- *
- * \param haptic the SDL_Haptic device to query
- * \returns the number of effects the haptic device can store or a negative
- * error code on failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticNumEffectsPlaying
- * \sa SDL_HapticQuery
- */
-extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic);
-
-/**
- * Get the number of effects a haptic device can play at the same time.
- *
- * This is not supported on all platforms, but will always return a value.
- *
- * \param haptic the SDL_Haptic device to query maximum playing effects
- * \returns the number of effects the haptic device can play at the same time
- * or a negative error code on failure; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticNumEffects
- * \sa SDL_HapticQuery
- */
-extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic);
-
-/**
- * Get the haptic device's supported features in bitwise manner.
- *
- * \param haptic the SDL_Haptic device to query
- * \returns a list of supported haptic features in bitwise manner (OR'd), or 0
- * on failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticEffectSupported
- * \sa SDL_HapticNumEffects
- */
-extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic);
-
-
-/**
- * Get the number of haptic axes the device has.
- *
- * The number of haptic axes might be useful if working with the
- * SDL_HapticDirection effect.
- *
- * \param haptic the SDL_Haptic device to query
- * \returns the number of axes on success or a negative error code on failure;
- * call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic);
-
-/**
- * Check to see if an effect is supported by a haptic device.
- *
- * \param haptic the SDL_Haptic device to query
- * \param effect the desired effect to query
- * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a
- * negative error code on failure; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticNewEffect
- * \sa SDL_HapticQuery
- */
-extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic,
- SDL_HapticEffect *
- effect);
-
-/**
- * Create a new haptic effect on a specified device.
- *
- * \param haptic an SDL_Haptic device to create the effect on
- * \param effect an SDL_HapticEffect structure containing the properties of
- * the effect to create
- * \returns the ID of the effect on success or a negative error code on
- * failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticDestroyEffect
- * \sa SDL_HapticRunEffect
- * \sa SDL_HapticUpdateEffect
- */
-extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic,
- SDL_HapticEffect * effect);
-
-/**
- * Update the properties of an effect.
- *
- * Can be used dynamically, although behavior when dynamically changing
- * direction may be strange. Specifically the effect may re-upload itself and
- * start playing from the start. You also cannot change the type either when
- * running SDL_HapticUpdateEffect().
- *
- * \param haptic the SDL_Haptic device that has the effect
- * \param effect the identifier of the effect to update
- * \param data an SDL_HapticEffect structure containing the new effect
- * properties to use
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticDestroyEffect
- * \sa SDL_HapticNewEffect
- * \sa SDL_HapticRunEffect
- */
-extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic,
- int effect,
- SDL_HapticEffect * data);
-
-/**
- * Run the haptic effect on its associated haptic device.
- *
- * To repeat the effect over and over indefinitely, set `iterations` to
- * `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make
- * one instance of the effect last indefinitely (so the effect does not fade),
- * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY`
- * instead.
- *
- * \param haptic the SDL_Haptic device to run the effect on
- * \param effect the ID of the haptic effect to run
- * \param iterations the number of iterations to run the effect; use
- * `SDL_HAPTIC_INFINITY` to repeat forever
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticDestroyEffect
- * \sa SDL_HapticGetEffectStatus
- * \sa SDL_HapticStopEffect
- */
-extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic,
- int effect,
- Uint32 iterations);
-
-/**
- * Stop the haptic effect on its associated haptic device.
- *
- * *
- *
- * \param haptic the SDL_Haptic device to stop the effect on
- * \param effect the ID of the haptic effect to stop
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticDestroyEffect
- * \sa SDL_HapticRunEffect
- */
-extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic,
- int effect);
-
-/**
- * Destroy a haptic effect on the device.
- *
- * This will stop the effect if it's running. Effects are automatically
- * destroyed when the device is closed.
- *
- * \param haptic the SDL_Haptic device to destroy the effect on
- * \param effect the ID of the haptic effect to destroy
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticNewEffect
- */
-extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic,
- int effect);
-
-/**
- * Get the status of the current effect on the specified haptic device.
- *
- * Device must support the SDL_HAPTIC_STATUS feature.
- *
- * \param haptic the SDL_Haptic device to query for the effect status on
- * \param effect the ID of the haptic effect to query its status
- * \returns 0 if it isn't playing, 1 if it is playing, or a negative error
- * code on failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticRunEffect
- * \sa SDL_HapticStopEffect
- */
-extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic,
- int effect);
-
-/**
- * Set the global gain of the specified haptic device.
- *
- * Device must support the SDL_HAPTIC_GAIN feature.
- *
- * The user may specify the maximum gain by setting the environment variable
- * `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to
- * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the
- * maximum.
- *
- * \param haptic the SDL_Haptic device to set the gain on
- * \param gain value to set the gain to, should be between 0 and 100 (0 - 100)
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticQuery
- */
-extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain);
-
-/**
- * Set the global autocenter of the device.
- *
- * Autocenter should be between 0 and 100. Setting it to 0 will disable
- * autocentering.
- *
- * Device must support the SDL_HAPTIC_AUTOCENTER feature.
- *
- * \param haptic the SDL_Haptic device to set autocentering on
- * \param autocenter value to set autocenter to (0-100)
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticQuery
- */
-extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic,
- int autocenter);
-
-/**
- * Pause a haptic device.
- *
- * Device must support the `SDL_HAPTIC_PAUSE` feature. Call
- * SDL_HapticUnpause() to resume playback.
- *
- * Do not modify the effects nor add new ones while the device is paused. That
- * can cause all sorts of weird errors.
- *
- * \param haptic the SDL_Haptic device to pause
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticUnpause
- */
-extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic);
-
-/**
- * Unpause a haptic device.
- *
- * Call to unpause after SDL_HapticPause().
- *
- * \param haptic the SDL_Haptic device to unpause
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticPause
- */
-extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic);
-
-/**
- * Stop all the currently playing effects on a haptic device.
- *
- * \param haptic the SDL_Haptic device to stop
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic);
-
-/**
- * Check whether rumble is supported on a haptic device.
- *
- * \param haptic haptic device to check for rumble support
- * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a
- * negative error code on failure; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticRumbleInit
- * \sa SDL_HapticRumblePlay
- * \sa SDL_HapticRumbleStop
- */
-extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic);
-
-/**
- * Initialize a haptic device for simple rumble playback.
- *
- * \param haptic the haptic device to initialize for simple rumble playback
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticOpen
- * \sa SDL_HapticRumblePlay
- * \sa SDL_HapticRumbleStop
- * \sa SDL_HapticRumbleSupported
- */
-extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic);
-
-/**
- * Run a simple rumble effect on a haptic device.
- *
- * \param haptic the haptic device to play the rumble effect on
- * \param strength strength of the rumble to play as a 0-1 float value
- * \param length length of the rumble to play in milliseconds
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticRumbleInit
- * \sa SDL_HapticRumbleStop
- * \sa SDL_HapticRumbleSupported
- */
-extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length );
-
-/**
- * Stop the simple rumble on a haptic device.
- *
- * \param haptic the haptic device to stop the rumble effect on
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HapticRumbleInit
- * \sa SDL_HapticRumblePlay
- * \sa SDL_HapticRumbleSupported
- */
-extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_haptic_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_hidapi.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_hidapi.h
deleted file mode 100644
index 1d7b2224..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_hidapi.h
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_hidapi.h
- *
- * \brief Header file for SDL HIDAPI functions.
- *
- * This is an adaptation of the original HIDAPI interface by Alan Ott,
- * and includes source code licensed under the following BSD license:
- *
- Copyright (c) 2010, Alan Ott, Signal 11 Software
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Signal 11 Software nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- *
- * If you would like a version of SDL without this code, you can build SDL
- * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example
- * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework.
- */
-
-#ifndef SDL_hidapi_h_
-#define SDL_hidapi_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief A handle representing an open HID device
- */
-struct SDL_hid_device_;
-typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */
-
-/**
- * \brief HID underlying bus types.
- */
-typedef enum {
- /** Unknown bus type */
- SDL_HID_API_BUS_UNKNOWN = 0x00,
-
- /** USB bus
- Specifications:
- https://usb.org/hid */
- SDL_HID_API_BUS_USB = 0x01,
-
- /** Bluetooth or Bluetooth LE bus
- Specifications:
- https://www.bluetooth.com/specifications/specs/human-interface-device-profile-1-1-1/
- https://www.bluetooth.com/specifications/specs/hid-service-1-0/
- https://www.bluetooth.com/specifications/specs/hid-over-gatt-profile-1-0/ */
- SDL_HID_API_BUS_BLUETOOTH = 0x02,
-
- /** I2C bus
- Specifications:
- https://docs.microsoft.com/previous-versions/windows/hardware/design/dn642101(v=vs.85) */
- SDL_HID_API_BUS_I2C = 0x03,
-
- /** SPI bus
- Specifications:
- https://www.microsoft.com/download/details.aspx?id=103325 */
- SDL_HID_API_BUS_SPI = 0x04
-
-} SDL_hid_bus_type;
-
-/** hidapi info structure */
-/**
- * \brief Information about a connected HID device
- */
-typedef struct SDL_hid_device_info
-{
- /** Platform-specific device path */
- char *path;
- /** Device Vendor ID */
- unsigned short vendor_id;
- /** Device Product ID */
- unsigned short product_id;
- /** Serial Number */
- wchar_t *serial_number;
- /** Device Release Number in binary-coded decimal,
- also known as Device Version Number */
- unsigned short release_number;
- /** Manufacturer String */
- wchar_t *manufacturer_string;
- /** Product string */
- wchar_t *product_string;
- /** Usage Page for this Device/Interface
- (Windows/Mac/hidraw only) */
- unsigned short usage_page;
- /** Usage for this Device/Interface
- (Windows/Mac/hidraw only) */
- unsigned short usage;
- /** The USB interface which this logical device
- represents.
-
- Valid only if the device is a USB HID device.
- Set to -1 in all other cases.
- */
- int interface_number;
-
- /** Additional information about the USB interface.
- Valid on libusb and Android implementations. */
- int interface_class;
- int interface_subclass;
- int interface_protocol;
-
- /** Underlying bus type */
- SDL_hid_bus_type bus_type;
-
- /** Pointer to the next device */
- struct SDL_hid_device_info *next;
-
-} SDL_hid_device_info;
-
-
-/**
- * Initialize the HIDAPI library.
- *
- * This function initializes the HIDAPI library. Calling it is not strictly
- * necessary, as it will be called automatically by SDL_hid_enumerate() and
- * any of the SDL_hid_open_*() functions if it is needed. This function should
- * be called at the beginning of execution however, if there is a chance of
- * HIDAPI handles being opened by different threads simultaneously.
- *
- * Each call to this function should have a matching call to SDL_hid_exit()
- *
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_hid_exit
- */
-extern DECLSPEC int SDLCALL SDL_hid_init(void);
-
-/**
- * Finalize the HIDAPI library.
- *
- * This function frees all of the static data associated with HIDAPI. It
- * should be called at the end of execution to avoid memory leaks.
- *
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_hid_init
- */
-extern DECLSPEC int SDLCALL SDL_hid_exit(void);
-
-/**
- * Check to see if devices may have been added or removed.
- *
- * Enumerating the HID devices is an expensive operation, so you can call this
- * to see if there have been any system device changes since the last call to
- * this function. A change in the counter returned doesn't necessarily mean
- * that anything has changed, but you can call SDL_hid_enumerate() to get an
- * updated device list.
- *
- * Calling this function for the first time may cause a thread or other system
- * resource to be allocated to track device change notifications.
- *
- * \returns a change counter that is incremented with each potential device
- * change, or 0 if device change detection isn't available.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_hid_enumerate
- */
-extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void);
-
-/**
- * Enumerate the HID Devices.
- *
- * This function returns a linked list of all the HID devices attached to the
- * system which match vendor_id and product_id. If `vendor_id` is set to 0
- * then any vendor matches. If `product_id` is set to 0 then any product
- * matches. If `vendor_id` and `product_id` are both set to 0, then all HID
- * devices will be returned.
- *
- * By default SDL will only enumerate controllers, to reduce risk of hanging
- * or crashing on bad drivers, but SDL_HINT_HIDAPI_ENUMERATE_ONLY_CONTROLLERS
- * can be set to "0" to enumerate all HID devices.
- *
- * \param vendor_id The Vendor ID (VID) of the types of device to open, or 0
- * to match any vendor.
- * \param product_id The Product ID (PID) of the types of device to open, or 0
- * to match any product.
- * \returns a pointer to a linked list of type SDL_hid_device_info, containing
- * information about the HID devices attached to the system, or NULL
- * in the case of failure. Free this linked list by calling
- * SDL_hid_free_enumeration().
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_hid_device_change_count
- */
-extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id);
-
-/**
- * Free an enumeration Linked List
- *
- * This function frees a linked list created by SDL_hid_enumerate().
- *
- * \param devs Pointer to a list of struct_device returned from
- * SDL_hid_enumerate().
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs);
-
-/**
- * Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally
- * a serial number.
- *
- * If `serial_number` is NULL, the first device with the specified VID and PID
- * is opened.
- *
- * \param vendor_id The Vendor ID (VID) of the device to open.
- * \param product_id The Product ID (PID) of the device to open.
- * \param serial_number The Serial Number of the device to open (Optionally
- * NULL).
- * \returns a pointer to a SDL_hid_device object on success or NULL on
- * failure.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number);
-
-/**
- * Open a HID device by its path name.
- *
- * The path name be determined by calling SDL_hid_enumerate(), or a
- * platform-specific path name can be used (eg: /dev/hidraw0 on Linux).
- *
- * \param path The path name of the device to open
- * \returns a pointer to a SDL_hid_device object on success or NULL on
- * failure.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path);
-
-/**
- * Write an Output report to a HID device.
- *
- * The first byte of `data` must contain the Report ID. For devices which only
- * support a single report, this must be set to 0x0. The remaining bytes
- * contain the report data. Since the Report ID is mandatory, calls to
- * SDL_hid_write() will always contain one more byte than the report contains.
- * For example, if a hid report is 16 bytes long, 17 bytes must be passed to
- * SDL_hid_write(), the Report ID (or 0x0, for devices with a single report),
- * followed by the report data (16 bytes). In this example, the length passed
- * in would be 17.
- *
- * SDL_hid_write() will send the data on the first OUT endpoint, if one
- * exists. If it does not, it will send the data through the Control Endpoint
- * (Endpoint 0).
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param data The data to send, including the report number as the first
- * byte.
- * \param length The length in bytes of the data to send.
- * \returns the actual number of bytes written and -1 on error.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length);
-
-/**
- * Read an Input report from a HID device with timeout.
- *
- * Input reports are returned to the host through the INTERRUPT IN endpoint.
- * The first byte will contain the Report number if the device uses numbered
- * reports.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param data A buffer to put the read data into.
- * \param length The number of bytes to read. For devices with multiple
- * reports, make sure to read an extra byte for the report
- * number.
- * \param milliseconds timeout in milliseconds or -1 for blocking wait.
- * \returns the actual number of bytes read and -1 on error. If no packet was
- * available to be read within the timeout period, this function
- * returns 0.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds);
-
-/**
- * Read an Input report from a HID device.
- *
- * Input reports are returned to the host through the INTERRUPT IN endpoint.
- * The first byte will contain the Report number if the device uses numbered
- * reports.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param data A buffer to put the read data into.
- * \param length The number of bytes to read. For devices with multiple
- * reports, make sure to read an extra byte for the report
- * number.
- * \returns the actual number of bytes read and -1 on error. If no packet was
- * available to be read and the handle is in non-blocking mode, this
- * function returns 0.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length);
-
-/**
- * Set the device handle to be non-blocking.
- *
- * In non-blocking mode calls to SDL_hid_read() will return immediately with a
- * value of 0 if there is no data to be read. In blocking mode, SDL_hid_read()
- * will wait (block) until there is data to read before returning.
- *
- * Nonblocking can be turned on and off at any time.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param nonblock enable or not the nonblocking reads - 1 to enable
- * nonblocking - 0 to disable nonblocking.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock);
-
-/**
- * Send a Feature report to the device.
- *
- * Feature reports are sent over the Control endpoint as a Set_Report
- * transfer. The first byte of `data` must contain the Report ID. For devices
- * which only support a single report, this must be set to 0x0. The remaining
- * bytes contain the report data. Since the Report ID is mandatory, calls to
- * SDL_hid_send_feature_report() will always contain one more byte than the
- * report contains. For example, if a hid report is 16 bytes long, 17 bytes
- * must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for
- * devices which do not use numbered reports), followed by the report data (16
- * bytes). In this example, the length passed in would be 17.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param data The data to send, including the report number as the first
- * byte.
- * \param length The length in bytes of the data to send, including the report
- * number.
- * \returns the actual number of bytes written and -1 on error.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length);
-
-/**
- * Get a feature report from a HID device.
- *
- * Set the first byte of `data` to the Report ID of the report to be read.
- * Make sure to allow space for this extra byte in `data`. Upon return, the
- * first byte will still contain the Report ID, and the report data will start
- * in data[1].
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param data A buffer to put the read data into, including the Report ID.
- * Set the first byte of `data` to the Report ID of the report to
- * be read, or set it to zero if your device does not use numbered
- * reports.
- * \param length The number of bytes to read, including an extra byte for the
- * report ID. The buffer can be longer than the actual report.
- * \returns the number of bytes read plus one for the report ID (which is
- * still in the first byte), or -1 on error.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length);
-
-/**
- * Get an input report from a HID device.
- *
- * Set the first byte of `data` to the Report ID of the report to be read.
- * Make sure to allow space for this extra byte in `data`. Upon return, the
- * first byte will still contain the Report ID, and the report data will start
- * in data[1].
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param data A buffer to put the read data into, including the Report ID.
- * Set the first byte of `data` to the Report ID of the report to
- * be read, or set it to zero if your device does not use numbered
- * reports.
- * \param length The number of bytes to read, including an extra byte for the
- * report ID. The buffer can be longer than the actual report.
- * \returns the number of bytes read plus one for the report ID (which is
- * still in the first byte), or -1 on error.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_get_input_report(SDL_hid_device *dev, unsigned char *data, size_t length);
-
-/**
- * Close a HID device.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_close(SDL_hid_device *dev);
-
-/**
- * Get The Manufacturer String from a HID device.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param string A wide string buffer to put the data into.
- * \param maxlen The length of the buffer in multiples of wchar_t.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
-
-/**
- * Get The Product String from a HID device.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param string A wide string buffer to put the data into.
- * \param maxlen The length of the buffer in multiples of wchar_t.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
-
-/**
- * Get The Serial Number String from a HID device.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param string A wide string buffer to put the data into.
- * \param maxlen The length of the buffer in multiples of wchar_t.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
-
-/**
- * Get a string from a HID device, based on its string index.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param string_index The index of the string to get.
- * \param string A wide string buffer to put the data into.
- * \param maxlen The length of the buffer in multiples of wchar_t.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen);
-
-/**
- * Get the device info from a HID device.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \returns a pointer to the SDL_hid_device_info for this hid_device, or NULL
- * in the case of failure; call SDL_GetError() for more information.
- * This struct is valid until the device is closed with
- * SDL_hid_close().
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_get_device_info(SDL_hid_device *dev);
-
-/**
- * Get a report descriptor from a HID device.
- *
- * User has to provide a preallocated buffer where descriptor will be copied
- * to. The recommended size for a preallocated buffer is 4096 bytes.
- *
- * \param dev A device handle returned from SDL_hid_open().
- * \param buf The buffer to copy descriptor into.
- * \param buf_size The size of the buffer in bytes.
- * \returns the number of bytes actually copied, or -1 on error; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_hid_get_report_descriptor(SDL_hid_device *dev, unsigned char *buf, size_t buf_size);
-
-/**
- * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers
- *
- * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_hidapi_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_hints.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_hints.h
deleted file mode 100644
index f57a165f..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_hints.h
+++ /dev/null
@@ -1,2681 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_hints.h
- *
- * \brief Official documentation for SDL configuration variables
- *
- * This file contains functions to set and get configuration hints,
- * as well as listing each of them alphabetically.
- *
- * The convention for naming hints is SDL_HINT_X, where "SDL_X" is
- * the environment variable that can be used to override the default.
- *
- * In general these hints are just that - they may or may not be
- * supported or applicable on any given platform, but they provide
- * a way for an application or user to give the library a hint as
- * to how they would like the library to work.
- */
-
-#ifndef SDL_hints_h_
-#define SDL_hints_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief A variable controlling whether the Android / iOS built-in
- * accelerometer should be listed as a joystick device.
- *
- * This variable can be set to the following values:
- * "0" - The accelerometer is not listed as a joystick
- * "1" - The accelerometer is available as a 3 axis joystick (the default).
- */
-#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK"
-
-/**
- * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed.
- *
- * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed
- * and your window is full-screen. This prevents the user from getting stuck in
- * your application if you've enabled keyboard grab.
- *
- * The variable can be set to the following values:
- * "0" - SDL will not handle Alt+Tab. Your application is responsible
- for handling Alt+Tab while the keyboard is grabbed.
- * "1" - SDL will minimize your window when Alt+Tab is pressed (default)
-*/
-#define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED"
-
-/**
- * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it.
- * This is a debugging aid for developers and not expected to be used by end users. The default is "1"
- *
- * This variable can be set to the following values:
- * "0" - don't allow topmost
- * "1" - allow topmost
- */
-#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST"
-
-/**
- * \brief A variable to control whether the event loop will block itself when the app is paused.
- *
- * The variable can be set to the following values:
- * "0" - Non blocking.
- * "1" - Blocking. (default)
- *
- * The value should be set before SDL is initialized.
- */
-#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE"
-
-/**
- * \brief A variable to control whether SDL will pause audio in background
- * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
- *
- * The variable can be set to the following values:
- * "0" - Non paused.
- * "1" - Paused. (default)
- *
- * The value should be set before SDL is initialized.
- */
-#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO"
-
-/**
- * \brief A variable to control whether we trap the Android back button to handle it manually.
- * This is necessary for the right mouse button to work on some Android devices, or
- * to be able to trap the back button for use in your code reliably. If set to true,
- * the back button will show up as an SDL_EVENT_KEY_DOWN / SDL_EVENT_KEY_UP pair with a keycode of
- * SDL_SCANCODE_AC_BACK.
- *
- * The variable can be set to the following values:
- * "0" - Back button will be handled as usual for system. (default)
- * "1" - Back button will be trapped, allowing you to handle the key press
- * manually. (This will also let right mouse click work on systems
- * where the right mouse button functions as back.)
- *
- * The value of this hint is used at runtime, so it can be changed at any time.
- */
-#define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON"
-
-/**
- * \brief A variable to control whether SDL activity is allowed to be re-created.
- * If so, java static datas and static datas from native libraries remain with their current values.
- * When not allowed, the activity terminates with exit(0) to be fully re-initialized afterward.
- *
- * The variable can be set to the following values:
- * "0" - Not allowed. (default)
- * "1" - Allowed.
- *
- * The value of this hint is used at runtime, so it can be changed at any time.
- */
-#define SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY "SDL_ANDROID_ALLOW_RECREATE_ACTIVITY"
-
-/**
- * \brief A variable setting the app ID string.
- * This string is used by desktop compositors to identify and group windows
- * together, as well as match applications with associated desktop settings
- * and icons.
- *
- * On Wayland this corresponds to the "app ID" window property and on X11 this
- * corresponds to the WM_CLASS property. Windows inherit the value of this hint
- * at creation time. Changing this hint after a window has been created will not
- * change the app ID or class of existing windows.
- *
- * For *nix platforms, this string should be formatted in reverse-DNS notation
- * and follow some basic rules to be valid:
- *
- * - The application ID must be composed of two or more elements separated by a
- * period (‘.’) character.
- *
- * - Each element must contain one or more of the alphanumeric characters
- * (A-Z, a-z, 0-9) plus underscore (‘_’) and hyphen (‘-’) and must not start
- * with a digit. Note that hyphens, while technically allowed, should not be
- * used if possible, as they are not supported by all components that use the ID,
- * such as D-Bus. For maximum compatibility, replace hyphens with an underscore.
- *
- * - The empty string is not a valid element (ie: your application ID may not
- * start or end with a period and it is not valid to have two periods in a row).
- *
- * - The entire ID must be less than 255 characters in length.
- *
- * Examples of valid app ID strings:
- *
- * - org.MyOrg.MyApp
- * - com.your_company.your_app
- *
- * Desktops such as GNOME and KDE require that the app ID string matches your
- * application's .desktop file name (e.g. if the app ID string is 'org.MyOrg.MyApp',
- * your application's .desktop file should be named 'org.MyOrg.MyApp.desktop').
- *
- * If you plan to package your application in a container such as Flatpak, the
- * app ID should match the name of your Flatpak container as well.
- *
- * If not set, SDL will attempt to use the application executable name.
- * If the executable name cannot be retrieved, the generic string "SDL_App" will be used.
- *
- * On targets where this is not supported, this hint does nothing.
- */
-#define SDL_HINT_APP_ID "SDL_APP_ID"
-
-/**
- * \brief Specify an application name.
- *
- * This hint lets you specify the application name sent to the OS when
- * required. For example, this will often appear in volume control applets for
- * audio streams, and in lists of applications which are inhibiting the
- * screensaver. You should use a string that describes your program ("My Game
- * 2: The Revenge")
- *
- * Setting this to "" or leaving it unset will have SDL use a reasonable
- * default: probably the application's name or "SDL Application" if SDL
- * doesn't have any better information.
- *
- * Note that, for audio streams, this can be overridden with
- * SDL_HINT_AUDIO_DEVICE_APP_NAME.
- *
- * On targets where this is not supported, this hint does nothing.
- */
-#define SDL_HINT_APP_NAME "SDL_APP_NAME"
-
-/**
- * \brief A variable controlling whether controllers used with the Apple TV
- * generate UI events.
- *
- * When UI events are generated by controller input, the app will be
- * backgrounded when the Apple TV remote's menu button is pressed, and when the
- * pause or B buttons on gamepads are pressed.
- *
- * More information about properly making use of controllers for the Apple TV
- * can be found here:
- * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
- *
- * This variable can be set to the following values:
- * "0" - Controller input does not generate UI events (the default).
- * "1" - Controller input generates UI events.
- */
-#define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS"
-
-/**
- * \brief A variable controlling whether the Apple TV remote's joystick axes
- * will automatically match the rotation of the remote.
- *
- * This variable can be set to the following values:
- * "0" - Remote orientation does not affect joystick axes (the default).
- * "1" - Joystick axes are based on the orientation of the remote.
- */
-#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION"
-
-/**
- * \brief A variable controlling the audio category on iOS and macOS
- *
- * This variable can be set to the following values:
- *
- * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default)
- * "playback" - Use the AVAudioSessionCategoryPlayback category
- *
- * For more information, see Apple's documentation:
- * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
- */
-#define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY"
-
-/**
- * \brief Specify an application name for an audio device.
- *
- * Some audio backends (such as PulseAudio) allow you to describe your audio
- * stream. Among other things, this description might show up in a system
- * control panel that lets the user adjust the volume on specific audio
- * streams instead of using one giant master volume slider.
- *
- * This hints lets you transmit that information to the OS. The contents of
- * this hint are used while opening an audio device. You should use a string
- * that describes your program ("My Game 2: The Revenge")
- *
- * Setting this to "" or leaving it unset will have SDL use a reasonable
- * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is
- * set. Otherwise, it'll probably the application's name or "SDL Application"
- * if SDL doesn't have any better information.
- *
- * On targets where this is not supported, this hint does nothing.
- */
-#define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME"
-
-/**
- * \brief Specify an application name for an audio device.
- *
- * Some audio backends (such as PulseAudio) allow you to describe your audio
- * stream. Among other things, this description might show up in a system
- * control panel that lets the user adjust the volume on specific audio
- * streams instead of using one giant master volume slider.
- *
- * This hints lets you transmit that information to the OS. The contents of
- * this hint are used while opening an audio device. You should use a string
- * that describes your what your program is playing ("audio stream" is
- * probably sufficient in many cases, but this could be useful for something
- * like "team chat" if you have a headset playing VoIP audio separately).
- *
- * Setting this to "" or leaving it unset will have SDL use a reasonable
- * default: "audio stream" or something similar.
- *
- * On targets where this is not supported, this hint does nothing.
- */
-#define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME"
-
-/**
- * \brief Specify an application role for an audio device.
- *
- * Some audio backends (such as Pipewire) allow you to describe the role of
- * your audio stream. Among other things, this description might show up in
- * a system control panel or software for displaying and manipulating media
- * playback/capture graphs.
- *
- * This hints lets you transmit that information to the OS. The contents of
- * this hint are used while opening an audio device. You should use a string
- * that describes your what your program is playing (Game, Music, Movie,
- * etc...).
- *
- * Setting this to "" or leaving it unset will have SDL use a reasonable
- * default: "Game" or something similar.
- *
- * On targets where this is not supported, this hint does nothing.
- */
-#define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE"
-
-/**
- * \brief A variable controlling whether SDL updates joystick state when getting input events
- *
- * This variable can be set to the following values:
- *
- * "0" - You'll call SDL_UpdateJoysticks() manually
- * "1" - SDL will automatically call SDL_UpdateJoysticks() (default)
- *
- * This hint can be toggled on and off at runtime.
- */
-#define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS"
-
-/**
- * \brief A variable controlling whether SDL updates sensor state when getting input events
- *
- * This variable can be set to the following values:
- *
- * "0" - You'll call SDL_UpdateSensors() manually
- * "1" - SDL will automatically call SDL_UpdateSensors() (default)
- *
- * This hint can be toggled on and off at runtime.
- */
-#define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS"
-
-/**
- * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
- *
- * The bitmap header version 4 is required for proper alpha channel support and
- * SDL will use it when required. Should this not be desired, this hint can
- * force the use of the 40 byte header version which is supported everywhere.
- *
- * The variable can be set to the following values:
- * "0" - Surfaces with a colorkey or an alpha channel are saved to a
- * 32-bit BMP file with an alpha mask. SDL will use the bitmap
- * header version 4 and set the alpha mask accordingly.
- * "1" - Surfaces with a colorkey or an alpha channel are saved to a
- * 32-bit BMP file without an alpha mask. The alpha channel data
- * will be in the file, but applications are going to ignore it.
- *
- * The default value is "0".
- */
-#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT"
-
-/**
- * \brief Override for SDL_GetDisplayUsableBounds()
- *
- * If set, this hint will override the expected results for
- * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
- * to do this, but this allows an embedded system to request that some of the
- * screen be reserved for other uses when paired with a well-behaved
- * application.
- *
- * The contents of this hint must be 4 comma-separated integers, the first
- * is the bounds x, then y, width and height, in that order.
- */
-#define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS"
-
-/**
- * \brief Disable giving back control to the browser automatically
- * when running with asyncify
- *
- * With -s ASYNCIFY, SDL calls emscripten_sleep during operations
- * such as refreshing the screen or polling events.
- *
- * This hint only applies to the emscripten platform
- *
- * The variable can be set to the following values:
- * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
- * "1" - Enable emscripten_sleep calls (the default)
- */
-#define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY"
-
-/**
- * \brief Specify the CSS selector used for the "default" window/canvas
- *
- * This hint only applies to the emscripten platform
- *
- * The default value is "#canvas"
- */
-#define SDL_HINT_EMSCRIPTEN_CANVAS_SELECTOR "SDL_EMSCRIPTEN_CANVAS_SELECTOR"
-
-/**
- * \brief override the binding element for keyboard inputs for Emscripten builds
- *
- * This hint only applies to the emscripten platform
- *
- * The variable can be one of
- * "#window" - The javascript window object (this is the default)
- * "#document" - The javascript document object
- * "#screen" - the javascript window.screen object
- * "#canvas" - the WebGL canvas element
- * any other string without a leading # sign applies to the element on the page with that ID.
- */
-#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
-
-/**
- * \brief A variable that controls whether the on-screen keyboard should be shown when text input is active
- *
- * The variable can be set to the following values:
- * "0" - Do not show the on-screen keyboard
- * "1" - Show the on-screen keyboard
- *
- * The default value is "1". This hint must be set before text input is activated.
- */
-#define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD"
-
-/**
- * \brief A variable controlling verbosity of the logging of SDL events pushed onto the internal queue.
- *
- * This variable can be set to the following values, from least to most verbose:
- *
- * "0" - Don't log any events (default)
- * "1" - Log most events (other than the really spammy ones).
- * "2" - Include mouse and finger motion events.
- * "3" - Include SDL_SysWMEvent events.
- *
- * This is generally meant to be used to debug SDL itself, but can be useful
- * for application developers that need better visibility into what is going
- * on in the event queue. Logged events are sent through SDL_Log(), which
- * means by default they appear on stdout on most platforms or maybe
- * OutputDebugString() on Windows, and can be funneled by the app with
- * SDL_LogSetOutputFunction(), etc.
- *
- * This hint can be toggled on and off at runtime, if you only need to log
- * events for a small subset of program execution.
- */
-#define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING"
-
-/**
- * \brief A variable controlling whether raising the window should be done more forcefully
- *
- * This variable can be set to the following values:
- * "0" - No forcing (the default)
- * "1" - Extra level of forcing
- *
- * At present, this is only an issue under MS Windows, which makes it nearly impossible to
- * programmatically move a window to the foreground, for "security" reasons. See
- * http://stackoverflow.com/a/34414846 for a discussion.
- */
-#define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW"
-
-/**
-* \brief A variable controlling whether the window is activated when the SDL_RaiseWindow function is called
-*
-* This variable can be set to the following values:
-* "0" - The window is not activated when the SDL_RaiseWindow function is called
-* "1" - The window is activated when the SDL_RaiseWindow function is called
-*
-* By default SDL will activate the window when the SDL_RaiseWindow function is called.
-* At present this is only available for MS Windows.
-*/
-#define SDL_HINT_WINDOW_ACTIVATE_WHEN_RAISED "SDL_WINDOW_ACTIVATE_WHEN_RAISED"
-
-/**
- * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
- *
- * SDL can try to accelerate the SDL screen surface by using streaming
- * textures with a 3D rendering engine. This variable controls whether and
- * how this is done.
- *
- * This variable can be set to the following values:
- * "0" - Disable 3D acceleration
- * "1" - Enable 3D acceleration, using the default renderer.
- * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.)
- *
- * By default SDL tries to make a best guess for each platform whether
- * to use acceleration or not.
- */
-#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION"
-
-/**
- * \brief A variable that lets you manually hint extra gamecontroller db entries.
- *
- * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamepad.h
- *
- * This hint must be set before calling SDL_Init(SDL_INIT_GAMEPAD)
- * You can update mappings after the system is initialized with SDL_GetGamepadMappingForGUID() and SDL_AddGamepadMapping()
- */
-#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG"
-
-/**
- * \brief A variable that lets you provide a file with extra gamecontroller db entries.
- *
- * The file should contain lines of gamecontroller config data, see SDL_gamepad.h
- *
- * This hint must be set before calling SDL_Init(SDL_INIT_GAMEPAD)
- * You can update mappings after the system is initialized with SDL_GetGamepadMappingForGUID() and SDL_AddGamepadMapping()
- */
-#define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE"
-
-/**
- * \brief A variable that overrides the automatic controller type detection
- *
- * The variable should be comma separated entries, in the form: VID/PID=type
- *
- * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
- *
- * The type should be one of:
- * Xbox360
- * XboxOne
- * PS3
- * PS4
- * PS5
- * SwitchPro
- *
- * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMEPAD)
- */
-#define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE"
-
-/**
- * \brief A variable containing a list of devices to skip when scanning for game controllers.
- *
- * The format of the string is a comma separated list of USB VID/PID pairs
- * in hexadecimal form, e.g.
- *
- * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
- *
- * The variable can also take the form of @file, in which case the named
- * file will be loaded and interpreted as the value of the variable.
- */
-#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES"
-
-/**
- * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable.
- *
- * The format of the string is a comma separated list of USB VID/PID pairs
- * in hexadecimal form, e.g.
- *
- * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
- *
- * The variable can also take the form of @file, in which case the named
- * file will be loaded and interpreted as the value of the variable.
- */
-#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT"
-
-/**
- * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout.
- *
- * For example, on Nintendo Switch controllers, normally you'd get:
- *
- * (Y)
- * (X) (B)
- * (A)
- *
- * but if this hint is set, you'll get:
- *
- * (X)
- * (Y) (A)
- * (B)
- *
- * The variable can be set to the following values:
- * "0" - Report the face buttons by position, as though they were on an Xbox controller.
- * "1" - Report the face buttons by label instead of position
- *
- * The default value is "1". This hint may be set at any time.
- */
-#define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS"
-
-/**
- * \brief Controls whether the device's built-in accelerometer and gyro should be used as sensors for gamepads.
- *
- * The variable can be set to the following values:
- * "0" - Sensor fusion is disabled
- * "1" - Sensor fusion is enabled for all controllers that lack sensors
- *
- * Or the variable can be a comma separated list of USB VID/PID pairs
- * in hexadecimal form, e.g.
- *
- * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
- *
- * The variable can also take the form of @file, in which case the named
- * file will be loaded and interpreted as the value of the variable.
- *
- * This hint is checked when a gamepad is opened.
- */
-#define SDL_HINT_GAMECONTROLLER_SENSOR_FUSION "SDL_GAMECONTROLLER_SENSOR_FUSION"
-
-/**
- * \brief A variable controlling whether grabbing input grabs the keyboard
- *
- * This variable can be set to the following values:
- * "0" - Grab will affect only the mouse
- * "1" - Grab will affect mouse and keyboard
- *
- * By default SDL will not grab the keyboard so system shortcuts still work.
- */
-#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD"
-
-/**
- * \brief A variable to control whether SDL_hid_enumerate() enumerates all HID devices or only controllers.
- *
- * This variable can be set to the following values:
- * "0" - SDL_hid_enumerate() will enumerate all HID devices
- * "1" - SDL_hid_enumerate() will only enumerate controllers
- *
- * By default SDL will only enumerate controllers, to reduce risk of hanging or crashing on devices with bad drivers and avoiding macOS keyboard capture permission prompts.
- */
-#define SDL_HINT_HIDAPI_ENUMERATE_ONLY_CONTROLLERS "SDL_HIDAPI_ENUMERATE_ONLY_CONTROLLERS"
-
-/**
- * \brief A variable containing a list of devices to ignore in SDL_hid_enumerate()
- *
- * For example, to ignore the Shanwan DS3 controller and any Valve controller, you might
- * have the string "0x2563/0x0523,0x28de/0x0000"
- */
-#define SDL_HINT_HIDAPI_IGNORE_DEVICES "SDL_HIDAPI_IGNORE_DEVICES"
-
-/**
- * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_EVENT_TEXT_EDITING events.
- *
- * The variable can be set to the following values:
- * "0" - SDL_EVENT_TEXT_EDITING events are sent, and it is the application's
- * responsibility to render the text from these events and
- * differentiate it somehow from committed text. (default)
- * "1" - If supported by the IME then SDL_EVENT_TEXT_EDITING events are not sent,
- * and text that is being composed will be rendered in its own UI.
- */
-#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING"
-
-/**
- * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them.
- *
- * The variable can be set to the following values:
- * "0" - Native UI components are not display. (default)
- * "1" - Native UI components are displayed.
- */
-#define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI"
-
-/**
- * \brief A variable to control if extended IME text support is enabled.
- * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise.
- * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated.
- *
- * The variable can be set to the following values:
- * "0" - Legacy behavior. Text can be truncated, no heap allocations. (default)
- * "1" - Modern behavior.
- */
-#define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT"
-
-/**
- * \brief A variable controlling whether the home indicator bar on iPhone X
- * should be hidden.
- *
- * This variable can be set to the following values:
- * "0" - The indicator bar is not hidden (default for windowed applications)
- * "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications)
- * "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications)
- */
-#define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR"
-
-/**
- * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
- *
- * The variable can be set to the following values:
- * "0" - Disable joystick & gamecontroller input events when the
- * application is in the background.
- * "1" - Enable joystick & gamecontroller input events when the
- * application is in the background.
- *
- * The default value is "0". This hint may be set at any time.
- */
-#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS"
-
-/**
- * \brief A variable controlling whether the HIDAPI joystick drivers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI drivers are not used
- * "1" - HIDAPI drivers are used (the default)
- *
- * This variable is the default for all drivers, but can be overridden by the hints for specific drivers below.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE"
-
-/**
- * \brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement
- * the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2)
- * this is useful for applications that need full compatibility for things like ADSR envelopes.
- * Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0"
- * Rumble is both at any arbitrary value,
- * StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0"
- *
- * This variable can be set to the following values:
- * "0" - Normal rumble behavior is behavior is used (default)
- * "1" - Proper GameCube controller rumble behavior is used
- *
- */
-#define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch Joy-Cons should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS"
-
-/**
- * \brief A variable controlling whether Nintendo Switch Joy-Con controllers will be combined into a single Pro-like controller when using the HIDAPI driver
- *
- * This variable can be set to the following values:
- * "0" - Left and right Joy-Con controllers will not be combined and each will be a mini-gamepad
- * "1" - Left and right Joy-Con controllers will be combined into a single controller (the default)
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS "SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS"
-
-/**
- * \brief A variable controlling whether Nintendo Switch Joy-Con controllers will be in vertical mode when using the HIDAPI driver
- *
- * This variable can be set to the following values:
- * "0" - Left and right Joy-Con controllers will not be in vertical mode (the default)
- * "1" - Left and right Joy-Con controllers will be in vertical mode
- *
- * This hint must be set before calling SDL_Init(SDL_INIT_GAMEPAD)
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS "SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Nintendo Online classic controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC "SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for NVIDIA SHIELD controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_SHIELD "SDL_JOYSTICK_HIDAPI_SHIELD"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for PS3 controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on other platforms.
- *
- * It is not possible to use this driver on Windows, due to limitations in the default drivers
- * installed. See https://github.com/ViGEm/DsHidMini for an alternative driver on Windows.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_PS3 "SDL_JOYSTICK_HIDAPI_PS3"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4"
-
-/**
- * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver.
- *
- * This variable can be set to the following values:
- * "0" - extended reports are not enabled (the default)
- * "1" - extended reports
- *
- * Extended input reports allow rumble on Bluetooth PS4 controllers, but
- * break DirectInput handling for applications that don't use SDL.
- *
- * Once extended reports are enabled, they can not be disabled without
- * power cycling the controller.
- *
- * For compatibility with applications written for versions of SDL prior
- * to the introduction of PS5 controller support, this value will also
- * control the state of extended reports on PS5 controllers when the
- * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5"
-
-/**
- * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller.
- *
- * This variable can be set to the following values:
- * "0" - player LEDs are not enabled
- * "1" - player LEDs are enabled (the default)
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED"
-
-/**
- * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver.
- *
- * This variable can be set to the following values:
- * "0" - extended reports are not enabled (the default)
- * "1" - extended reports
- *
- * Extended input reports allow rumble on Bluetooth PS5 controllers, but
- * break DirectInput handling for applications that don't use SDL.
- *
- * Once extended reports are enabled, they can not be disabled without
- * power cycling the controller.
- *
- * For compatibility with applications written for versions of SDL prior
- * to the introduction of PS5 controller support, this value defaults to
- * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Bluetooth Steam Controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access
- * and may prompt the user for permission on iOS and Android.
- *
- * The default is "0"
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH"
-
-/**
- * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Pro controller is opened
- *
- * This variable can be set to the following values:
- * "0" - home button LED is turned off
- * "1" - home button LED is turned on
- *
- * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED"
-
-/**
- * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Joy-Con controller is opened
- *
- * This variable can be set to the following values:
- * "0" - home button LED is turned off
- * "1" - home button LED is turned on
- *
- * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED "SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED"
-
-/**
- * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller.
- *
- * This variable can be set to the following values:
- * "0" - player LEDs are not enabled
- * "1" - player LEDs are enabled (the default)
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * This driver doesn't work with the dolphinbar, so the default is SDL_FALSE for now.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_WII "SDL_JOYSTICK_HIDAPI_WII"
-
-/**
- * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Wii controller.
- *
- * This variable can be set to the following values:
- * "0" - player LEDs are not enabled
- * "1" - player LEDs are enabled (the default)
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED "SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for XBox 360 controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 "SDL_JOYSTICK_HIDAPI_XBOX_360"
-
-/**
- * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with an Xbox 360 controller.
- *
- * This variable can be set to the following values:
- * "0" - player LEDs are not enabled
- * "1" - player LEDs are enabled (the default)
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED "SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for XBox 360 wireless controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS "SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS"
-
-/**
- * \brief A variable controlling whether the HIDAPI driver for XBox One controllers should be used.
- *
- * This variable can be set to the following values:
- * "0" - HIDAPI driver is not used
- * "1" - HIDAPI driver is used
- *
- * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE "SDL_JOYSTICK_HIDAPI_XBOX_ONE"
-
-/**
- * \brief A variable controlling whether the Home button LED should be turned on when an Xbox One controller is opened
- *
- * This variable can be set to the following values:
- * "0" - home button LED is turned off
- * "1" - home button LED is turned on
- *
- * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. The default brightness is 0.4.
- */
-#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED"
-
-/**
- * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices.
- *
- * This variable can be set to the following values:
- * "0" - RAWINPUT drivers are not used
- * "1" - RAWINPUT drivers are used (the default)
- */
-#define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT"
-
-/**
- * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput.
- *
- * This variable can be set to the following values:
- * "0" - RAWINPUT driver will only use data from raw input APIs
- * "1" - RAWINPUT driver will also pull data from XInput, providing
- * better trigger axes, guide button presses, and rumble support
- * for Xbox controllers
- *
- * The default is "1". This hint applies to any joysticks opened after setting the hint.
- */
-#define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT"
-
-/**
- * \brief A variable controlling whether the ROG Chakram mice should show up as joysticks
- *
- * This variable can be set to the following values:
- * "0" - ROG Chakram mice do not show up as joysticks (the default)
- * "1" - ROG Chakram mice show up as joysticks
- */
-#define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM"
-
-/**
- * \brief A variable controlling whether a separate thread should be used
- * for handling joystick detection and raw input messages on Windows
- *
- * This variable can be set to the following values:
- * "0" - A separate thread is not used (the default)
- * "1" - A separate thread is used for handling raw input messages
- *
- */
-#define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD"
-
-/**
- * \brief A variable controlling whether Windows.Gaming.Input should be used for controller handling.
- *
- * This variable can be set to the following values:
- * "0" - WGI is not used
- * "1" - WGI is used (the default)
- */
-#define SDL_HINT_JOYSTICK_WGI "SDL_JOYSTICK_WGI"
-
-/**
- * \brief Determines whether SDL enforces that DRM master is required in order
- * to initialize the KMSDRM video backend.
- *
- * The DRM subsystem has a concept of a "DRM master" which is a DRM client that
- * has the ability to set planes, set cursor, etc. When SDL is DRM master, it
- * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL
- * is still able to process input and query attributes of attached displays,
- * but it cannot change display state or draw to the screen directly.
- *
- * In some cases, it can be useful to have the KMSDRM backend even if it cannot
- * be used for rendering. An app may want to use SDL for input processing while
- * using another rendering API (such as an MMAL overlay on Raspberry Pi) or
- * using its own code to render to DRM overlays that SDL doesn't support.
- *
- * This hint must be set before initializing the video subsystem.
- *
- * This variable can be set to the following values:
- * "0" - SDL will allow usage of the KMSDRM backend without DRM master
- * "1" - SDL Will require DRM master to use the KMSDRM backend (default)
- */
-#define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER"
-
-/**
- * \brief A comma separated list of devices to open as joysticks
- *
- * This variable is currently only used by the Linux joystick driver.
- */
-#define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE"
-
-/**
- * \brief A variable controlling whether joysticks on Linux will always treat 'hat' axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking whether they may be analog.
- *
- * This variable can be set to the following values:
- * "0" - Only map hat axis inputs to digital hat outputs if the input axes appear to actually be digital (the default)
- * "1" - Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as digital hats
- */
-#define SDL_HINT_LINUX_DIGITAL_HATS "SDL_LINUX_DIGITAL_HATS"
-
-/**
- * \brief A variable controlling whether digital hats on Linux will apply deadzones to their underlying input axes or use unfiltered values.
- *
- * This variable can be set to the following values:
- * "0" - Return digital hat values based on unfiltered input axis values
- * "1" - Return digital hat values with deadzones on the input axes taken into account (the default)
- */
-#define SDL_HINT_LINUX_HAT_DEADZONES "SDL_LINUX_HAT_DEADZONES"
-
-/**
- * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux
- *
- * This variable can be set to the following values:
- * "0" - Use /dev/input/event*
- * "1" - Use /dev/input/js*
- *
- * By default the /dev/input/event* interfaces are used
- */
-#define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC"
-
-/**
- * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values.
- *
- * This variable can be set to the following values:
- * "0" - Return unfiltered joystick axis values (the default)
- * "1" - Return axis values with deadzones taken into account
- */
-#define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES"
-
-/**
-* \brief When set don't force the SDL app to become a foreground process
-*
-* This hint only applies to macOS.
-*
-*/
-#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP"
-
-/**
- * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac
- *
- * If present, holding ctrl while left clicking will generate a right click
- * event when on Mac.
- */
-#define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK"
-
-/**
- * \brief A variable controlling whether dispatching OpenGL context updates should block the dispatching thread until the main thread finishes processing
- *
- * This variable can be set to the following values:
- * "0" - Dispatching OpenGL context updates will block the dispatching thread until the main thread finishes processing (default).
- * "1" - Dispatching OpenGL context updates will allow the dispatching thread to continue execution.
- *
- * Generally you want the default, but if you have OpenGL code in a background thread on a Mac, and the main thread
- * hangs because it's waiting for that background thread, but that background thread is also hanging because it's
- * waiting for the main thread to do an update, this might fix your issue.
- *
- * This hint only applies to macOS.
- *
- * This hint is available since SDL 2.24.0.
- *
- */
-#define SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH "SDL_MAC_OPENGL_ASYNC_DISPATCH"
-
-/**
- * \brief A variable setting the double click radius, in pixels.
- */
-#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS"
-
-/**
- * \brief A variable setting the double click time, in milliseconds.
- */
-#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME"
-
-/**
- * \brief Allow mouse click events when clicking to focus an SDL window
- *
- * This variable can be set to the following values:
- * "0" - Ignore mouse clicks that activate a window
- * "1" - Generate events for mouse clicks that activate a window
- *
- * By default SDL will ignore mouse clicks that activate a window
- */
-#define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH"
-
-/**
- * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode
- */
-#define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE"
-
-/**
- * \brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window
- *
- * This variable can be set to the following values:
- * "0" - Relative mouse mode constrains the mouse to the window
- * "1" - Relative mouse mode constrains the mouse to the center of the window
- *
- * Constraining to the center of the window works better for FPS games and when the
- * application is running over RDP. Constraining to the whole window works better
- * for 2D games and increases the chance that the mouse will be in the correct
- * position when using high DPI mice.
- *
- * By default SDL will constrain the mouse to the center of the window
- */
-#define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER"
-
-/**
- * \brief A variable controlling whether relative mouse mode is implemented using mouse warping
- *
- * This variable can be set to the following values:
- * "0" - Relative mouse mode uses raw input
- * "1" - Relative mouse mode uses mouse warping
- *
- * By default SDL will use raw input for relative mouse mode
- */
-#define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP"
-
-/**
- * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode
- */
-#define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE"
-
-/**
- * \brief A variable controlling whether the system mouse acceleration curve is used for relative mouse motion.
- *
- * This variable can be set to the following values:
- * "0" - Relative mouse motion will be unscaled (the default)
- * "1" - Relative mouse motion will be scaled using the system mouse acceleration curve.
- *
- * If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the system speed scale.
- */
-#define SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE "SDL_MOUSE_RELATIVE_SYSTEM_SCALE"
-
-/**
- * \brief A variable controlling whether a motion event should be generated for mouse warping in relative mode.
- *
- * This variable can be set to the following values:
- * "0" - Warping the mouse will not generate a motion event in relative mode
- * "1" - Warping the mouse will generate a motion event in relative mode
- *
- * By default warping the mouse will not generate motion events in relative mode. This avoids the application having to filter out large relative motion due to warping.
- */
-#define SDL_HINT_MOUSE_RELATIVE_WARP_MOTION "SDL_MOUSE_RELATIVE_WARP_MOTION"
-
-/**
- * \brief A variable controlling whether mouse events should generate synthetic touch events
- *
- * This variable can be set to the following values:
- * "0" - Mouse events will not generate touch events (default for desktop platforms)
- * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS)
- */
-#define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS"
-
-/**
- * \brief A variable controlling whether the mouse is captured while mouse buttons are pressed
- *
- * This variable can be set to the following values:
- * "0" - The mouse is not captured while mouse buttons are pressed
- * "1" - The mouse is captured while mouse buttons are pressed
- *
- * By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged
- * outside the window, the application continues to receive mouse events until the button is
- * released.
- */
-#define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE"
-
-/**
- * \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
- *
- * This hint only applies to Unix-like platforms, and should set before
- * any calls to SDL_Init()
- *
- * The variable can be set to the following values:
- * "0" - SDL will install a SIGINT and SIGTERM handler, and when it
- * catches a signal, convert it into an SDL_EVENT_QUIT event.
- * "1" - SDL will not install a signal handler at all.
- */
-#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS"
-
-/**
- * \brief A variable controlling what driver to use for OpenGL ES contexts.
- *
- * On some platforms, currently Windows and X11, OpenGL drivers may support
- * creating contexts with an OpenGL ES profile. By default SDL uses these
- * profiles, when available, otherwise it attempts to load an OpenGL ES
- * library, e.g. that provided by the ANGLE project. This variable controls
- * whether SDL follows this default behaviour or will always load an
- * OpenGL ES library.
- *
- * Circumstances where this is useful include
- * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE,
- * or emulator, e.g. those from ARM, Imagination or Qualcomm.
- * - Resolving OpenGL ES function addresses at link time by linking with
- * the OpenGL ES library instead of querying them at run time with
- * SDL_GL_GetProcAddress().
- *
- * Caution: for an application to work with the default behaviour across
- * different OpenGL drivers it must query the OpenGL ES function
- * addresses at run time using SDL_GL_GetProcAddress().
- *
- * This variable is ignored on most platforms because OpenGL ES is native
- * or not supported.
- *
- * This variable can be set to the following values:
- * "0" - Use ES profile of OpenGL, if available. (Default when not set.)
- * "1" - Load OpenGL ES library using the default library names.
- *
- */
-#define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER"
-
-/**
- * \brief A variable controlling which orientations are allowed on iOS/Android.
- *
- * In some circumstances it is necessary to be able to explicitly control
- * which UI orientations are allowed.
- *
- * This variable is a space delimited list of the following values:
- * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown"
- */
-#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS"
-
-/**
- * \brief A variable controlling the use of a sentinel event when polling the event queue
- *
- * This variable can be set to the following values:
- * "0" - Disable poll sentinels
- * "1" - Enable poll sentinels
- *
- * When polling for events, SDL_PumpEvents is used to gather new events from devices.
- * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will
- * become stuck until the new events stop.
- * This is most noticeable when moving a high frequency mouse.
- *
- * By default, poll sentinels are enabled.
- */
-#define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL"
-
-/**
- * \brief Override for SDL_GetPreferredLocales()
- *
- * If set, this will be favored over anything the OS might report for the
- * user's preferred locales. Changing this hint at runtime will not generate
- * a SDL_EVENT_LOCALE_CHANGED event (but if you can change the hint, you can push
- * your own event, if you want).
- *
- * The format of this hint is a comma-separated list of language and locale,
- * combined with an underscore, as is a common format: "en_GB". Locale is
- * optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
- */
-#define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES"
-
-/**
- * \brief A variable describing the content orientation on QtWayland-based platforms.
- *
- * On QtWayland platforms, windows are rotated client-side to allow for custom
- * transitions. In order to correctly position overlays (e.g. volume bar) and
- * gestures (e.g. events view, close/minimize gestures), the system needs to
- * know in which orientation the application is currently drawing its contents.
- *
- * This does not cause the window to be rotated or resized, the application
- * needs to take care of drawing the content in the right orientation (the
- * framebuffer is always in portrait mode).
- *
- * This variable can be one of the following values:
- * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape"
- *
- * Since SDL 2.0.22 this variable accepts a comma-separated list of values above.
- */
-#define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION"
-
-/**
- * \brief Flags to set on QtWayland windows to integrate with the native window manager.
- *
- * On QtWayland platforms, this hint controls the flags to set on the windows.
- * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures.
- *
- * This variable is a space-separated list of the following values (empty = no flags):
- * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager"
- */
-#define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS"
-
-/**
- * \brief A variable controlling whether the 2D render API is compatible or efficient.
- *
- * This variable can be set to the following values:
- *
- * "0" - Don't use batching to make rendering more efficient.
- * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls.
- *
- * Up to SDL 2.0.9, the render API would draw immediately when requested. Now
- * it batches up draw requests and sends them all to the GPU only when forced
- * to (during SDL_RenderPresent, when changing render targets, by updating a
- * texture that the batch needs, etc). This is significantly more efficient,
- * but it can cause problems for apps that expect to render on top of the
- * render API's output. As such, SDL will disable batching if a specific
- * render backend is requested (since this might indicate that the app is
- * planning to use the underlying graphics API directly). This hint can
- * be used to explicitly request batching in this instance. It is a contract
- * that you will either never use the underlying graphics API directly, or
- * if you do, you will call SDL_RenderFlush() before you do so any current
- * batch goes to the GPU before your work begins. Not following this contract
- * will result in undefined behavior.
- */
-#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING"
-
-/**
- * \brief A variable controlling how the 2D render API renders lines
- *
- * This variable can be set to the following values:
- * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20)
- * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points)
- * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20)
- * "3" - Use the driver geometry API (correct, draws thicker diagonal lines)
- *
- * This variable should be set when the renderer is created.
- */
-#define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD"
-
-/**
- * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer.
- *
- * This variable does not have any effect on the Direct3D 9 based renderer.
- *
- * This variable can be set to the following values:
- * "0" - Disable Debug Layer use
- * "1" - Enable Debug Layer use
- *
- * By default, SDL does not use Direct3D Debug Layer.
- */
-#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG"
-
-/**
- * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations.
- *
- * This variable can be set to the following values:
- * "0" - Thread-safety is not enabled (faster)
- * "1" - Thread-safety is enabled
- *
- * By default the Direct3D device is created with thread-safety disabled.
- */
-#define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE"
-
-/**
- * \brief A variable specifying which render driver to use.
- *
- * If the application doesn't pick a specific renderer to use, this variable
- * specifies the name of the preferred renderer. If the preferred renderer
- * can't be initialized, the normal default renderer is used.
- *
- * This variable is case insensitive and can be set to the following values:
- * "direct3d"
- * "direct3d11"
- * "direct3d12"
- * "opengl"
- * "opengles2"
- * "opengles"
- * "metal"
- * "software"
- *
- * The default varies by platform, but it's the first one in the list that
- * is available on the current platform.
- */
-#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER"
-
-/**
- * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available.
- *
- * This variable can be set to the following values:
- * "0" - Disable shaders
- * "1" - Enable shaders
- *
- * By default shaders are used if OpenGL supports them.
- */
-#define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS"
-
-/**
- * \brief A variable controlling the scaling quality
- *
- * This variable can be set to the following values:
- * "0" or "nearest" - Nearest pixel sampling
- * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D)
- * "2" or "best" - Currently this is the same as "linear"
- *
- * By default nearest pixel sampling is used
- */
-#define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY"
-
-/**
- * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing.
- *
- * This variable can be set to the following values:
- * "0" - Disable vsync
- * "1" - Enable vsync
- *
- * By default SDL does not sync screen surface updates with vertical refresh.
- */
-#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC"
-
-/**
- * \brief A variable controlling if VSYNC is automatically disable if doesn't reach the enough FPS
- *
- * This variable can be set to the following values:
- * "0" - It will be using VSYNC as defined in the main flag. Default
- * "1" - If VSYNC was previously enabled, then it will disable VSYNC if doesn't reach enough speed
- *
- * By default SDL does not enable the automatic VSYNC
- */
-#define SDL_HINT_PS2_DYNAMIC_VSYNC "SDL_PS2_DYNAMIC_VSYNC"
-
-/**
- * \brief A variable to control whether the return key on the soft keyboard
- * should hide the soft keyboard on Android and iOS.
- *
- * The variable can be set to the following values:
- * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default)
- * "1" - The return key will hide the keyboard.
- *
- * The value of this hint is used at runtime, so it can be changed at any time.
- */
-#define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME"
-
-/**
- * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI
- *
- * Also known as Z-order. The variable can take a negative or positive value.
- * The default is 10000.
- */
-#define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER"
-
-/**
- * \brief Specify an "activity name" for screensaver inhibition.
- *
- * Some platforms, notably Linux desktops, list the applications which are
- * inhibiting the screensaver or other power-saving features.
- *
- * This hint lets you specify the "activity name" sent to the OS when
- * SDL_DisableScreenSaver() is used (or the screensaver is automatically
- * disabled). The contents of this hint are used when the screensaver is
- * disabled. You should use a string that describes what your program is doing
- * (and, therefore, why the screensaver is disabled). For example, "Playing a
- * game" or "Watching a video".
- *
- * Setting this to "" or leaving it unset will have SDL use a reasonable
- * default: "Playing a game" or something similar.
- *
- * On targets where this is not supported, this hint does nothing.
- */
-#define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME"
-
-/**
- * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime.
- *
- * On some platforms, like Linux, a realtime priority thread may be subject to restrictions
- * that require special handling by the application. This hint exists to let SDL know that
- * the app is prepared to handle said restrictions.
- *
- * On Linux, SDL will apply the following configuration to any thread that becomes realtime:
- * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy,
- * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
- * * Exceeding this limit will result in the kernel sending SIGKILL to the app,
- * * Refer to the man pages for more information.
- *
- * This variable can be set to the following values:
- * "0" - default platform specific behaviour
- * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy
- */
-#define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL"
-
-/**
-* \brief A string specifying additional information to use with SDL_SetThreadPriority.
-*
-* By default SDL_SetThreadPriority will make appropriate system changes in order to
-* apply a thread priority. For example on systems using pthreads the scheduler policy
-* is changed automatically to a policy that works well with a given priority.
-* Code which has specific requirements can override SDL's default behavior with this hint.
-*
-* pthread hint values are "current", "other", "fifo" and "rr".
-* Currently no other platform hint values are defined but may be in the future.
-*
-* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro
-* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME
-* after calling SDL_SetThreadPriority().
-*/
-#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY"
-
-/**
-* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size
-*
-* Use this hint in case you need to set SDL's threads stack size to other than the default.
-* This is specially useful if you build SDL against a non glibc libc library (such as musl) which
-* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses).
-* Support for this hint is currently available only in the pthread, Windows, and PSP backend.
-*
-* Instead of this hint, in 2.0.9 and later, you can use
-* SDL_CreateThreadWithStackSize(). This hint only works with the classic
-* SDL_CreateThread().
-*/
-#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE"
-
-/**
- * \brief A variable that controls the timer resolution, in milliseconds.
- *
- * The higher resolution the timer, the more frequently the CPU services
- * timer interrupts, and the more precise delays are, but this takes up
- * power and CPU time. This hint is only used on Windows.
- *
- * See this blog post for more information:
- * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
- *
- * If this variable is set to "0", the system timer resolution is not set.
- *
- * The default value is "1". This hint may be set at any time.
- */
-#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION"
-
-/**
- * \brief A variable controlling whether touch events should generate synthetic mouse events
- *
- * This variable can be set to the following values:
- * "0" - Touch events will not generate mouse events
- * "1" - Touch events will generate mouse events
- *
- * By default SDL will generate mouse events for touch events
- */
-#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS"
-
-/**
- * \brief A variable controlling which touchpad should generate synthetic mouse events
- *
- * This variable can be set to the following values:
- * "0" - Only front touchpad should generate mouse events. Default
- * "1" - Only back touchpad should generate mouse events.
- * "2" - Both touchpads should generate mouse events.
- *
- * By default SDL will generate mouse events for all touch devices
- */
-#define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE"
-
-/**
- * \brief A variable controlling whether the Android / tvOS remotes
- * should be listed as joystick devices, instead of sending keyboard events.
- *
- * This variable can be set to the following values:
- * "0" - Remotes send enter/escape/arrow key events
- * "1" - Remotes are available as 2 axis, 2 button joysticks (the default).
- */
-#define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK"
-
-/**
- * \brief A variable controlling whether the screensaver is enabled.
- *
- * This variable can be set to the following values:
- * "0" - Disable screensaver
- * "1" - Enable screensaver
- *
- * By default SDL will disable the screensaver.
- */
-#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER"
-
-/**
- * \brief Tell the video driver that we only want a double buffer.
- *
- * By default, most lowlevel 2D APIs will use a triple buffer scheme that
- * wastes no CPU time on waiting for vsync after issuing a flip, but
- * introduces a frame of latency. On the other hand, using a double buffer
- * scheme instead is recommended for cases where low latency is an important
- * factor because we save a whole frame of latency.
- * We do so by waiting for vsync immediately after issuing a flip, usually just
- * after eglSwapBuffers call in the backend's *_SwapWindow function.
- *
- * Since it's driver-specific, it's only supported where possible and
- * implemented. Currently supported the following drivers:
- *
- * - KMSDRM (kmsdrm)
- * - Raspberry Pi (raspberrypi)
- */
-#define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER"
-
-/**
- * \brief If eglGetPlatformDisplay fails, fall back to calling eglGetDisplay.
- *
- * This variable can be set to one of the following values:
- * "0" - Do not fall back to eglGetDisplay
- * "1" - Fall back to eglGetDisplay if eglGetPlatformDisplay fails.
- *
- * By default, SDL will fall back to eglGetDisplay if eglGetPlatformDisplay
- * fails.
- */
-#define SDL_HINT_VIDEO_EGL_ALLOW_GETDISPLAY_FALLBACK "SDL_VIDEO_EGL_GETDISPLAY_FALLBACK"
-
-/**
- * \brief A variable controlling whether the graphics context is externally managed.
- *
- * This variable can be set to the following values:
- * "0" - SDL will manage graphics contexts that are attached to windows.
- * "1" - Disable graphics context management on windows.
- *
- * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the
- * context will be automatically saved and restored when pausing the application. Additionally, some
- * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
- * behavior, which is desirable when the application manages the graphics context, such as
- * an externally managed OpenGL context or attaching a Vulkan surface to the window.
- */
-#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT"
-
-/**
- * \brief A variable that dictates policy for fullscreen Spaces on macOS.
- *
- * This hint only applies to macOS.
- *
- * The variable can be set to the following values:
- * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
- * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
- * button on their titlebars).
- * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and
- * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
- * button on their titlebars).
- *
- * The default value is "1". This hint must be set before any windows are created.
- */
-#define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES"
-
-/**
- * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false.
- * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're
- * seeing if "true" causes more problems than it solves in modern times.
- *
- */
-#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS"
-
-/**
- * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used.
- *
- * This variable can be set to the following values:
- * "0" - libdecor use is disabled.
- * "1" - libdecor use is enabled (default).
- *
- * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.
- */
-#define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR"
-
-/**
- * \brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations.
- *
- * When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is
- * available. (Note that, by default, libdecor will use xdg-decoration itself if available).
- *
- * This variable can be set to the following values:
- * "0" - libdecor is enabled only if server-side decorations are unavailable.
- * "1" - libdecor is always enabled if available.
- *
- * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.
- */
-#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR"
-
-/**
- * \brief A variable controlling whether video mode emulation is enabled under Wayland.
- *
- * When this hint is set, a standard set of emulated CVT video modes will be exposed for use by the application.
- * If it is disabled, the only modes exposed will be the logical desktop size and, in the case of a scaled
- * desktop, the native display resolution.
- *
- * This variable can be set to the following values:
- * "0" - Video mode emulation is disabled.
- * "1" - Video mode emulation is enabled.
- *
- * By default video mode emulation is enabled.
- */
-#define SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION "SDL_VIDEO_WAYLAND_MODE_EMULATION"
-
-/**
- * \brief A variable controlling how modes with a non-native aspect ratio are displayed under Wayland.
- *
- * When this hint is set, the requested scaling will be used when displaying fullscreen video modes
- * that don't match the display's native aspect ratio. This is contingent on compositor viewport support.
- *
- * This variable can be set to the following values:
- * "aspect" - Video modes will be displayed scaled, in their proper aspect ratio, with black bars.
- * "stretch" - Video modes will be scaled to fill the entire display.
- * "none" - Video modes will be displayed as 1:1 with no scaling.
- *
- * By default 'stretch' is used.
- */
-#define SDL_HINT_VIDEO_WAYLAND_MODE_SCALING "SDL_VIDEO_WAYLAND_MODE_SCALING"
-
-/**
- * \brief Enable or disable mouse pointer warp emulation, needed by some older games.
- *
- * When this hint is set, any SDL will emulate mouse warps using relative mouse mode.
- * This is required for some older games (such as Source engine games), which warp the
- * mouse to the centre of the screen rather than using relative mouse motion. Note that
- * relative mouse mode may have different mouse acceleration behaviour than pointer warps.
- *
- * This variable can be set to the following values:
- * "0" - All mouse warps fail, as mouse warping is not available under wayland.
- * "1" - Some mouse warps will be emulated by forcing relative mouse mode.
- *
- * If not set, this is automatically enabled unless an application uses relative mouse
- * mode directly.
- */
-#define SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP "SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP"
-
-/**
-* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
-*
-* If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has
-* SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly
-* created SDL_Window:
-*
-* 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is
-* needed for example when sharing an OpenGL context across multiple windows.
-*
-* 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for
-* OpenGL rendering.
-*
-* This variable can be set to the following values:
-* The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should
-* share a pixel format with.
-*/
-#define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT"
-
-/**
- * \brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL.
- *
- * This variable can be set to the following values:
- * "0" - Don't add any graphics flags to the SDL_WindowFlags
- * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags
- *
- * By default SDL will not make the foreign window compatible with OpenGL.
- */
-#define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL"
-
-/**
- * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan.
- *
- * This variable can be set to the following values:
- * "0" - Don't add any graphics flags to the SDL_WindowFlags
- * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags
- *
- * By default SDL will not make the foreign window compatible with Vulkan.
- */
-#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN"
-
-/**
-* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
-*
-* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It
-* can use two different sets of binaries, those compiled by the user from source
-* or those provided by the Chrome browser. In the later case, these binaries require
-* that SDL loads a DLL providing the shader compiler.
-*
-* This variable can be set to the following values:
-* "d3dcompiler_46.dll" - default, best for Vista or later.
-* "d3dcompiler_43.dll" - for XP support.
-* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.
-*
-*/
-#define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER"
-
-/**
- * \brief A variable controlling whether the OpenGL context should be created
- * with EGL by default
- *
- * This variable can be set to the following values:
- * "0" - Use platform-specific GL context creation API (GLX, WGL, CGL, etc)
- * "1" - Use EGL
- *
- * By default SDL will use the platform-specific GL context API when both are present.
- */
-#define SDL_HINT_VIDEO_FORCE_EGL "SDL_VIDEO_FORCE_EGL"
-
-/**
- * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used.
- *
- * This variable can be set to the following values:
- * "0" - Disable _NET_WM_BYPASS_COMPOSITOR
- * "1" - Enable _NET_WM_BYPASS_COMPOSITOR
- *
- * By default SDL will use _NET_WM_BYPASS_COMPOSITOR
- *
- */
-#define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR"
-
-/**
- * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported.
- *
- * This variable can be set to the following values:
- * "0" - Disable _NET_WM_PING
- * "1" - Enable _NET_WM_PING
- *
- * By default SDL will use _NET_WM_PING, but for applications that know they
- * will not always be able to respond to ping requests in a timely manner they can
- * turn it off to avoid the window manager thinking the app is hung.
- * The hint is checked in CreateWindow.
- */
-#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING"
-
-/**
- * \brief A variable forcing the visual ID chosen for new X11 windows
- *
- */
-#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID"
-
-/**
- * \brief A variable forcing the scaling factor for X11 windows
- *
- * This variable can be set to a floating point value in the range 1.0-10.0f
- */
-#define SDL_HINT_VIDEO_X11_SCALING_FACTOR "SDL_VIDEO_X11_SCALING_FACTOR"
-
-/**
- * \brief A variable controlling whether the X11 XRandR extension should be used.
- *
- * This variable can be set to the following values:
- * "0" - Disable XRandR
- * "1" - Enable XRandR
- *
- * By default SDL will use XRandR.
- */
-#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR"
-
-/**
- * \brief Controls how the fact chunk affects the loading of a WAVE file.
- *
- * The fact chunk stores information about the number of samples of a WAVE
- * file. The Standards Update from Microsoft notes that this value can be used
- * to 'determine the length of the data in seconds'. This is especially useful
- * for compressed formats (for which this is a mandatory chunk) if they produce
- * multiple sample frames per block and truncating the block is not allowed.
- * The fact chunk can exactly specify how many sample frames there should be
- * in this case.
- *
- * Unfortunately, most application seem to ignore the fact chunk and so SDL
- * ignores it by default as well.
- *
- * This variable can be set to the following values:
- *
- * "truncate" - Use the number of samples to truncate the wave data if
- * the fact chunk is present and valid
- * "strict" - Like "truncate", but raise an error if the fact chunk
- * is invalid, not present for non-PCM formats, or if the
- * data chunk doesn't have that many samples
- * "ignorezero" - Like "truncate", but ignore fact chunk if the number of
- * samples is zero
- * "ignore" - Ignore fact chunk entirely (default)
- */
-#define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK"
-
-/**
- * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file.
- *
- * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE
- * file) is not always reliable. In case the size is wrong, it's possible to
- * just ignore it and step through the chunks until a fixed limit is reached.
- *
- * Note that files that have trailing data unrelated to the WAVE file or
- * corrupt files may slow down the loading process without a reliable boundary.
- * By default, SDL stops after 10000 chunks to prevent wasting time. Use the
- * environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.
- *
- * This variable can be set to the following values:
- *
- * "force" - Always use the RIFF chunk size as a boundary for the chunk search
- * "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default)
- * "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB
- * "maximum" - Search for chunks until the end of file (not recommended)
- */
-#define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE"
-
-/**
- * \brief Controls how a truncated WAVE file is handled.
- *
- * A WAVE file is considered truncated if any of the chunks are incomplete or
- * the data chunk size is not a multiple of the block size. By default, SDL
- * decodes until the first incomplete block, as most applications seem to do.
- *
- * This variable can be set to the following values:
- *
- * "verystrict" - Raise an error if the file is truncated
- * "strict" - Like "verystrict", but the size of the RIFF chunk is ignored
- * "dropframe" - Decode until the first incomplete sample frame
- * "dropblock" - Decode until the first incomplete block (default)
- */
-#define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION"
-
-/**
- * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
- * The 0x406D1388 Exception is a trick used to inform Visual Studio of a
- * thread's name, but it tends to cause problems with other debuggers,
- * and the .NET runtime. Note that SDL 2.0.6 and later will still use
- * the (safer) SetThreadDescription API, introduced in the Windows 10
- * Creators Update, if available.
- *
- * The variable can be set to the following values:
- * "0" - SDL will raise the 0x406D1388 Exception to name threads.
- * This is the default behavior of SDL <= 2.0.4.
- * "1" - SDL will not raise this exception, and threads will be unnamed. (default)
- * This is necessary with .NET languages or debuggers that aren't Visual Studio.
- */
-#define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING"
-
-/**
- * \brief Controls whether menus can be opened with their keyboard shortcut (Alt+mnemonic).
- *
- * If the mnemonics are enabled, then menus can be opened by pressing the Alt
- * key and the corresponding mnemonic (for example, Alt+F opens the File menu).
- * However, in case an invalid mnemonic is pressed, Windows makes an audible
- * beep to convey that nothing happened. This is true even if the window has
- * no menu at all!
- *
- * Because most SDL applications don't have menus, and some want to use the Alt
- * key for other purposes, SDL disables mnemonics (and the beeping) by default.
- *
- * Note: This also affects keyboard events: with mnemonics enabled, when a
- * menu is opened from the keyboard, you will not receive a KEYUP event for
- * the mnemonic key, and *might* not receive one for Alt.
- *
- * This variable can be set to the following values:
- * "0" - Alt+mnemonic does nothing, no beeping. (default)
- * "1" - Alt+mnemonic opens menus, invalid mnemonics produce a beep.
- */
-#define SDL_HINT_WINDOWS_ENABLE_MENU_MNEMONICS "SDL_WINDOWS_ENABLE_MENU_MNEMONICS"
-
-/**
- * \brief A variable controlling whether the windows message loop is processed by SDL
- *
- * This variable can be set to the following values:
- * "0" - The window message loop is not run
- * "1" - The window message loop is processed in SDL_PumpEvents()
- *
- * By default SDL will process the windows message loop
- */
-#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP"
-
-/**
- * \brief Force SDL to use Critical Sections for mutexes on Windows.
- * On Windows 7 and newer, Slim Reader/Writer Locks are available.
- * They offer better performance, allocate no kernel resources and
- * use less memory. SDL will fall back to Critical Sections on older
- * OS versions or if forced to by this hint.
- *
- * This variable can be set to the following values:
- * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default)
- * "1" - Force the use of Critical Sections in all cases.
- *
- */
-#define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS"
-
-/**
- * \brief Force SDL to use Kernel Semaphores on Windows.
- * Kernel Semaphores are inter-process and require a context
- * switch on every interaction. On Windows 8 and newer, the
- * WaitOnAddress API is available. Using that and atomics to
- * implement semaphores increases performance.
- * SDL will fall back to Kernel Objects on older OS versions
- * or if forced to by this hint.
- *
- * This variable can be set to the following values:
- * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default)
- * "1" - Force the use of Kernel Objects in all cases.
- *
- */
-#define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL"
-
-/**
- * \brief A variable to specify custom icon resource id from RC file on Windows platform
- */
-#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON"
-#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"
-
-/**
- * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows.
- *
- * The variable can be set to the following values:
- * "0" - SDL will generate a window-close event when it sees Alt+F4.
- * "1" - SDL will only do normal key handling for Alt+F4.
- */
-#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
-
-/**
- * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
- * Direct3D 9Ex contains changes to state management that can eliminate device
- * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require
- * some changes to your application to cope with the new behavior, so this
- * is disabled by default.
- *
- * This hint must be set before initializing the video subsystem.
- *
- * For more information on Direct3D 9Ex, see:
- * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex
- * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements
- *
- * This variable can be set to the following values:
- * "0" - Use the original Direct3D 9 API (default)
- * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable)
- *
- */
-#define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX"
-
-/**
- * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden
- *
- * This variable can be set to the following values:
- * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc)
- * "1" - The window frame is interactive when the cursor is hidden
- *
- * By default SDL will allow interaction with the window frame when the cursor is hidden
- */
-#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
-
-/**
-* \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called
-*
-* This variable can be set to the following values:
-* "0" - The window is not activated when the SDL_ShowWindow function is called
-* "1" - The window is activated when the SDL_ShowWindow function is called
-*
-* By default SDL will activate the window when the SDL_ShowWindow function is called
-*/
-#define SDL_HINT_WINDOW_ACTIVATE_WHEN_SHOWN "SDL_WINDOW_ACTIVATE_WHEN_SHOWN"
-
-/** \brief Allows back-button-press events on Windows Phone to be marked as handled
- *
- * Windows Phone devices typically feature a Back button. When pressed,
- * the OS will emit back-button-press events, which apps are expected to
- * handle in an appropriate manner. If apps do not explicitly mark these
- * events as 'Handled', then the OS will invoke its default behavior for
- * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to
- * terminate the app (and attempt to switch to the previous app, or to the
- * device's home screen).
- *
- * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL
- * to mark back-button-press events as Handled, if and when one is sent to
- * the app.
- *
- * Internally, Windows Phone sends back button events as parameters to
- * special back-button-press callback functions. Apps that need to respond
- * to back-button-press events are expected to register one or more
- * callback functions for such, shortly after being launched (during the
- * app's initialization phase). After the back button is pressed, the OS
- * will invoke these callbacks. If the app's callback(s) do not explicitly
- * mark the event as handled by the time they return, or if the app never
- * registers one of these callback, the OS will consider the event
- * un-handled, and it will apply its default back button behavior (terminate
- * the app).
- *
- * SDL registers its own back-button-press callback with the Windows Phone
- * OS. This callback will emit a pair of SDL key-press events (SDL_EVENT_KEY_DOWN
- * and SDL_EVENT_KEY_UP), each with a scancode of SDL_SCANCODE_AC_BACK, after which
- * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON.
- * If the hint's value is set to "1", the back button event's Handled
- * property will get set to 'true'. If the hint's value is set to something
- * else, or if it is unset, SDL will leave the event's Handled property
- * alone. (By default, the OS sets this property to 'false', to note.)
- *
- * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a
- * back button is pressed, or can set it in direct-response to a back button
- * being pressed.
- *
- * In order to get notified when a back button is pressed, SDL apps should
- * register a callback function with SDL_AddEventWatch(), and have it listen
- * for SDL_EVENT_KEY_DOWN events that have a scancode of SDL_SCANCODE_AC_BACK.
- * (Alternatively, SDL_EVENT_KEY_UP events can be listened-for. Listening for
- * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON
- * set by such a callback, will be applied to the OS' current
- * back-button-press event.
- *
- * More details on back button behavior in Windows Phone apps can be found
- * at the following page, on Microsoft's developer site:
- * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx
- */
-#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON"
-
-/** \brief Label text for a WinRT app's privacy policy link
- *
- * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT,
- * Microsoft mandates that this policy be available via the Windows Settings charm.
- * SDL provides code to add a link there, with its label text being set via the
- * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
- *
- * Please note that a privacy policy's contents are not set via this hint. A separate
- * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the
- * policy.
- *
- * The contents of this hint should be encoded as a UTF8 string.
- *
- * The default value is "Privacy Policy". This hint should only be set during app
- * initialization, preferably before any calls to SDL_Init().
- *
- * For additional information on linking to a privacy policy, see the documentation for
- * SDL_HINT_WINRT_PRIVACY_POLICY_URL.
- */
-#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL"
-
-/**
- * \brief A URL to a WinRT app's privacy policy
- *
- * All network-enabled WinRT apps must make a privacy policy available to its
- * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be
- * be available in the Windows Settings charm, as accessed from within the app.
- * SDL provides code to add a URL-based link there, which can point to the app's
- * privacy policy.
- *
- * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
- * before calling any SDL_Init() functions. The contents of the hint should
- * be a valid URL. For example, "http://www.example.com".
- *
- * The default value is "", which will prevent SDL from adding a privacy policy
- * link to the Settings charm. This hint should only be set during app init.
- *
- * The label text of an app's "Privacy Policy" link may be customized via another
- * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
- *
- * Please note that on Windows Phone, Microsoft does not provide standard UI
- * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL
- * will not get used on that platform. Network-enabled phone apps should display
- * their privacy policy through some other, in-app means.
- */
-#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL"
-
-/**
- * \brief Mark X11 windows as override-redirect.
- *
- * If set, this _might_ increase framerate at the expense of the desktop
- * not working as expected. Override-redirect windows aren't noticed by the
- * window manager at all.
- *
- * You should probably only use this for fullscreen windows, and you probably
- * shouldn't even use it for that. But it's here if you want to try!
- */
-#define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT"
-
-/**
- * \brief A variable that lets you disable the detection and use of Xinput gamepad devices
- *
- * The variable can be set to the following values:
- * "0" - Disable XInput detection (only uses direct input)
- * "1" - Enable XInput detection (the default)
- */
-#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED"
-
- /**
- * \brief A variable that lets you disable the detection and use of DirectInput gamepad devices
- *
- * The variable can be set to the following values:
- * "0" - Disable DirectInput detection (only uses XInput)
- * "1" - Enable DirectInput detection (the default)
- */
-#define SDL_HINT_DIRECTINPUT_ENABLED "SDL_DIRECTINPUT_ENABLED"
-
-/**
- * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices.
- *
- * This hint is for backwards compatibility only and will be removed in SDL 2.1
- *
- * The default value is "0". This hint must be set before SDL_Init()
- */
-#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING"
-
-/**
- * \brief A variable that causes SDL to not ignore audio "monitors"
- *
- * This is currently only used for PulseAudio and ignored elsewhere.
- *
- * By default, SDL ignores audio devices that aren't associated with physical
- * hardware. Changing this hint to "1" will expose anything SDL sees that
- * appears to be an audio source or sink. This will add "devices" to the list
- * that the user probably doesn't want or need, but it can be useful in
- * scenarios where you want to hook up SDL to some sort of virtual device,
- * etc.
- *
- * The default value is "0". This hint must be set before SDL_Init().
- *
- * This hint is available since SDL 2.0.16. Before then, virtual devices are
- * always ignored.
- */
-#define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS"
-
-/**
- * \brief A variable that forces X11 windows to create as a custom type.
- *
- * This is currently only used for X11 and ignored elsewhere.
- *
- * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property
- * to report to the window manager the type of window it wants to create.
- * This might be set to various things if SDL_WINDOW_TOOLTIP or
- * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that
- * haven't set a specific type, this hint can be used to specify a custom
- * type. For example, a dock window might set this to
- * "_NET_WM_WINDOW_TYPE_DOCK".
- *
- * If not set or set to "", this hint is ignored. This hint must be set
- * before the SDL_CreateWindow() call that it is intended to affect.
- *
- * This hint is available since SDL 2.0.22.
- */
-#define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE"
-
-/**
- * \brief A variable that decides whether to send SDL_EVENT_QUIT when closing the final window.
- *
- * By default, SDL sends an SDL_EVENT_QUIT event when there is only one window
- * and it receives an SDL_EVENT_WINDOW_CLOSE_REQUESTED event, under the assumption most
- * apps would also take the loss of this window as a signal to terminate the
- * program.
- *
- * However, it's not unreasonable in some cases to have the program continue
- * to live on, perhaps to create new windows later.
- *
- * Changing this hint to "0" will cause SDL to not send an SDL_EVENT_QUIT event
- * when the final window is requesting to close. Note that in this case,
- * there are still other legitimate reasons one might get an SDL_EVENT_QUIT
- * event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c)
- * on Unix, etc.
- *
- * The default value is "1". This hint can be changed at any time.
- *
- * This hint is available since SDL 2.0.22. Before then, you always get
- * an SDL_EVENT_QUIT event when closing the final window.
- */
-#define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE"
-
-
-/**
- * \brief A variable that decides what video backend to use.
- *
- * By default, SDL will try all available video backends in a reasonable
- * order until it finds one that can work, but this hint allows the app
- * or user to force a specific target, such as "x11" if, say, you are
- * on Wayland but want to try talking to the X server instead.
- *
- * This functionality has existed since SDL 2.0.0 (indeed, before that)
- * but before 2.0.22 this was an environment variable only. In 2.0.22,
- * it was upgraded to a full SDL hint, so you can set the environment
- * variable as usual or programmatically set the hint with SDL_SetHint,
- * which won't propagate to child processes.
- *
- * The default value is unset, in which case SDL will try to figure out
- * the best video backend on your behalf. This hint needs to be set
- * before SDL_Init() is called to be useful.
- *
- * This hint is available since SDL 2.0.22. Before then, you could set
- * the environment variable to get the same effect.
- */
-#define SDL_HINT_VIDEO_DRIVER "SDL_VIDEO_DRIVER"
-
-/**
- * \brief A variable that decides what audio backend to use.
- *
- * By default, SDL will try all available audio backends in a reasonable
- * order until it finds one that can work, but this hint allows the app
- * or user to force a specific target, such as "alsa" if, say, you are
- * on PulseAudio but want to try talking to the lower level instead.
- *
- * This functionality has existed since SDL 2.0.0 (indeed, before that)
- * but before 2.0.22 this was an environment variable only. In 2.0.22,
- * it was upgraded to a full SDL hint, so you can set the environment
- * variable as usual or programmatically set the hint with SDL_SetHint,
- * which won't propagate to child processes.
- *
- * The default value is unset, in which case SDL will try to figure out
- * the best audio backend on your behalf. This hint needs to be set
- * before SDL_Init() is called to be useful.
- *
- * This hint is available since SDL 2.0.22. Before then, you could set
- * the environment variable to get the same effect.
- */
-#define SDL_HINT_AUDIO_DRIVER "SDL_AUDIO_DRIVER"
-
-/**
- * \brief A variable that decides what KMSDRM device to use.
- *
- * Internally, SDL might open something like "/dev/dri/cardNN" to
- * access KMSDRM functionality, where "NN" is a device index number.
- *
- * SDL makes a guess at the best index to use (usually zero), but the
- * app or user can set this hint to a number between 0 and 99 to
- * force selection.
- *
- * This hint is available since SDL 2.24.0.
- */
-#define SDL_HINT_KMSDRM_DEVICE_INDEX "SDL_KMSDRM_DEVICE_INDEX"
-
-
-/**
- * \brief A variable that treats trackpads as touch devices.
- *
- * On macOS (and possibly other platforms in the future), SDL will report
- * touches on a trackpad as mouse input, which is generally what users
- * expect from this device; however, these are often actually full
- * multitouch-capable touch devices, so it might be preferable to some apps
- * to treat them as such.
- *
- * Setting this hint to true will make the trackpad input report as a
- * multitouch device instead of a mouse. The default is false.
- *
- * Note that most platforms don't support this hint. As of 2.24.0, it
- * only supports MacBooks' trackpads on macOS. Others may follow later.
- *
- * This hint is checked during SDL_Init and can not be changed after.
- *
- * This hint is available since SDL 2.24.0.
- */
-#define SDL_HINT_TRACKPAD_IS_TOUCH_ONLY "SDL_TRACKPAD_IS_TOUCH_ONLY"
-
-
-/**
- * \brief Sets the title of the TextInput window on GDK platforms.
- *
- * On GDK, if SDL_GDK_TEXTINPUT is defined, you can use the
- * standard SDL text input and virtual keyboard capabilities
- * to get text from the user.
- *
- * This hint allows you to customize the virtual keyboard
- * window that will be shown to the user.
- *
- * Set this hint to change the title of the window.
- *
- * This hint will not affect a window that is already being
- * shown to the user. It will only affect new input windows.
- *
- * This hint is available only if SDL_GDK_TEXTINPUT defined.
- */
-#define SDL_HINT_GDK_TEXTINPUT_TITLE "SDL_GDK_TEXTINPUT_TITLE"
-
-/**
- * \brief Sets the description of the TextInput window on GDK platforms.
- *
- * On GDK, if SDL_GDK_TEXTINPUT is defined, you can use the
- * standard SDL text input and virtual keyboard capabilities
- * to get text from the user.
- *
- * This hint allows you to customize the virtual keyboard
- * window that will be shown to the user.
- *
- * Set this hint to change the description of the window.
- *
- * This hint will not affect a window that is already being
- * shown to the user. It will only affect new input windows.
- *
- * This hint is available only if SDL_GDK_TEXTINPUT defined.
- */
-#define SDL_HINT_GDK_TEXTINPUT_DESCRIPTION "SDL_GDK_TEXTINPUT_DESCRIPTION"
-
-/**
- * \brief Sets the default text of the TextInput window on GDK platforms.
- *
- * On GDK, if SDL_GDK_TEXTINPUT is defined, you can use the
- * standard SDL text input and virtual keyboard capabilities
- * to get text from the user.
- *
- * This hint allows you to customize the virtual keyboard
- * window that will be shown to the user.
- *
- * Set this hint to change the default text value of the window.
- *
- * This hint will not affect a window that is already being
- * shown to the user. It will only affect new input windows.
- *
- * This hint is available only if SDL_GDK_TEXTINPUT defined.
- */
-#define SDL_HINT_GDK_TEXTINPUT_DEFAULT "SDL_GDK_TEXTINPUT_DEFAULT"
-
-/**
- * \brief Sets the input scope of the TextInput window on GDK platforms.
- *
- * On GDK, if SDL_GDK_TEXTINPUT is defined, you can use the
- * standard SDL text input and virtual keyboard capabilities
- * to get text from the user.
- *
- * This hint allows you to customize the virtual keyboard
- * window that will be shown to the user.
- *
- * Set this hint to change the XGameUiTextEntryInputScope value
- * that will be passed to the window creation function.
- *
- * The value must be a stringified integer,
- * for example "0" for XGameUiTextEntryInputScope::Default.
- *
- * This hint will not affect a window that is already being
- * shown to the user. It will only affect new input windows.
- *
- * This hint is available only if SDL_GDK_TEXTINPUT defined.
- */
-#define SDL_HINT_GDK_TEXTINPUT_SCOPE "SDL_GDK_TEXTINPUT_SCOPE"
-
-/**
- * \brief Sets the maximum input length of the TextInput window on GDK platforms.
- *
- * On GDK, if SDL_GDK_TEXTINPUT is defined, you can use the
- * standard SDL text input and virtual keyboard capabilities
- * to get text from the user.
- *
- * This hint allows you to customize the virtual keyboard
- * window that will be shown to the user.
- *
- * Set this hint to change the maximum allowed input
- * length of the text box in the virtual keyboard window.
- *
- * The value must be a stringified integer,
- * for example "10" to allow for up to 10 characters of text input.
- *
- * This hint will not affect a window that is already being
- * shown to the user. It will only affect new input windows.
- *
- * This hint is available only if SDL_GDK_TEXTINPUT defined.
- */
-#define SDL_HINT_GDK_TEXTINPUT_MAX_LENGTH "SDL_GDK_TEXTINPUT_MAX_LENGTH"
-
-
-/**
- * \brief An enumeration of hint priorities
- */
-typedef enum
-{
- SDL_HINT_DEFAULT,
- SDL_HINT_NORMAL,
- SDL_HINT_OVERRIDE
-} SDL_HintPriority;
-
-
-/**
- * Set a hint with a specific priority.
- *
- * The priority controls the behavior when setting a hint that already has a
- * value. Hints will replace existing hints of their priority and lower.
- * Environment variables are considered to have override priority.
- *
- * \param name the hint to set
- * \param value the value of the hint variable
- * \param priority the SDL_HintPriority level for the hint
- * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetHint
- * \sa SDL_SetHint
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name,
- const char *value,
- SDL_HintPriority priority);
-
-/**
- * Set a hint with normal priority.
- *
- * Hints will not be set if there is an existing override hint or environment
- * variable that takes precedence. You can use SDL_SetHintWithPriority() to
- * set the hint with override priority instead.
- *
- * \param name the hint to set
- * \param value the value of the hint variable
- * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetHint
- * \sa SDL_SetHintWithPriority
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name,
- const char *value);
-
-/**
- * Reset a hint to the default value.
- *
- * This will reset a hint to the value of the environment variable, or NULL if
- * the environment isn't set. Callbacks will be called normally with this
- * change.
- *
- * \param name the hint to set
- * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetHint
- * \sa SDL_SetHint
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_ResetHint(const char *name);
-
-/**
- * Reset all hints to the default values.
- *
- * This will reset all hints to the value of the associated environment
- * variable, or NULL if the environment isn't set. Callbacks will be called
- * normally with this change.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetHint
- * \sa SDL_SetHint
- * \sa SDL_ResetHint
- */
-extern DECLSPEC void SDLCALL SDL_ResetHints(void);
-
-/**
- * Get the value of a hint.
- *
- * \param name the hint to query
- * \returns the string value of a hint or NULL if the hint isn't set.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetHint
- * \sa SDL_SetHintWithPriority
- */
-extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name);
-
-/**
- * Get the boolean value of a hint variable.
- *
- * \param name the name of the hint to get the boolean value from
- * \param default_value the value to return if the hint does not exist
- * \returns the boolean value of a hint or the provided default value if the
- * hint does not exist.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetHint
- * \sa SDL_SetHint
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value);
-
-/**
- * Type definition of the hint callback function.
- *
- * \param userdata what was passed as `userdata` to SDL_AddHintCallback()
- * \param name what was passed as `name` to SDL_AddHintCallback()
- * \param oldValue the previous hint value
- * \param newValue the new value hint is to be set to
- */
-typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
-
-/**
- * Add a function to watch a particular hint.
- *
- * \param name the hint to watch
- * \param callback An SDL_HintCallback function that will be called when the
- * hint value changes
- * \param userdata a pointer to pass to the callback function
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_DelHintCallback
- */
-extern DECLSPEC int SDLCALL SDL_AddHintCallback(const char *name,
- SDL_HintCallback callback,
- void *userdata);
-
-/**
- * Remove a function watching a particular hint.
- *
- * \param name the hint being watched
- * \param callback An SDL_HintCallback function that will be called when the
- * hint value changes
- * \param userdata a pointer being passed to the callback function
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_AddHintCallback
- */
-extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name,
- SDL_HintCallback callback,
- void *userdata);
-
-/**
- * Clear all hints.
- *
- * This function is automatically called during SDL_Quit(), and deletes all
- * callbacks without calling them and frees all memory associated with hints.
- * If you're calling this from application code you probably want to call
- * SDL_ResetHints() instead.
- *
- * This function will be removed from the API the next time we rev the ABI.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ResetHints
- */
-extern DECLSPEC void SDLCALL SDL_ClearHints(void);
-
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_hints_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_init.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_init.h
deleted file mode 100644
index 361c6534..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_init.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_init.h
- *
- * \brief Init and quit header for the SDL library
- */
-
-#ifndef SDL_init_h_
-#define SDL_init_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* As of version 0.5, SDL is loaded dynamically into the application */
-
-/**
- * \brief Initialization flags for SDL_Init and/or SDL_InitSubSystem
- *
- * These are the flags which may be passed to SDL_Init(). You should
- * specify the subsystems which you will be using in your application.
- *
- * \sa SDL_Init
- * \sa SDL_Quit
- * \sa SDL_InitSubSystem
- * \sa SDL_QuitSubSystem
- * \sa SDL_WasInit
- */
-typedef enum
-{
- SDL_INIT_TIMER = 0x00000001,
- SDL_INIT_AUDIO = 0x00000010,
- SDL_INIT_VIDEO = 0x00000020, /**< `SDL_INIT_VIDEO` implies `SDL_INIT_EVENTS` */
- SDL_INIT_JOYSTICK = 0x00000200, /**< `SDL_INIT_JOYSTICK` implies `SDL_INIT_EVENTS` */
- SDL_INIT_HAPTIC = 0x00001000,
- SDL_INIT_GAMEPAD = 0x00002000, /**< `SDL_INIT_GAMEPAD` implies `SDL_INIT_JOYSTICK` */
- SDL_INIT_EVENTS = 0x00004000,
- SDL_INIT_SENSOR = 0x00008000
-} SDL_InitFlags;
-#define SDL_INIT_EVERYTHING ( \
- SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \
- SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMEPAD | SDL_INIT_SENSOR \
- )
-
-/**
- * Initialize the SDL library.
- *
- * SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the
- * two may be used interchangeably. Though for readability of your code
- * SDL_InitSubSystem() might be preferred.
- *
- * The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread)
- * subsystems are initialized by default. Message boxes
- * (SDL_ShowSimpleMessageBox) also attempt to work without initializing the
- * video subsystem, in hopes of being useful in showing an error dialog when
- * SDL_Init fails. You must specifically initialize other subsystems if you
- * use them in your application.
- *
- * Logging (such as SDL_Log) works without initialization, too.
- *
- * `flags` may be any of the following OR'd together:
- *
- * - `SDL_INIT_TIMER`: timer subsystem
- * - `SDL_INIT_AUDIO`: audio subsystem
- * - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events
- * subsystem
- * - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the
- * events subsystem
- * - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem
- * - `SDL_INIT_GAMEPAD`: gamepad subsystem; automatically initializes the
- * joystick subsystem
- * - `SDL_INIT_EVENTS`: events subsystem
- * - `SDL_INIT_EVERYTHING`: all of the above subsystems
- *
- * Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem()
- * for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or
- * call SDL_Quit() to force shutdown). If a subsystem is already loaded then
- * this call will increase the ref-count and return.
- *
- * \param flags subsystem initialization flags
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_InitSubSystem
- * \sa SDL_Quit
- * \sa SDL_SetMainReady
- * \sa SDL_WasInit
- */
-extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags);
-
-/**
- * Compatibility function to initialize the SDL library.
- *
- * This function and SDL_Init() are interchangeable.
- *
- * \param flags any of the flags used by SDL_Init(); see SDL_Init for details.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Init
- * \sa SDL_Quit
- * \sa SDL_QuitSubSystem
- */
-extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags);
-
-/**
- * Shut down specific SDL subsystems.
- *
- * You still need to call SDL_Quit() even if you close all open subsystems
- * with SDL_QuitSubSystem().
- *
- * \param flags any of the flags used by SDL_Init(); see SDL_Init for details.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_InitSubSystem
- * \sa SDL_Quit
- */
-extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags);
-
-/**
- * Get a mask of the specified subsystems which are currently initialized.
- *
- * \param flags any of the flags used by SDL_Init(); see SDL_Init for details.
- * \returns a mask of all initialized subsystems if `flags` is 0, otherwise it
- * returns the initialization status of the specified subsystems.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Init
- * \sa SDL_InitSubSystem
- */
-extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags);
-
-/**
- * Clean up all initialized subsystems.
- *
- * You should call this function even if you have already shutdown each
- * initialized subsystem with SDL_QuitSubSystem(). It is safe to call this
- * function even in the case of errors in initialization.
- *
- * You can use this function with atexit() to ensure that it is run when your
- * application is shutdown, but it is not wise to do this from a library or
- * other dynamically loaded code.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Init
- * \sa SDL_QuitSubSystem
- */
-extern DECLSPEC void SDLCALL SDL_Quit(void);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_init_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_intrin.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_intrin.h
deleted file mode 100644
index addda91e..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_intrin.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_intrin.h
- *
- * \brief Header file for CPU intrinsics for SDL
- */
-
-#ifndef SDL_intrin_h_
-#define SDL_intrin_h_
-
-#include
-
-/* Need to do this here because intrin.h has C++ code in it */
-/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */
-#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64))
-#ifdef __clang__
-/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version,
- so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */
-#ifndef __PRFCHWINTRIN_H
-#define __PRFCHWINTRIN_H
-static __inline__ void __attribute__((__always_inline__, __nodebug__))
-_m_prefetch(void *__P)
-{
- __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */);
-}
-#endif /* __PRFCHWINTRIN_H */
-#endif /* __clang__ */
-#include
-
-#elif defined(__MINGW64_VERSION_MAJOR)
-#include
-#if defined(__ARM_NEON) && !defined(SDL_DISABLE_NEON)
-# define SDL_NEON_INTRINSICS 1
-# include
-#endif
-
-#else
-/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC to have it included. */
-#if defined(__ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC)
-#define SDL_ALTIVEC_INTRINSICS 1
-#include
-#endif
-#ifndef SDL_DISABLE_NEON
-# ifdef __ARM_NEON
-# define SDL_NEON_INTRINSICS 1
-# include
-# elif defined(__WINDOWS__) || defined(__WINRT__) || defined(__GDK__)
-/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */
-# ifdef _M_ARM
-# define SDL_NEON_INTRINSICS 1
-# include
-# include
-# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
-# endif
-# if defined (_M_ARM64)
-# define SDL_NEON_INTRINSICS 1
-# include
-# include
-# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
-# define __ARM_ARCH 8
-# endif
-# endif
-#endif
-#endif /* compiler version */
-
-#if defined(__clang__) && defined(__has_attribute)
-# if __has_attribute(target)
-# define SDL_HAS_TARGET_ATTRIBS
-# endif
-#elif defined(__GNUC__) && (__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) /* gcc >= 4.9 */
-# define SDL_HAS_TARGET_ATTRIBS
-#elif defined(__ICC) && __ICC >= 1600
-# define SDL_HAS_TARGET_ATTRIBS
-#endif
-
-#ifdef SDL_HAS_TARGET_ATTRIBS
-# define SDL_TARGETING(x) __attribute__((target(x)))
-#else
-# define SDL_TARGETING(x)
-#endif
-
-#ifdef __loongarch64
-# ifndef SDL_DISABLE_LSX
-# define SDL_LSX_INTRINSICS 1
-# include
-# endif
-# ifndef SDL_DISABLE_LASX
-# define SDL_LASX_INTRINSICS 1
-# include
-# endif
-#endif
-
-#if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)
-# if ((defined(_MSC_VER) && !defined(_M_X64)) || defined(__MMX__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_MMX)
-# define SDL_MMX_INTRINSICS 1
-# include
-# endif
-# if (defined(_MSC_VER) || defined(__SSE__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_SSE)
-# define SDL_SSE_INTRINSICS 1
-# include
-# endif
-# if (defined(_MSC_VER) || defined(__SSE2__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_SSE2)
-# define SDL_SSE2_INTRINSICS 1
-# include
-# endif
-# if (defined(_MSC_VER) || defined(__SSE3__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_SSE3)
-# define SDL_SSE3_INTRINSICS 1
-# include
-# endif
-# if (defined(_MSC_VER) || defined(__SSE4_1__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_SSE4_1)
-# define SDL_SSE4_1_INTRINSICS 1
-# include
-# endif
-# if (defined(_MSC_VER) || defined(__SSE4_2__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_SSE4_2)
-# define SDL_SSE4_2_INTRINSICS 1
-# include
-# endif
-# if defined(__clang__) && (defined(_MSC_VER) || defined(__SCE__)) && !defined(__AVX__) && !defined(SDL_DISABLE_AVX)
-# define SDL_DISABLE_AVX /* see https://reviews.llvm.org/D20291 and https://reviews.llvm.org/D79194 */
-# endif
-# if (defined(_MSC_VER) || defined(__AVX__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_AVX)
-# define SDL_AVX_INTRINSICS 1
-# include
-# endif
-# if defined(__clang__) && (defined(_MSC_VER) || defined(__SCE__)) && !defined(__AVX2__) && !defined(SDL_DISABLE_AVX2)
-# define SDL_DISABLE_AVX2 /* see https://reviews.llvm.org/D20291 and https://reviews.llvm.org/D79194 */
-# endif
-# if (defined(_MSC_VER) || defined(__AVX2__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_AVX2)
-# define SDL_AVX2_INTRINSICS 1
-# include
-# endif
-# if defined(__clang__) && (defined(_MSC_VER) || defined(__SCE__)) && !defined(__AVX512F__) && !defined(SDL_DISABLE_AVX512F)
-# define SDL_DISABLE_AVX512F /* see https://reviews.llvm.org/D20291 and https://reviews.llvm.org/D79194 */
-# endif
-# if (defined(_MSC_VER) || defined(__AVX512F__) || defined(SDL_HAS_TARGET_ATTRIBS)) && !defined(SDL_DISABLE_AVX512F)
-# define SDL_AVX512F_INTRINSICS 1
-# include
-# endif
-#endif /* defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) */
-
-#endif /* SDL_intrin_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_joystick.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_joystick.h
deleted file mode 100644
index c7985a92..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_joystick.h
+++ /dev/null
@@ -1,1010 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_joystick.h
- *
- * \brief Include file for SDL joystick event handling
- *
- * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted
- * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in.
- *
- * The term "player_index" is the number assigned to a player on a specific
- * controller. For XInput controllers this returns the XInput user index.
- * Many joysticks will not be able to supply this information.
- *
- * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of
- * the device (a X360 wired controller for example). This identifier is platform dependent.
- */
-
-#ifndef SDL_joystick_h_
-#define SDL_joystick_h_
-
-#include
-#include
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file SDL_joystick.h
- *
- * In order to use these functions, SDL_Init() must have been called
- * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system
- * for joysticks, and load appropriate drivers.
- *
- * If you would like to receive joystick updates while the application
- * is in the background, you should set the following hint before calling
- * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
- */
-
-/**
- * The joystick structure used to identify an SDL joystick
- */
-#ifdef SDL_THREAD_SAFETY_ANALYSIS
-extern SDL_Mutex *SDL_joystick_lock;
-#endif
-struct SDL_Joystick;
-typedef struct SDL_Joystick SDL_Joystick;
-
-/* A structure that encodes the stable unique id for a joystick device */
-typedef SDL_GUID SDL_JoystickGUID;
-
-/**
- * This is a unique ID for a joystick for the time it is connected to the system,
- * and is never reused for the lifetime of the application. If the joystick is
- * disconnected and reconnected, it will get a new ID.
- *
- * The ID value starts at 1 and increments from there. The value 0 is an invalid ID.
- */
-typedef Uint32 SDL_JoystickID;
-
-typedef enum
-{
- SDL_JOYSTICK_TYPE_UNKNOWN,
- SDL_JOYSTICK_TYPE_GAMEPAD,
- SDL_JOYSTICK_TYPE_WHEEL,
- SDL_JOYSTICK_TYPE_ARCADE_STICK,
- SDL_JOYSTICK_TYPE_FLIGHT_STICK,
- SDL_JOYSTICK_TYPE_DANCE_PAD,
- SDL_JOYSTICK_TYPE_GUITAR,
- SDL_JOYSTICK_TYPE_DRUM_KIT,
- SDL_JOYSTICK_TYPE_ARCADE_PAD,
- SDL_JOYSTICK_TYPE_THROTTLE
-} SDL_JoystickType;
-
-typedef enum
-{
- SDL_JOYSTICK_POWER_UNKNOWN = -1,
- SDL_JOYSTICK_POWER_EMPTY, /* <= 5% */
- SDL_JOYSTICK_POWER_LOW, /* <= 20% */
- SDL_JOYSTICK_POWER_MEDIUM, /* <= 70% */
- SDL_JOYSTICK_POWER_FULL, /* <= 100% */
- SDL_JOYSTICK_POWER_WIRED,
- SDL_JOYSTICK_POWER_MAX
-} SDL_JoystickPowerLevel;
-
-#define SDL_JOYSTICK_AXIS_MAX 32767
-#define SDL_JOYSTICK_AXIS_MIN -32768
-
-/* Set max recognized G-force from accelerometer
- See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed
- */
-#define SDL_IPHONE_MAX_GFORCE 5.0
-
-
-/* Function prototypes */
-
-/**
- * Locking for atomic access to the joystick API
- *
- * The SDL joystick functions are thread-safe, however you can lock the
- * joysticks while processing to guarantee that the joystick list won't change
- * and joystick and gamepad events will not be delivered.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_LockJoysticks(void) SDL_ACQUIRE(SDL_joystick_lock);
-
-/**
- * Unlocking for atomic access to the joystick API
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void) SDL_RELEASE(SDL_joystick_lock);
-
-/**
- * Get a list of currently connected joysticks.
- *
- * \param count a pointer filled in with the number of joysticks returned
- * \returns a 0 terminated array of joystick instance IDs which should be
- * freed with SDL_free(), or NULL on error; call SDL_GetError() for
- * more details.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC SDL_JoystickID *SDLCALL SDL_GetJoysticks(int *count);
-
-/**
- * Get the implementation dependent name of a joystick.
- *
- * This can be called before any joysticks are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the name of the selected joystick. If no name can be found, this
- * function returns NULL; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickName
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC const char *SDLCALL SDL_GetJoystickInstanceName(SDL_JoystickID instance_id);
-
-/**
- * Get the implementation dependent path of a joystick.
- *
- * This can be called before any joysticks are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the path of the selected joystick. If no path can be found, this
- * function returns NULL; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickPath
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC const char *SDLCALL SDL_GetJoystickInstancePath(SDL_JoystickID instance_id);
-
-/**
- * Get the player index of a joystick.
- *
- * This can be called before any joysticks are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the player index of a joystick, or -1 if it's not available
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickPlayerIndex
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC int SDLCALL SDL_GetJoystickInstancePlayerIndex(SDL_JoystickID instance_id);
-
-/**
- * Get the implementation-dependent GUID of a joystick.
- *
- * This can be called before any joysticks are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the GUID of the selected joystick. If called on an invalid index,
- * this function returns a zero GUID
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickGUID
- * \sa SDL_GetJoystickGUIDString
- */
-extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_GetJoystickInstanceGUID(SDL_JoystickID instance_id);
-
-/**
- * Get the USB vendor ID of a joystick, if available.
- *
- * This can be called before any joysticks are opened. If the vendor ID isn't
- * available this function returns 0.
- *
- * \param instance_id the joystick instance ID
- * \returns the USB vendor ID of the selected joystick. If called on an
- * invalid index, this function returns zero
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetJoystickInstanceVendor(SDL_JoystickID instance_id);
-
-/**
- * Get the USB product ID of a joystick, if available.
- *
- * This can be called before any joysticks are opened. If the product ID isn't
- * available this function returns 0.
- *
- * \param instance_id the joystick instance ID
- * \returns the USB product ID of the selected joystick. If called on an
- * invalid index, this function returns zero
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetJoystickInstanceProduct(SDL_JoystickID instance_id);
-
-/**
- * Get the product version of a joystick, if available.
- *
- * This can be called before any joysticks are opened. If the product version
- * isn't available this function returns 0.
- *
- * \param instance_id the joystick instance ID
- * \returns the product version of the selected joystick. If called on an
- * invalid index, this function returns zero
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetJoystickInstanceProductVersion(SDL_JoystickID instance_id);
-
-/**
- * Get the type of a joystick, if available.
- *
- * This can be called before any joysticks are opened.
- *
- * \param instance_id the joystick instance ID
- * \returns the SDL_JoystickType of the selected joystick. If called on an
- * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_JoystickType SDLCALL SDL_GetJoystickInstanceType(SDL_JoystickID instance_id);
-
-/**
- * Open a joystick for use.
- *
- * The joystick subsystem must be initialized before a joystick can be opened
- * for use.
- *
- * \param instance_id the joystick instance ID
- * \returns a joystick identifier or NULL if an error occurred; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CloseJoystick
- */
-extern DECLSPEC SDL_Joystick *SDLCALL SDL_OpenJoystick(SDL_JoystickID instance_id);
-
-/**
- * Get the SDL_Joystick associated with an instance ID, if it has been opened.
- *
- * \param instance_id the instance ID to get the SDL_Joystick for
- * \returns an SDL_Joystick on success or NULL on failure or if it hasn't been
- * opened yet; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_Joystick *SDLCALL SDL_GetJoystickFromInstanceID(SDL_JoystickID instance_id);
-
-/**
- * Get the SDL_Joystick associated with a player index.
- *
- * \param player_index the player index to get the SDL_Joystick for
- * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError()
- * for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_Joystick *SDLCALL SDL_GetJoystickFromPlayerIndex(int player_index);
-
-/**
- * Attach a new virtual joystick.
- *
- * \param type type of joystick
- * \param naxes number of axes
- * \param nbuttons number of buttons
- * \param nhats number of hats
- * \returns the joystick instance ID, or 0 if an error occurred; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_JoystickID SDLCALL SDL_AttachVirtualJoystick(SDL_JoystickType type,
- int naxes,
- int nbuttons,
- int nhats);
-
-/**
- * The structure that defines an extended virtual joystick description
- *
- * The caller must zero the structure and then initialize the version with `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to SDL_AttachVirtualJoystickEx()
- * All other elements of this structure are optional and can be left 0.
- *
- * \sa SDL_AttachVirtualJoystickEx
- */
-typedef struct SDL_VirtualJoystickDesc
-{
- Uint16 version; /**< `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` */
- Uint16 type; /**< `SDL_JoystickType` */
- Uint16 naxes; /**< the number of axes on this joystick */
- Uint16 nbuttons; /**< the number of buttons on this joystick */
- Uint16 nhats; /**< the number of hats on this joystick */
- Uint16 vendor_id; /**< the USB vendor ID of this joystick */
- Uint16 product_id; /**< the USB product ID of this joystick */
- Uint16 padding; /**< unused */
- Uint32 button_mask; /**< A mask of which buttons are valid for this controller
- e.g. (1 << SDL_GAMEPAD_BUTTON_A) */
- Uint32 axis_mask; /**< A mask of which axes are valid for this controller
- e.g. (1 << SDL_GAMEPAD_AXIS_LEFTX) */
- const char *name; /**< the name of the joystick */
-
- void *userdata; /**< User data pointer passed to callbacks */
- void (SDLCALL *Update)(void *userdata); /**< Called when the joystick state should be updated */
- void (SDLCALL *SetPlayerIndex)(void *userdata, int player_index); /**< Called when the player index is set */
- int (SDLCALL *Rumble)(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble); /**< Implements SDL_RumbleJoystick() */
- int (SDLCALL *RumbleTriggers)(void *userdata, Uint16 left_rumble, Uint16 right_rumble); /**< Implements SDL_RumbleJoystickTriggers() */
- int (SDLCALL *SetLED)(void *userdata, Uint8 red, Uint8 green, Uint8 blue); /**< Implements SDL_SetJoystickLED() */
- int (SDLCALL *SendEffect)(void *userdata, const void *data, int size); /**< Implements SDL_SendJoystickEffect() */
-
-} SDL_VirtualJoystickDesc;
-
-/**
- * \brief The current version of the SDL_VirtualJoystickDesc structure
- */
-#define SDL_VIRTUAL_JOYSTICK_DESC_VERSION 1
-
-/**
- * Attach a new virtual joystick with extended properties.
- *
- * \param desc Joystick description
- * \returns the joystick instance ID, or 0 if an error occurred; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_JoystickID SDLCALL SDL_AttachVirtualJoystickEx(const SDL_VirtualJoystickDesc *desc);
-
-/**
- * Detach a virtual joystick.
- *
- * \param instance_id the joystick instance ID, previously returned from
- * SDL_AttachVirtualJoystick()
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_DetachVirtualJoystick(SDL_JoystickID instance_id);
-
-/**
- * Query whether or not a joystick is virtual.
- *
- * \param instance_id the joystick instance ID
- * \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_IsJoystickVirtual(SDL_JoystickID instance_id);
-
-/**
- * Set values on an opened, virtual-joystick's axis.
- *
- * Please note that values set here will not be applied until the next call to
- * SDL_UpdateJoysticks, which can either be called directly, or can be called
- * indirectly through various other SDL APIs, including, but not limited to
- * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
- * SDL_WaitEvent.
- *
- * Note that when sending trigger axes, you should scale the value to the full
- * range of Sint16. For example, a trigger at rest would have the value of
- * `SDL_JOYSTICK_AXIS_MIN`.
- *
- * \param joystick the virtual joystick on which to set state.
- * \param axis the specific axis on the virtual joystick to set.
- * \param value the new value for the specified axis.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetJoystickVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value);
-
-/**
- * Set values on an opened, virtual-joystick's button.
- *
- * Please note that values set here will not be applied until the next call to
- * SDL_UpdateJoysticks, which can either be called directly, or can be called
- * indirectly through various other SDL APIs, including, but not limited to
- * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
- * SDL_WaitEvent.
- *
- * \param joystick the virtual joystick on which to set state.
- * \param button the specific button on the virtual joystick to set.
- * \param value the new value for the specified button.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetJoystickVirtualButton(SDL_Joystick *joystick, int button, Uint8 value);
-
-/**
- * Set values on an opened, virtual-joystick's hat.
- *
- * Please note that values set here will not be applied until the next call to
- * SDL_UpdateJoysticks, which can either be called directly, or can be called
- * indirectly through various other SDL APIs, including, but not limited to
- * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
- * SDL_WaitEvent.
- *
- * \param joystick the virtual joystick on which to set state.
- * \param hat the specific hat on the virtual joystick to set.
- * \param value the new value for the specified hat.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetJoystickVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value);
-
-/**
- * Get the implementation dependent name of a joystick.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the name of the selected joystick. If no name can be found, this
- * function returns NULL; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickInstanceName
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC const char *SDLCALL SDL_GetJoystickName(SDL_Joystick *joystick);
-
-/**
- * Get the implementation dependent path of a joystick.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the path of the selected joystick. If no path can be found, this
- * function returns NULL; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickInstancePath
- */
-extern DECLSPEC const char *SDLCALL SDL_GetJoystickPath(SDL_Joystick *joystick);
-
-/**
- * Get the player index of an opened joystick.
- *
- * For XInput controllers this returns the XInput user index. Many joysticks
- * will not be able to supply this information.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the player index, or -1 if it's not available.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_GetJoystickPlayerIndex(SDL_Joystick *joystick);
-
-/**
- * Set the player index of an opened joystick.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \param player_index Player index to assign to this joystick, or -1 to clear
- * the player index and turn off player LEDs.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetJoystickPlayerIndex(SDL_Joystick *joystick, int player_index);
-
-/**
- * Get the implementation-dependent GUID for the joystick.
- *
- * This function requires an open joystick.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the GUID of the given joystick. If called on an invalid index,
- * this function returns a zero GUID; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickInstanceGUID
- * \sa SDL_GetJoystickGUIDString
- */
-extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_GetJoystickGUID(SDL_Joystick *joystick);
-
-/**
- * Get the USB vendor ID of an opened joystick, if available.
- *
- * If the vendor ID isn't available this function returns 0.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the USB vendor ID of the selected joystick, or 0 if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetJoystickVendor(SDL_Joystick *joystick);
-
-/**
- * Get the USB product ID of an opened joystick, if available.
- *
- * If the product ID isn't available this function returns 0.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the USB product ID of the selected joystick, or 0 if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetJoystickProduct(SDL_Joystick *joystick);
-
-/**
- * Get the product version of an opened joystick, if available.
- *
- * If the product version isn't available this function returns 0.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the product version of the selected joystick, or 0 if unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetJoystickProductVersion(SDL_Joystick *joystick);
-
-/**
- * Get the firmware version of an opened joystick, if available.
- *
- * If the firmware version isn't available this function returns 0.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the firmware version of the selected joystick, or 0 if
- * unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC Uint16 SDLCALL SDL_GetJoystickFirmwareVersion(SDL_Joystick *joystick);
-
-/**
- * Get the serial number of an opened joystick, if available.
- *
- * Returns the serial number of the joystick, or NULL if it is not available.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the serial number of the selected joystick, or NULL if
- * unavailable.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC const char * SDLCALL SDL_GetJoystickSerial(SDL_Joystick *joystick);
-
-/**
- * Get the type of an opened joystick.
- *
- * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick()
- * \returns the SDL_JoystickType of the selected joystick.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_JoystickType SDLCALL SDL_GetJoystickType(SDL_Joystick *joystick);
-
-/**
- * Get an ASCII string representation for a given SDL_JoystickGUID.
- *
- * You should supply at least 33 bytes for pszGUID.
- *
- * \param guid the SDL_JoystickGUID you wish to convert to string
- * \param pszGUID buffer in which to write the ASCII string
- * \param cbGUID the size of pszGUID
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickInstanceGUID
- * \sa SDL_GetJoystickGUID
- * \sa SDL_GetJoystickGUIDFromString
- */
-extern DECLSPEC int SDLCALL SDL_GetJoystickGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID);
-
-/**
- * Convert a GUID string into a SDL_JoystickGUID structure.
- *
- * Performs no error checking. If this function is given a string containing
- * an invalid GUID, the function will silently succeed, but the GUID generated
- * will not be useful.
- *
- * \param pchGUID string containing an ASCII representation of a GUID
- * \returns a SDL_JoystickGUID structure.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickGUIDString
- */
-extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_GetJoystickGUIDFromString(const char *pchGUID);
-
-/**
- * Get the device information encoded in a SDL_JoystickGUID structure
- *
- * \param guid the SDL_JoystickGUID you wish to get info about
- * \param vendor A pointer filled in with the device VID, or 0 if not
- * available
- * \param product A pointer filled in with the device PID, or 0 if not
- * available
- * \param version A pointer filled in with the device version, or 0 if not
- * available
- * \param crc16 A pointer filled in with a CRC used to distinguish different
- * products with the same VID/PID, or 0 if not available
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickInstanceGUID
- */
-extern DECLSPEC void SDLCALL SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version, Uint16 *crc16);
-
-/**
- * Get the status of a specified joystick.
- *
- * \param joystick the joystick to query
- * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not;
- * call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_CloseJoystick
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_JoystickConnected(SDL_Joystick *joystick);
-
-/**
- * Get the instance ID of an opened joystick.
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \returns the instance ID of the specified joystick on success or 0 on
- * failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC SDL_JoystickID SDLCALL SDL_GetJoystickInstanceID(SDL_Joystick *joystick);
-
-/**
- * Get the number of general axis controls on a joystick.
- *
- * Often, the directional pad on a game controller will either look like 4
- * separate buttons or a POV hat, and not axes, but all of this is up to the
- * device and platform.
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \returns the number of axis controls/number of axes on success or a
- * negative error code on failure; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickAxis
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC int SDLCALL SDL_GetNumJoystickAxes(SDL_Joystick *joystick);
-
-/**
- * Get the number of POV hats on a joystick.
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \returns the number of POV hats on success or a negative error code on
- * failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickHat
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC int SDLCALL SDL_GetNumJoystickHats(SDL_Joystick *joystick);
-
-/**
- * Get the number of buttons on a joystick.
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \returns the number of buttons on success or a negative error code on
- * failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetJoystickButton
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC int SDLCALL SDL_GetNumJoystickButtons(SDL_Joystick *joystick);
-
-/**
- * Set the state of joystick event processing.
- *
- * If joystick events are disabled, you must call SDL_UpdateJoysticks()
- * yourself and check the state of the joystick when you want joystick
- * information.
- *
- * \param enabled whether to process joystick events or not
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_JoystickEventsEnabled
- */
-extern DECLSPEC void SDLCALL SDL_SetJoystickEventsEnabled(SDL_bool enabled);
-
-/**
- * Query the state of joystick event processing.
- *
- * If joystick events are disabled, you must call SDL_UpdateJoysticks()
- * yourself and check the state of the joystick when you want joystick
- * information.
- *
- * \returns SDL_TRUE if joystick events are being processed, SDL_FALSE
- * otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetJoystickEventsEnabled
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_JoystickEventsEnabled(void);
-
-/**
- * Update the current state of the open joysticks.
- *
- * This is called automatically by the event loop if any joystick events are
- * enabled.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_UpdateJoysticks(void);
-
-/**
- * Get the current state of an axis control on a joystick.
- *
- * SDL makes no promises about what part of the joystick any given axis refers
- * to. Your game should have some sort of configuration UI to let users
- * specify what each axis should be bound to. Alternately, SDL's higher-level
- * Game Controller API makes a great effort to apply order to this lower-level
- * interface, so you know that a specific axis is the "left thumb stick," etc.
- *
- * The value returned by SDL_GetJoystickAxis() is a signed integer (-32768 to
- * 32767) representing the current position of the axis. It may be necessary
- * to impose certain tolerances on these values to account for jitter.
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param axis the axis to query; the axis indices start at index 0
- * \returns a 16-bit signed integer representing the current position of the
- * axis or 0 on failure; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetNumJoystickAxes
- */
-extern DECLSPEC Sint16 SDLCALL SDL_GetJoystickAxis(SDL_Joystick *joystick,
- int axis);
-
-/**
- * Get the initial state of an axis control on a joystick.
- *
- * The state is a value ranging from -32768 to 32767.
- *
- * The axis indices start at index 0.
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param axis the axis to query; the axis indices start at index 0
- * \param state Upon return, the initial value is supplied here.
- * \returns SDL_TRUE if this axis has any initial value, or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_GetJoystickAxisInitialState(SDL_Joystick *joystick,
- int axis, Sint16 *state);
-
-/**
- * \name Hat positions
- */
-/* @{ */
-#define SDL_HAT_CENTERED 0x00
-#define SDL_HAT_UP 0x01
-#define SDL_HAT_RIGHT 0x02
-#define SDL_HAT_DOWN 0x04
-#define SDL_HAT_LEFT 0x08
-#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP)
-#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN)
-#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP)
-#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN)
-/* @} */
-
-/**
- * Get the current state of a POV hat on a joystick.
- *
- * The returned value will be one of the following positions:
- *
- * - `SDL_HAT_CENTERED`
- * - `SDL_HAT_UP`
- * - `SDL_HAT_RIGHT`
- * - `SDL_HAT_DOWN`
- * - `SDL_HAT_LEFT`
- * - `SDL_HAT_RIGHTUP`
- * - `SDL_HAT_RIGHTDOWN`
- * - `SDL_HAT_LEFTUP`
- * - `SDL_HAT_LEFTDOWN`
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param hat the hat index to get the state from; indices start at index 0
- * \returns the current hat position.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetNumJoystickHats
- */
-extern DECLSPEC Uint8 SDLCALL SDL_GetJoystickHat(SDL_Joystick *joystick,
- int hat);
-
-/**
- * Get the current state of a button on a joystick.
- *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param button the button index to get the state from; indices start at
- * index 0
- * \returns 1 if the specified button is pressed, 0 otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetNumJoystickButtons
- */
-extern DECLSPEC Uint8 SDLCALL SDL_GetJoystickButton(SDL_Joystick *joystick,
- int button);
-
-/**
- * Start a rumble effect.
- *
- * Each call to this function cancels any previous rumble effect, and calling
- * it with 0 intensity stops any rumbling.
- *
- * \param joystick The joystick to vibrate
- * \param low_frequency_rumble The intensity of the low frequency (left)
- * rumble motor, from 0 to 0xFFFF
- * \param high_frequency_rumble The intensity of the high frequency (right)
- * rumble motor, from 0 to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if rumble isn't supported on this joystick
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_JoystickHasRumble
- */
-extern DECLSPEC int SDLCALL SDL_RumbleJoystick(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
-
-/**
- * Start a rumble effect in the joystick's triggers
- *
- * Each call to this function cancels any previous trigger rumble effect, and
- * calling it with 0 intensity stops any rumbling.
- *
- * Note that this is rumbling of the _triggers_ and not the game controller as
- * a whole. This is currently only supported on Xbox One controllers. If you
- * want the (more common) whole-controller rumble, use SDL_RumbleJoystick()
- * instead.
- *
- * \param joystick The joystick to vibrate
- * \param left_rumble The intensity of the left trigger rumble motor, from 0
- * to 0xFFFF
- * \param right_rumble The intensity of the right trigger rumble motor, from 0
- * to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_JoystickHasRumbleTriggers
- */
-extern DECLSPEC int SDLCALL SDL_RumbleJoystickTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms);
-
-/**
- * Query whether a joystick has an LED.
- *
- * An example of a joystick LED is the light on the back of a PlayStation 4's
- * DualShock 4 controller.
- *
- * \param joystick The joystick to query
- * \returns SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE
- * otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick);
-
-/**
- * Query whether a joystick has rumble support.
- *
- * \param joystick The joystick to query
- * \returns SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_RumbleJoystick
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick);
-
-/**
- * Query whether a joystick has rumble support on triggers.
- *
- * \param joystick The joystick to query
- * \returns SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_RumbleJoystickTriggers
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joystick);
-
-/**
- * Update a joystick's LED color.
- *
- * An example of a joystick LED is the light on the back of a PlayStation 4's
- * DualShock 4 controller.
- *
- * \param joystick The joystick to update
- * \param red The intensity of the red LED
- * \param green The intensity of the green LED
- * \param blue The intensity of the blue LED
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SetJoystickLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue);
-
-/**
- * Send a joystick specific effect packet
- *
- * \param joystick The joystick to affect
- * \param data The data to send to the joystick
- * \param size The size of the data to send to the joystick
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_SendJoystickEffect(SDL_Joystick *joystick, const void *data, int size);
-
-/**
- * Close a joystick previously opened with SDL_OpenJoystick().
- *
- * \param joystick The joystick device to close
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_OpenJoystick
- */
-extern DECLSPEC void SDLCALL SDL_CloseJoystick(SDL_Joystick *joystick);
-
-/**
- * Get the battery level of a joystick as SDL_JoystickPowerLevel.
- *
- * \param joystick the SDL_Joystick to query
- * \returns the current battery level as SDL_JoystickPowerLevel on success or
- * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_GetJoystickPowerLevel(SDL_Joystick *joystick);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_joystick_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_keyboard.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_keyboard.h
deleted file mode 100644
index 5b2df215..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_keyboard.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_keyboard.h
- *
- * \brief Include file for SDL keyboard event handling
- */
-
-#ifndef SDL_keyboard_h_
-#define SDL_keyboard_h_
-
-#include
-#include
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief The SDL keysym structure, used in key events.
- *
- * \note If you are looking for translated character input, see the ::SDL_EVENT_TEXT_INPUT event.
- */
-typedef struct SDL_Keysym
-{
- SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */
- SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */
- Uint16 mod; /**< current key modifiers */
- Uint32 unused;
-} SDL_Keysym;
-
-/* Function prototypes */
-
-/**
- * Query the window which currently has keyboard focus.
- *
- * \returns the window with keyboard focus.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void);
-
-/**
- * Get a snapshot of the current state of the keyboard.
- *
- * The pointer returned is a pointer to an internal SDL array. It will be
- * valid for the whole lifetime of the application and should not be freed by
- * the caller.
- *
- * A array element with a value of 1 means that the key is pressed and a value
- * of 0 means that it is not. Indexes into this array are obtained by using
- * SDL_Scancode values.
- *
- * Use SDL_PumpEvents() to update the state array.
- *
- * This function gives you the current state after all events have been
- * processed, so if a key or button has been pressed and released before you
- * process events, then the pressed state will never show up in the
- * SDL_GetKeyboardState() calls.
- *
- * Note: This function doesn't take into account whether shift has been
- * pressed or not.
- *
- * \param numkeys if non-NULL, receives the length of the returned array
- * \returns a pointer to an array of key states.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_PumpEvents
- * \sa SDL_ResetKeyboard
- */
-extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys);
-
-/**
- * Clear the state of the keyboard
- *
- * This function will generate key up events for all pressed keys.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetKeyboardState
- */
-extern DECLSPEC void SDLCALL SDL_ResetKeyboard(void);
-
-/**
- * Get the current key modifier state for the keyboard.
- *
- * \returns an OR'd combination of the modifier keys for the keyboard. See
- * SDL_Keymod for details.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetKeyboardState
- * \sa SDL_SetModState
- */
-extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void);
-
-/**
- * Set the current key modifier state for the keyboard.
- *
- * The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose
- * modifier key states on your application. Simply pass your desired modifier
- * states into `modstate`. This value may be a bitwise, OR'd combination of
- * SDL_Keymod values.
- *
- * This does not change the keyboard state, only the key modifier flags that
- * SDL reports.
- *
- * \param modstate the desired SDL_Keymod for the keyboard
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetModState
- */
-extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate);
-
-/**
- * Get the key code corresponding to the given scancode according to the
- * current keyboard layout.
- *
- * See SDL_Keycode for details.
- *
- * \param scancode the desired SDL_Scancode to query
- * \returns the SDL_Keycode that corresponds to the given SDL_Scancode.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetKeyName
- * \sa SDL_GetScancodeFromKey
- */
-extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode);
-
-/**
- * Get the scancode corresponding to the given key code according to the
- * current keyboard layout.
- *
- * See SDL_Scancode for details.
- *
- * \param key the desired SDL_Keycode to query
- * \returns the SDL_Scancode that corresponds to the given SDL_Keycode.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetKeyFromScancode
- * \sa SDL_GetScancodeName
- */
-extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key);
-
-/**
- * Get a human-readable name for a scancode.
- *
- * See SDL_Scancode for details.
- *
- * **Warning**: The returned name is by design not stable across platforms,
- * e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left
- * Windows" under Microsoft Windows, and some scancodes like
- * `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even
- * scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and
- * `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore
- * unsuitable for creating a stable cross-platform two-way mapping between
- * strings and scancodes.
- *
- * \param scancode the desired SDL_Scancode to query
- * \returns a pointer to the name for the scancode. If the scancode doesn't
- * have a name this function returns an empty string ("").
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetScancodeFromKey
- * \sa SDL_GetScancodeFromName
- */
-extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode);
-
-/**
- * Get a scancode from a human-readable name.
- *
- * \param name the human-readable scancode name
- * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't
- * recognized; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetKeyFromName
- * \sa SDL_GetScancodeFromKey
- * \sa SDL_GetScancodeName
- */
-extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name);
-
-/**
- * Get a human-readable name for a key.
- *
- * See SDL_Scancode and SDL_Keycode for details.
- *
- * \param key the desired SDL_Keycode to query
- * \returns a pointer to a UTF-8 string that stays valid at least until the
- * next call to this function. If you need it around any longer, you
- * must copy it. If the key doesn't have a name, this function
- * returns an empty string ("").
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetKeyFromName
- * \sa SDL_GetKeyFromScancode
- * \sa SDL_GetScancodeFromKey
- */
-extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key);
-
-/**
- * Get a key code from a human-readable name.
- *
- * \param name the human-readable key name
- * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_GetKeyFromScancode
- * \sa SDL_GetKeyName
- * \sa SDL_GetScancodeFromName
- */
-extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name);
-
-/**
- * Start accepting Unicode text input events.
- *
- * This function will start accepting Unicode text input events in the focused
- * SDL window, and start emitting SDL_TextInputEvent (SDL_EVENT_TEXT_INPUT)
- * and SDL_TextEditingEvent (SDL_EVENT_TEXT_EDITING) events. Please use this
- * function in pair with SDL_StopTextInput().
- *
- * On some platforms using this function activates the screen keyboard.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_SetTextInputRect
- * \sa SDL_StopTextInput
- */
-extern DECLSPEC void SDLCALL SDL_StartTextInput(void);
-
-/**
- * Check whether or not Unicode text input events are enabled.
- *
- * \returns SDL_TRUE if text input events are enabled else SDL_FALSE.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_StartTextInput
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_TextInputActive(void);
-
-/**
- * Stop receiving any text input events.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_StartTextInput
- */
-extern DECLSPEC void SDLCALL SDL_StopTextInput(void);
-
-/**
- * Dismiss the composition window/IME without disabling the subsystem.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_StartTextInput
- * \sa SDL_StopTextInput
- */
-extern DECLSPEC void SDLCALL SDL_ClearComposition(void);
-
-/**
- * Returns if an IME Composite or Candidate window is currently shown.
- *
- * \returns SDL_TRUE if shown, else SDL_FALSE
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_TextInputShown(void);
-
-/**
- * Set the rectangle used to type Unicode text inputs.
- *
- * To start text input in a given location, this function is intended to be
- * called before SDL_StartTextInput, although some platforms support moving
- * the rectangle even while text input (and a composition) is active.
- *
- * Note: If you want to use the system native IME window, try setting hint
- * **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you
- * any feedback.
- *
- * \param rect the SDL_Rect structure representing the rectangle to receive
- * text (ignored if NULL)
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_StartTextInput
- */
-extern DECLSPEC int SDLCALL SDL_SetTextInputRect(const SDL_Rect *rect);
-
-/**
- * Check whether the platform has screen keyboard support.
- *
- * \returns SDL_TRUE if the platform has some screen keyboard support or
- * SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_StartTextInput
- * \sa SDL_ScreenKeyboardShown
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void);
-
-/**
- * Check whether the screen keyboard is shown for given window.
- *
- * \param window the window for which screen keyboard should be queried
- * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_HasScreenKeyboardSupport
- */
-extern DECLSPEC SDL_bool SDLCALL SDL_ScreenKeyboardShown(SDL_Window *window);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_keyboard_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_keycode.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_keycode.h
deleted file mode 100644
index 9f4953c0..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_keycode.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_keycode.h
- *
- * \brief Defines constants which identify keyboard keys and modifiers.
- */
-
-#ifndef SDL_keycode_h_
-#define SDL_keycode_h_
-
-#include
-#include
-
-/**
- * \brief The SDL virtual key representation.
- *
- * Values of this type are used to represent keyboard keys using the current
- * layout of the keyboard. These values include Unicode values representing
- * the unmodified character that would be generated by pressing the key, or
- * an SDLK_* constant for those keys that do not generate characters.
- *
- * A special exception is the number keys at the top of the keyboard which
- * map to SDLK_0...SDLK_9 on AZERTY layouts.
- */
-typedef Sint32 SDL_Keycode;
-
-#define SDLK_SCANCODE_MASK (1<<30)
-#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK)
-
-typedef enum
-{
- SDLK_UNKNOWN = 0,
-
- SDLK_RETURN = '\r',
- SDLK_ESCAPE = '\x1B',
- SDLK_BACKSPACE = '\b',
- SDLK_TAB = '\t',
- SDLK_SPACE = ' ',
- SDLK_EXCLAIM = '!',
- SDLK_QUOTEDBL = '"',
- SDLK_HASH = '#',
- SDLK_PERCENT = '%',
- SDLK_DOLLAR = '$',
- SDLK_AMPERSAND = '&',
- SDLK_QUOTE = '\'',
- SDLK_LEFTPAREN = '(',
- SDLK_RIGHTPAREN = ')',
- SDLK_ASTERISK = '*',
- SDLK_PLUS = '+',
- SDLK_COMMA = ',',
- SDLK_MINUS = '-',
- SDLK_PERIOD = '.',
- SDLK_SLASH = '/',
- SDLK_0 = '0',
- SDLK_1 = '1',
- SDLK_2 = '2',
- SDLK_3 = '3',
- SDLK_4 = '4',
- SDLK_5 = '5',
- SDLK_6 = '6',
- SDLK_7 = '7',
- SDLK_8 = '8',
- SDLK_9 = '9',
- SDLK_COLON = ':',
- SDLK_SEMICOLON = ';',
- SDLK_LESS = '<',
- SDLK_EQUALS = '=',
- SDLK_GREATER = '>',
- SDLK_QUESTION = '?',
- SDLK_AT = '@',
-
- /*
- Skip uppercase letters
- */
-
- SDLK_LEFTBRACKET = '[',
- SDLK_BACKSLASH = '\\',
- SDLK_RIGHTBRACKET = ']',
- SDLK_CARET = '^',
- SDLK_UNDERSCORE = '_',
- SDLK_BACKQUOTE = '`',
- SDLK_a = 'a',
- SDLK_b = 'b',
- SDLK_c = 'c',
- SDLK_d = 'd',
- SDLK_e = 'e',
- SDLK_f = 'f',
- SDLK_g = 'g',
- SDLK_h = 'h',
- SDLK_i = 'i',
- SDLK_j = 'j',
- SDLK_k = 'k',
- SDLK_l = 'l',
- SDLK_m = 'm',
- SDLK_n = 'n',
- SDLK_o = 'o',
- SDLK_p = 'p',
- SDLK_q = 'q',
- SDLK_r = 'r',
- SDLK_s = 's',
- SDLK_t = 't',
- SDLK_u = 'u',
- SDLK_v = 'v',
- SDLK_w = 'w',
- SDLK_x = 'x',
- SDLK_y = 'y',
- SDLK_z = 'z',
-
- SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK),
-
- SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1),
- SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2),
- SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3),
- SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4),
- SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5),
- SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6),
- SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7),
- SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8),
- SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9),
- SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10),
- SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11),
- SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12),
-
- SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN),
- SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK),
- SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE),
- SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT),
- SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME),
- SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP),
- SDLK_DELETE = '\x7F',
- SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END),
- SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN),
- SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT),
- SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT),
- SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN),
- SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP),
-
- SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR),
- SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE),
- SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY),
- SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS),
- SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS),
- SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER),
- SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1),
- SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2),
- SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3),
- SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4),
- SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5),
- SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6),
- SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7),
- SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8),
- SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9),
- SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0),
- SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD),
-
- SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION),
- SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER),
- SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS),
- SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13),
- SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14),
- SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15),
- SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16),
- SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17),
- SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18),
- SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19),
- SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20),
- SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21),
- SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22),
- SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23),
- SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24),
- SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE),
- SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP),
- SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU),
- SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT),
- SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP),
- SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN),
- SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO),
- SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT),
- SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY),
- SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE),
- SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND),
- SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE),
- SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP),
- SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN),
- SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA),
- SDLK_KP_EQUALSAS400 =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400),
-
- SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE),
- SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ),
- SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL),
- SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR),
- SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR),
- SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2),
- SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR),
- SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT),
- SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER),
- SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN),
- SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL),
- SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL),
-
- SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00),
- SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000),
- SDLK_THOUSANDSSEPARATOR =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR),
- SDLK_DECIMALSEPARATOR =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR),
- SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT),
- SDLK_CURRENCYSUBUNIT =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT),
- SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN),
- SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN),
- SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE),
- SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE),
- SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB),
- SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE),
- SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A),
- SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B),
- SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C),
- SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D),
- SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E),
- SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F),
- SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR),
- SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER),
- SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT),
- SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS),
- SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER),
- SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND),
- SDLK_KP_DBLAMPERSAND =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND),
- SDLK_KP_VERTICALBAR =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR),
- SDLK_KP_DBLVERTICALBAR =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR),
- SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON),
- SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH),
- SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE),
- SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT),
- SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM),
- SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE),
- SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL),
- SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR),
- SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD),
- SDLK_KP_MEMSUBTRACT =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT),
- SDLK_KP_MEMMULTIPLY =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY),
- SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE),
- SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS),
- SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR),
- SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY),
- SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY),
- SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL),
- SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL),
- SDLK_KP_HEXADECIMAL =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL),
-
- SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL),
- SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT),
- SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT),
- SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI),
- SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL),
- SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT),
- SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT),
- SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI),
-
- SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE),
-
- SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT),
- SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV),
- SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP),
- SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY),
- SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE),
- SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT),
- SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW),
- SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL),
- SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR),
- SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER),
- SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH),
- SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME),
- SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK),
- SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD),
- SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP),
- SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH),
- SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS),
-
- SDLK_BRIGHTNESSDOWN =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN),
- SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP),
- SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH),
- SDLK_KBDILLUMTOGGLE =
- SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE),
- SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN),
- SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP),
- SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT),
- SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP),
- SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1),
- SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2),
-
- SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND),
- SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD),
-
- SDLK_SOFTLEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTLEFT),
- SDLK_SOFTRIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTRIGHT),
- SDLK_CALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALL),
- SDLK_ENDCALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ENDCALL)
-} SDL_KeyCode;
-
-/**
- * \brief Enumeration of valid key mods (possibly OR'd together).
- */
-typedef enum
-{
- SDL_KMOD_NONE = 0x0000,
- SDL_KMOD_LSHIFT = 0x0001,
- SDL_KMOD_RSHIFT = 0x0002,
- SDL_KMOD_LCTRL = 0x0040,
- SDL_KMOD_RCTRL = 0x0080,
- SDL_KMOD_LALT = 0x0100,
- SDL_KMOD_RALT = 0x0200,
- SDL_KMOD_LGUI = 0x0400,
- SDL_KMOD_RGUI = 0x0800,
- SDL_KMOD_NUM = 0x1000,
- SDL_KMOD_CAPS = 0x2000,
- SDL_KMOD_MODE = 0x4000,
- SDL_KMOD_SCROLL = 0x8000,
-
- SDL_KMOD_CTRL = SDL_KMOD_LCTRL | SDL_KMOD_RCTRL,
- SDL_KMOD_SHIFT = SDL_KMOD_LSHIFT | SDL_KMOD_RSHIFT,
- SDL_KMOD_ALT = SDL_KMOD_LALT | SDL_KMOD_RALT,
- SDL_KMOD_GUI = SDL_KMOD_LGUI | SDL_KMOD_RGUI,
-
- SDL_KMOD_RESERVED = SDL_KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */
-} SDL_Keymod;
-
-#endif /* SDL_keycode_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_loadso.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_loadso.h
deleted file mode 100644
index f7ed6d2c..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_loadso.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_loadso.h
- *
- * \brief System dependent library loading routines
- *
- * Some things to keep in mind:
- * \li These functions only work on C function names. Other languages may
- * have name mangling and intrinsic language support that varies from
- * compiler to compiler.
- * \li Make sure you declare your function pointers with the same calling
- * convention as the actual library function. Your code will crash
- * mysteriously if you do not do this.
- * \li Avoid namespace collisions. If you load a symbol from the library,
- * it is not defined whether or not it goes into the global symbol
- * namespace for the application. If it does and it conflicts with
- * symbols in your code or other shared libraries, you will not get
- * the results you expect. :)
- */
-
-#ifndef SDL_loadso_h_
-#define SDL_loadso_h_
-
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Dynamically load a shared object.
- *
- * \param sofile a system-dependent name of the object file
- * \returns an opaque pointer to the object handle or NULL if there was an
- * error; call SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LoadFunction
- * \sa SDL_UnloadObject
- */
-extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile);
-
-/**
- * Look up the address of the named function in a shared object.
- *
- * This function pointer is no longer valid after calling SDL_UnloadObject().
- *
- * This function can only look up C function names. Other languages may have
- * name mangling and intrinsic language support that varies from compiler to
- * compiler.
- *
- * Make sure you declare your function pointers with the same calling
- * convention as the actual library function. Your code will crash
- * mysteriously if you do not do this.
- *
- * If the requested function doesn't exist, NULL is returned.
- *
- * \param handle a valid shared object handle returned by SDL_LoadObject()
- * \param name the name of the function to look up
- * \returns a pointer to the function or NULL if there was an error; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LoadObject
- * \sa SDL_UnloadObject
- */
-extern DECLSPEC SDL_FunctionPointer SDLCALL SDL_LoadFunction(void *handle, const char *name);
-
-/**
- * Unload a shared object from memory.
- *
- * \param handle a valid shared object handle returned by SDL_LoadObject()
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LoadFunction
- * \sa SDL_LoadObject
- */
-extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_loadso_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_locale.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_locale.h
deleted file mode 100644
index ebf965ec..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_locale.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_locale.h
- *
- * \brief Include file for SDL locale services
- */
-
-#ifndef SDL_locale_h
-#define SDL_locale_h
-
-#include
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-
-typedef struct SDL_Locale
-{
- const char *language; /**< A language name, like "en" for English. */
- const char *country; /**< A country, like "US" for America. Can be NULL. */
-} SDL_Locale;
-
-/**
- * Report the user's preferred locale.
- *
- * This returns an array of SDL_Locale structs, the final item zeroed out.
- * When the caller is done with this array, it should call SDL_free() on the
- * returned value; all the memory involved is allocated in a single block, so
- * a single SDL_free() will suffice.
- *
- * Returned language strings are in the format xx, where 'xx' is an ISO-639
- * language specifier (such as "en" for English, "de" for German, etc).
- * Country strings are in the format YY, where "YY" is an ISO-3166 country
- * code (such as "US" for the United States, "CA" for Canada, etc). Country
- * might be NULL if there's no specific guidance on them (so you might get {
- * "en", "US" } for American English, but { "en", NULL } means "English
- * language, generically"). Language strings are never NULL, except to
- * terminate the array.
- *
- * Please note that not all of these strings are 2 characters; some are three
- * or more.
- *
- * The returned list of locales are in the order of the user's preference. For
- * example, a German citizen that is fluent in US English and knows enough
- * Japanese to navigate around Tokyo might have a list like: { "de", "en_US",
- * "jp", NULL }. Someone from England might prefer British English (where
- * "color" is spelled "colour", etc), but will settle for anything like it: {
- * "en_GB", "en", NULL }.
- *
- * This function returns NULL on error, including when the platform does not
- * supply this information at all.
- *
- * This might be a "slow" call that has to query the operating system. It's
- * best to ask for this once and save the results. However, this list can
- * change, usually because the user has changed a system preference outside of
- * your program; SDL will send an SDL_EVENT_LOCALE_CHANGED event in this case,
- * if possible, and you can call this function again to get an updated copy of
- * preferred locales.
- *
- * \returns array of locales, terminated with a locale with a NULL language
- * field. Will return NULL on error.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-#include
-
-#endif /* SDL_locale_h */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_log.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_log.h
deleted file mode 100644
index d56b0590..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_log.h
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_log.h
- *
- * \brief Simple log messages with categories and priorities.
- *
- * By default logs are quiet, but if you're debugging SDL you might want:
- *
- * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
- *
- * Here's where the messages go on different platforms:
- * Windows: debug output stream
- * Android: log output
- * Others: standard error output (stderr)
- */
-
-#ifndef SDL_log_h_
-#define SDL_log_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * \brief The maximum size of a log message prior to SDL 2.0.24
- *
- * As of 2.0.24 there is no limit to the length of SDL log messages.
- */
-#define SDL_MAX_LOG_MESSAGE 4096
-
-/**
- * \brief The predefined log categories
- *
- * By default the application category is enabled at the INFO level,
- * the assert category is enabled at the WARN level, test is enabled
- * at the VERBOSE level and all other categories are enabled at the
- * CRITICAL level.
- */
-typedef enum
-{
- SDL_LOG_CATEGORY_APPLICATION,
- SDL_LOG_CATEGORY_ERROR,
- SDL_LOG_CATEGORY_ASSERT,
- SDL_LOG_CATEGORY_SYSTEM,
- SDL_LOG_CATEGORY_AUDIO,
- SDL_LOG_CATEGORY_VIDEO,
- SDL_LOG_CATEGORY_RENDER,
- SDL_LOG_CATEGORY_INPUT,
- SDL_LOG_CATEGORY_TEST,
-
- /* Reserved for future SDL library use */
- SDL_LOG_CATEGORY_RESERVED1,
- SDL_LOG_CATEGORY_RESERVED2,
- SDL_LOG_CATEGORY_RESERVED3,
- SDL_LOG_CATEGORY_RESERVED4,
- SDL_LOG_CATEGORY_RESERVED5,
- SDL_LOG_CATEGORY_RESERVED6,
- SDL_LOG_CATEGORY_RESERVED7,
- SDL_LOG_CATEGORY_RESERVED8,
- SDL_LOG_CATEGORY_RESERVED9,
- SDL_LOG_CATEGORY_RESERVED10,
-
- /* Beyond this point is reserved for application use, e.g.
- enum {
- MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM,
- MYAPP_CATEGORY_AWESOME2,
- MYAPP_CATEGORY_AWESOME3,
- ...
- };
- */
- SDL_LOG_CATEGORY_CUSTOM
-} SDL_LogCategory;
-
-/**
- * \brief The predefined log priorities
- */
-typedef enum
-{
- 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
-} SDL_LogPriority;
-
-
-/**
- * Set the priority of all log categories.
- *
- * \param priority the SDL_LogPriority to assign
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LogSetPriority
- */
-extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority);
-
-/**
- * Set the priority of a particular log category.
- *
- * \param category the category to assign a priority to
- * \param priority the SDL_LogPriority to assign
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LogGetPriority
- * \sa SDL_LogSetAllPriority
- */
-extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category,
- SDL_LogPriority priority);
-
-/**
- * Get the priority of a particular log category.
- *
- * \param category the category to query
- * \returns the SDL_LogPriority for the requested category
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LogSetPriority
- */
-extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category);
-
-/**
- * Reset all priorities to default.
- *
- * This is called by SDL_Quit().
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LogSetAllPriority
- * \sa SDL_LogSetPriority
- */
-extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void);
-
-/**
- * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
- *
- * = * \param fmt a printf() style message format string
- *
- * \param ... additional parameters matching % tokens in the `fmt` string, if
- * any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LogCritical
- * \sa SDL_LogDebug
- * \sa SDL_LogError
- * \sa SDL_LogInfo
- * \sa SDL_LogMessage
- * \sa SDL_LogMessageV
- * \sa SDL_LogVerbose
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1);
-
-/**
- * Log a message with SDL_LOG_PRIORITY_VERBOSE.
- *
- * \param category the category of the message
- * \param fmt a printf() style message format string
- * \param ... additional parameters matching % tokens in the **fmt** string,
- * if any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogCritical
- * \sa SDL_LogDebug
- * \sa SDL_LogError
- * \sa SDL_LogInfo
- * \sa SDL_LogMessage
- * \sa SDL_LogMessageV
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
-
-/**
- * Log a message with SDL_LOG_PRIORITY_DEBUG.
- *
- * \param category the category of the message
- * \param fmt a printf() style message format string
- * \param ... additional parameters matching % tokens in the **fmt** string,
- * if any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogCritical
- * \sa SDL_LogError
- * \sa SDL_LogInfo
- * \sa SDL_LogMessage
- * \sa SDL_LogMessageV
- * \sa SDL_LogVerbose
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
-
-/**
- * Log a message with SDL_LOG_PRIORITY_INFO.
- *
- * \param category the category of the message
- * \param fmt a printf() style message format string
- * \param ... additional parameters matching % tokens in the **fmt** string,
- * if any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogCritical
- * \sa SDL_LogDebug
- * \sa SDL_LogError
- * \sa SDL_LogMessage
- * \sa SDL_LogMessageV
- * \sa SDL_LogVerbose
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
-
-/**
- * Log a message with SDL_LOG_PRIORITY_WARN.
- *
- * \param category the category of the message
- * \param fmt a printf() style message format string
- * \param ... additional parameters matching % tokens in the **fmt** string,
- * if any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogCritical
- * \sa SDL_LogDebug
- * \sa SDL_LogError
- * \sa SDL_LogInfo
- * \sa SDL_LogMessage
- * \sa SDL_LogMessageV
- * \sa SDL_LogVerbose
- */
-extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
-
-/**
- * Log a message with SDL_LOG_PRIORITY_ERROR.
- *
- * \param category the category of the message
- * \param fmt a printf() style message format string
- * \param ... additional parameters matching % tokens in the **fmt** string,
- * if any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogCritical
- * \sa SDL_LogDebug
- * \sa SDL_LogInfo
- * \sa SDL_LogMessage
- * \sa SDL_LogMessageV
- * \sa SDL_LogVerbose
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
-
-/**
- * Log a message with SDL_LOG_PRIORITY_CRITICAL.
- *
- * \param category the category of the message
- * \param fmt a printf() style message format string
- * \param ... additional parameters matching % tokens in the **fmt** string,
- * if any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogDebug
- * \sa SDL_LogError
- * \sa SDL_LogInfo
- * \sa SDL_LogMessage
- * \sa SDL_LogMessageV
- * \sa SDL_LogVerbose
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
-
-/**
- * Log a message with the specified category and priority.
- *
- * \param category the category of the message
- * \param priority the priority of the message
- * \param fmt a printf() style message format string
- * \param ... additional parameters matching % tokens in the **fmt** string,
- * if any
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogCritical
- * \sa SDL_LogDebug
- * \sa SDL_LogError
- * \sa SDL_LogInfo
- * \sa SDL_LogMessageV
- * \sa SDL_LogVerbose
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_LogMessage(int category,
- SDL_LogPriority priority,
- SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3);
-
-/**
- * Log a message with the specified category and priority.
- *
- * \param category the category of the message
- * \param priority the priority of the message
- * \param fmt a printf() style message format string
- * \param ap a variable argument list
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Log
- * \sa SDL_LogCritical
- * \sa SDL_LogDebug
- * \sa SDL_LogError
- * \sa SDL_LogInfo
- * \sa SDL_LogMessage
- * \sa SDL_LogVerbose
- * \sa SDL_LogWarn
- */
-extern DECLSPEC void SDLCALL SDL_LogMessageV(int category,
- SDL_LogPriority priority,
- const char *fmt, va_list ap);
-
-/**
- * The prototype for the log output callback function.
- *
- * This function is called by SDL when there is new text to be logged.
- *
- * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction()
- * \param category the category of the message
- * \param priority the priority of the message
- * \param message the message being output
- */
-typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message);
-
-/**
- * Get the current log output function.
- *
- * \param callback an SDL_LogOutputFunction filled in with the current log
- * callback
- * \param userdata a pointer filled in with the pointer that is passed to
- * `callback`
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LogSetOutputFunction
- */
-extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata);
-
-/**
- * Replace the default log output function with one of your own.
- *
- * \param callback an SDL_LogOutputFunction to call instead of the default
- * \param userdata a pointer that is passed to `callback`
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_LogGetOutputFunction
- */
-extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata);
-
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_log_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_main.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_main.h
deleted file mode 100644
index 6181c0c0..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_main.h
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-#ifndef SDL_main_h_
-#define SDL_main_h_
-
-#include
-
-/**
- * \file SDL_main.h
- *
- * \brief Redefine main() on some platforms so that it is called by SDL.
- */
-
-#ifndef SDL_MAIN_HANDLED
-#ifdef __WIN32__
-/* On Windows SDL provides WinMain(), which parses the command line and passes
- the arguments to your main function.
-
- If you provide your own WinMain(), you may define SDL_MAIN_HANDLED
- */
-#define SDL_MAIN_AVAILABLE
-
-#elif defined(__WINRT__)
-/* On WinRT, SDL provides a main function that initializes CoreApplication,
- creating an instance of IFrameworkView in the process.
-
- Ideally, #include'ing SDL_main.h is enough to get a main() function working.
- However, that requires the source file your main() is in to be compiled
- as C++ *and* with the /ZW compiler flag. If that's not feasible, add an
- otherwise empty .cpp file that only contains `#include `
- and build that with /ZW (still include SDL_main.h in your other file with main()!).
- In XAML apps, instead the function SDL_RunApp() must be called with a pointer
- to the Direct3D-hosted XAML control passed in as the "reserved" argument.
-*/
-#define SDL_MAIN_NEEDED
-
-#elif defined(__GDK__)
-/* On GDK, SDL provides a main function that initializes the game runtime.
-
- If you prefer to write your own WinMain-function instead of having SDL
- provide one that calls your main() function,
- #define SDL_MAIN_HANDLED before #include'ing SDL_main.h
- and call the SDL_RunApp function from your entry point.
-*/
-#define SDL_MAIN_NEEDED
-
-#elif defined(__IOS__)
-/* On iOS SDL provides a main function that creates an application delegate
- and starts the iOS application run loop.
-
- To use it, just #include SDL_main.h in the source file that contains your
- main() function.
-
- See src/video/uikit/SDL_uikitappdelegate.m for more details.
- */
-#define SDL_MAIN_NEEDED
-
-#elif defined(__ANDROID__)
-/* On Android SDL provides a Java class in SDLActivity.java that is the
- main activity entry point.
-
- See docs/README-android.md for more details on extending that class.
- */
-#define SDL_MAIN_NEEDED
-
-/* We need to export SDL_main so it can be launched from Java */
-#define SDLMAIN_DECLSPEC DECLSPEC
-
-#elif defined(__PSP__)
-/* On PSP SDL provides a main function that sets the module info,
- activates the GPU and starts the thread required to be able to exit
- the software.
-
- If you provide this yourself, you may define SDL_MAIN_HANDLED
- */
-#define SDL_MAIN_AVAILABLE
-
-#elif defined(__PS2__)
-#define SDL_MAIN_AVAILABLE
-
-#define SDL_PS2_SKIP_IOP_RESET() \
- void reset_IOP(); \
- void reset_IOP() {}
-
-#elif defined(__3DS__)
-/*
- On N3DS, SDL provides a main function that sets up the screens
- and storage.
-
- If you provide this yourself, you may define SDL_MAIN_HANDLED
-*/
-#define SDL_MAIN_AVAILABLE
-
-#elif defined(__NGAGE__)
-
-/*
- TODO: not sure if it should be SDL_MAIN_NEEDED, in SDL2 ngage had a
- main implementation, but wasn't mentioned in SDL_main.h
- */
-#define SDL_MAIN_AVAILABLE
-
-#endif
-#endif /* SDL_MAIN_HANDLED */
-
-#ifndef SDLMAIN_DECLSPEC
-#define SDLMAIN_DECLSPEC
-#endif
-
-/**
- * \file SDL_main.h
- *
- * The application's main() function must be called with C linkage,
- * and should be declared like this:
- * \code
- * #ifdef __cplusplus
- * extern "C"
- * #endif
- * int main(int argc, char *argv[])
- * {
- * }
- * \endcode
- */
-
-#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE)
-#define main SDL_main
-#endif
-
-#include
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * The prototype for the application's main() function
- */
-typedef int (*SDL_main_func)(int argc, char *argv[]);
-extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]);
-
-
-/**
- * Circumvent failure of SDL_Init() when not using SDL_main() as an entry
- * point.
- *
- * This function is defined in SDL_main.h, along with the preprocessor rule to
- * redefine main() as SDL_main(). Thus to ensure that your main() function
- * will not be changed it is necessary to define SDL_MAIN_HANDLED before
- * including SDL.h.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Init
- */
-extern DECLSPEC void SDLCALL SDL_SetMainReady(void);
-
-/**
- * Initializes and launches an SDL application, by doing platform-specific
- * initialization before calling your mainFunction and cleanups after it
- * returns, if that is needed for a specific platform, otherwise it just calls
- * mainFunction.
- *
- * You can use this if you want to use your own main() implementation without
- * using SDL_main (like when using SDL_MAIN_HANDLED). When using this, you do
- * *not* need SDL_SetMainReady().
- *
- * \param argc The argc parameter from the application's main() function, or 0
- * if the platform's main-equivalent has no argc
- * \param argv The argv parameter from the application's main() function, or
- * NULL if the platform's main-equivalent has no argv
- * \param mainFunction Your SDL app's C-style main(), an SDL_main_func. NOT
- * the function you're calling this from! Its name doesn't
- * matter, but its signature must be like int my_main(int
- * argc, char* argv[])
- * \param reserved should be NULL (reserved for future use, will probably be
- * platform-specific then)
- * \returns the return value from mainFunction: 0 on success, -1 on failure;
- * SDL_GetError() might have more information on the failure
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_RunApp(int argc, char* argv[], SDL_main_func mainFunction, void * reserved);
-
-#if defined(__WIN32__) || defined(__GDK__)
-
-/**
- * Register a win32 window class for SDL's use.
- *
- * This can be called to set the application window class at startup. It is
- * safe to call this multiple times, as long as every call is eventually
- * paired with a call to SDL_UnregisterApp, but a second registration attempt
- * while a previous registration is still active will be ignored, other than
- * to increment a counter.
- *
- * Most applications do not need to, and should not, call this directly; SDL
- * will call it when initializing the video subsystem.
- *
- * \param name the window class name, in UTF-8 encoding. If NULL, SDL
- * currently uses "SDL_app" but this isn't guaranteed.
- * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL
- * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of
- * what is specified here.
- * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL
- * will use `GetModuleHandle(NULL)` instead.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst);
-
-/**
- * Deregister the win32 window class from an SDL_RegisterApp call.
- *
- * This can be called to undo the effects of SDL_RegisterApp.
- *
- * Most applications do not need to, and should not, call this directly; SDL
- * will call it when deinitializing the video subsystem.
- *
- * It is safe to call this multiple times, as long as every call is eventually
- * paired with a prior call to SDL_RegisterApp. The window class will only be
- * deregistered when the registration counter in SDL_RegisterApp decrements to
- * zero through calls to this function.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_UnregisterApp(void);
-
-#endif /* defined(__WIN32__) || defined(__GDK__) */
-
-
-#ifdef __WINRT__
-
-/* for compatibility with SDL2's function of this name */
-#define SDL_WinRTRunApp(MAIN_FUNC, RESERVED) SDL_RunApp(0, NULL, MAIN_FUNC, RESERVED)
-
-#endif /* __WINRT__ */
-
-#ifdef __IOS__
-
-/* for compatibility with SDL2's function of this name */
-#define SDL_UIKitRunApp(ARGC, ARGV, MAIN_FUNC) SDL_RunApp(ARGC, ARGV, MAIN_FUNC, NULL)
-
-#endif /* __IOS__ */
-
-#ifdef __GDK__
-
-/* for compatibility with SDL2's function of this name */
-#define SDL_GDKRunApp(MAIN_FUNC, RESERVED) SDL_RunApp(0, NULL, MAIN_FUNC, RESERVED)
-
-/**
- * Callback from the application to let the suspend continue.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC void SDLCALL SDL_GDKSuspendComplete(void);
-
-#endif /* __GDK__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#include
-
-#if !defined(SDL_MAIN_HANDLED) && !defined(SDL_MAIN_NOIMPL)
-/* include header-only SDL_main implementations */
-#if defined(__WIN32__) || defined(__GDK__) || defined(__IOS__) || defined(__TVOS__) \
- || defined(__3DS__) || defined(__NGAGE__) || defined(__PS2__) || defined(__PSP__)
-
-/* platforms which main (-equivalent) can be implemented in plain C */
-#include
-
-#elif defined(__WINRT__) /* C++ platforms */
-
-#ifdef __cplusplus
-#include
-#else
-/* Note: to get rid of the following warning, you can #define SDL_MAIN_NOIMPL before including SDL_main.h
- * in your C sourcefile that contains the standard main. Do *not* use SDL_MAIN_HANDLED for that, then SDL_main won't find your main()!
- */
-#ifdef _MSC_VER
-#pragma message("Note: Your platform needs the SDL_main implementation in a C++ source file. You can keep your main() in plain C (then continue including SDL_main.h there!) and create a fresh .cpp file that only contains #include ")
-#elif defined(__GNUC__) /* gcc, clang, mingw and compatible are matched by this and have #warning */
-#warning "Note: Your platform needs the SDL_main implementation in a C++ source file. You can keep your main() in plain C and create a fresh .cpp file that only contains #include "
-#endif /* __GNUC__ */
-#endif /* __cplusplus */
-
-#endif /* C++ platforms like __WINRT__ etc */
-
-#endif /* SDL_MAIN_HANDLED */
-
-#endif /* SDL_main_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_main_impl.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_main_impl.h
deleted file mode 100644
index 6b73bbb3..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_main_impl.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-#ifndef SDL_main_impl_h_
-#define SDL_main_impl_h_
-
-#ifndef SDL_main_h_
-#error "This header should not be included directly, but only via SDL_main.h!"
-#endif
-
-/* if someone wants to include SDL_main.h but doesn't want the main handing magic,
- (maybe to call SDL_RegisterApp()) they can #define SDL_MAIN_HANDLED first
- SDL_MAIN_NOIMPL is for SDL-internal usage (only affects implementation,
- not definition of SDL_MAIN_AVAILABLE etc in SDL_main.h) and if the user wants
- to have the SDL_main implementation (from this header) in another source file
- than their main() function, for example if SDL_main requires C++
- and main() is implemented in plain C */
-#if !defined(SDL_MAIN_HANDLED) && !defined(SDL_MAIN_NOIMPL)
-
-/* the implementations below must be able to use the implement real main(), nothing renamed
- (the user's main() will be renamed to SDL_main so it can be called from here) */
-#ifdef main
-# undef main
-#endif /* main */
-
-#if defined(__WIN32__) || defined(__GDK__)
-
-/* these defines/typedefs are needed for the WinMain() definition */
-#ifndef WINAPI
-#define WINAPI __stdcall
-#endif
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct HINSTANCE__ * HINSTANCE;
-typedef char* LPSTR;
-typedef wchar_t* PWSTR;
-
-/* The VC++ compiler needs main/wmain defined, but not for GDK */
-#if defined(_MSC_VER) && !defined(__GDK__)
-
-/* This is where execution begins [console apps] */
-#if defined( UNICODE ) && UNICODE
-int wmain(int argc, wchar_t *wargv[], wchar_t *wenvp)
-{
- (void)argc;
- (void)wargv;
- (void)wenvp;
- return SDL_RunApp(0, NULL, SDL_main, NULL);
-}
-#else /* ANSI */
-int main(int argc, char *argv[])
-{
- (void)argc;
- (void)argv;
- return SDL_RunApp(0, NULL, SDL_main, NULL);
-}
-#endif /* UNICODE */
-
-#endif /* _MSC_VER && ! __GDK__ */
-
-/* This is where execution begins [windowed apps and GDK] */
-#if defined( UNICODE ) && UNICODE
-int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrev, PWSTR szCmdLine, int sw)
-#else /* ANSI */
-int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
-#endif
-{
- (void)hInst;
- (void)hPrev;
- (void)szCmdLine;
- (void)sw;
- return SDL_RunApp(0, NULL, SDL_main, NULL);
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include
-
-/* end of __WIN32__ and __GDK__ impls */
-#elif defined(__WINRT__)
-
-/* WinRT main based on SDL_winrt_main_NonXAML.cpp, placed in the public domain by David Ludwig 3/13/14 */
-
-#include
-
-/* At least one file in any SDL/WinRT app appears to require compilation
- with C++/CX, otherwise a Windows Metadata file won't get created, and
- an APPX0702 build error can appear shortly after linking.
-
- The following set of preprocessor code forces this file to be compiled
- as C++/CX, which appears to cause Visual C++ 2012's build tools to
- create this .winmd file, and will help allow builds of SDL/WinRT apps
- to proceed without error.
-
- If other files in an app's project enable C++/CX compilation, then it might
- be possible for the .cpp file including SDL_main.h to be compiled without /ZW,
- for Visual C++'s build tools to create a winmd file, and for the app to
- build without APPX0702 errors. In this case, if
- SDL_WINRT_METADATA_FILE_AVAILABLE is defined as a C/C++ macro, then
- the #error (to force C++/CX compilation) will be disabled.
-
- Please note that /ZW can be specified on a file-by-file basis. To do this,
- right click on the file in Visual C++, click Properties, then change the
- setting through the dialog that comes up.
-*/
-#ifndef SDL_WINRT_METADATA_FILE_AVAILABLE
-#if !defined(__cplusplus) || !defined(__cplusplus_winrt)
-#error The C++ file that includes SDL_main.h must be compiled as C++ code with /ZW, otherwise build errors due to missing .winmd files can occur.
-#endif
-#endif
-
-/* Prevent MSVC++ from warning about threading models when defining our
- custom WinMain. The threading model will instead be set via a direct
- call to Windows::Foundation::Initialize (rather than via an attributed
- function).
-
- To note, this warning (C4447) does not seem to come up unless this file
- is compiled with C++/CX enabled (via the /ZW compiler flag).
-*/
-#ifdef _MSC_VER
-#pragma warning(disable : 4447)
-#endif
-
-/* Make sure the function to initialize the Windows Runtime gets linked in. */
-#ifdef _MSC_VER
-#pragma comment(lib, "runtimeobject.lib")
-#endif
-
-int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
-{
- return SDL_RunApp(0, NULL, SDL_main, NULL);
-}
-
-/* end of WinRT impl */
-#elif defined(__NGAGE__)
-
-/* same typedef as in ngage SDKs e32def.h */
-typedef signed int TInt;
-/* TODO: if it turns out that this only works when built as C++,
- move __NGAGE__ into the C++ section in SDL_main.h */
-TInt E32Main()
-{
- return SDL_RunApp(0, NULL, SDL_main, NULL);
-}
-
-/* end of __NGAGE__ impl */
-
-#else /* platforms that use a standard main() and just call SDL_RunApp(), like iOS and 3DS */
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int main(int argc, char *argv[])
-{
- return SDL_RunApp(argc, argv, SDL_main, NULL);
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include
-
-/* end of impls for standard-conforming platforms */
-
-#endif /* __WIN32__ etc */
-
-/* rename users main() function to SDL_main() so it can be called from the wrappers above */
-#define main SDL_main
-
-#endif /* SDL_MAIN_HANDLED */
-
-#endif /* SDL_main_impl_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_messagebox.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_messagebox.h
deleted file mode 100644
index e1ee10ae..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_messagebox.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-#ifndef SDL_messagebox_h_
-#define SDL_messagebox_h_
-
-#include
-#include /* For SDL_Window */
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * SDL_MessageBox flags. If supported will display warning icon, etc.
- */
-typedef enum
-{
- SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */
- SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */
- SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */
- SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */
- SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */
-} SDL_MessageBoxFlags;
-
-/**
- * Flags for SDL_MessageBoxButtonData.
- */
-typedef enum
-{
- SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */
- SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */
-} SDL_MessageBoxButtonFlags;
-
-/**
- * Individual button data.
- */
-typedef struct
-{
- Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */
- int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */
- const char * text; /**< The UTF-8 button text */
-} SDL_MessageBoxButtonData;
-
-/**
- * RGB value used in a message box color scheme
- */
-typedef struct
-{
- Uint8 r, g, b;
-} SDL_MessageBoxColor;
-
-typedef enum
-{
- SDL_MESSAGEBOX_COLOR_BACKGROUND,
- SDL_MESSAGEBOX_COLOR_TEXT,
- SDL_MESSAGEBOX_COLOR_BUTTON_BORDER,
- SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND,
- SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED,
- SDL_MESSAGEBOX_COLOR_MAX
-} SDL_MessageBoxColorType;
-
-/**
- * A set of colors to use for message box dialogs
- */
-typedef struct
-{
- SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX];
-} SDL_MessageBoxColorScheme;
-
-/**
- * MessageBox structure containing title, text, window, etc.
- */
-typedef struct
-{
- Uint32 flags; /**< ::SDL_MessageBoxFlags */
- SDL_Window *window; /**< Parent window, can be NULL */
- const char *title; /**< UTF-8 title */
- const char *message; /**< UTF-8 message text */
-
- int numbuttons;
- const SDL_MessageBoxButtonData *buttons;
-
- const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */
-} SDL_MessageBoxData;
-
-/**
- * Create a modal message box.
- *
- * If your needs aren't complex, it might be easier to use
- * SDL_ShowSimpleMessageBox.
- *
- * This function should be called on the thread that created the parent
- * window, or on the main thread if the messagebox has no parent. It will
- * block execution of that thread until the user clicks a button or closes the
- * messagebox.
- *
- * This function may be called at any time, even before SDL_Init(). This makes
- * it useful for reporting errors like a failure to create a renderer or
- * OpenGL context.
- *
- * On X11, SDL rolls its own dialog box with X11 primitives instead of a
- * formal toolkit like GTK+ or Qt.
- *
- * Note that if SDL_Init() would fail because there isn't any available video
- * target, this function is likely to fail for the same reasons. If this is a
- * concern, check the return value from this function and fall back to writing
- * to stderr if you can.
- *
- * \param messageboxdata the SDL_MessageBoxData structure with title, text and
- * other options
- * \param buttonid the pointer to which user id of hit button should be copied
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ShowSimpleMessageBox
- */
-extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid);
-
-/**
- * Display a simple modal message box.
- *
- * If your needs aren't complex, this function is preferred over
- * SDL_ShowMessageBox.
- *
- * `flags` may be any of the following:
- *
- * - `SDL_MESSAGEBOX_ERROR`: error dialog
- * - `SDL_MESSAGEBOX_WARNING`: warning dialog
- * - `SDL_MESSAGEBOX_INFORMATION`: informational dialog
- *
- * This function should be called on the thread that created the parent
- * window, or on the main thread if the messagebox has no parent. It will
- * block execution of that thread until the user clicks a button or closes the
- * messagebox.
- *
- * This function may be called at any time, even before SDL_Init(). This makes
- * it useful for reporting errors like a failure to create a renderer or
- * OpenGL context.
- *
- * On X11, SDL rolls its own dialog box with X11 primitives instead of a
- * formal toolkit like GTK+ or Qt.
- *
- * Note that if SDL_Init() would fail because there isn't any available video
- * target, this function is likely to fail for the same reasons. If this is a
- * concern, check the return value from this function and fall back to writing
- * to stderr if you can.
- *
- * \param flags an SDL_MessageBoxFlags value
- * \param title UTF-8 title text
- * \param message UTF-8 message text
- * \param window the parent window, or NULL for no parent
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_ShowMessageBox
- */
-extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window);
-
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_messagebox_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_metal.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_metal.h
deleted file mode 100644
index 42ef3c86..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_metal.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_metal.h
- *
- * \brief Header file for functions to creating Metal layers and views on SDL windows.
- */
-
-#ifndef SDL_metal_h_
-#define SDL_metal_h_
-
-#include
-
-#include
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS).
- *
- * \note This can be cast directly to an NSView or UIView.
- */
-typedef void *SDL_MetalView;
-
-/**
- * \name Metal support functions
- */
-/* @{ */
-
-/**
- * Create a CAMetalLayer-backed NSView/UIView and attach it to the specified
- * window.
- *
- * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on
- * its own. It is up to user code to do that.
- *
- * The returned handle can be casted directly to a NSView or UIView. To access
- * the backing CAMetalLayer, call SDL_Metal_GetLayer().
- *
- * \param window the window
- * \returns handle NSView or UIView
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Metal_DestroyView
- * \sa SDL_Metal_GetLayer
- */
-extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window);
-
-/**
- * Destroy an existing SDL_MetalView object.
- *
- * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was
- * called after SDL_CreateWindow.
- *
- * \param view the SDL_MetalView object
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Metal_CreateView
- */
-extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view);
-
-/**
- * Get a pointer to the backing CAMetalLayer for the given view.
- *
- * \param view the SDL_MetalView object
- * \returns a pointer
- *
- * \since This function is available since SDL 3.0.0.
- *
- * \sa SDL_Metal_CreateView
- */
-extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view);
-
-/* @} *//* Metal support functions */
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_metal_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_misc.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_misc.h
deleted file mode 100644
index 42426b52..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_misc.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_misc.h
- *
- * \brief Include file for SDL API functions that don't fit elsewhere.
- */
-
-#ifndef SDL_misc_h_
-#define SDL_misc_h_
-
-#include
-
-#include
-
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Open a URL/URI in the browser or other appropriate external application.
- *
- * Open a URL in a separate, system-provided application. How this works will
- * vary wildly depending on the platform. This will likely launch what makes
- * sense to handle a specific URL's protocol (a web browser for `http://`,
- * etc), but it might also be able to launch file managers for directories and
- * other things.
- *
- * What happens when you open a URL varies wildly as well: your game window
- * may lose focus (and may or may not lose focus if your game was fullscreen
- * or grabbing input at the time). On mobile devices, your app will likely
- * move to the background or your process might be paused. Any given platform
- * may or may not handle a given URL.
- *
- * If this is unimplemented (or simply unavailable) for a platform, this will
- * fail with an error. A successful result does not mean the URL loaded, just
- * that we launched _something_ to handle it (or at least believe we did).
- *
- * All this to say: this function can be useful, but you should definitely
- * test it on every platform you target.
- *
- * \param url A valid URL/URI to open. Use `file:///full/path/to/file` for
- * local files, if supported.
- * \returns 0 on success or a negative error code on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.0.0.
- */
-extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-}
-#endif
-#include
-
-#endif /* SDL_misc_h_ */
diff --git a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_mouse.h b/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_mouse.h
deleted file mode 100644
index f20d832e..00000000
--- a/Xcode/SDL/SDL3.xcframework/ios-arm64/SDL3.framework/Headers/SDL_mouse.h
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2023 Sam Lantinga
-
- 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.
-*/
-
-/**
- * \file SDL_mouse.h
- *
- * \brief Include file for SDL mouse event handling.
- */
-
-#ifndef SDL_mouse_h_
-#define SDL_mouse_h_
-
-#include
-#include
-#include