
# This file is automatically generated by scripts/sdl3/main.py. Do not edit manually.


from libc.stdint cimport *
from libc.stddef cimport wchar_t
from libcpp cimport bool as cbool
ctypedef struct va_list

cdef extern from "SDL3/SDL.h" nogil:

    # Definitions from SDL3/SDL_stdinc.h
    ctypedef int8_t Sint8
    ctypedef uint8_t Uint8
    ctypedef int16_t Sint16
    ctypedef uint16_t Uint16
    ctypedef int32_t Sint32
    ctypedef uint32_t Uint32
    ctypedef int64_t Sint64
    ctypedef uint64_t Uint64
    ctypedef Sint64 SDL_Time
    cdef struct SDL_alignment_test:
        Uint8 a
        void *b
    cdef enum SDL_DUMMY_ENUM:
        DUMMY_ENUM_VALUE
    void *SDL_malloc (size_t size)
    void *SDL_calloc (size_t nmemb, size_t size)
    void *SDL_realloc (void *mem, size_t size)
    void SDL_free (void *mem)
    ctypedef void *(*SDL_malloc_func)(size_t size)
    ctypedef void *(*SDL_calloc_func)(size_t nmemb, size_t size)
    ctypedef void *(*SDL_realloc_func)(void *mem, size_t size)
    ctypedef void (*SDL_free_func)(void *mem)
    void SDL_GetOriginalMemoryFunctions (SDL_malloc_func *malloc_func, SDL_calloc_func *calloc_func, SDL_realloc_func *realloc_func, SDL_free_func *free_func)
    void SDL_GetMemoryFunctions (SDL_malloc_func *malloc_func, SDL_calloc_func *calloc_func, SDL_realloc_func *realloc_func, SDL_free_func *free_func)
    cbool SDL_SetMemoryFunctions (SDL_malloc_func malloc_func, SDL_calloc_func calloc_func, SDL_realloc_func realloc_func, SDL_free_func free_func)
    void *SDL_aligned_alloc (size_t alignment, size_t size)
    void SDL_aligned_free (void *mem)
    int SDL_GetNumAllocations ()
    cdef struct SDL_Environment
    SDL_Environment *SDL_GetEnvironment ()
    SDL_Environment *SDL_CreateEnvironment (cbool populated)
    const char *SDL_GetEnvironmentVariable (SDL_Environment *env, const char *name)
    char **SDL_GetEnvironmentVariables (SDL_Environment *env)
    cbool SDL_SetEnvironmentVariable (SDL_Environment *env, const char *name, const char *value, cbool overwrite)
    cbool SDL_UnsetEnvironmentVariable (SDL_Environment *env, const char *name)
    void SDL_DestroyEnvironment (SDL_Environment *env)
    const char *SDL_getenv (const char *name)
    const char *SDL_getenv_unsafe (const char *name)
    int SDL_setenv_unsafe (const char *name, const char *value, int overwrite)
    int SDL_unsetenv_unsafe (const char *name)
    ctypedef int (*SDL_CompareCallback)(const void *a, const void *b)
    void SDL_qsort (void *base, size_t nmemb, size_t size, SDL_CompareCallback compare)
    void *SDL_bsearch (const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback compare)
    ctypedef int (*SDL_CompareCallback_r)(void *userdata, const void *a, const void *b)
    void SDL_qsort_r (void *base, size_t nmemb, size_t size, SDL_CompareCallback_r compare, void *userdata)
    void *SDL_bsearch_r (const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback_r compare, void *userdata)
    int SDL_abs (int x)
    int SDL_isalpha (int x)
    int SDL_isalnum (int x)
    int SDL_isblank (int x)
    int SDL_iscntrl (int x)
    int SDL_isdigit (int x)
    int SDL_isxdigit (int x)
    int SDL_ispunct (int x)
    int SDL_isspace (int x)
    int SDL_isupper (int x)
    int SDL_islower (int x)
    int SDL_isprint (int x)
    int SDL_isgraph (int x)
    int SDL_toupper (int x)
    int SDL_tolower (int x)
    Uint16 SDL_crc16 (Uint16 crc, const void *data, size_t len)
    Uint32 SDL_crc32 (Uint32 crc, const void *data, size_t len)
    Uint32 SDL_murmur3_32 (const void *data, size_t len, Uint32 seed)
    void *SDL_memset4 (void *dst, Uint32 val, size_t dwords)
    int SDL_memcmp (const void *s1, const void *s2, size_t len)
    size_t SDL_wcslen (const wchar_t *wstr)
    size_t SDL_wcsnlen (const wchar_t *wstr, size_t maxlen)
    size_t SDL_wcslcpy (wchar_t *dst, const wchar_t *src, size_t maxlen)
    size_t SDL_wcslcat (wchar_t *dst, const wchar_t *src, size_t maxlen)
    wchar_t *SDL_wcsdup (const wchar_t *wstr)
    wchar_t *SDL_wcsstr (const wchar_t *haystack, const wchar_t *needle)
    wchar_t *SDL_wcsnstr (const wchar_t *haystack, const wchar_t *needle, size_t maxlen)
    int SDL_wcscmp (const wchar_t *str1, const wchar_t *str2)
    int SDL_wcsncmp (const wchar_t *str1, const wchar_t *str2, size_t maxlen)
    int SDL_wcscasecmp (const wchar_t *str1, const wchar_t *str2)
    int SDL_wcsncasecmp (const wchar_t *str1, const wchar_t *str2, size_t maxlen)
    long SDL_wcstol (const wchar_t *str, wchar_t **endp, int base)
    size_t SDL_strlen (const char *str)
    size_t SDL_strnlen (const char *str, size_t maxlen)
    size_t SDL_strlcpy (char *dst, const char *src, size_t maxlen)
    size_t SDL_utf8strlcpy (char *dst, const char *src, size_t dst_bytes)
    size_t SDL_strlcat (char *dst, const char *src, size_t maxlen)
    char *SDL_strdup (const char *str)
    char *SDL_strndup (const char *str, size_t maxlen)
    char *SDL_strrev (char *str)
    char *SDL_strupr (char *str)
    char *SDL_strlwr (char *str)
    char *SDL_strchr (const char *str, int c)
    char *SDL_strrchr (const char *str, int c)
    char *SDL_strstr (const char *haystack, const char *needle)
    char *SDL_strnstr (const char *haystack, const char *needle, size_t maxlen)
    char *SDL_strcasestr (const char *haystack, const char *needle)
    char *SDL_strtok_r (char *str, const char *delim, char **saveptr)
    size_t SDL_utf8strlen (const char *str)
    size_t SDL_utf8strnlen (const char *str, size_t bytes)
    char *SDL_itoa (int value, char *str, int radix)
    char *SDL_uitoa (unsigned int value, char *str, int radix)
    char *SDL_ltoa (long value, char *str, int radix)
    char *SDL_ultoa (unsigned long value, char *str, int radix)
    char *SDL_lltoa (long long value, char *str, int radix)
    char *SDL_ulltoa (unsigned long long value, char *str, int radix)
    int SDL_atoi (const char *str)
    double SDL_atof (const char *str)
    long SDL_strtol (const char *str, char **endp, int base)
    unsigned long SDL_strtoul (const char *str, char **endp, int base)
    long long SDL_strtoll (const char *str, char **endp, int base)
    unsigned long long SDL_strtoull (const char *str, char **endp, int base)
    double SDL_strtod (const char *str, char **endp)
    int SDL_strcmp (const char *str1, const char *str2)
    int SDL_strncmp (const char *str1, const char *str2, size_t maxlen)
    int SDL_strcasecmp (const char *str1, const char *str2)
    int SDL_strncasecmp (const char *str1, const char *str2, size_t maxlen)
    char *SDL_strpbrk (const char *str, const char *breakset)
    Uint32 SDL_StepUTF8 (const char **pstr, size_t *pslen)
    Uint32 SDL_StepBackUTF8 (const char *start, const char **pstr)
    char *SDL_UCS4ToUTF8 (Uint32 codepoint, char *dst)
    int SDL_sscanf (const char *text, const char *fmt, ...) 
    int SDL_vsscanf (const char *text, const char *fmt, va_list ap) 
    int SDL_snprintf (char *text, size_t maxlen, const char *fmt, ...) 
    int SDL_swprintf (wchar_t *text, size_t maxlen, const wchar_t *fmt, ...)
    int SDL_vsnprintf (char *text, size_t maxlen, const char *fmt, va_list ap) 
    int SDL_vswprintf (wchar_t *text, size_t maxlen, const wchar_t *fmt, va_list ap)
    int SDL_asprintf (char **strp, const char *fmt, ...) 
    int SDL_vasprintf (char **strp, const char *fmt, va_list ap) 
    void SDL_srand (Uint64 seed)
    Sint32 SDL_rand (Sint32 n)
    float SDL_randf ()
    Uint32 SDL_rand_bits ()
    Sint32 SDL_rand_r (Uint64 *state, Sint32 n)
    float SDL_randf_r (Uint64 *state)
    Uint32 SDL_rand_bits_r (Uint64 *state)
    double SDL_acos (double x)
    float SDL_acosf (float x)
    double SDL_asin (double x)
    float SDL_asinf (float x)
    double SDL_atan (double x)
    float SDL_atanf (float x)
    double SDL_atan2 (double y, double x)
    float SDL_atan2f (float y, float x)
    double SDL_ceil (double x)
    float SDL_ceilf (float x)
    double SDL_copysign (double x, double y)
    float SDL_copysignf (float x, float y)
    double SDL_cos (double x)
    float SDL_cosf (float x)
    double SDL_exp (double x)
    float SDL_expf (float x)
    double SDL_fabs (double x)
    float SDL_fabsf (float x)
    double SDL_floor (double x)
    float SDL_floorf (float x)
    double SDL_trunc (double x)
    float SDL_truncf (float x)
    double SDL_fmod (double x, double y)
    float SDL_fmodf (float x, float y)
    int SDL_isinf (double x)
    int SDL_isinff (float x)
    int SDL_isnan (double x)
    int SDL_isnanf (float x)
    double SDL_log (double x)
    float SDL_logf (float x)
    double SDL_log10 (double x)
    float SDL_log10f (float x)
    double SDL_modf (double x, double *y)
    float SDL_modff (float x, float *y)
    double SDL_pow (double x, double y)
    float SDL_powf (float x, float y)
    double SDL_round (double x)
    float SDL_roundf (float x)
    long SDL_lround (double x)
    long SDL_lroundf (float x)
    double SDL_scalbn (double x, int n)
    float SDL_scalbnf (float x, int n)
    double SDL_sin (double x)
    float SDL_sinf (float x)
    double SDL_sqrt (double x)
    float SDL_sqrtf (float x)
    double SDL_tan (double x)
    float SDL_tanf (float x)
    cdef struct SDL_iconv_data_t
    ctypedef SDL_iconv_data_t *SDL_iconv_t
    SDL_iconv_t SDL_iconv_open (const char *tocode, const char *fromcode)
    int SDL_iconv_close (SDL_iconv_t cd)
    size_t SDL_iconv (SDL_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
    char *SDL_iconv_string (const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft)
    
    
    ctypedef void (*SDL_FunctionPointer)()

    # Definitions from SDL3/SDL_assert.h
    cdef enum SDL_AssertState:
        SDL_ASSERTION_RETRY
        SDL_ASSERTION_BREAK
        SDL_ASSERTION_ABORT
        SDL_ASSERTION_IGNORE
        SDL_ASSERTION_ALWAYS_IGNORE
    cdef struct SDL_AssertData:
        cbool always_ignore
        unsigned int trigger_count
        const char *condition
        const char *filename
        int linenum
        const char *function
        const SDL_AssertData *next
    SDL_AssertState SDL_ReportAssertion (SDL_AssertData *data, const char *func, const char *file, int line)
    ctypedef SDL_AssertState (*SDL_AssertionHandler)(const SDL_AssertData *data, void *userdata)
    void SDL_SetAssertionHandler (SDL_AssertionHandler handler, void *userdata)
    SDL_AssertionHandler SDL_GetDefaultAssertionHandler ()
    SDL_AssertionHandler SDL_GetAssertionHandler (void **puserdata)
    const SDL_AssertData *SDL_GetAssertionReport ()
    void SDL_ResetAssertionReport ()

    # Definitions from SDL3/SDL_asyncio.h
    cdef struct SDL_AsyncIO
    cdef enum SDL_AsyncIOTaskType:
        SDL_ASYNCIO_TASK_READ
        SDL_ASYNCIO_TASK_WRITE
        SDL_ASYNCIO_TASK_CLOSE
    cdef enum SDL_AsyncIOResult:
        SDL_ASYNCIO_COMPLETE
        SDL_ASYNCIO_FAILURE
        SDL_ASYNCIO_CANCELED
    cdef struct SDL_AsyncIOOutcome:
        SDL_AsyncIO *asyncio
        SDL_AsyncIOTaskType type
        SDL_AsyncIOResult result
        void *buffer
        Uint64 offset
        Uint64 bytes_requested
        Uint64 bytes_transferred
        void *userdata
    cdef struct SDL_AsyncIOQueue
    SDL_AsyncIO *SDL_AsyncIOFromFile (const char *file, const char *mode)
    Sint64 SDL_GetAsyncIOSize (SDL_AsyncIO *asyncio)
    cbool SDL_ReadAsyncIO (SDL_AsyncIO *asyncio, void *ptr, Uint64 offset, Uint64 size, SDL_AsyncIOQueue *queue, void *userdata)
    cbool SDL_WriteAsyncIO (SDL_AsyncIO *asyncio, void *ptr, Uint64 offset, Uint64 size, SDL_AsyncIOQueue *queue, void *userdata)
    cbool SDL_CloseAsyncIO (SDL_AsyncIO *asyncio, cbool flush, SDL_AsyncIOQueue *queue, void *userdata)
    SDL_AsyncIOQueue *SDL_CreateAsyncIOQueue ()
    void SDL_DestroyAsyncIOQueue (SDL_AsyncIOQueue *queue)
    cbool SDL_GetAsyncIOResult (SDL_AsyncIOQueue *queue, SDL_AsyncIOOutcome *outcome)
    cbool SDL_WaitAsyncIOResult (SDL_AsyncIOQueue *queue, SDL_AsyncIOOutcome *outcome, Sint32 timeoutMS)
    void SDL_SignalAsyncIOQueue (SDL_AsyncIOQueue *queue)
    cbool SDL_LoadFileAsync (const char *file, SDL_AsyncIOQueue *queue, void *userdata)

    # Definitions from SDL3/SDL_atomic.h
    ctypedef int SDL_SpinLock
    cbool SDL_TryLockSpinlock (SDL_SpinLock *lock)
    void SDL_LockSpinlock (SDL_SpinLock *lock)
    void SDL_UnlockSpinlock (SDL_SpinLock *lock)
    void SDL_MemoryBarrierReleaseFunction ()
    void SDL_MemoryBarrierAcquireFunction ()
    cdef struct SDL_AtomicInt:
        int value
    cbool SDL_CompareAndSwapAtomicInt (SDL_AtomicInt *a, int oldval, int newval)
    int SDL_SetAtomicInt (SDL_AtomicInt *a, int v)
    int SDL_GetAtomicInt (SDL_AtomicInt *a)
    int SDL_AddAtomicInt (SDL_AtomicInt *a, int v)
    cdef struct SDL_AtomicU32:
        Uint32 value
    cbool SDL_CompareAndSwapAtomicU32 (SDL_AtomicU32 *a, Uint32 oldval, Uint32 newval)
    Uint32 SDL_SetAtomicU32 (SDL_AtomicU32 *a, Uint32 v)
    Uint32 SDL_GetAtomicU32 (SDL_AtomicU32 *a)
    Uint32 SDL_AddAtomicU32 (SDL_AtomicU32 *a, int v)
    cbool SDL_CompareAndSwapAtomicPointer (void **a, void *oldval, void *newval)
    void *SDL_SetAtomicPointer (void **a, void *v)
    void *SDL_GetAtomicPointer (void **a)

    # Definitions from SDL3/SDL_endian.h
    

    # Definitions from SDL3/SDL_error.h
    cbool SDL_SetError (const char *fmt, ...) 
    cbool SDL_SetErrorV (const char *fmt, va_list ap) 
    cbool SDL_OutOfMemory ()
    const char *SDL_GetError ()
    cbool SDL_ClearError ()

    # Definitions from SDL3/SDL_properties.h
    ctypedef Uint32 SDL_PropertiesID
    cdef enum SDL_PropertyType:
        SDL_PROPERTY_TYPE_INVALID
        SDL_PROPERTY_TYPE_POINTER
        SDL_PROPERTY_TYPE_STRING
        SDL_PROPERTY_TYPE_NUMBER
        SDL_PROPERTY_TYPE_FLOAT
        SDL_PROPERTY_TYPE_BOOLEAN
    SDL_PropertiesID SDL_GetGlobalProperties ()
    SDL_PropertiesID SDL_CreateProperties ()
    cbool SDL_CopyProperties (SDL_PropertiesID src, SDL_PropertiesID dst)
    cbool SDL_LockProperties (SDL_PropertiesID props)
    void SDL_UnlockProperties (SDL_PropertiesID props)
    ctypedef void (*SDL_CleanupPropertyCallback)(void *userdata, void *value)
    cbool SDL_SetPointerPropertyWithCleanup (SDL_PropertiesID props, const char *name, void *value, SDL_CleanupPropertyCallback cleanup, void *userdata)
    cbool SDL_SetPointerProperty (SDL_PropertiesID props, const char *name, void *value)
    cbool SDL_SetStringProperty (SDL_PropertiesID props, const char *name, const char *value)
    cbool SDL_SetNumberProperty (SDL_PropertiesID props, const char *name, Sint64 value)
    cbool SDL_SetFloatProperty (SDL_PropertiesID props, const char *name, float value)
    cbool SDL_SetBooleanProperty (SDL_PropertiesID props, const char *name, cbool value)
    cbool SDL_HasProperty (SDL_PropertiesID props, const char *name)
    SDL_PropertyType SDL_GetPropertyType (SDL_PropertiesID props, const char *name)
    void *SDL_GetPointerProperty (SDL_PropertiesID props, const char *name, void *default_value)
    const char *SDL_GetStringProperty (SDL_PropertiesID props, const char *name, const char *default_value)
    Sint64 SDL_GetNumberProperty (SDL_PropertiesID props, const char *name, Sint64 default_value)
    float SDL_GetFloatProperty (SDL_PropertiesID props, const char *name, float default_value)
    cbool SDL_GetBooleanProperty (SDL_PropertiesID props, const char *name, cbool default_value)
    cbool SDL_ClearProperty (SDL_PropertiesID props, const char *name)
    ctypedef void (*SDL_EnumeratePropertiesCallback)(void *userdata, SDL_PropertiesID props, const char *name)
    cbool SDL_EnumerateProperties (SDL_PropertiesID props, SDL_EnumeratePropertiesCallback callback, void *userdata)
    void SDL_DestroyProperties (SDL_PropertiesID props)

    # Definitions from SDL3/SDL_thread.h
    cdef struct SDL_Thread
    ctypedef Uint64 SDL_ThreadID
    ctypedef SDL_AtomicInt SDL_TLSID
    cdef enum SDL_ThreadPriority:
        SDL_THREAD_PRIORITY_LOW
        SDL_THREAD_PRIORITY_NORMAL
        SDL_THREAD_PRIORITY_HIGH
        SDL_THREAD_PRIORITY_TIME_CRITICAL
    cdef enum SDL_ThreadState:
        SDL_THREAD_UNKNOWN
        SDL_THREAD_ALIVE
        SDL_THREAD_DETACHED
        SDL_THREAD_COMPLETE
    ctypedef int (*SDL_ThreadFunction)(void *data)
    SDL_Thread *SDL_CreateThreadRuntime (SDL_ThreadFunction fn, const char *name, void *data, SDL_FunctionPointer pfnBeginThread, SDL_FunctionPointer pfnEndThread)
    SDL_Thread *SDL_CreateThreadWithPropertiesRuntime (SDL_PropertiesID props, SDL_FunctionPointer pfnBeginThread, SDL_FunctionPointer pfnEndThread)
    const char *SDL_GetThreadName (SDL_Thread *thread)
    SDL_ThreadID SDL_GetCurrentThreadID ()
    SDL_ThreadID SDL_GetThreadID (SDL_Thread *thread)
    cbool SDL_SetCurrentThreadPriority (SDL_ThreadPriority priority)
    void SDL_WaitThread (SDL_Thread *thread, int *status)
    SDL_ThreadState SDL_GetThreadState (SDL_Thread *thread)
    void SDL_DetachThread (SDL_Thread *thread)
    void *SDL_GetTLS (SDL_TLSID *id)
    ctypedef void (*SDL_TLSDestructorCallback)(void *value)
    cbool SDL_SetTLS (SDL_TLSID *id, const void *value, SDL_TLSDestructorCallback destructor)
    void SDL_CleanupTLS ()

    # Definitions from SDL3/SDL_mutex.h
    cdef struct SDL_Mutex
    SDL_Mutex *SDL_CreateMutex ()
    void SDL_LockMutex (SDL_Mutex *mutex)
    cbool SDL_TryLockMutex (SDL_Mutex *mutex)
    void SDL_UnlockMutex (SDL_Mutex *mutex)
    void SDL_DestroyMutex (SDL_Mutex *mutex)
    cdef struct SDL_RWLock
    SDL_RWLock *SDL_CreateRWLock ()
    void SDL_LockRWLockForReading (SDL_RWLock *rwlock)
    void SDL_LockRWLockForWriting (SDL_RWLock *rwlock)
    cbool SDL_TryLockRWLockForReading (SDL_RWLock *rwlock)
    cbool SDL_TryLockRWLockForWriting (SDL_RWLock *rwlock)
    void SDL_UnlockRWLock (SDL_RWLock *rwlock)
    void SDL_DestroyRWLock (SDL_RWLock *rwlock)
    cdef struct SDL_Semaphore
    SDL_Semaphore *SDL_CreateSemaphore (Uint32 initial_value)
    void SDL_DestroySemaphore (SDL_Semaphore *sem)
    void SDL_WaitSemaphore (SDL_Semaphore *sem)
    cbool SDL_TryWaitSemaphore (SDL_Semaphore *sem)
    cbool SDL_WaitSemaphoreTimeout (SDL_Semaphore *sem, Sint32 timeoutMS)
    void SDL_SignalSemaphore (SDL_Semaphore *sem)
    Uint32 SDL_GetSemaphoreValue (SDL_Semaphore *sem)
    cdef struct SDL_Condition
    SDL_Condition *SDL_CreateCondition ()
    void SDL_DestroyCondition (SDL_Condition *cond)
    void SDL_SignalCondition (SDL_Condition *cond)
    void SDL_BroadcastCondition (SDL_Condition *cond)
    void SDL_WaitCondition (SDL_Condition *cond, SDL_Mutex *mutex)
    cbool SDL_WaitConditionTimeout (SDL_Condition *cond, SDL_Mutex *mutex, Sint32 timeoutMS)
    cdef enum SDL_InitStatus:
        SDL_INIT_STATUS_UNINITIALIZED
        SDL_INIT_STATUS_INITIALIZING
        SDL_INIT_STATUS_INITIALIZED
        SDL_INIT_STATUS_UNINITIALIZING
    cdef struct SDL_InitState:
        SDL_AtomicInt status
        SDL_ThreadID thread
        void *reserved
    cbool SDL_ShouldInit (SDL_InitState *state)
    cbool SDL_ShouldQuit (SDL_InitState *state)
    void SDL_SetInitialized (SDL_InitState *state, cbool initialized)

    # Definitions from SDL3/SDL_iostream.h
    cdef enum SDL_IOStatus:
        SDL_IO_STATUS_READY
        SDL_IO_STATUS_ERROR
        SDL_IO_STATUS_EOF
        SDL_IO_STATUS_NOT_READY
        SDL_IO_STATUS_READONLY
        SDL_IO_STATUS_WRITEONLY
    cdef enum SDL_IOWhence:
        SDL_IO_SEEK_SET
        SDL_IO_SEEK_CUR
        SDL_IO_SEEK_END
    cdef struct SDL_IOStreamInterface
    cdef struct SDL_IOStream
    SDL_IOStream *SDL_IOFromFile (const char *file, const char *mode)
    SDL_IOStream *SDL_IOFromMem (void *mem, size_t size)
    SDL_IOStream *SDL_IOFromConstMem (const void *mem, size_t size)
    SDL_IOStream *SDL_IOFromDynamicMem ()
    SDL_IOStream *SDL_OpenIO (const SDL_IOStreamInterface *iface, void *userdata)
    cbool SDL_CloseIO (SDL_IOStream *context)
    SDL_PropertiesID SDL_GetIOProperties (SDL_IOStream *context)
    SDL_IOStatus SDL_GetIOStatus (SDL_IOStream *context)
    Sint64 SDL_GetIOSize (SDL_IOStream *context)
    Sint64 SDL_SeekIO (SDL_IOStream *context, Sint64 offset, SDL_IOWhence whence)
    Sint64 SDL_TellIO (SDL_IOStream *context)
    size_t SDL_ReadIO (SDL_IOStream *context, void *ptr, size_t size)
    size_t SDL_WriteIO (SDL_IOStream *context, const void *ptr, size_t size)
    size_t SDL_IOprintf (SDL_IOStream *context, const char *fmt, ...) 
    size_t SDL_IOvprintf (SDL_IOStream *context, const char *fmt, va_list ap) 
    cbool SDL_FlushIO (SDL_IOStream *context)
    void *SDL_LoadFile_IO (SDL_IOStream *src, size_t *datasize, cbool closeio)
    void *SDL_LoadFile (const char *file, size_t *datasize)
    cbool SDL_SaveFile_IO (SDL_IOStream *src, const void *data, size_t datasize, cbool closeio)
    cbool SDL_SaveFile (const char *file, const void *data, size_t datasize)
    cbool SDL_ReadU8 (SDL_IOStream *src, Uint8 *value)
    cbool SDL_ReadS8 (SDL_IOStream *src, Sint8 *value)
    cbool SDL_ReadU16LE (SDL_IOStream *src, Uint16 *value)
    cbool SDL_ReadS16LE (SDL_IOStream *src, Sint16 *value)
    cbool SDL_ReadU16BE (SDL_IOStream *src, Uint16 *value)
    cbool SDL_ReadS16BE (SDL_IOStream *src, Sint16 *value)
    cbool SDL_ReadU32LE (SDL_IOStream *src, Uint32 *value)
    cbool SDL_ReadS32LE (SDL_IOStream *src, Sint32 *value)
    cbool SDL_ReadU32BE (SDL_IOStream *src, Uint32 *value)
    cbool SDL_ReadS32BE (SDL_IOStream *src, Sint32 *value)
    cbool SDL_ReadU64LE (SDL_IOStream *src, Uint64 *value)
    cbool SDL_ReadS64LE (SDL_IOStream *src, Sint64 *value)
    cbool SDL_ReadU64BE (SDL_IOStream *src, Uint64 *value)
    cbool SDL_ReadS64BE (SDL_IOStream *src, Sint64 *value)
    cbool SDL_WriteU8 (SDL_IOStream *dst, Uint8 value)
    cbool SDL_WriteS8 (SDL_IOStream *dst, Sint8 value)
    cbool SDL_WriteU16LE (SDL_IOStream *dst, Uint16 value)
    cbool SDL_WriteS16LE (SDL_IOStream *dst, Sint16 value)
    cbool SDL_WriteU16BE (SDL_IOStream *dst, Uint16 value)
    cbool SDL_WriteS16BE (SDL_IOStream *dst, Sint16 value)
    cbool SDL_WriteU32LE (SDL_IOStream *dst, Uint32 value)
    cbool SDL_WriteS32LE (SDL_IOStream *dst, Sint32 value)
    cbool SDL_WriteU32BE (SDL_IOStream *dst, Uint32 value)
    cbool SDL_WriteS32BE (SDL_IOStream *dst, Sint32 value)
    cbool SDL_WriteU64LE (SDL_IOStream *dst, Uint64 value)
    cbool SDL_WriteS64LE (SDL_IOStream *dst, Sint64 value)
    cbool SDL_WriteU64BE (SDL_IOStream *dst, Uint64 value)
    cbool SDL_WriteS64BE (SDL_IOStream *dst, Sint64 value)

    # Definitions from SDL3/SDL_audio.h
    cdef enum SDL_AudioFormat:
        SDL_AUDIO_UNKNOWN
        SDL_AUDIO_U8
        SDL_AUDIO_S8
        SDL_AUDIO_S16LE
        SDL_AUDIO_S16BE
        SDL_AUDIO_S32LE
        SDL_AUDIO_S32BE
        SDL_AUDIO_F32LE
        SDL_AUDIO_F32BE
        SDL_AUDIO_S16
        SDL_AUDIO_S32
        SDL_AUDIO_F32
    ctypedef Uint32 SDL_AudioDeviceID
    cdef struct SDL_AudioSpec:
        SDL_AudioFormat format
        int channels
        int freq
    cdef struct SDL_AudioStream
    int SDL_GetNumAudioDrivers ()
    const char *SDL_GetAudioDriver (int index)
    const char *SDL_GetCurrentAudioDriver ()
    SDL_AudioDeviceID *SDL_GetAudioPlaybackDevices (int *count)
    SDL_AudioDeviceID *SDL_GetAudioRecordingDevices (int *count)
    const char *SDL_GetAudioDeviceName (SDL_AudioDeviceID devid)
    cbool SDL_GetAudioDeviceFormat (SDL_AudioDeviceID devid, SDL_AudioSpec *spec, int *sample_frames)
    int *SDL_GetAudioDeviceChannelMap (SDL_AudioDeviceID devid, int *count)
    SDL_AudioDeviceID SDL_OpenAudioDevice (SDL_AudioDeviceID devid, const SDL_AudioSpec *spec)
    cbool SDL_IsAudioDevicePhysical (SDL_AudioDeviceID devid)
    cbool SDL_IsAudioDevicePlayback (SDL_AudioDeviceID devid)
    cbool SDL_PauseAudioDevice (SDL_AudioDeviceID devid)
    cbool SDL_ResumeAudioDevice (SDL_AudioDeviceID devid)
    cbool SDL_AudioDevicePaused (SDL_AudioDeviceID devid)
    float SDL_GetAudioDeviceGain (SDL_AudioDeviceID devid)
    cbool SDL_SetAudioDeviceGain (SDL_AudioDeviceID devid, float gain)
    void SDL_CloseAudioDevice (SDL_AudioDeviceID devid)
    cbool SDL_BindAudioStreams (SDL_AudioDeviceID devid, SDL_AudioStream *const *streams, int num_streams)
    cbool SDL_BindAudioStream (SDL_AudioDeviceID devid, SDL_AudioStream *stream)
    void SDL_UnbindAudioStreams (SDL_AudioStream *const *streams, int num_streams)
    void SDL_UnbindAudioStream (SDL_AudioStream *stream)
    SDL_AudioDeviceID SDL_GetAudioStreamDevice (SDL_AudioStream *stream)
    SDL_AudioStream *SDL_CreateAudioStream (const SDL_AudioSpec *src_spec, const SDL_AudioSpec *dst_spec)
    SDL_PropertiesID SDL_GetAudioStreamProperties (SDL_AudioStream *stream)
    cbool SDL_GetAudioStreamFormat (SDL_AudioStream *stream, SDL_AudioSpec *src_spec, SDL_AudioSpec *dst_spec)
    cbool SDL_SetAudioStreamFormat (SDL_AudioStream *stream, const SDL_AudioSpec *src_spec, const SDL_AudioSpec *dst_spec)
    float SDL_GetAudioStreamFrequencyRatio (SDL_AudioStream *stream)
    cbool SDL_SetAudioStreamFrequencyRatio (SDL_AudioStream *stream, float ratio)
    float SDL_GetAudioStreamGain (SDL_AudioStream *stream)
    cbool SDL_SetAudioStreamGain (SDL_AudioStream *stream, float gain)
    int *SDL_GetAudioStreamInputChannelMap (SDL_AudioStream *stream, int *count)
    int *SDL_GetAudioStreamOutputChannelMap (SDL_AudioStream *stream, int *count)
    cbool SDL_SetAudioStreamInputChannelMap (SDL_AudioStream *stream, const int *chmap, int count)
    cbool SDL_SetAudioStreamOutputChannelMap (SDL_AudioStream *stream, const int *chmap, int count)
    cbool SDL_PutAudioStreamData (SDL_AudioStream *stream, const void *buf, int len)
    ctypedef void (*SDL_AudioStreamDataCompleteCallback)(void *userdata, const void *buf, int buflen)
    cbool SDL_PutAudioStreamDataNoCopy (SDL_AudioStream *stream, const void *buf, int len, SDL_AudioStreamDataCompleteCallback callback, void *userdata)
    cbool SDL_PutAudioStreamPlanarData (SDL_AudioStream *stream, const void *const *channel_buffers, int num_channels, int num_samples)
    int SDL_GetAudioStreamData (SDL_AudioStream *stream, void *buf, int len)
    int SDL_GetAudioStreamAvailable (SDL_AudioStream *stream)
    int SDL_GetAudioStreamQueued (SDL_AudioStream *stream)
    cbool SDL_FlushAudioStream (SDL_AudioStream *stream)
    cbool SDL_ClearAudioStream (SDL_AudioStream *stream)
    cbool SDL_PauseAudioStreamDevice (SDL_AudioStream *stream)
    cbool SDL_ResumeAudioStreamDevice (SDL_AudioStream *stream)
    cbool SDL_AudioStreamDevicePaused (SDL_AudioStream *stream)
    cbool SDL_LockAudioStream (SDL_AudioStream *stream)
    cbool SDL_UnlockAudioStream (SDL_AudioStream *stream)
    ctypedef void (*SDL_AudioStreamCallback)(void *userdata, SDL_AudioStream *stream, int additional_amount, int total_amount)
    cbool SDL_SetAudioStreamGetCallback (SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata)
    cbool SDL_SetAudioStreamPutCallback (SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata)
    void SDL_DestroyAudioStream (SDL_AudioStream *stream)
    SDL_AudioStream *SDL_OpenAudioDeviceStream (SDL_AudioDeviceID devid, const SDL_AudioSpec *spec, SDL_AudioStreamCallback callback, void *userdata)
    ctypedef void (*SDL_AudioPostmixCallback)(void *userdata, const SDL_AudioSpec *spec, float *buffer, int buflen)
    cbool SDL_SetAudioPostmixCallback (SDL_AudioDeviceID devid, SDL_AudioPostmixCallback callback, void *userdata)
    cbool SDL_LoadWAV_IO (SDL_IOStream *src, cbool closeio, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len)
    cbool SDL_LoadWAV (const char *path, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len)
    cbool SDL_MixAudio (Uint8 *dst, const Uint8 *src, SDL_AudioFormat format, Uint32 len, float volume)
    cbool SDL_ConvertAudioSamples (const SDL_AudioSpec *src_spec, const Uint8 *src_data, int src_len, const SDL_AudioSpec *dst_spec, Uint8 **dst_data, int *dst_len)
    const char *SDL_GetAudioFormatName (SDL_AudioFormat format)
    int SDL_GetSilenceValueForFormat (SDL_AudioFormat format)

    # Definitions from SDL3/SDL_bits.h
    
    

    # Definitions from SDL3/SDL_blendmode.h
    ctypedef Uint32 SDL_BlendMode
    cdef enum SDL_BlendOperation:
        SDL_BLENDOPERATION_ADD
        SDL_BLENDOPERATION_SUBTRACT
        SDL_BLENDOPERATION_REV_SUBTRACT
        SDL_BLENDOPERATION_MINIMUM
        SDL_BLENDOPERATION_MAXIMUM
    cdef enum SDL_BlendFactor:
        SDL_BLENDFACTOR_ZERO
        SDL_BLENDFACTOR_ONE
        SDL_BLENDFACTOR_SRC_COLOR
        SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR
        SDL_BLENDFACTOR_SRC_ALPHA
        SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA
        SDL_BLENDFACTOR_DST_COLOR
        SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR
        SDL_BLENDFACTOR_DST_ALPHA
        SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA
    SDL_BlendMode SDL_ComposeCustomBlendMode (SDL_BlendFactor srcColorFactor, SDL_BlendFactor dstColorFactor, SDL_BlendOperation colorOperation, SDL_BlendFactor srcAlphaFactor, SDL_BlendFactor dstAlphaFactor, SDL_BlendOperation alphaOperation)

    # Definitions from SDL3/SDL_pixels.h
    cdef enum SDL_PixelType:
        SDL_PIXELTYPE_UNKNOWN
        SDL_PIXELTYPE_INDEX1
        SDL_PIXELTYPE_INDEX4
        SDL_PIXELTYPE_INDEX8
        SDL_PIXELTYPE_PACKED8
        SDL_PIXELTYPE_PACKED16
        SDL_PIXELTYPE_PACKED32
        SDL_PIXELTYPE_ARRAYU8
        SDL_PIXELTYPE_ARRAYU16
        SDL_PIXELTYPE_ARRAYU32
        SDL_PIXELTYPE_ARRAYF16
        SDL_PIXELTYPE_ARRAYF32
        SDL_PIXELTYPE_INDEX2
    cdef enum SDL_BitmapOrder:
        SDL_BITMAPORDER_NONE
        SDL_BITMAPORDER_4321
        SDL_BITMAPORDER_1234
    cdef enum SDL_PackedOrder:
        SDL_PACKEDORDER_NONE
        SDL_PACKEDORDER_XRGB
        SDL_PACKEDORDER_RGBX
        SDL_PACKEDORDER_ARGB
        SDL_PACKEDORDER_RGBA
        SDL_PACKEDORDER_XBGR
        SDL_PACKEDORDER_BGRX
        SDL_PACKEDORDER_ABGR
        SDL_PACKEDORDER_BGRA
    cdef enum SDL_ArrayOrder:
        SDL_ARRAYORDER_NONE
        SDL_ARRAYORDER_RGB
        SDL_ARRAYORDER_RGBA
        SDL_ARRAYORDER_ARGB
        SDL_ARRAYORDER_BGR
        SDL_ARRAYORDER_BGRA
        SDL_ARRAYORDER_ABGR
    cdef enum SDL_PackedLayout:
        SDL_PACKEDLAYOUT_NONE
        SDL_PACKEDLAYOUT_332
        SDL_PACKEDLAYOUT_4444
        SDL_PACKEDLAYOUT_1555
        SDL_PACKEDLAYOUT_5551
        SDL_PACKEDLAYOUT_565
        SDL_PACKEDLAYOUT_8888
        SDL_PACKEDLAYOUT_2101010
        SDL_PACKEDLAYOUT_1010102
    cdef enum SDL_PixelFormat:
        SDL_PIXELFORMAT_UNKNOWN
        SDL_PIXELFORMAT_INDEX1LSB
        SDL_PIXELFORMAT_INDEX1MSB
        SDL_PIXELFORMAT_INDEX2LSB
        SDL_PIXELFORMAT_INDEX2MSB
        SDL_PIXELFORMAT_INDEX4LSB
        SDL_PIXELFORMAT_INDEX4MSB
        SDL_PIXELFORMAT_INDEX8
        SDL_PIXELFORMAT_RGB332
        SDL_PIXELFORMAT_XRGB4444
        SDL_PIXELFORMAT_XBGR4444
        SDL_PIXELFORMAT_XRGB1555
        SDL_PIXELFORMAT_XBGR1555
        SDL_PIXELFORMAT_ARGB4444
        SDL_PIXELFORMAT_RGBA4444
        SDL_PIXELFORMAT_ABGR4444
        SDL_PIXELFORMAT_BGRA4444
        SDL_PIXELFORMAT_ARGB1555
        SDL_PIXELFORMAT_RGBA5551
        SDL_PIXELFORMAT_ABGR1555
        SDL_PIXELFORMAT_BGRA5551
        SDL_PIXELFORMAT_RGB565
        SDL_PIXELFORMAT_BGR565
        SDL_PIXELFORMAT_RGB24
        SDL_PIXELFORMAT_BGR24
        SDL_PIXELFORMAT_XRGB8888
        SDL_PIXELFORMAT_RGBX8888
        SDL_PIXELFORMAT_XBGR8888
        SDL_PIXELFORMAT_BGRX8888
        SDL_PIXELFORMAT_ARGB8888
        SDL_PIXELFORMAT_RGBA8888
        SDL_PIXELFORMAT_ABGR8888
        SDL_PIXELFORMAT_BGRA8888
        SDL_PIXELFORMAT_XRGB2101010
        SDL_PIXELFORMAT_XBGR2101010
        SDL_PIXELFORMAT_ARGB2101010
        SDL_PIXELFORMAT_ABGR2101010
        SDL_PIXELFORMAT_RGB48
        SDL_PIXELFORMAT_BGR48
        SDL_PIXELFORMAT_RGBA64
        SDL_PIXELFORMAT_ARGB64
        SDL_PIXELFORMAT_BGRA64
        SDL_PIXELFORMAT_ABGR64
        SDL_PIXELFORMAT_RGB48_FLOAT
        SDL_PIXELFORMAT_BGR48_FLOAT
        SDL_PIXELFORMAT_RGBA64_FLOAT
        SDL_PIXELFORMAT_ARGB64_FLOAT
        SDL_PIXELFORMAT_BGRA64_FLOAT
        SDL_PIXELFORMAT_ABGR64_FLOAT
        SDL_PIXELFORMAT_RGB96_FLOAT
        SDL_PIXELFORMAT_BGR96_FLOAT
        SDL_PIXELFORMAT_RGBA128_FLOAT
        SDL_PIXELFORMAT_ARGB128_FLOAT
        SDL_PIXELFORMAT_BGRA128_FLOAT
        SDL_PIXELFORMAT_ABGR128_FLOAT
        SDL_PIXELFORMAT_YV12
        SDL_PIXELFORMAT_IYUV
        SDL_PIXELFORMAT_YUY2
        SDL_PIXELFORMAT_UYVY
        SDL_PIXELFORMAT_YVYU
        SDL_PIXELFORMAT_NV12
        SDL_PIXELFORMAT_NV21
        SDL_PIXELFORMAT_P010
        SDL_PIXELFORMAT_EXTERNAL_OES
        SDL_PIXELFORMAT_MJPG
        SDL_PIXELFORMAT_RGBA32
        SDL_PIXELFORMAT_ARGB32
        SDL_PIXELFORMAT_BGRA32
        SDL_PIXELFORMAT_ABGR32
        SDL_PIXELFORMAT_RGBX32
        SDL_PIXELFORMAT_XRGB32
        SDL_PIXELFORMAT_BGRX32
        SDL_PIXELFORMAT_XBGR32
    cdef enum SDL_ColorType:
        SDL_COLOR_TYPE_UNKNOWN
        SDL_COLOR_TYPE_RGB
        SDL_COLOR_TYPE_YCBCR
    cdef enum SDL_ColorRange:
        SDL_COLOR_RANGE_UNKNOWN
        SDL_COLOR_RANGE_LIMITED
        SDL_COLOR_RANGE_FULL
    cdef enum SDL_ColorPrimaries:
        SDL_COLOR_PRIMARIES_UNKNOWN
        SDL_COLOR_PRIMARIES_BT709
        SDL_COLOR_PRIMARIES_UNSPECIFIED
        SDL_COLOR_PRIMARIES_BT470M
        SDL_COLOR_PRIMARIES_BT470BG
        SDL_COLOR_PRIMARIES_BT601
        SDL_COLOR_PRIMARIES_SMPTE240
        SDL_COLOR_PRIMARIES_GENERIC_FILM
        SDL_COLOR_PRIMARIES_BT2020
        SDL_COLOR_PRIMARIES_XYZ
        SDL_COLOR_PRIMARIES_SMPTE431
        SDL_COLOR_PRIMARIES_SMPTE432
        SDL_COLOR_PRIMARIES_EBU3213
        SDL_COLOR_PRIMARIES_CUSTOM
    cdef enum SDL_TransferCharacteristics:
        SDL_TRANSFER_CHARACTERISTICS_UNKNOWN
        SDL_TRANSFER_CHARACTERISTICS_BT709
        SDL_TRANSFER_CHARACTERISTICS_UNSPECIFIED
        SDL_TRANSFER_CHARACTERISTICS_GAMMA22
        SDL_TRANSFER_CHARACTERISTICS_GAMMA28
        SDL_TRANSFER_CHARACTERISTICS_BT601
        SDL_TRANSFER_CHARACTERISTICS_SMPTE240
        SDL_TRANSFER_CHARACTERISTICS_LINEAR
        SDL_TRANSFER_CHARACTERISTICS_LOG100
        SDL_TRANSFER_CHARACTERISTICS_LOG100_SQRT10
        SDL_TRANSFER_CHARACTERISTICS_IEC61966
        SDL_TRANSFER_CHARACTERISTICS_BT1361
        SDL_TRANSFER_CHARACTERISTICS_SRGB
        SDL_TRANSFER_CHARACTERISTICS_BT2020_10BIT
        SDL_TRANSFER_CHARACTERISTICS_BT2020_12BIT
        SDL_TRANSFER_CHARACTERISTICS_PQ
        SDL_TRANSFER_CHARACTERISTICS_SMPTE428
        SDL_TRANSFER_CHARACTERISTICS_HLG
        SDL_TRANSFER_CHARACTERISTICS_CUSTOM
    cdef enum SDL_MatrixCoefficients:
        SDL_MATRIX_COEFFICIENTS_IDENTITY
        SDL_MATRIX_COEFFICIENTS_BT709
        SDL_MATRIX_COEFFICIENTS_UNSPECIFIED
        SDL_MATRIX_COEFFICIENTS_FCC
        SDL_MATRIX_COEFFICIENTS_BT470BG
        SDL_MATRIX_COEFFICIENTS_BT601
        SDL_MATRIX_COEFFICIENTS_SMPTE240
        SDL_MATRIX_COEFFICIENTS_YCGCO
        SDL_MATRIX_COEFFICIENTS_BT2020_NCL
        SDL_MATRIX_COEFFICIENTS_BT2020_CL
        SDL_MATRIX_COEFFICIENTS_SMPTE2085
        SDL_MATRIX_COEFFICIENTS_CHROMA_DERIVED_NCL
        SDL_MATRIX_COEFFICIENTS_CHROMA_DERIVED_CL
        SDL_MATRIX_COEFFICIENTS_ICTCP
        SDL_MATRIX_COEFFICIENTS_CUSTOM
    cdef enum SDL_ChromaLocation:
        SDL_CHROMA_LOCATION_NONE
        SDL_CHROMA_LOCATION_LEFT
        SDL_CHROMA_LOCATION_CENTER
        SDL_CHROMA_LOCATION_TOPLEFT
    cdef enum SDL_Colorspace:
        SDL_COLORSPACE_UNKNOWN
        SDL_COLORSPACE_SRGB
        SDL_COLORSPACE_SRGB_LINEAR
        SDL_COLORSPACE_HDR10
        SDL_COLORSPACE_JPEG
        SDL_COLORSPACE_BT601_LIMITED
        SDL_COLORSPACE_BT601_FULL
        SDL_COLORSPACE_BT709_LIMITED
        SDL_COLORSPACE_BT709_FULL
        SDL_COLORSPACE_BT2020_LIMITED
        SDL_COLORSPACE_BT2020_FULL
        SDL_COLORSPACE_RGB_DEFAULT
        SDL_COLORSPACE_YUV_DEFAULT
    cdef struct SDL_Color:
        Uint8 r
        Uint8 g
        Uint8 b
        Uint8 a
    cdef struct SDL_FColor:
        float r
        float g
        float b
        float a
    cdef struct SDL_Palette:
        int ncolors
        SDL_Color *colors
        Uint32 version
        int refcount
    cdef struct SDL_PixelFormatDetails:
        SDL_PixelFormat format
        Uint8 bits_per_pixel
        Uint8 bytes_per_pixel
        Uint8 padding [ 2 ]
        Uint32 Rmask
        Uint32 Gmask
        Uint32 Bmask
        Uint32 Amask
        Uint8 Rbits
        Uint8 Gbits
        Uint8 Bbits
        Uint8 Abits
        Uint8 Rshift
        Uint8 Gshift
        Uint8 Bshift
        Uint8 Ashift
    const char *SDL_GetPixelFormatName (SDL_PixelFormat format)
    cbool SDL_GetMasksForPixelFormat (SDL_PixelFormat format, int *bpp, Uint32 *Rmask, Uint32 *Gmask, Uint32 *Bmask, Uint32 *Amask)
    SDL_PixelFormat SDL_GetPixelFormatForMasks (int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
    const SDL_PixelFormatDetails *SDL_GetPixelFormatDetails (SDL_PixelFormat format)
    SDL_Palette *SDL_CreatePalette (int ncolors)
    cbool SDL_SetPaletteColors (SDL_Palette *palette, const SDL_Color *colors, int firstcolor, int ncolors)
    void SDL_DestroyPalette (SDL_Palette *palette)
    Uint32 SDL_MapRGB (const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 r, Uint8 g, Uint8 b)
    Uint32 SDL_MapRGBA (const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
    void SDL_GetRGB (Uint32 pixelvalue, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b)
    void SDL_GetRGBA (Uint32 pixelvalue, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)

    # Definitions from SDL3/SDL_rect.h
    cdef struct SDL_Point:
        int x
        int y
    cdef struct SDL_FPoint:
        float x
        float y
    cdef struct SDL_Rect:
        int x
        int x, y
        int w
        int w, h
    cdef struct SDL_FRect:
        float x
        float y
        float w
        float h
    
    
    
    
    cbool SDL_HasRectIntersection (const SDL_Rect *A, const SDL_Rect *B)
    cbool SDL_GetRectIntersection (const SDL_Rect *A, const SDL_Rect *B, SDL_Rect *result)
    cbool SDL_GetRectUnion (const SDL_Rect *A, const SDL_Rect *B, SDL_Rect *result)
    cbool SDL_GetRectEnclosingPoints (const SDL_Point *points, int count, const SDL_Rect *clip, SDL_Rect *result)
    cbool SDL_GetRectAndLineIntersection (const SDL_Rect *rect, int *X1, int *Y1, int *X2, int *Y2)
    
    
    
    
    cbool SDL_HasRectIntersectionFloat (const SDL_FRect *A, const SDL_FRect *B)
    cbool SDL_GetRectIntersectionFloat (const SDL_FRect *A, const SDL_FRect *B, SDL_FRect *result)
    cbool SDL_GetRectUnionFloat (const SDL_FRect *A, const SDL_FRect *B, SDL_FRect *result)
    cbool SDL_GetRectEnclosingPointsFloat (const SDL_FPoint *points, int count, const SDL_FRect *clip, SDL_FRect *result)
    cbool SDL_GetRectAndLineIntersectionFloat (const SDL_FRect *rect, float *X1, float *Y1, float *X2, float *Y2)

    # Definitions from SDL3/SDL_surface.h
    ctypedef Uint32 SDL_SurfaceFlags
    cdef enum SDL_ScaleMode:
        SDL_SCALEMODE_INVALID
        SDL_SCALEMODE_NEAREST
        SDL_SCALEMODE_LINEAR
        SDL_SCALEMODE_PIXELART
    cdef enum SDL_FlipMode:
        SDL_FLIP_NONE
        SDL_FLIP_HORIZONTAL
        SDL_FLIP_VERTICAL
        SDL_FLIP_HORIZONTAL_AND_VERTICAL
    cdef struct SDL_Surface:
        SDL_SurfaceFlags flags
        SDL_PixelFormat format
        int w
        int h
        int pitch
        void *pixels
        int refcount
        void *reserved
    SDL_Surface *SDL_CreateSurface (int width, int height, SDL_PixelFormat format)
    SDL_Surface *SDL_CreateSurfaceFrom (int width, int height, SDL_PixelFormat format, void *pixels, int pitch)
    void SDL_DestroySurface (SDL_Surface *surface)
    SDL_PropertiesID SDL_GetSurfaceProperties (SDL_Surface *surface)
    cbool SDL_SetSurfaceColorspace (SDL_Surface *surface, SDL_Colorspace colorspace)
    SDL_Colorspace SDL_GetSurfaceColorspace (SDL_Surface *surface)
    SDL_Palette *SDL_CreateSurfacePalette (SDL_Surface *surface)
    cbool SDL_SetSurfacePalette (SDL_Surface *surface, SDL_Palette *palette)
    SDL_Palette *SDL_GetSurfacePalette (SDL_Surface *surface)
    cbool SDL_AddSurfaceAlternateImage (SDL_Surface *surface, SDL_Surface *image)
    cbool SDL_SurfaceHasAlternateImages (SDL_Surface *surface)
    SDL_Surface **SDL_GetSurfaceImages (SDL_Surface *surface, int *count)
    void SDL_RemoveSurfaceAlternateImages (SDL_Surface *surface)
    cbool SDL_LockSurface (SDL_Surface *surface)
    void SDL_UnlockSurface (SDL_Surface *surface)
    SDL_Surface *SDL_LoadSurface_IO (SDL_IOStream *src, cbool closeio)
    SDL_Surface *SDL_LoadSurface (const char *file)
    SDL_Surface *SDL_LoadBMP_IO (SDL_IOStream *src, cbool closeio)
    SDL_Surface *SDL_LoadBMP (const char *file)
    cbool SDL_SaveBMP_IO (SDL_Surface *surface, SDL_IOStream *dst, cbool closeio)
    cbool SDL_SaveBMP (SDL_Surface *surface, const char *file)
    SDL_Surface *SDL_LoadPNG_IO (SDL_IOStream *src, cbool closeio)
    SDL_Surface *SDL_LoadPNG (const char *file)
    cbool SDL_SavePNG_IO (SDL_Surface *surface, SDL_IOStream *dst, cbool closeio)
    cbool SDL_SavePNG (SDL_Surface *surface, const char *file)
    cbool SDL_SetSurfaceRLE (SDL_Surface *surface, cbool enabled)
    cbool SDL_SurfaceHasRLE (SDL_Surface *surface)
    cbool SDL_SetSurfaceColorKey (SDL_Surface *surface, cbool enabled, Uint32 key)
    cbool SDL_SurfaceHasColorKey (SDL_Surface *surface)
    cbool SDL_GetSurfaceColorKey (SDL_Surface *surface, Uint32 *key)
    cbool SDL_SetSurfaceColorMod (SDL_Surface *surface, Uint8 r, Uint8 g, Uint8 b)
    cbool SDL_GetSurfaceColorMod (SDL_Surface *surface, Uint8 *r, Uint8 *g, Uint8 *b)
    cbool SDL_SetSurfaceAlphaMod (SDL_Surface *surface, Uint8 alpha)
    cbool SDL_GetSurfaceAlphaMod (SDL_Surface *surface, Uint8 *alpha)
    cbool SDL_SetSurfaceBlendMode (SDL_Surface *surface, SDL_BlendMode blendMode)
    cbool SDL_GetSurfaceBlendMode (SDL_Surface *surface, SDL_BlendMode *blendMode)
    cbool SDL_SetSurfaceClipRect (SDL_Surface *surface, const SDL_Rect *rect)
    cbool SDL_GetSurfaceClipRect (SDL_Surface *surface, SDL_Rect *rect)
    cbool SDL_FlipSurface (SDL_Surface *surface, SDL_FlipMode flip)
    SDL_Surface *SDL_RotateSurface (SDL_Surface *surface, float angle)
    SDL_Surface *SDL_DuplicateSurface (SDL_Surface *surface)
    SDL_Surface *SDL_ScaleSurface (SDL_Surface *surface, int width, int height, SDL_ScaleMode scaleMode)
    SDL_Surface *SDL_ConvertSurface (SDL_Surface *surface, SDL_PixelFormat format)
    SDL_Surface *SDL_ConvertSurfaceAndColorspace (SDL_Surface *surface, SDL_PixelFormat format, SDL_Palette *palette, SDL_Colorspace colorspace, SDL_PropertiesID props)
    cbool SDL_ConvertPixels (int width, int height, SDL_PixelFormat src_format, const void *src, int src_pitch, SDL_PixelFormat dst_format, void *dst, int dst_pitch)
    cbool SDL_ConvertPixelsAndColorspace (int width, int height, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch)
    cbool SDL_PremultiplyAlpha (int width, int height, SDL_PixelFormat src_format, const void *src, int src_pitch, SDL_PixelFormat dst_format, void *dst, int dst_pitch, cbool linear)
    cbool SDL_PremultiplySurfaceAlpha (SDL_Surface *surface, cbool linear)
    cbool SDL_ClearSurface (SDL_Surface *surface, float r, float g, float b, float a)
    cbool SDL_FillSurfaceRect (SDL_Surface *dst, const SDL_Rect *rect, Uint32 color)
    cbool SDL_FillSurfaceRects (SDL_Surface *dst, const SDL_Rect *rects, int count, Uint32 color)
    cbool SDL_BlitSurface (SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect)
    cbool SDL_BlitSurfaceUnchecked (SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect)
    cbool SDL_BlitSurfaceScaled (SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect, SDL_ScaleMode scaleMode)
    cbool SDL_BlitSurfaceUncheckedScaled (SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect, SDL_ScaleMode scaleMode)
    cbool SDL_StretchSurface (SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect, SDL_ScaleMode scaleMode)
    cbool SDL_BlitSurfaceTiled (SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect)
    cbool SDL_BlitSurfaceTiledWithScale (SDL_Surface *src, const SDL_Rect *srcrect, float scale, SDL_ScaleMode scaleMode, SDL_Surface *dst, const SDL_Rect *dstrect)
    cbool SDL_BlitSurface9Grid (SDL_Surface *src, const SDL_Rect *srcrect, int left_width, int right_width, int top_height, int bottom_height, float scale, SDL_ScaleMode scaleMode, SDL_Surface *dst, const SDL_Rect *dstrect)
    Uint32 SDL_MapSurfaceRGB (SDL_Surface *surface, Uint8 r, Uint8 g, Uint8 b)
    Uint32 SDL_MapSurfaceRGBA (SDL_Surface *surface, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
    cbool SDL_ReadSurfacePixel (SDL_Surface *surface, int x, int y, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)
    cbool SDL_ReadSurfacePixelFloat (SDL_Surface *surface, int x, int y, float *r, float *g, float *b, float *a)
    cbool SDL_WriteSurfacePixel (SDL_Surface *surface, int x, int y, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
    cbool SDL_WriteSurfacePixelFloat (SDL_Surface *surface, int x, int y, float r, float g, float b, float a)

    # Definitions from SDL3/SDL_camera.h
    ctypedef Uint32 SDL_CameraID
    cdef struct SDL_Camera
    cdef struct SDL_CameraSpec:
        SDL_PixelFormat format
        SDL_Colorspace colorspace
        int width
        int height
        int framerate_numerator
        int framerate_denominator
    cdef enum SDL_CameraPosition:
        SDL_CAMERA_POSITION_UNKNOWN
        SDL_CAMERA_POSITION_FRONT_FACING
        SDL_CAMERA_POSITION_BACK_FACING
    cdef enum SDL_CameraPermissionState:
        SDL_CAMERA_PERMISSION_STATE_DENIED
        SDL_CAMERA_PERMISSION_STATE_PENDING
        SDL_CAMERA_PERMISSION_STATE_APPROVED
    int SDL_GetNumCameraDrivers ()
    const char *SDL_GetCameraDriver (int index)
    const char *SDL_GetCurrentCameraDriver ()
    SDL_CameraID *SDL_GetCameras (int *count)
    SDL_CameraSpec **SDL_GetCameraSupportedFormats (SDL_CameraID instance_id, int *count)
    const char *SDL_GetCameraName (SDL_CameraID instance_id)
    SDL_CameraPosition SDL_GetCameraPosition (SDL_CameraID instance_id)
    SDL_Camera *SDL_OpenCamera (SDL_CameraID instance_id, const SDL_CameraSpec *spec)
    SDL_CameraPermissionState SDL_GetCameraPermissionState (SDL_Camera *camera)
    SDL_CameraID SDL_GetCameraID (SDL_Camera *camera)
    SDL_PropertiesID SDL_GetCameraProperties (SDL_Camera *camera)
    cbool SDL_GetCameraFormat (SDL_Camera *camera, SDL_CameraSpec *spec)
    SDL_Surface *SDL_AcquireCameraFrame (SDL_Camera *camera, Uint64 *timestampNS)
    void SDL_ReleaseCameraFrame (SDL_Camera *camera, SDL_Surface *frame)
    void SDL_CloseCamera (SDL_Camera *camera)

    # Definitions from SDL3/SDL_clipboard.h
    cbool SDL_SetClipboardText (const char *text)
    char *SDL_GetClipboardText ()
    cbool SDL_HasClipboardText ()
    cbool SDL_SetPrimarySelectionText (const char *text)
    char *SDL_GetPrimarySelectionText ()
    cbool SDL_HasPrimarySelectionText ()
    ctypedef const void *(*SDL_ClipboardDataCallback)(void *userdata, const char *mime_type, size_t *size)
    ctypedef void (*SDL_ClipboardCleanupCallback)(void *userdata)
    cbool SDL_SetClipboardData (SDL_ClipboardDataCallback callback, SDL_ClipboardCleanupCallback cleanup, void *userdata, const char **mime_types, size_t num_mime_types)
    cbool SDL_ClearClipboardData ()
    void *SDL_GetClipboardData (const char *mime_type, size_t *size)
    cbool SDL_HasClipboardData (const char *mime_type)
    char **SDL_GetClipboardMimeTypes (size_t *num_mime_types)

    # Definitions from SDL3/SDL_cpuinfo.h
    int SDL_GetNumLogicalCPUCores ()
    int SDL_GetCPUCacheLineSize ()
    cbool SDL_HasAltiVec ()
    cbool SDL_HasMMX ()
    cbool SDL_HasSSE ()
    cbool SDL_HasSSE2 ()
    cbool SDL_HasSSE3 ()
    cbool SDL_HasSSE41 ()
    cbool SDL_HasSSE42 ()
    cbool SDL_HasAVX ()
    cbool SDL_HasAVX2 ()
    cbool SDL_HasAVX512F ()
    cbool SDL_HasARMSIMD ()
    cbool SDL_HasNEON ()
    cbool SDL_HasLSX ()
    cbool SDL_HasLASX ()
    int SDL_GetSystemRAM ()
    size_t SDL_GetSIMDAlignment ()
    int SDL_GetSystemPageSize ()

    # Definitions from SDL3/SDL_video.h
    ctypedef Uint32 SDL_DisplayID
    ctypedef Uint32 SDL_WindowID
    cdef enum SDL_SystemTheme:
        SDL_SYSTEM_THEME_UNKNOWN
        SDL_SYSTEM_THEME_LIGHT
        SDL_SYSTEM_THEME_DARK
    cdef struct SDL_DisplayModeData
    cdef struct SDL_DisplayMode:
        SDL_DisplayID displayID
        SDL_PixelFormat format
        int w
        int h
        float pixel_density
        float refresh_rate
        int refresh_rate_numerator
        int refresh_rate_denominator
        SDL_DisplayModeData *internal
    cdef enum SDL_DisplayOrientation:
        SDL_ORIENTATION_UNKNOWN
        SDL_ORIENTATION_LANDSCAPE
        SDL_ORIENTATION_LANDSCAPE_FLIPPED
        SDL_ORIENTATION_PORTRAIT
        SDL_ORIENTATION_PORTRAIT_FLIPPED
    cdef struct SDL_Window
    ctypedef Uint64 SDL_WindowFlags
    cdef enum SDL_FlashOperation:
        SDL_FLASH_CANCEL
        SDL_FLASH_BRIEFLY
        SDL_FLASH_UNTIL_FOCUSED
    cdef enum SDL_ProgressState:
        SDL_PROGRESS_STATE_INVALID
        SDL_PROGRESS_STATE_NONE
        SDL_PROGRESS_STATE_INDETERMINATE
        SDL_PROGRESS_STATE_NORMAL
        SDL_PROGRESS_STATE_PAUSED
        SDL_PROGRESS_STATE_ERROR
    cdef struct SDL_GLContextState
    ctypedef SDL_GLContextState *SDL_GLContext
    ctypedef void *SDL_EGLDisplay
    ctypedef void *SDL_EGLConfig
    ctypedef void *SDL_EGLSurface
    ctypedef intptr_t SDL_EGLAttrib
    ctypedef int SDL_EGLint
    ctypedef SDL_EGLAttrib *(*SDL_EGLAttribArrayCallback)(void *userdata)
    ctypedef SDL_EGLint *(*SDL_EGLIntArrayCallback)(void *userdata, SDL_EGLDisplay display, SDL_EGLConfig config)
    cdef enum SDL_GLAttr:
        SDL_GL_RED_SIZE
        SDL_GL_GREEN_SIZE
        SDL_GL_BLUE_SIZE
        SDL_GL_ALPHA_SIZE
        SDL_GL_BUFFER_SIZE
        SDL_GL_DOUBLEBUFFER
        SDL_GL_DEPTH_SIZE
        SDL_GL_STENCIL_SIZE
        SDL_GL_ACCUM_RED_SIZE
        SDL_GL_ACCUM_GREEN_SIZE
        SDL_GL_ACCUM_BLUE_SIZE
        SDL_GL_ACCUM_ALPHA_SIZE
        SDL_GL_STEREO
        SDL_GL_MULTISAMPLEBUFFERS
        SDL_GL_MULTISAMPLESAMPLES
        SDL_GL_ACCELERATED_VISUAL
        SDL_GL_RETAINED_BACKING
        SDL_GL_CONTEXT_MAJOR_VERSION
        SDL_GL_CONTEXT_MINOR_VERSION
        SDL_GL_CONTEXT_FLAGS
        SDL_GL_CONTEXT_PROFILE_MASK
        SDL_GL_SHARE_WITH_CURRENT_CONTEXT
        SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
        SDL_GL_CONTEXT_RELEASE_BEHAVIOR
        SDL_GL_CONTEXT_RESET_NOTIFICATION
        SDL_GL_CONTEXT_NO_ERROR
        SDL_GL_FLOATBUFFERS
        SDL_GL_EGL_PLATFORM
    ctypedef Uint32 SDL_GLProfile
    ctypedef Uint32 SDL_GLContextFlag
    ctypedef Uint32 SDL_GLContextReleaseFlag
    ctypedef Uint32 SDL_GLContextResetNotification
    int SDL_GetNumVideoDrivers ()
    const char *SDL_GetVideoDriver (int index)
    const char *SDL_GetCurrentVideoDriver ()
    SDL_SystemTheme SDL_GetSystemTheme ()
    SDL_DisplayID *SDL_GetDisplays (int *count)
    SDL_DisplayID SDL_GetPrimaryDisplay ()
    SDL_PropertiesID SDL_GetDisplayProperties (SDL_DisplayID displayID)
    const char *SDL_GetDisplayName (SDL_DisplayID displayID)
    cbool SDL_GetDisplayBounds (SDL_DisplayID displayID, SDL_Rect *rect)
    cbool SDL_GetDisplayUsableBounds (SDL_DisplayID displayID, SDL_Rect *rect)
    SDL_DisplayOrientation SDL_GetNaturalDisplayOrientation (SDL_DisplayID displayID)
    SDL_DisplayOrientation SDL_GetCurrentDisplayOrientation (SDL_DisplayID displayID)
    float SDL_GetDisplayContentScale (SDL_DisplayID displayID)
    SDL_DisplayMode **SDL_GetFullscreenDisplayModes (SDL_DisplayID displayID, int *count)
    cbool SDL_GetClosestFullscreenDisplayMode (SDL_DisplayID displayID, int w, int h, float refresh_rate, cbool include_high_density_modes, SDL_DisplayMode *closest)
    const SDL_DisplayMode *SDL_GetDesktopDisplayMode (SDL_DisplayID displayID)
    const SDL_DisplayMode *SDL_GetCurrentDisplayMode (SDL_DisplayID displayID)
    SDL_DisplayID SDL_GetDisplayForPoint (const SDL_Point *point)
    SDL_DisplayID SDL_GetDisplayForRect (const SDL_Rect *rect)
    SDL_DisplayID SDL_GetDisplayForWindow (SDL_Window *window)
    float SDL_GetWindowPixelDensity (SDL_Window *window)
    float SDL_GetWindowDisplayScale (SDL_Window *window)
    cbool SDL_SetWindowFullscreenMode (SDL_Window *window, const SDL_DisplayMode *mode)
    const SDL_DisplayMode *SDL_GetWindowFullscreenMode (SDL_Window *window)
    void *SDL_GetWindowICCProfile (SDL_Window *window, size_t *size)
    SDL_PixelFormat SDL_GetWindowPixelFormat (SDL_Window *window)
    SDL_Window **SDL_GetWindows (int *count)
    SDL_Window *SDL_CreateWindow (const char *title, int w, int h, SDL_WindowFlags flags)
    SDL_Window *SDL_CreatePopupWindow (SDL_Window *parent, int offset_x, int offset_y, int w, int h, SDL_WindowFlags flags)
    SDL_Window *SDL_CreateWindowWithProperties (SDL_PropertiesID props)
    SDL_WindowID SDL_GetWindowID (SDL_Window *window)
    SDL_Window *SDL_GetWindowFromID (SDL_WindowID id)
    SDL_Window *SDL_GetWindowParent (SDL_Window *window)
    SDL_PropertiesID SDL_GetWindowProperties (SDL_Window *window)
    SDL_WindowFlags SDL_GetWindowFlags (SDL_Window *window)
    cbool SDL_SetWindowTitle (SDL_Window *window, const char *title)
    const char *SDL_GetWindowTitle (SDL_Window *window)
    cbool SDL_SetWindowIcon (SDL_Window *window, SDL_Surface *icon)
    cbool SDL_SetWindowPosition (SDL_Window *window, int x, int y)
    cbool SDL_GetWindowPosition (SDL_Window *window, int *x, int *y)
    cbool SDL_SetWindowSize (SDL_Window *window, int w, int h)
    cbool SDL_GetWindowSize (SDL_Window *window, int *w, int *h)
    cbool SDL_GetWindowSafeArea (SDL_Window *window, SDL_Rect *rect)
    cbool SDL_SetWindowAspectRatio (SDL_Window *window, float min_aspect, float max_aspect)
    cbool SDL_GetWindowAspectRatio (SDL_Window *window, float *min_aspect, float *max_aspect)
    cbool SDL_GetWindowBordersSize (SDL_Window *window, int *top, int *left, int *bottom, int *right)
    cbool SDL_GetWindowSizeInPixels (SDL_Window *window, int *w, int *h)
    cbool SDL_SetWindowMinimumSize (SDL_Window *window, int min_w, int min_h)
    cbool SDL_GetWindowMinimumSize (SDL_Window *window, int *w, int *h)
    cbool SDL_SetWindowMaximumSize (SDL_Window *window, int max_w, int max_h)
    cbool SDL_GetWindowMaximumSize (SDL_Window *window, int *w, int *h)
    cbool SDL_SetWindowBordered (SDL_Window *window, cbool bordered)
    cbool SDL_SetWindowResizable (SDL_Window *window, cbool resizable)
    cbool SDL_SetWindowAlwaysOnTop (SDL_Window *window, cbool on_top)
    cbool SDL_SetWindowFillDocument (SDL_Window *window, cbool fill)
    cbool SDL_ShowWindow (SDL_Window *window)
    cbool SDL_HideWindow (SDL_Window *window)
    cbool SDL_RaiseWindow (SDL_Window *window)
    cbool SDL_MaximizeWindow (SDL_Window *window)
    cbool SDL_MinimizeWindow (SDL_Window *window)
    cbool SDL_RestoreWindow (SDL_Window *window)
    cbool SDL_SetWindowFullscreen (SDL_Window *window, cbool fullscreen)
    cbool SDL_SyncWindow (SDL_Window *window)
    cbool SDL_WindowHasSurface (SDL_Window *window)
    SDL_Surface *SDL_GetWindowSurface (SDL_Window *window)
    cbool SDL_SetWindowSurfaceVSync (SDL_Window *window, int vsync)
    cbool SDL_GetWindowSurfaceVSync (SDL_Window *window, int *vsync)
    cbool SDL_UpdateWindowSurface (SDL_Window *window)
    cbool SDL_UpdateWindowSurfaceRects (SDL_Window *window, const SDL_Rect *rects, int numrects)
    cbool SDL_DestroyWindowSurface (SDL_Window *window)
    cbool SDL_SetWindowKeyboardGrab (SDL_Window *window, cbool grabbed)
    cbool SDL_SetWindowMouseGrab (SDL_Window *window, cbool grabbed)
    cbool SDL_GetWindowKeyboardGrab (SDL_Window *window)
    cbool SDL_GetWindowMouseGrab (SDL_Window *window)
    SDL_Window *SDL_GetGrabbedWindow ()
    cbool SDL_SetWindowMouseRect (SDL_Window *window, const SDL_Rect *rect)
    const SDL_Rect *SDL_GetWindowMouseRect (SDL_Window *window)
    cbool SDL_SetWindowOpacity (SDL_Window *window, float opacity)
    float SDL_GetWindowOpacity (SDL_Window *window)
    cbool SDL_SetWindowParent (SDL_Window *window, SDL_Window *parent)
    cbool SDL_SetWindowModal (SDL_Window *window, cbool modal)
    cbool SDL_SetWindowFocusable (SDL_Window *window, cbool focusable)
    cbool SDL_ShowWindowSystemMenu (SDL_Window *window, int x, int y)
    cdef enum SDL_HitTestResult:
        SDL_HITTEST_NORMAL
        SDL_HITTEST_DRAGGABLE
        SDL_HITTEST_RESIZE_TOPLEFT
        SDL_HITTEST_RESIZE_TOP
        SDL_HITTEST_RESIZE_TOPRIGHT
        SDL_HITTEST_RESIZE_RIGHT
        SDL_HITTEST_RESIZE_BOTTOMRIGHT
        SDL_HITTEST_RESIZE_BOTTOM
        SDL_HITTEST_RESIZE_BOTTOMLEFT
        SDL_HITTEST_RESIZE_LEFT
    ctypedef SDL_HitTestResult (*SDL_HitTest)(SDL_Window *win, const SDL_Point *area, void *data)
    cbool SDL_SetWindowHitTest (SDL_Window *window, SDL_HitTest callback, void *callback_data)
    cbool SDL_SetWindowShape (SDL_Window *window, SDL_Surface *shape)
    cbool SDL_FlashWindow (SDL_Window *window, SDL_FlashOperation operation)
    cbool SDL_SetWindowProgressState (SDL_Window *window, SDL_ProgressState state)
    SDL_ProgressState SDL_GetWindowProgressState (SDL_Window *window)
    cbool SDL_SetWindowProgressValue (SDL_Window *window, float value)
    float SDL_GetWindowProgressValue (SDL_Window *window)
    void SDL_DestroyWindow (SDL_Window *window)
    cbool SDL_ScreenSaverEnabled ()
    cbool SDL_EnableScreenSaver ()
    cbool SDL_DisableScreenSaver ()
    cbool SDL_GL_LoadLibrary (const char *path)
    SDL_FunctionPointer SDL_GL_GetProcAddress (const char *proc)
    SDL_FunctionPointer SDL_EGL_GetProcAddress (const char *proc)
    void SDL_GL_UnloadLibrary ()
    cbool SDL_GL_ExtensionSupported (const char *extension)
    void SDL_GL_ResetAttributes ()
    cbool SDL_GL_SetAttribute (SDL_GLAttr attr, int value)
    cbool SDL_GL_GetAttribute (SDL_GLAttr attr, int *value)
    SDL_GLContext SDL_GL_CreateContext (SDL_Window *window)
    cbool SDL_GL_MakeCurrent (SDL_Window *window, SDL_GLContext context)
    SDL_Window *SDL_GL_GetCurrentWindow ()
    SDL_GLContext SDL_GL_GetCurrentContext ()
    SDL_EGLDisplay SDL_EGL_GetCurrentDisplay ()
    SDL_EGLConfig SDL_EGL_GetCurrentConfig ()
    SDL_EGLSurface SDL_EGL_GetWindowSurface (SDL_Window *window)
    void SDL_EGL_SetAttributeCallbacks (SDL_EGLAttribArrayCallback platformAttribCallback, SDL_EGLIntArrayCallback surfaceAttribCallback, SDL_EGLIntArrayCallback contextAttribCallback, void *userdata)
    cbool SDL_GL_SetSwapInterval (int interval)
    cbool SDL_GL_GetSwapInterval (int *interval)
    cbool SDL_GL_SwapWindow (SDL_Window *window)
    cbool SDL_GL_DestroyContext (SDL_GLContext context)

    # Definitions from SDL3/SDL_dialog.h
    cdef struct SDL_DialogFileFilter:
        const char *name
        const char *pattern
    ctypedef void (*SDL_DialogFileCallback)(void *userdata, const char *const *filelist, int filter)
    void SDL_ShowOpenFileDialog (SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const SDL_DialogFileFilter *filters, int nfilters, const char *default_location, cbool allow_many)
    void SDL_ShowSaveFileDialog (SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const SDL_DialogFileFilter *filters, int nfilters, const char *default_location)
    void SDL_ShowOpenFolderDialog (SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const char *default_location, cbool allow_many)
    cdef enum SDL_FileDialogType:
        SDL_FILEDIALOG_OPENFILE
        SDL_FILEDIALOG_SAVEFILE
        SDL_FILEDIALOG_OPENFOLDER
    void SDL_ShowFileDialogWithProperties (SDL_FileDialogType type, SDL_DialogFileCallback callback, void *userdata, SDL_PropertiesID props)

    # Definitions from SDL3/SDL_guid.h
    cdef struct SDL_GUID:
        Uint8 data [ 16 ]
    void SDL_GUIDToString (SDL_GUID guid, char *pszGUID, int cbGUID)
    SDL_GUID SDL_StringToGUID (const char *pchGUID)

    # Definitions from SDL3/SDL_power.h
    cdef enum SDL_PowerState:
        SDL_POWERSTATE_ERROR
        SDL_POWERSTATE_UNKNOWN
        SDL_POWERSTATE_ON_BATTERY
        SDL_POWERSTATE_NO_BATTERY
        SDL_POWERSTATE_CHARGING
        SDL_POWERSTATE_CHARGED
    SDL_PowerState SDL_GetPowerInfo (int *seconds, int *percent)

    # Definitions from SDL3/SDL_sensor.h
    cdef struct SDL_Sensor
    ctypedef Uint32 SDL_SensorID
    cdef enum SDL_SensorType:
        SDL_SENSOR_INVALID
        SDL_SENSOR_UNKNOWN
        SDL_SENSOR_ACCEL
        SDL_SENSOR_GYRO
        SDL_SENSOR_ACCEL_L
        SDL_SENSOR_GYRO_L
        SDL_SENSOR_ACCEL_R
        SDL_SENSOR_GYRO_R
        SDL_SENSOR_COUNT
    SDL_SensorID *SDL_GetSensors (int *count)
    const char *SDL_GetSensorNameForID (SDL_SensorID instance_id)
    SDL_SensorType SDL_GetSensorTypeForID (SDL_SensorID instance_id)
    int SDL_GetSensorNonPortableTypeForID (SDL_SensorID instance_id)
    SDL_Sensor *SDL_OpenSensor (SDL_SensorID instance_id)
    SDL_Sensor *SDL_GetSensorFromID (SDL_SensorID instance_id)
    SDL_PropertiesID SDL_GetSensorProperties (SDL_Sensor *sensor)
    const char *SDL_GetSensorName (SDL_Sensor *sensor)
    SDL_SensorType SDL_GetSensorType (SDL_Sensor *sensor)
    int SDL_GetSensorNonPortableType (SDL_Sensor *sensor)
    SDL_SensorID SDL_GetSensorID (SDL_Sensor *sensor)
    cbool SDL_GetSensorData (SDL_Sensor *sensor, float *data, int num_values)
    void SDL_CloseSensor (SDL_Sensor *sensor)
    void SDL_UpdateSensors ()

    # Definitions from SDL3/SDL_joystick.h
    cdef struct SDL_Joystick
    ctypedef Uint32 SDL_JoystickID
    cdef enum SDL_JoystickType:
        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_JOYSTICK_TYPE_COUNT
    cdef enum SDL_JoystickConnectionState:
        SDL_JOYSTICK_CONNECTION_INVALID
        SDL_JOYSTICK_CONNECTION_UNKNOWN
        SDL_JOYSTICK_CONNECTION_WIRED
        SDL_JOYSTICK_CONNECTION_WIRELESS
    void SDL_LockJoysticks ()
    void SDL_UnlockJoysticks ()
    cbool SDL_HasJoystick ()
    SDL_JoystickID *SDL_GetJoysticks (int *count)
    const char *SDL_GetJoystickNameForID (SDL_JoystickID instance_id)
    const char *SDL_GetJoystickPathForID (SDL_JoystickID instance_id)
    int SDL_GetJoystickPlayerIndexForID (SDL_JoystickID instance_id)
    SDL_GUID SDL_GetJoystickGUIDForID (SDL_JoystickID instance_id)
    Uint16 SDL_GetJoystickVendorForID (SDL_JoystickID instance_id)
    Uint16 SDL_GetJoystickProductForID (SDL_JoystickID instance_id)
    Uint16 SDL_GetJoystickProductVersionForID (SDL_JoystickID instance_id)
    SDL_JoystickType SDL_GetJoystickTypeForID (SDL_JoystickID instance_id)
    SDL_Joystick *SDL_OpenJoystick (SDL_JoystickID instance_id)
    SDL_Joystick *SDL_GetJoystickFromID (SDL_JoystickID instance_id)
    SDL_Joystick *SDL_GetJoystickFromPlayerIndex (int player_index)
    cdef struct SDL_VirtualJoystickTouchpadDesc:
        Uint16 nfingers
        Uint16 padding [ 3 ]
    cdef struct SDL_VirtualJoystickSensorDesc:
        SDL_SensorType type
        float rate
    cdef struct SDL_VirtualJoystickDesc:
        Uint32 version
        Uint16 type
        Uint16 padding
        Uint16 vendor_id
        Uint16 product_id
        Uint16 naxes
        Uint16 nbuttons
        Uint16 nballs
        Uint16 nhats
        Uint16 ntouchpads
        Uint16 nsensors
        Uint16 padding2 [ 2 ]
        Uint32 button_mask
        Uint32 axis_mask
        const char *name
        const SDL_VirtualJoystickTouchpadDesc *touchpads
        const SDL_VirtualJoystickSensorDesc *sensors
        void *userdata
        void (*Update)(void *userdata)
        void (*SetPlayerIndex)(void *userdata, int player_index)
        cbool (*Rumble)(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
        void (*Cleanup)(void *userdata)
    SDL_JoystickID SDL_AttachVirtualJoystick (const SDL_VirtualJoystickDesc *desc)
    cbool SDL_DetachVirtualJoystick (SDL_JoystickID instance_id)
    cbool SDL_IsJoystickVirtual (SDL_JoystickID instance_id)
    cbool SDL_SetJoystickVirtualAxis (SDL_Joystick *joystick, int axis, Sint16 value)
    cbool SDL_SetJoystickVirtualBall (SDL_Joystick *joystick, int ball, Sint16 xrel, Sint16 yrel)
    cbool SDL_SetJoystickVirtualButton (SDL_Joystick *joystick, int button, cbool down)
    cbool SDL_SetJoystickVirtualHat (SDL_Joystick *joystick, int hat, Uint8 value)
    cbool SDL_SetJoystickVirtualTouchpad (SDL_Joystick *joystick, int touchpad, int finger, cbool down, float x, float y, float pressure)
    cbool SDL_SendJoystickVirtualSensorData (SDL_Joystick *joystick, SDL_SensorType type, Uint64 sensor_timestamp, const float *data, int num_values)
    SDL_PropertiesID SDL_GetJoystickProperties (SDL_Joystick *joystick)
    const char *SDL_GetJoystickName (SDL_Joystick *joystick)
    const char *SDL_GetJoystickPath (SDL_Joystick *joystick)
    int SDL_GetJoystickPlayerIndex (SDL_Joystick *joystick)
    cbool SDL_SetJoystickPlayerIndex (SDL_Joystick *joystick, int player_index)
    SDL_GUID SDL_GetJoystickGUID (SDL_Joystick *joystick)
    Uint16 SDL_GetJoystickVendor (SDL_Joystick *joystick)
    Uint16 SDL_GetJoystickProduct (SDL_Joystick *joystick)
    Uint16 SDL_GetJoystickProductVersion (SDL_Joystick *joystick)
    Uint16 SDL_GetJoystickFirmwareVersion (SDL_Joystick *joystick)
    const char *SDL_GetJoystickSerial (SDL_Joystick *joystick)
    SDL_JoystickType SDL_GetJoystickType (SDL_Joystick *joystick)
    void SDL_GetJoystickGUIDInfo (SDL_GUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version, Uint16 *crc16)
    cbool SDL_JoystickConnected (SDL_Joystick *joystick)
    SDL_JoystickID SDL_GetJoystickID (SDL_Joystick *joystick)
    int SDL_GetNumJoystickAxes (SDL_Joystick *joystick)
    int SDL_GetNumJoystickBalls (SDL_Joystick *joystick)
    int SDL_GetNumJoystickHats (SDL_Joystick *joystick)
    int SDL_GetNumJoystickButtons (SDL_Joystick *joystick)
    void SDL_SetJoystickEventsEnabled (cbool enabled)
    cbool SDL_JoystickEventsEnabled ()
    void SDL_UpdateJoysticks ()
    Sint16 SDL_GetJoystickAxis (SDL_Joystick *joystick, int axis)
    cbool SDL_GetJoystickAxisInitialState (SDL_Joystick *joystick, int axis, Sint16 *state)
    cbool SDL_GetJoystickBall (SDL_Joystick *joystick, int ball, int *dx, int *dy)
    Uint8 SDL_GetJoystickHat (SDL_Joystick *joystick, int hat)
    cbool SDL_GetJoystickButton (SDL_Joystick *joystick, int button)
    cbool SDL_RumbleJoystick (SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
    cbool SDL_RumbleJoystickTriggers (SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms)
    cbool SDL_SetJoystickLED (SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue)
    cbool SDL_SendJoystickEffect (SDL_Joystick *joystick, const void *data, int size)
    void SDL_CloseJoystick (SDL_Joystick *joystick)
    SDL_JoystickConnectionState SDL_GetJoystickConnectionState (SDL_Joystick *joystick)
    SDL_PowerState SDL_GetJoystickPowerInfo (SDL_Joystick *joystick, int *percent)

    # Definitions from SDL3/SDL_gamepad.h
    cdef struct SDL_Gamepad
    cdef enum SDL_GamepadType:
        SDL_GAMEPAD_TYPE_UNKNOWN
        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_GAMECUBE
        SDL_GAMEPAD_TYPE_COUNT
    cdef enum SDL_GamepadButton:
        SDL_GAMEPAD_BUTTON_INVALID
        SDL_GAMEPAD_BUTTON_SOUTH
        SDL_GAMEPAD_BUTTON_EAST
        SDL_GAMEPAD_BUTTON_WEST
        SDL_GAMEPAD_BUTTON_NORTH
        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
        SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1
        SDL_GAMEPAD_BUTTON_LEFT_PADDLE1
        SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2
        SDL_GAMEPAD_BUTTON_LEFT_PADDLE2
        SDL_GAMEPAD_BUTTON_TOUCHPAD
        SDL_GAMEPAD_BUTTON_MISC2
        SDL_GAMEPAD_BUTTON_MISC3
        SDL_GAMEPAD_BUTTON_MISC4
        SDL_GAMEPAD_BUTTON_MISC5
        SDL_GAMEPAD_BUTTON_MISC6
        SDL_GAMEPAD_BUTTON_COUNT
    cdef enum SDL_GamepadButtonLabel:
        SDL_GAMEPAD_BUTTON_LABEL_UNKNOWN
        SDL_GAMEPAD_BUTTON_LABEL_A
        SDL_GAMEPAD_BUTTON_LABEL_B
        SDL_GAMEPAD_BUTTON_LABEL_X
        SDL_GAMEPAD_BUTTON_LABEL_Y
        SDL_GAMEPAD_BUTTON_LABEL_CROSS
        SDL_GAMEPAD_BUTTON_LABEL_CIRCLE
        SDL_GAMEPAD_BUTTON_LABEL_SQUARE
        SDL_GAMEPAD_BUTTON_LABEL_TRIANGLE
    cdef enum SDL_GamepadAxis:
        SDL_GAMEPAD_AXIS_INVALID
        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_COUNT
    cdef enum SDL_GamepadBindingType:
        SDL_GAMEPAD_BINDTYPE_NONE
        SDL_GAMEPAD_BINDTYPE_BUTTON
        SDL_GAMEPAD_BINDTYPE_AXIS
        SDL_GAMEPAD_BINDTYPE_HAT
    int SDL_AddGamepadMapping (const char *mapping)
    int SDL_AddGamepadMappingsFromIO (SDL_IOStream *src, cbool closeio)
    int SDL_AddGamepadMappingsFromFile (const char *file)
    cbool SDL_ReloadGamepadMappings ()
    char **SDL_GetGamepadMappings (int *count)
    char *SDL_GetGamepadMappingForGUID (SDL_GUID guid)
    char *SDL_GetGamepadMapping (SDL_Gamepad *gamepad)
    cbool SDL_SetGamepadMapping (SDL_JoystickID instance_id, const char *mapping)
    cbool SDL_HasGamepad ()
    SDL_JoystickID *SDL_GetGamepads (int *count)
    cbool SDL_IsGamepad (SDL_JoystickID instance_id)
    const char *SDL_GetGamepadNameForID (SDL_JoystickID instance_id)
    const char *SDL_GetGamepadPathForID (SDL_JoystickID instance_id)
    int SDL_GetGamepadPlayerIndexForID (SDL_JoystickID instance_id)
    SDL_GUID SDL_GetGamepadGUIDForID (SDL_JoystickID instance_id)
    Uint16 SDL_GetGamepadVendorForID (SDL_JoystickID instance_id)
    Uint16 SDL_GetGamepadProductForID (SDL_JoystickID instance_id)
    Uint16 SDL_GetGamepadProductVersionForID (SDL_JoystickID instance_id)
    SDL_GamepadType SDL_GetGamepadTypeForID (SDL_JoystickID instance_id)
    SDL_GamepadType SDL_GetRealGamepadTypeForID (SDL_JoystickID instance_id)
    char *SDL_GetGamepadMappingForID (SDL_JoystickID instance_id)
    SDL_Gamepad *SDL_OpenGamepad (SDL_JoystickID instance_id)
    SDL_Gamepad *SDL_GetGamepadFromID (SDL_JoystickID instance_id)
    SDL_Gamepad *SDL_GetGamepadFromPlayerIndex (int player_index)
    SDL_PropertiesID SDL_GetGamepadProperties (SDL_Gamepad *gamepad)
    SDL_JoystickID SDL_GetGamepadID (SDL_Gamepad *gamepad)
    const char *SDL_GetGamepadName (SDL_Gamepad *gamepad)
    const char *SDL_GetGamepadPath (SDL_Gamepad *gamepad)
    SDL_GamepadType SDL_GetGamepadType (SDL_Gamepad *gamepad)
    SDL_GamepadType SDL_GetRealGamepadType (SDL_Gamepad *gamepad)
    int SDL_GetGamepadPlayerIndex (SDL_Gamepad *gamepad)
    cbool SDL_SetGamepadPlayerIndex (SDL_Gamepad *gamepad, int player_index)
    Uint16 SDL_GetGamepadVendor (SDL_Gamepad *gamepad)
    Uint16 SDL_GetGamepadProduct (SDL_Gamepad *gamepad)
    Uint16 SDL_GetGamepadProductVersion (SDL_Gamepad *gamepad)
    Uint16 SDL_GetGamepadFirmwareVersion (SDL_Gamepad *gamepad)
    const char *SDL_GetGamepadSerial (SDL_Gamepad *gamepad)
    Uint64 SDL_GetGamepadSteamHandle (SDL_Gamepad *gamepad)
    SDL_JoystickConnectionState SDL_GetGamepadConnectionState (SDL_Gamepad *gamepad)
    SDL_PowerState SDL_GetGamepadPowerInfo (SDL_Gamepad *gamepad, int *percent)
    cbool SDL_GamepadConnected (SDL_Gamepad *gamepad)
    SDL_Joystick *SDL_GetGamepadJoystick (SDL_Gamepad *gamepad)
    void SDL_SetGamepadEventsEnabled (cbool enabled)
    cbool SDL_GamepadEventsEnabled ()
    ctypedef struct SDL_GamepadBinding
    SDL_GamepadBinding **SDL_GetGamepadBindings (SDL_Gamepad *gamepad, int *count)
    void SDL_UpdateGamepads ()
    SDL_GamepadType SDL_GetGamepadTypeFromString (const char *str)
    const char *SDL_GetGamepadStringForType (SDL_GamepadType type)
    SDL_GamepadAxis SDL_GetGamepadAxisFromString (const char *str)
    const char *SDL_GetGamepadStringForAxis (SDL_GamepadAxis axis)
    cbool SDL_GamepadHasAxis (SDL_Gamepad *gamepad, SDL_GamepadAxis axis)
    Sint16 SDL_GetGamepadAxis (SDL_Gamepad *gamepad, SDL_GamepadAxis axis)
    SDL_GamepadButton SDL_GetGamepadButtonFromString (const char *str)
    const char *SDL_GetGamepadStringForButton (SDL_GamepadButton button)
    cbool SDL_GamepadHasButton (SDL_Gamepad *gamepad, SDL_GamepadButton button)
    cbool SDL_GetGamepadButton (SDL_Gamepad *gamepad, SDL_GamepadButton button)
    SDL_GamepadButtonLabel SDL_GetGamepadButtonLabelForType (SDL_GamepadType type, SDL_GamepadButton button)
    SDL_GamepadButtonLabel SDL_GetGamepadButtonLabel (SDL_Gamepad *gamepad, SDL_GamepadButton button)
    int SDL_GetNumGamepadTouchpads (SDL_Gamepad *gamepad)
    int SDL_GetNumGamepadTouchpadFingers (SDL_Gamepad *gamepad, int touchpad)
    cbool SDL_GetGamepadTouchpadFinger (SDL_Gamepad *gamepad, int touchpad, int finger, cbool *down, float *x, float *y, float *pressure)
    cbool SDL_GamepadHasSensor (SDL_Gamepad *gamepad, SDL_SensorType type)
    cbool SDL_SetGamepadSensorEnabled (SDL_Gamepad *gamepad, SDL_SensorType type, cbool enabled)
    cbool SDL_GamepadSensorEnabled (SDL_Gamepad *gamepad, SDL_SensorType type)
    float SDL_GetGamepadSensorDataRate (SDL_Gamepad *gamepad, SDL_SensorType type)
    cbool SDL_GetGamepadSensorData (SDL_Gamepad *gamepad, SDL_SensorType type, float *data, int num_values)
    cbool SDL_RumbleGamepad (SDL_Gamepad *gamepad, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
    cbool SDL_RumbleGamepadTriggers (SDL_Gamepad *gamepad, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms)
    cbool SDL_SetGamepadLED (SDL_Gamepad *gamepad, Uint8 red, Uint8 green, Uint8 blue)
    cbool SDL_SendGamepadEffect (SDL_Gamepad *gamepad, const void *data, int size)
    void SDL_CloseGamepad (SDL_Gamepad *gamepad)
    const char *SDL_GetGamepadAppleSFSymbolsNameForButton (SDL_Gamepad *gamepad, SDL_GamepadButton button)
    const char *SDL_GetGamepadAppleSFSymbolsNameForAxis (SDL_Gamepad *gamepad, SDL_GamepadAxis axis)

    # Definitions from SDL3/SDL_scancode.h
    cdef enum SDL_Scancode:
        SDL_SCANCODE_UNKNOWN
        SDL_SCANCODE_A
        SDL_SCANCODE_B
        SDL_SCANCODE_C
        SDL_SCANCODE_D
        SDL_SCANCODE_E
        SDL_SCANCODE_F
        SDL_SCANCODE_G
        SDL_SCANCODE_H
        SDL_SCANCODE_I
        SDL_SCANCODE_J
        SDL_SCANCODE_K
        SDL_SCANCODE_L
        SDL_SCANCODE_M
        SDL_SCANCODE_N
        SDL_SCANCODE_O
        SDL_SCANCODE_P
        SDL_SCANCODE_Q
        SDL_SCANCODE_R
        SDL_SCANCODE_S
        SDL_SCANCODE_T
        SDL_SCANCODE_U
        SDL_SCANCODE_V
        SDL_SCANCODE_W
        SDL_SCANCODE_X
        SDL_SCANCODE_Y
        SDL_SCANCODE_Z
        SDL_SCANCODE_1
        SDL_SCANCODE_2
        SDL_SCANCODE_3
        SDL_SCANCODE_4
        SDL_SCANCODE_5
        SDL_SCANCODE_6
        SDL_SCANCODE_7
        SDL_SCANCODE_8
        SDL_SCANCODE_9
        SDL_SCANCODE_0
        SDL_SCANCODE_RETURN
        SDL_SCANCODE_ESCAPE
        SDL_SCANCODE_BACKSPACE
        SDL_SCANCODE_TAB
        SDL_SCANCODE_SPACE
        SDL_SCANCODE_MINUS
        SDL_SCANCODE_EQUALS
        SDL_SCANCODE_LEFTBRACKET
        SDL_SCANCODE_RIGHTBRACKET
        SDL_SCANCODE_BACKSLASH
        SDL_SCANCODE_NONUSHASH
        SDL_SCANCODE_SEMICOLON
        SDL_SCANCODE_APOSTROPHE
        SDL_SCANCODE_GRAVE
        SDL_SCANCODE_COMMA
        SDL_SCANCODE_PERIOD
        SDL_SCANCODE_SLASH
        SDL_SCANCODE_CAPSLOCK
        SDL_SCANCODE_F1
        SDL_SCANCODE_F2
        SDL_SCANCODE_F3
        SDL_SCANCODE_F4
        SDL_SCANCODE_F5
        SDL_SCANCODE_F6
        SDL_SCANCODE_F7
        SDL_SCANCODE_F8
        SDL_SCANCODE_F9
        SDL_SCANCODE_F10
        SDL_SCANCODE_F11
        SDL_SCANCODE_F12
        SDL_SCANCODE_PRINTSCREEN
        SDL_SCANCODE_SCROLLLOCK
        SDL_SCANCODE_PAUSE
        SDL_SCANCODE_INSERT
        SDL_SCANCODE_HOME
        SDL_SCANCODE_PAGEUP
        SDL_SCANCODE_DELETE
        SDL_SCANCODE_END
        SDL_SCANCODE_PAGEDOWN
        SDL_SCANCODE_RIGHT
        SDL_SCANCODE_LEFT
        SDL_SCANCODE_DOWN
        SDL_SCANCODE_UP
        SDL_SCANCODE_NUMLOCKCLEAR
        SDL_SCANCODE_KP_DIVIDE
        SDL_SCANCODE_KP_MULTIPLY
        SDL_SCANCODE_KP_MINUS
        SDL_SCANCODE_KP_PLUS
        SDL_SCANCODE_KP_ENTER
        SDL_SCANCODE_KP_1
        SDL_SCANCODE_KP_2
        SDL_SCANCODE_KP_3
        SDL_SCANCODE_KP_4
        SDL_SCANCODE_KP_5
        SDL_SCANCODE_KP_6
        SDL_SCANCODE_KP_7
        SDL_SCANCODE_KP_8
        SDL_SCANCODE_KP_9
        SDL_SCANCODE_KP_0
        SDL_SCANCODE_KP_PERIOD
        SDL_SCANCODE_NONUSBACKSLASH
        SDL_SCANCODE_APPLICATION
        SDL_SCANCODE_POWER
        SDL_SCANCODE_KP_EQUALS
        SDL_SCANCODE_F13
        SDL_SCANCODE_F14
        SDL_SCANCODE_F15
        SDL_SCANCODE_F16
        SDL_SCANCODE_F17
        SDL_SCANCODE_F18
        SDL_SCANCODE_F19
        SDL_SCANCODE_F20
        SDL_SCANCODE_F21
        SDL_SCANCODE_F22
        SDL_SCANCODE_F23
        SDL_SCANCODE_F24
        SDL_SCANCODE_EXECUTE
        SDL_SCANCODE_HELP
        SDL_SCANCODE_MENU
        SDL_SCANCODE_SELECT
        SDL_SCANCODE_STOP
        SDL_SCANCODE_AGAIN
        SDL_SCANCODE_UNDO
        SDL_SCANCODE_CUT
        SDL_SCANCODE_COPY
        SDL_SCANCODE_PASTE
        SDL_SCANCODE_FIND
        SDL_SCANCODE_MUTE
        SDL_SCANCODE_VOLUMEUP
        SDL_SCANCODE_VOLUMEDOWN
        SDL_SCANCODE_KP_COMMA
        SDL_SCANCODE_KP_EQUALSAS400
        SDL_SCANCODE_INTERNATIONAL1
        SDL_SCANCODE_INTERNATIONAL2
        SDL_SCANCODE_INTERNATIONAL3
        SDL_SCANCODE_INTERNATIONAL4
        SDL_SCANCODE_INTERNATIONAL5
        SDL_SCANCODE_INTERNATIONAL6
        SDL_SCANCODE_INTERNATIONAL7
        SDL_SCANCODE_INTERNATIONAL8
        SDL_SCANCODE_INTERNATIONAL9
        SDL_SCANCODE_LANG1
        SDL_SCANCODE_LANG2
        SDL_SCANCODE_LANG3
        SDL_SCANCODE_LANG4
        SDL_SCANCODE_LANG5
        SDL_SCANCODE_LANG6
        SDL_SCANCODE_LANG7
        SDL_SCANCODE_LANG8
        SDL_SCANCODE_LANG9
        SDL_SCANCODE_ALTERASE
        SDL_SCANCODE_SYSREQ
        SDL_SCANCODE_CANCEL
        SDL_SCANCODE_CLEAR
        SDL_SCANCODE_PRIOR
        SDL_SCANCODE_RETURN2
        SDL_SCANCODE_SEPARATOR
        SDL_SCANCODE_OUT
        SDL_SCANCODE_OPER
        SDL_SCANCODE_CLEARAGAIN
        SDL_SCANCODE_CRSEL
        SDL_SCANCODE_EXSEL
        SDL_SCANCODE_KP_00
        SDL_SCANCODE_KP_000
        SDL_SCANCODE_THOUSANDSSEPARATOR
        SDL_SCANCODE_DECIMALSEPARATOR
        SDL_SCANCODE_CURRENCYUNIT
        SDL_SCANCODE_CURRENCYSUBUNIT
        SDL_SCANCODE_KP_LEFTPAREN
        SDL_SCANCODE_KP_RIGHTPAREN
        SDL_SCANCODE_KP_LEFTBRACE
        SDL_SCANCODE_KP_RIGHTBRACE
        SDL_SCANCODE_KP_TAB
        SDL_SCANCODE_KP_BACKSPACE
        SDL_SCANCODE_KP_A
        SDL_SCANCODE_KP_B
        SDL_SCANCODE_KP_C
        SDL_SCANCODE_KP_D
        SDL_SCANCODE_KP_E
        SDL_SCANCODE_KP_F
        SDL_SCANCODE_KP_XOR
        SDL_SCANCODE_KP_POWER
        SDL_SCANCODE_KP_PERCENT
        SDL_SCANCODE_KP_LESS
        SDL_SCANCODE_KP_GREATER
        SDL_SCANCODE_KP_AMPERSAND
        SDL_SCANCODE_KP_DBLAMPERSAND
        SDL_SCANCODE_KP_VERTICALBAR
        SDL_SCANCODE_KP_DBLVERTICALBAR
        SDL_SCANCODE_KP_COLON
        SDL_SCANCODE_KP_HASH
        SDL_SCANCODE_KP_SPACE
        SDL_SCANCODE_KP_AT
        SDL_SCANCODE_KP_EXCLAM
        SDL_SCANCODE_KP_MEMSTORE
        SDL_SCANCODE_KP_MEMRECALL
        SDL_SCANCODE_KP_MEMCLEAR
        SDL_SCANCODE_KP_MEMADD
        SDL_SCANCODE_KP_MEMSUBTRACT
        SDL_SCANCODE_KP_MEMMULTIPLY
        SDL_SCANCODE_KP_MEMDIVIDE
        SDL_SCANCODE_KP_PLUSMINUS
        SDL_SCANCODE_KP_CLEAR
        SDL_SCANCODE_KP_CLEARENTRY
        SDL_SCANCODE_KP_BINARY
        SDL_SCANCODE_KP_OCTAL
        SDL_SCANCODE_KP_DECIMAL
        SDL_SCANCODE_KP_HEXADECIMAL
        SDL_SCANCODE_LCTRL
        SDL_SCANCODE_LSHIFT
        SDL_SCANCODE_LALT
        SDL_SCANCODE_LGUI
        SDL_SCANCODE_RCTRL
        SDL_SCANCODE_RSHIFT
        SDL_SCANCODE_RALT
        SDL_SCANCODE_RGUI
        SDL_SCANCODE_MODE
        SDL_SCANCODE_SLEEP
        SDL_SCANCODE_WAKE
        SDL_SCANCODE_CHANNEL_INCREMENT
        SDL_SCANCODE_CHANNEL_DECREMENT
        SDL_SCANCODE_MEDIA_PLAY
        SDL_SCANCODE_MEDIA_PAUSE
        SDL_SCANCODE_MEDIA_RECORD
        SDL_SCANCODE_MEDIA_FAST_FORWARD
        SDL_SCANCODE_MEDIA_REWIND
        SDL_SCANCODE_MEDIA_NEXT_TRACK
        SDL_SCANCODE_MEDIA_PREVIOUS_TRACK
        SDL_SCANCODE_MEDIA_STOP
        SDL_SCANCODE_MEDIA_EJECT
        SDL_SCANCODE_MEDIA_PLAY_PAUSE
        SDL_SCANCODE_MEDIA_SELECT
        SDL_SCANCODE_AC_NEW
        SDL_SCANCODE_AC_OPEN
        SDL_SCANCODE_AC_CLOSE
        SDL_SCANCODE_AC_EXIT
        SDL_SCANCODE_AC_SAVE
        SDL_SCANCODE_AC_PRINT
        SDL_SCANCODE_AC_PROPERTIES
        SDL_SCANCODE_AC_SEARCH
        SDL_SCANCODE_AC_HOME
        SDL_SCANCODE_AC_BACK
        SDL_SCANCODE_AC_FORWARD
        SDL_SCANCODE_AC_STOP
        SDL_SCANCODE_AC_REFRESH
        SDL_SCANCODE_AC_BOOKMARKS
        SDL_SCANCODE_SOFTLEFT
        SDL_SCANCODE_SOFTRIGHT
        SDL_SCANCODE_CALL
        SDL_SCANCODE_ENDCALL
        SDL_SCANCODE_RESERVED
        SDL_SCANCODE_COUNT

    # Definitions from SDL3/SDL_keycode.h
    ctypedef Uint32 SDL_Keycode
    ctypedef Uint16 SDL_Keymod

    # Definitions from SDL3/SDL_keyboard.h
    ctypedef Uint32 SDL_KeyboardID
    cbool SDL_HasKeyboard ()
    SDL_KeyboardID *SDL_GetKeyboards (int *count)
    const char *SDL_GetKeyboardNameForID (SDL_KeyboardID instance_id)
    SDL_Window *SDL_GetKeyboardFocus ()
    const cbool *SDL_GetKeyboardState (int *numkeys)
    void SDL_ResetKeyboard ()
    SDL_Keymod SDL_GetModState ()
    void SDL_SetModState (SDL_Keymod modstate)
    SDL_Keycode SDL_GetKeyFromScancode (SDL_Scancode scancode, SDL_Keymod modstate, cbool key_event)
    SDL_Scancode SDL_GetScancodeFromKey (SDL_Keycode key, SDL_Keymod *modstate)
    cbool SDL_SetScancodeName (SDL_Scancode scancode, const char *name)
    const char *SDL_GetScancodeName (SDL_Scancode scancode)
    SDL_Scancode SDL_GetScancodeFromName (const char *name)
    const char *SDL_GetKeyName (SDL_Keycode key)
    SDL_Keycode SDL_GetKeyFromName (const char *name)
    cbool SDL_StartTextInput (SDL_Window *window)
    cdef enum SDL_TextInputType:
        SDL_TEXTINPUT_TYPE_TEXT
        SDL_TEXTINPUT_TYPE_TEXT_NAME
        SDL_TEXTINPUT_TYPE_TEXT_EMAIL
        SDL_TEXTINPUT_TYPE_TEXT_USERNAME
        SDL_TEXTINPUT_TYPE_TEXT_PASSWORD_HIDDEN
        SDL_TEXTINPUT_TYPE_TEXT_PASSWORD_VISIBLE
        SDL_TEXTINPUT_TYPE_NUMBER
        SDL_TEXTINPUT_TYPE_NUMBER_PASSWORD_HIDDEN
        SDL_TEXTINPUT_TYPE_NUMBER_PASSWORD_VISIBLE
    cdef enum SDL_Capitalization:
        SDL_CAPITALIZE_NONE
        SDL_CAPITALIZE_SENTENCES
        SDL_CAPITALIZE_WORDS
        SDL_CAPITALIZE_LETTERS
    cbool SDL_StartTextInputWithProperties (SDL_Window *window, SDL_PropertiesID props)
    cbool SDL_TextInputActive (SDL_Window *window)
    cbool SDL_StopTextInput (SDL_Window *window)
    cbool SDL_ClearComposition (SDL_Window *window)
    cbool SDL_SetTextInputArea (SDL_Window *window, const SDL_Rect *rect, int cursor)
    cbool SDL_GetTextInputArea (SDL_Window *window, SDL_Rect *rect, int *cursor)
    cbool SDL_HasScreenKeyboardSupport ()
    cbool SDL_ScreenKeyboardShown (SDL_Window *window)

    # Definitions from SDL3/SDL_mouse.h
    ctypedef Uint32 SDL_MouseID
    cdef struct SDL_Cursor
    cdef enum SDL_SystemCursor:
        SDL_SYSTEM_CURSOR_DEFAULT
        SDL_SYSTEM_CURSOR_TEXT
        SDL_SYSTEM_CURSOR_WAIT
        SDL_SYSTEM_CURSOR_CROSSHAIR
        SDL_SYSTEM_CURSOR_PROGRESS
        SDL_SYSTEM_CURSOR_NWSE_RESIZE
        SDL_SYSTEM_CURSOR_NESW_RESIZE
        SDL_SYSTEM_CURSOR_EW_RESIZE
        SDL_SYSTEM_CURSOR_NS_RESIZE
        SDL_SYSTEM_CURSOR_MOVE
        SDL_SYSTEM_CURSOR_NOT_ALLOWED
        SDL_SYSTEM_CURSOR_POINTER
        SDL_SYSTEM_CURSOR_NW_RESIZE
        SDL_SYSTEM_CURSOR_N_RESIZE
        SDL_SYSTEM_CURSOR_NE_RESIZE
        SDL_SYSTEM_CURSOR_E_RESIZE
        SDL_SYSTEM_CURSOR_SE_RESIZE
        SDL_SYSTEM_CURSOR_S_RESIZE
        SDL_SYSTEM_CURSOR_SW_RESIZE
        SDL_SYSTEM_CURSOR_W_RESIZE
        SDL_SYSTEM_CURSOR_COUNT
    cdef enum SDL_MouseWheelDirection:
        SDL_MOUSEWHEEL_NORMAL
        SDL_MOUSEWHEEL_FLIPPED
    cdef struct SDL_CursorFrameInfo:
        SDL_Surface *surface
        Uint32 duration
    ctypedef Uint32 SDL_MouseButtonFlags
    ctypedef void (*SDL_MouseMotionTransformCallback)(void *userdata, Uint64 timestamp, SDL_Window *window, SDL_MouseID mouseID, float *x, float *y)
    cbool SDL_HasMouse ()
    SDL_MouseID *SDL_GetMice (int *count)
    const char *SDL_GetMouseNameForID (SDL_MouseID instance_id)
    SDL_Window *SDL_GetMouseFocus ()
    SDL_MouseButtonFlags SDL_GetMouseState (float *x, float *y)
    SDL_MouseButtonFlags SDL_GetGlobalMouseState (float *x, float *y)
    SDL_MouseButtonFlags SDL_GetRelativeMouseState (float *x, float *y)
    void SDL_WarpMouseInWindow (SDL_Window *window, float x, float y)
    cbool SDL_WarpMouseGlobal (float x, float y)
    cbool SDL_SetRelativeMouseTransform (SDL_MouseMotionTransformCallback callback, void *userdata)
    cbool SDL_SetWindowRelativeMouseMode (SDL_Window *window, cbool enabled)
    cbool SDL_GetWindowRelativeMouseMode (SDL_Window *window)
    cbool SDL_CaptureMouse (cbool enabled)
    SDL_Cursor *SDL_CreateCursor (const Uint8 *data, const Uint8 *mask, int w, int h, int hot_x, int hot_y)
    SDL_Cursor *SDL_CreateColorCursor (SDL_Surface *surface, int hot_x, int hot_y)
    SDL_Cursor *SDL_CreateAnimatedCursor (SDL_CursorFrameInfo *frames, int frame_count, int hot_x, int hot_y)
    SDL_Cursor *SDL_CreateSystemCursor (SDL_SystemCursor id)
    cbool SDL_SetCursor (SDL_Cursor *cursor)
    SDL_Cursor *SDL_GetCursor ()
    SDL_Cursor *SDL_GetDefaultCursor ()
    void SDL_DestroyCursor (SDL_Cursor *cursor)
    cbool SDL_ShowCursor ()
    cbool SDL_HideCursor ()
    cbool SDL_CursorVisible ()

    # Definitions from SDL3/SDL_touch.h
    ctypedef Uint64 SDL_TouchID
    ctypedef Uint64 SDL_FingerID
    cdef enum SDL_TouchDeviceType:
        SDL_TOUCH_DEVICE_INVALID
        SDL_TOUCH_DEVICE_DIRECT
        SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE
        SDL_TOUCH_DEVICE_INDIRECT_RELATIVE
    cdef struct SDL_Finger:
        SDL_FingerID id
        float x
        float y
        float pressure
    SDL_TouchID *SDL_GetTouchDevices (int *count)
    const char *SDL_GetTouchDeviceName (SDL_TouchID touchID)
    SDL_TouchDeviceType SDL_GetTouchDeviceType (SDL_TouchID touchID)
    SDL_Finger **SDL_GetTouchFingers (SDL_TouchID touchID, int *count)

    # Definitions from SDL3/SDL_pen.h
    ctypedef Uint32 SDL_PenID
    ctypedef Uint32 SDL_PenInputFlags
    cdef enum SDL_PenAxis:
        SDL_PEN_AXIS_PRESSURE
        SDL_PEN_AXIS_XTILT
        SDL_PEN_AXIS_YTILT
        SDL_PEN_AXIS_DISTANCE
        SDL_PEN_AXIS_ROTATION
        SDL_PEN_AXIS_SLIDER
        SDL_PEN_AXIS_TANGENTIAL_PRESSURE
        SDL_PEN_AXIS_COUNT
    cdef enum SDL_PenDeviceType:
        SDL_PEN_DEVICE_TYPE_INVALID
        SDL_PEN_DEVICE_TYPE_UNKNOWN
        SDL_PEN_DEVICE_TYPE_DIRECT
        SDL_PEN_DEVICE_TYPE_INDIRECT
    SDL_PenDeviceType SDL_GetPenDeviceType (SDL_PenID instance_id)

    # Definitions from SDL3/SDL_events.h
    cdef enum SDL_EventType:
        SDL_EVENT_FIRST
        SDL_EVENT_QUIT
        SDL_EVENT_TERMINATING
        SDL_EVENT_LOW_MEMORY
        SDL_EVENT_WILL_ENTER_BACKGROUND
        SDL_EVENT_DID_ENTER_BACKGROUND
        SDL_EVENT_WILL_ENTER_FOREGROUND
        SDL_EVENT_DID_ENTER_FOREGROUND
        SDL_EVENT_LOCALE_CHANGED
        SDL_EVENT_SYSTEM_THEME_CHANGED
        SDL_EVENT_DISPLAY_ORIENTATION
        SDL_EVENT_DISPLAY_ADDED
        SDL_EVENT_DISPLAY_REMOVED
        SDL_EVENT_DISPLAY_MOVED
        SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED
        SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED
        SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED
        SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED
        SDL_EVENT_DISPLAY_FIRST
        SDL_EVENT_DISPLAY_LAST
        SDL_EVENT_WINDOW_SHOWN
        SDL_EVENT_WINDOW_HIDDEN
        SDL_EVENT_WINDOW_EXPOSED
        SDL_EVENT_WINDOW_MOVED
        SDL_EVENT_WINDOW_RESIZED
        SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED
        SDL_EVENT_WINDOW_METAL_VIEW_RESIZED
        SDL_EVENT_WINDOW_MINIMIZED
        SDL_EVENT_WINDOW_MAXIMIZED
        SDL_EVENT_WINDOW_RESTORED
        SDL_EVENT_WINDOW_MOUSE_ENTER
        SDL_EVENT_WINDOW_MOUSE_LEAVE
        SDL_EVENT_WINDOW_FOCUS_GAINED
        SDL_EVENT_WINDOW_FOCUS_LOST
        SDL_EVENT_WINDOW_CLOSE_REQUESTED
        SDL_EVENT_WINDOW_HIT_TEST
        SDL_EVENT_WINDOW_ICCPROF_CHANGED
        SDL_EVENT_WINDOW_DISPLAY_CHANGED
        SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED
        SDL_EVENT_WINDOW_SAFE_AREA_CHANGED
        SDL_EVENT_WINDOW_OCCLUDED
        SDL_EVENT_WINDOW_ENTER_FULLSCREEN
        SDL_EVENT_WINDOW_LEAVE_FULLSCREEN
        SDL_EVENT_WINDOW_DESTROYED
        SDL_EVENT_WINDOW_HDR_STATE_CHANGED
        SDL_EVENT_WINDOW_FIRST
        SDL_EVENT_WINDOW_LAST
        SDL_EVENT_KEY_DOWN
        SDL_EVENT_KEY_UP
        SDL_EVENT_TEXT_EDITING
        SDL_EVENT_TEXT_INPUT
        SDL_EVENT_KEYMAP_CHANGED
        SDL_EVENT_KEYBOARD_ADDED
        SDL_EVENT_KEYBOARD_REMOVED
        SDL_EVENT_TEXT_EDITING_CANDIDATES
        SDL_EVENT_SCREEN_KEYBOARD_SHOWN
        SDL_EVENT_SCREEN_KEYBOARD_HIDDEN
        SDL_EVENT_MOUSE_MOTION
        SDL_EVENT_MOUSE_BUTTON_DOWN
        SDL_EVENT_MOUSE_BUTTON_UP
        SDL_EVENT_MOUSE_WHEEL
        SDL_EVENT_MOUSE_ADDED
        SDL_EVENT_MOUSE_REMOVED
        SDL_EVENT_JOYSTICK_AXIS_MOTION
        SDL_EVENT_JOYSTICK_BALL_MOTION
        SDL_EVENT_JOYSTICK_HAT_MOTION
        SDL_EVENT_JOYSTICK_BUTTON_DOWN
        SDL_EVENT_JOYSTICK_BUTTON_UP
        SDL_EVENT_JOYSTICK_ADDED
        SDL_EVENT_JOYSTICK_REMOVED
        SDL_EVENT_JOYSTICK_BATTERY_UPDATED
        SDL_EVENT_JOYSTICK_UPDATE_COMPLETE
        SDL_EVENT_GAMEPAD_AXIS_MOTION
        SDL_EVENT_GAMEPAD_BUTTON_DOWN
        SDL_EVENT_GAMEPAD_BUTTON_UP
        SDL_EVENT_GAMEPAD_ADDED
        SDL_EVENT_GAMEPAD_REMOVED
        SDL_EVENT_GAMEPAD_REMAPPED
        SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN
        SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION
        SDL_EVENT_GAMEPAD_TOUCHPAD_UP
        SDL_EVENT_GAMEPAD_SENSOR_UPDATE
        SDL_EVENT_GAMEPAD_UPDATE_COMPLETE
        SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED
        SDL_EVENT_FINGER_DOWN
        SDL_EVENT_FINGER_UP
        SDL_EVENT_FINGER_MOTION
        SDL_EVENT_FINGER_CANCELED
        SDL_EVENT_PINCH_BEGIN
        SDL_EVENT_PINCH_UPDATE
        SDL_EVENT_PINCH_END
        SDL_EVENT_CLIPBOARD_UPDATE
        SDL_EVENT_DROP_FILE
        SDL_EVENT_DROP_TEXT
        SDL_EVENT_DROP_BEGIN
        SDL_EVENT_DROP_COMPLETE
        SDL_EVENT_DROP_POSITION
        SDL_EVENT_AUDIO_DEVICE_ADDED
        SDL_EVENT_AUDIO_DEVICE_REMOVED
        SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED
        SDL_EVENT_SENSOR_UPDATE
        SDL_EVENT_PEN_PROXIMITY_IN
        SDL_EVENT_PEN_PROXIMITY_OUT
        SDL_EVENT_PEN_DOWN
        SDL_EVENT_PEN_UP
        SDL_EVENT_PEN_BUTTON_DOWN
        SDL_EVENT_PEN_BUTTON_UP
        SDL_EVENT_PEN_MOTION
        SDL_EVENT_PEN_AXIS
        SDL_EVENT_CAMERA_DEVICE_ADDED
        SDL_EVENT_CAMERA_DEVICE_REMOVED
        SDL_EVENT_CAMERA_DEVICE_APPROVED
        SDL_EVENT_CAMERA_DEVICE_DENIED
        SDL_EVENT_RENDER_TARGETS_RESET
        SDL_EVENT_RENDER_DEVICE_RESET
        SDL_EVENT_RENDER_DEVICE_LOST
        SDL_EVENT_PRIVATE0
        SDL_EVENT_PRIVATE1
        SDL_EVENT_PRIVATE2
        SDL_EVENT_PRIVATE3
        SDL_EVENT_POLL_SENTINEL
        SDL_EVENT_USER
        SDL_EVENT_LAST
        SDL_EVENT_ENUM_PADDING
    cdef struct SDL_CommonEvent:
        Uint32 type
        Uint32 reserved
        Uint64 timestamp
    cdef struct SDL_DisplayEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_DisplayID displayID
        Sint32 data1
        Sint32 data2
    cdef struct SDL_WindowEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        Sint32 data1
        Sint32 data2
    cdef struct SDL_KeyboardDeviceEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_KeyboardID which
    cdef struct SDL_KeyboardEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_KeyboardID which
        SDL_Scancode scancode
        SDL_Keycode key
        SDL_Keymod mod
        Uint16 raw
        cbool down
        cbool repeat
    cdef struct SDL_TextEditingEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        const char *text
        Sint32 start
        Sint32 length
    cdef struct SDL_TextEditingCandidatesEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        const char *const *candidates
        Sint32 num_candidates
        Sint32 selected_candidate
        cbool horizontal
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
    cdef struct SDL_TextInputEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        const char *text
    cdef struct SDL_MouseDeviceEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_MouseID which
    cdef struct SDL_MouseMotionEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_MouseID which
        SDL_MouseButtonFlags state
        float x
        float y
        float xrel
        float yrel
    cdef struct SDL_MouseButtonEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_MouseID which
        Uint8 button
        cbool down
        Uint8 clicks
        Uint8 padding
        float x
        float y
    cdef struct SDL_MouseWheelEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_MouseID which
        float x
        float y
        SDL_MouseWheelDirection direction
        float mouse_x
        float mouse_y
        Sint32 integer_x
        Sint32 integer_y
    cdef struct SDL_JoyAxisEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Uint8 axis
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
        Sint16 value
        Uint16 padding4
    cdef struct SDL_JoyBallEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Uint8 ball
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
        Sint16 xrel
        Sint16 yrel
    cdef struct SDL_JoyHatEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Uint8 hat
        Uint8 value
        Uint8 padding1
        Uint8 padding2
    cdef struct SDL_JoyButtonEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Uint8 button
        cbool down
        Uint8 padding1
        Uint8 padding2
    cdef struct SDL_JoyDeviceEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
    cdef struct SDL_JoyBatteryEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        SDL_PowerState state
        int percent
    cdef struct SDL_GamepadAxisEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Uint8 axis
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
        Sint16 value
        Uint16 padding4
    cdef struct SDL_GamepadButtonEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Uint8 button
        cbool down
        Uint8 padding1
        Uint8 padding2
    cdef struct SDL_GamepadDeviceEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
    cdef struct SDL_GamepadTouchpadEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Sint32 touchpad
        Sint32 finger
        float x
        float y
        float pressure
    cdef struct SDL_GamepadSensorEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_JoystickID which
        Sint32 sensor
        float data [ 3 ]
        Uint64 sensor_timestamp
    cdef struct SDL_AudioDeviceEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_AudioDeviceID which
        cbool recording
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
    cdef struct SDL_CameraDeviceEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_CameraID which
    cdef struct SDL_RenderEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
    cdef struct SDL_TouchFingerEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_TouchID touchID
        SDL_FingerID fingerID
        float x
        float y
        float dx
        float dy
        float pressure
        SDL_WindowID windowID
    cdef struct SDL_PinchFingerEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        float scale
        SDL_WindowID windowID
    cdef struct SDL_PenProximityEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_PenID which
    cdef struct SDL_PenMotionEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_PenID which
        SDL_PenInputFlags pen_state
        float x
        float y
    cdef struct SDL_PenTouchEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_PenID which
        SDL_PenInputFlags pen_state
        float x
        float y
        cbool eraser
        cbool down
    cdef struct SDL_PenButtonEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_PenID which
        SDL_PenInputFlags pen_state
        float x
        float y
        Uint8 button
        cbool down
    cdef struct SDL_PenAxisEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        SDL_PenID which
        SDL_PenInputFlags pen_state
        float x
        float y
        SDL_PenAxis axis
        float value
    cdef struct SDL_DropEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        float x
        float y
        const char *source
        const char *data
    cdef struct SDL_ClipboardEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        cbool owner
        Sint32 num_mime_types
        const char **mime_types
    cdef struct SDL_SensorEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
        SDL_SensorID which
        float data [ 6 ]
        Uint64 sensor_timestamp
    cdef struct SDL_QuitEvent:
        SDL_EventType type
        Uint32 reserved
        Uint64 timestamp
    cdef struct SDL_UserEvent:
        Uint32 type
        Uint32 reserved
        Uint64 timestamp
        SDL_WindowID windowID
        Sint32 code
        void *data1
        void *data2
    cdef union SDL_Event:
        Uint32 type
        SDL_CommonEvent common
        SDL_DisplayEvent display
        SDL_WindowEvent window
        SDL_KeyboardDeviceEvent kdevice
        SDL_KeyboardEvent key
        SDL_TextEditingEvent edit
        SDL_TextEditingCandidatesEvent edit_candidates
        SDL_TextInputEvent text
        SDL_MouseDeviceEvent mdevice
        SDL_MouseMotionEvent motion
        SDL_MouseButtonEvent button
        SDL_MouseWheelEvent wheel
        SDL_JoyDeviceEvent jdevice
        SDL_JoyAxisEvent jaxis
        SDL_JoyBallEvent jball
        SDL_JoyHatEvent jhat
        SDL_JoyButtonEvent jbutton
        SDL_JoyBatteryEvent jbattery
        SDL_GamepadDeviceEvent gdevice
        SDL_GamepadAxisEvent gaxis
        SDL_GamepadButtonEvent gbutton
        SDL_GamepadTouchpadEvent gtouchpad
        SDL_GamepadSensorEvent gsensor
        SDL_AudioDeviceEvent adevice
        SDL_CameraDeviceEvent cdevice
        SDL_SensorEvent sensor
        SDL_QuitEvent quit
        SDL_UserEvent user
        SDL_TouchFingerEvent tfinger
        SDL_PinchFingerEvent pinch
        SDL_PenProximityEvent pproximity
        SDL_PenTouchEvent ptouch
        SDL_PenMotionEvent pmotion
        SDL_PenButtonEvent pbutton
        SDL_PenAxisEvent paxis
        SDL_RenderEvent render
        SDL_DropEvent drop
        SDL_ClipboardEvent clipboard
        Uint8 padding [ 128 ]
    void SDL_PumpEvents ()
    cdef enum SDL_EventAction:
        SDL_ADDEVENT
        SDL_PEEKEVENT
        SDL_GETEVENT
    int SDL_PeepEvents (SDL_Event *events, int numevents, SDL_EventAction action, Uint32 minType, Uint32 maxType)
    cbool SDL_HasEvent (Uint32 type)
    cbool SDL_HasEvents (Uint32 minType, Uint32 maxType)
    void SDL_FlushEvent (Uint32 type)
    void SDL_FlushEvents (Uint32 minType, Uint32 maxType)
    cbool SDL_PollEvent (SDL_Event *event)
    cbool SDL_WaitEvent (SDL_Event *event)
    cbool SDL_WaitEventTimeout (SDL_Event *event, Sint32 timeoutMS)
    cbool SDL_PushEvent (SDL_Event *event)
    # Skipping empty typedef bool
    ctypedef cbool (*SDL_EventFilter)(void *userdata, SDL_Event *event)
    void SDL_SetEventFilter (SDL_EventFilter filter, void *userdata)
    cbool SDL_GetEventFilter (SDL_EventFilter *filter, void **userdata)
    cbool SDL_AddEventWatch (SDL_EventFilter filter, void *userdata)
    void SDL_RemoveEventWatch (SDL_EventFilter filter, void *userdata)
    void SDL_FilterEvents (SDL_EventFilter filter, void *userdata)
    void SDL_SetEventEnabled (Uint32 type, cbool enabled)
    cbool SDL_EventEnabled (Uint32 type)
    Uint32 SDL_RegisterEvents (int numevents)
    SDL_Window *SDL_GetWindowFromEvent (const SDL_Event *event)
    int SDL_GetEventDescription (const SDL_Event *event, char *buf, int buflen)

    # Definitions from SDL3/SDL_filesystem.h
    const char *SDL_GetBasePath ()
    char *SDL_GetPrefPath (const char *org, const char *app)
    cdef enum SDL_Folder:
        SDL_FOLDER_HOME
        SDL_FOLDER_DESKTOP
        SDL_FOLDER_DOCUMENTS
        SDL_FOLDER_DOWNLOADS
        SDL_FOLDER_MUSIC
        SDL_FOLDER_PICTURES
        SDL_FOLDER_PUBLICSHARE
        SDL_FOLDER_SAVEDGAMES
        SDL_FOLDER_SCREENSHOTS
        SDL_FOLDER_TEMPLATES
        SDL_FOLDER_VIDEOS
        SDL_FOLDER_COUNT
    const char *SDL_GetUserFolder (SDL_Folder folder)
    cdef enum SDL_PathType:
        SDL_PATHTYPE_NONE
        SDL_PATHTYPE_FILE
        SDL_PATHTYPE_DIRECTORY
        SDL_PATHTYPE_OTHER
    cdef struct SDL_PathInfo:
        SDL_PathType type
        Uint64 size
        SDL_Time create_time
        SDL_Time modify_time
        SDL_Time access_time
    ctypedef Uint32 SDL_GlobFlags
    cbool SDL_CreateDirectory (const char *path)
    cdef enum SDL_EnumerationResult:
        SDL_ENUM_CONTINUE
        SDL_ENUM_SUCCESS
        SDL_ENUM_FAILURE
    ctypedef SDL_EnumerationResult (*SDL_EnumerateDirectoryCallback)(void *userdata, const char *dirname, const char *fname)
    cbool SDL_EnumerateDirectory (const char *path, SDL_EnumerateDirectoryCallback callback, void *userdata)
    cbool SDL_RemovePath (const char *path)
    cbool SDL_RenamePath (const char *oldpath, const char *newpath)
    cbool SDL_CopyFile (const char *oldpath, const char *newpath)
    cbool SDL_GetPathInfo (const char *path, SDL_PathInfo *info)
    char **SDL_GlobDirectory (const char *path, const char *pattern, SDL_GlobFlags flags, int *count)
    char *SDL_GetCurrentDirectory ()

    # Definitions from SDL3/SDL_gpu.h
    cdef struct SDL_GPUDevice
    cdef struct SDL_GPUBuffer
    cdef struct SDL_GPUTransferBuffer
    cdef struct SDL_GPUTexture
    cdef struct SDL_GPUSampler
    cdef struct SDL_GPUShader
    cdef struct SDL_GPUComputePipeline
    cdef struct SDL_GPUGraphicsPipeline
    cdef struct SDL_GPUCommandBuffer
    cdef struct SDL_GPURenderPass
    cdef struct SDL_GPUComputePass
    cdef struct SDL_GPUCopyPass
    cdef struct SDL_GPUFence
    cdef enum SDL_GPUPrimitiveType:
        SDL_GPU_PRIMITIVETYPE_TRIANGLELIST
        SDL_GPU_PRIMITIVETYPE_TRIANGLESTRIP
        SDL_GPU_PRIMITIVETYPE_LINELIST
        SDL_GPU_PRIMITIVETYPE_LINESTRIP
        SDL_GPU_PRIMITIVETYPE_POINTLIST
    cdef enum SDL_GPULoadOp:
        SDL_GPU_LOADOP_LOAD
        SDL_GPU_LOADOP_CLEAR
        SDL_GPU_LOADOP_DONT_CARE
    cdef enum SDL_GPUStoreOp:
        SDL_GPU_STOREOP_STORE
        SDL_GPU_STOREOP_DONT_CARE
        SDL_GPU_STOREOP_RESOLVE
        SDL_GPU_STOREOP_RESOLVE_AND_STORE
    cdef enum SDL_GPUIndexElementSize:
        SDL_GPU_INDEXELEMENTSIZE_16BIT
        SDL_GPU_INDEXELEMENTSIZE_32BIT
    cdef enum SDL_GPUTextureFormat:
        SDL_GPU_TEXTUREFORMAT_INVALID
        SDL_GPU_TEXTUREFORMAT_A8_UNORM
        SDL_GPU_TEXTUREFORMAT_R8_UNORM
        SDL_GPU_TEXTUREFORMAT_R8G8_UNORM
        SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM
        SDL_GPU_TEXTUREFORMAT_R16_UNORM
        SDL_GPU_TEXTUREFORMAT_R16G16_UNORM
        SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UNORM
        SDL_GPU_TEXTUREFORMAT_R10G10B10A2_UNORM
        SDL_GPU_TEXTUREFORMAT_B5G6R5_UNORM
        SDL_GPU_TEXTUREFORMAT_B5G5R5A1_UNORM
        SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM
        SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM
        SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM
        SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM
        SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM
        SDL_GPU_TEXTUREFORMAT_BC4_R_UNORM
        SDL_GPU_TEXTUREFORMAT_BC5_RG_UNORM
        SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM
        SDL_GPU_TEXTUREFORMAT_BC6H_RGB_FLOAT
        SDL_GPU_TEXTUREFORMAT_BC6H_RGB_UFLOAT
        SDL_GPU_TEXTUREFORMAT_R8_SNORM
        SDL_GPU_TEXTUREFORMAT_R8G8_SNORM
        SDL_GPU_TEXTUREFORMAT_R8G8B8A8_SNORM
        SDL_GPU_TEXTUREFORMAT_R16_SNORM
        SDL_GPU_TEXTUREFORMAT_R16G16_SNORM
        SDL_GPU_TEXTUREFORMAT_R16G16B16A16_SNORM
        SDL_GPU_TEXTUREFORMAT_R16_FLOAT
        SDL_GPU_TEXTUREFORMAT_R16G16_FLOAT
        SDL_GPU_TEXTUREFORMAT_R16G16B16A16_FLOAT
        SDL_GPU_TEXTUREFORMAT_R32_FLOAT
        SDL_GPU_TEXTUREFORMAT_R32G32_FLOAT
        SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT
        SDL_GPU_TEXTUREFORMAT_R11G11B10_UFLOAT
        SDL_GPU_TEXTUREFORMAT_R8_UINT
        SDL_GPU_TEXTUREFORMAT_R8G8_UINT
        SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT
        SDL_GPU_TEXTUREFORMAT_R16_UINT
        SDL_GPU_TEXTUREFORMAT_R16G16_UINT
        SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT
        SDL_GPU_TEXTUREFORMAT_R32_UINT
        SDL_GPU_TEXTUREFORMAT_R32G32_UINT
        SDL_GPU_TEXTUREFORMAT_R32G32B32A32_UINT
        SDL_GPU_TEXTUREFORMAT_R8_INT
        SDL_GPU_TEXTUREFORMAT_R8G8_INT
        SDL_GPU_TEXTUREFORMAT_R8G8B8A8_INT
        SDL_GPU_TEXTUREFORMAT_R16_INT
        SDL_GPU_TEXTUREFORMAT_R16G16_INT
        SDL_GPU_TEXTUREFORMAT_R16G16B16A16_INT
        SDL_GPU_TEXTUREFORMAT_R32_INT
        SDL_GPU_TEXTUREFORMAT_R32G32_INT
        SDL_GPU_TEXTUREFORMAT_R32G32B32A32_INT
        SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_D16_UNORM
        SDL_GPU_TEXTUREFORMAT_D24_UNORM
        SDL_GPU_TEXTUREFORMAT_D32_FLOAT
        SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT
        SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT
        SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM
        SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB
        SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT
        SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT
    ctypedef Uint32 SDL_GPUTextureUsageFlags
    cdef enum SDL_GPUTextureType:
        SDL_GPU_TEXTURETYPE_2D
        SDL_GPU_TEXTURETYPE_2D_ARRAY
        SDL_GPU_TEXTURETYPE_3D
        SDL_GPU_TEXTURETYPE_CUBE
        SDL_GPU_TEXTURETYPE_CUBE_ARRAY
    cdef enum SDL_GPUSampleCount:
        SDL_GPU_SAMPLECOUNT_1
        SDL_GPU_SAMPLECOUNT_2
        SDL_GPU_SAMPLECOUNT_4
        SDL_GPU_SAMPLECOUNT_8
    cdef enum SDL_GPUCubeMapFace:
        SDL_GPU_CUBEMAPFACE_POSITIVEX
        SDL_GPU_CUBEMAPFACE_NEGATIVEX
        SDL_GPU_CUBEMAPFACE_POSITIVEY
        SDL_GPU_CUBEMAPFACE_NEGATIVEY
        SDL_GPU_CUBEMAPFACE_POSITIVEZ
        SDL_GPU_CUBEMAPFACE_NEGATIVEZ
    ctypedef Uint32 SDL_GPUBufferUsageFlags
    cdef enum SDL_GPUTransferBufferUsage:
        SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD
        SDL_GPU_TRANSFERBUFFERUSAGE_DOWNLOAD
    cdef enum SDL_GPUShaderStage:
        SDL_GPU_SHADERSTAGE_VERTEX
        SDL_GPU_SHADERSTAGE_FRAGMENT
    ctypedef Uint32 SDL_GPUShaderFormat
    cdef enum SDL_GPUVertexElementFormat:
        SDL_GPU_VERTEXELEMENTFORMAT_INVALID
        SDL_GPU_VERTEXELEMENTFORMAT_INT
        SDL_GPU_VERTEXELEMENTFORMAT_INT2
        SDL_GPU_VERTEXELEMENTFORMAT_INT3
        SDL_GPU_VERTEXELEMENTFORMAT_INT4
        SDL_GPU_VERTEXELEMENTFORMAT_UINT
        SDL_GPU_VERTEXELEMENTFORMAT_UINT2
        SDL_GPU_VERTEXELEMENTFORMAT_UINT3
        SDL_GPU_VERTEXELEMENTFORMAT_UINT4
        SDL_GPU_VERTEXELEMENTFORMAT_FLOAT
        SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2
        SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3
        SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4
        SDL_GPU_VERTEXELEMENTFORMAT_BYTE2
        SDL_GPU_VERTEXELEMENTFORMAT_BYTE4
        SDL_GPU_VERTEXELEMENTFORMAT_UBYTE2
        SDL_GPU_VERTEXELEMENTFORMAT_UBYTE4
        SDL_GPU_VERTEXELEMENTFORMAT_BYTE2_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_BYTE4_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_UBYTE2_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_UBYTE4_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_SHORT2
        SDL_GPU_VERTEXELEMENTFORMAT_SHORT4
        SDL_GPU_VERTEXELEMENTFORMAT_USHORT2
        SDL_GPU_VERTEXELEMENTFORMAT_USHORT4
        SDL_GPU_VERTEXELEMENTFORMAT_SHORT2_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_SHORT4_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_USHORT2_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_USHORT4_NORM
        SDL_GPU_VERTEXELEMENTFORMAT_HALF2
        SDL_GPU_VERTEXELEMENTFORMAT_HALF4
    cdef enum SDL_GPUVertexInputRate:
        SDL_GPU_VERTEXINPUTRATE_VERTEX
        SDL_GPU_VERTEXINPUTRATE_INSTANCE
    cdef enum SDL_GPUFillMode:
        SDL_GPU_FILLMODE_FILL
        SDL_GPU_FILLMODE_LINE
    cdef enum SDL_GPUCullMode:
        SDL_GPU_CULLMODE_NONE
        SDL_GPU_CULLMODE_FRONT
        SDL_GPU_CULLMODE_BACK
    cdef enum SDL_GPUFrontFace:
        SDL_GPU_FRONTFACE_COUNTER_CLOCKWISE
        SDL_GPU_FRONTFACE_CLOCKWISE
    cdef enum SDL_GPUCompareOp:
        SDL_GPU_COMPAREOP_INVALID
        SDL_GPU_COMPAREOP_NEVER
        SDL_GPU_COMPAREOP_LESS
        SDL_GPU_COMPAREOP_EQUAL
        SDL_GPU_COMPAREOP_LESS_OR_EQUAL
        SDL_GPU_COMPAREOP_GREATER
        SDL_GPU_COMPAREOP_NOT_EQUAL
        SDL_GPU_COMPAREOP_GREATER_OR_EQUAL
        SDL_GPU_COMPAREOP_ALWAYS
    cdef enum SDL_GPUStencilOp:
        SDL_GPU_STENCILOP_INVALID
        SDL_GPU_STENCILOP_KEEP
        SDL_GPU_STENCILOP_ZERO
        SDL_GPU_STENCILOP_REPLACE
        SDL_GPU_STENCILOP_INCREMENT_AND_CLAMP
        SDL_GPU_STENCILOP_DECREMENT_AND_CLAMP
        SDL_GPU_STENCILOP_INVERT
        SDL_GPU_STENCILOP_INCREMENT_AND_WRAP
        SDL_GPU_STENCILOP_DECREMENT_AND_WRAP
    cdef enum SDL_GPUBlendOp:
        SDL_GPU_BLENDOP_INVALID
        SDL_GPU_BLENDOP_ADD
        SDL_GPU_BLENDOP_SUBTRACT
        SDL_GPU_BLENDOP_REVERSE_SUBTRACT
        SDL_GPU_BLENDOP_MIN
        SDL_GPU_BLENDOP_MAX
    cdef enum SDL_GPUBlendFactor:
        SDL_GPU_BLENDFACTOR_INVALID
        SDL_GPU_BLENDFACTOR_ZERO
        SDL_GPU_BLENDFACTOR_ONE
        SDL_GPU_BLENDFACTOR_SRC_COLOR
        SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_COLOR
        SDL_GPU_BLENDFACTOR_DST_COLOR
        SDL_GPU_BLENDFACTOR_ONE_MINUS_DST_COLOR
        SDL_GPU_BLENDFACTOR_SRC_ALPHA
        SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA
        SDL_GPU_BLENDFACTOR_DST_ALPHA
        SDL_GPU_BLENDFACTOR_ONE_MINUS_DST_ALPHA
        SDL_GPU_BLENDFACTOR_CONSTANT_COLOR
        SDL_GPU_BLENDFACTOR_ONE_MINUS_CONSTANT_COLOR
        SDL_GPU_BLENDFACTOR_SRC_ALPHA_SATURATE
    ctypedef Uint8 SDL_GPUColorComponentFlags
    cdef enum SDL_GPUFilter:
        SDL_GPU_FILTER_NEAREST
        SDL_GPU_FILTER_LINEAR
    cdef enum SDL_GPUSamplerMipmapMode:
        SDL_GPU_SAMPLERMIPMAPMODE_NEAREST
        SDL_GPU_SAMPLERMIPMAPMODE_LINEAR
    cdef enum SDL_GPUSamplerAddressMode:
        SDL_GPU_SAMPLERADDRESSMODE_REPEAT
        SDL_GPU_SAMPLERADDRESSMODE_MIRRORED_REPEAT
        SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE
    cdef enum SDL_GPUPresentMode:
        SDL_GPU_PRESENTMODE_VSYNC
        SDL_GPU_PRESENTMODE_IMMEDIATE
        SDL_GPU_PRESENTMODE_MAILBOX
    cdef enum SDL_GPUSwapchainComposition:
        SDL_GPU_SWAPCHAINCOMPOSITION_SDR
        SDL_GPU_SWAPCHAINCOMPOSITION_SDR_LINEAR
        SDL_GPU_SWAPCHAINCOMPOSITION_HDR_EXTENDED_LINEAR
        SDL_GPU_SWAPCHAINCOMPOSITION_HDR10_ST2084
    cdef struct SDL_GPUViewport:
        float x
        float y
        float w
        float h
        float min_depth
        float max_depth
    cdef struct SDL_GPUTextureTransferInfo:
        SDL_GPUTransferBuffer *transfer_buffer
        Uint32 offset
        Uint32 pixels_per_row
        Uint32 rows_per_layer
    cdef struct SDL_GPUTransferBufferLocation:
        SDL_GPUTransferBuffer *transfer_buffer
        Uint32 offset
    cdef struct SDL_GPUTextureLocation:
        SDL_GPUTexture *texture
        Uint32 mip_level
        Uint32 layer
        Uint32 x
        Uint32 y
        Uint32 z
    cdef struct SDL_GPUTextureRegion:
        SDL_GPUTexture *texture
        Uint32 mip_level
        Uint32 layer
        Uint32 x
        Uint32 y
        Uint32 z
        Uint32 w
        Uint32 h
        Uint32 d
    cdef struct SDL_GPUBlitRegion:
        SDL_GPUTexture *texture
        Uint32 mip_level
        Uint32 layer_or_depth_plane
        Uint32 x
        Uint32 y
        Uint32 w
        Uint32 h
    cdef struct SDL_GPUBufferLocation:
        SDL_GPUBuffer *buffer
        Uint32 offset
    cdef struct SDL_GPUBufferRegion:
        SDL_GPUBuffer *buffer
        Uint32 offset
        Uint32 size
    cdef struct SDL_GPUIndirectDrawCommand:
        Uint32 num_vertices
        Uint32 num_instances
        Uint32 first_vertex
        Uint32 first_instance
    cdef struct SDL_GPUIndexedIndirectDrawCommand:
        Uint32 num_indices
        Uint32 num_instances
        Uint32 first_index
        Sint32 vertex_offset
        Uint32 first_instance
    cdef struct SDL_GPUIndirectDispatchCommand:
        Uint32 groupcount_x
        Uint32 groupcount_y
        Uint32 groupcount_z
    cdef struct SDL_GPUSamplerCreateInfo:
        SDL_GPUFilter min_filter
        SDL_GPUFilter mag_filter
        SDL_GPUSamplerMipmapMode mipmap_mode
        SDL_GPUSamplerAddressMode address_mode_u
        SDL_GPUSamplerAddressMode address_mode_v
        SDL_GPUSamplerAddressMode address_mode_w
        float mip_lod_bias
        float max_anisotropy
        SDL_GPUCompareOp compare_op
        float min_lod
        float max_lod
        cbool enable_anisotropy
        cbool enable_compare
        Uint8 padding1
        Uint8 padding2
        SDL_PropertiesID props
    cdef struct SDL_GPUVertexBufferDescription:
        Uint32 slot
        Uint32 pitch
        SDL_GPUVertexInputRate input_rate
        Uint32 instance_step_rate
    cdef struct SDL_GPUVertexAttribute:
        Uint32 location
        Uint32 buffer_slot
        SDL_GPUVertexElementFormat format
        Uint32 offset
    cdef struct SDL_GPUVertexInputState:
        const SDL_GPUVertexBufferDescription *vertex_buffer_descriptions
        Uint32 num_vertex_buffers
        const SDL_GPUVertexAttribute *vertex_attributes
        Uint32 num_vertex_attributes
    cdef struct SDL_GPUStencilOpState:
        SDL_GPUStencilOp fail_op
        SDL_GPUStencilOp pass_op
        SDL_GPUStencilOp depth_fail_op
        SDL_GPUCompareOp compare_op
    cdef struct SDL_GPUColorTargetBlendState:
        SDL_GPUBlendFactor src_color_blendfactor
        SDL_GPUBlendFactor dst_color_blendfactor
        SDL_GPUBlendOp color_blend_op
        SDL_GPUBlendFactor src_alpha_blendfactor
        SDL_GPUBlendFactor dst_alpha_blendfactor
        SDL_GPUBlendOp alpha_blend_op
        SDL_GPUColorComponentFlags color_write_mask
        cbool enable_blend
        cbool enable_color_write_mask
        Uint8 padding1
        Uint8 padding2
    cdef struct SDL_GPUShaderCreateInfo:
        size_t code_size
        const Uint8 *code
        const char *entrypoint
        SDL_GPUShaderFormat format
        SDL_GPUShaderStage stage
        Uint32 num_samplers
        Uint32 num_storage_textures
        Uint32 num_storage_buffers
        Uint32 num_uniform_buffers
        SDL_PropertiesID props
    cdef struct SDL_GPUTextureCreateInfo:
        SDL_GPUTextureType type
        SDL_GPUTextureFormat format
        SDL_GPUTextureUsageFlags usage
        Uint32 width
        Uint32 height
        Uint32 layer_count_or_depth
        Uint32 num_levels
        SDL_GPUSampleCount sample_count
        SDL_PropertiesID props
    cdef struct SDL_GPUBufferCreateInfo:
        SDL_GPUBufferUsageFlags usage
        Uint32 size
        SDL_PropertiesID props
    cdef struct SDL_GPUTransferBufferCreateInfo:
        SDL_GPUTransferBufferUsage usage
        Uint32 size
        SDL_PropertiesID props
    cdef struct SDL_GPURasterizerState:
        SDL_GPUFillMode fill_mode
        SDL_GPUCullMode cull_mode
        SDL_GPUFrontFace front_face
        float depth_bias_constant_factor
        float depth_bias_clamp
        float depth_bias_slope_factor
        cbool enable_depth_bias
        cbool enable_depth_clip
        Uint8 padding1
        Uint8 padding2
    cdef struct SDL_GPUMultisampleState:
        SDL_GPUSampleCount sample_count
        Uint32 sample_mask
        cbool enable_mask
        cbool enable_alpha_to_coverage
        Uint8 padding2
        Uint8 padding3
    cdef struct SDL_GPUDepthStencilState:
        SDL_GPUCompareOp compare_op
        SDL_GPUStencilOpState back_stencil_state
        SDL_GPUStencilOpState front_stencil_state
        Uint8 compare_mask
        Uint8 write_mask
        cbool enable_depth_test
        cbool enable_depth_write
        cbool enable_stencil_test
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
    cdef struct SDL_GPUColorTargetDescription:
        SDL_GPUTextureFormat format
        SDL_GPUColorTargetBlendState blend_state
    cdef struct SDL_GPUGraphicsPipelineTargetInfo:
        const SDL_GPUColorTargetDescription *color_target_descriptions
        Uint32 num_color_targets
        SDL_GPUTextureFormat depth_stencil_format
        cbool has_depth_stencil_target
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
    cdef struct SDL_GPUGraphicsPipelineCreateInfo:
        SDL_GPUShader *vertex_shader
        SDL_GPUShader *fragment_shader
        SDL_GPUVertexInputState vertex_input_state
        SDL_GPUPrimitiveType primitive_type
        SDL_GPURasterizerState rasterizer_state
        SDL_GPUMultisampleState multisample_state
        SDL_GPUDepthStencilState depth_stencil_state
        SDL_GPUGraphicsPipelineTargetInfo target_info
        SDL_PropertiesID props
    cdef struct SDL_GPUComputePipelineCreateInfo:
        size_t code_size
        const Uint8 *code
        const char *entrypoint
        SDL_GPUShaderFormat format
        Uint32 num_samplers
        Uint32 num_readonly_storage_textures
        Uint32 num_readonly_storage_buffers
        Uint32 num_readwrite_storage_textures
        Uint32 num_readwrite_storage_buffers
        Uint32 num_uniform_buffers
        Uint32 threadcount_x
        Uint32 threadcount_y
        Uint32 threadcount_z
        SDL_PropertiesID props
    cdef struct SDL_GPUColorTargetInfo:
        SDL_GPUTexture *texture
        Uint32 mip_level
        Uint32 layer_or_depth_plane
        SDL_FColor clear_color
        SDL_GPULoadOp load_op
        SDL_GPUStoreOp store_op
        SDL_GPUTexture *resolve_texture
        Uint32 resolve_mip_level
        Uint32 resolve_layer
        cbool cycle
        cbool cycle_resolve_texture
        Uint8 padding1
        Uint8 padding2
    cdef struct SDL_GPUDepthStencilTargetInfo:
        SDL_GPUTexture *texture
        float clear_depth
        SDL_GPULoadOp load_op
        SDL_GPUStoreOp store_op
        SDL_GPULoadOp stencil_load_op
        SDL_GPUStoreOp stencil_store_op
        cbool cycle
        Uint8 clear_stencil
        Uint8 mip_level
        Uint8 layer
    cdef struct SDL_GPUBlitInfo:
        SDL_GPUBlitRegion source
        SDL_GPUBlitRegion destination
        SDL_GPULoadOp load_op
        SDL_FColor clear_color
        SDL_FlipMode flip_mode
        SDL_GPUFilter filter
        cbool cycle
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
    cdef struct SDL_GPUBufferBinding:
        SDL_GPUBuffer *buffer
        Uint32 offset
    cdef struct SDL_GPUTextureSamplerBinding:
        SDL_GPUTexture *texture
        SDL_GPUSampler *sampler
    cdef struct SDL_GPUStorageBufferReadWriteBinding:
        SDL_GPUBuffer *buffer
        cbool cycle
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
    cdef struct SDL_GPUStorageTextureReadWriteBinding:
        SDL_GPUTexture *texture
        Uint32 mip_level
        Uint32 layer
        cbool cycle
        Uint8 padding1
        Uint8 padding2
        Uint8 padding3
    cbool SDL_GPUSupportsShaderFormats (SDL_GPUShaderFormat format_flags, const char *name)
    cbool SDL_GPUSupportsProperties (SDL_PropertiesID props)
    SDL_GPUDevice *SDL_CreateGPUDevice (SDL_GPUShaderFormat format_flags, cbool debug_mode, const char *name)
    SDL_GPUDevice *SDL_CreateGPUDeviceWithProperties (SDL_PropertiesID props)
    cdef struct SDL_GPUVulkanOptions:
        Uint32 vulkan_api_version
        void *feature_list
        void *vulkan_10_physical_device_features
        Uint32 device_extension_count
        const char **device_extension_names
        Uint32 instance_extension_count
        const char **instance_extension_names
    void SDL_DestroyGPUDevice (SDL_GPUDevice *device)
    int SDL_GetNumGPUDrivers ()
    const char *SDL_GetGPUDriver (int index)
    const char *SDL_GetGPUDeviceDriver (SDL_GPUDevice *device)
    SDL_GPUShaderFormat SDL_GetGPUShaderFormats (SDL_GPUDevice *device)
    SDL_PropertiesID SDL_GetGPUDeviceProperties (SDL_GPUDevice *device)
    SDL_GPUComputePipeline *SDL_CreateGPUComputePipeline (SDL_GPUDevice *device, const SDL_GPUComputePipelineCreateInfo *createinfo)
    SDL_GPUGraphicsPipeline *SDL_CreateGPUGraphicsPipeline (SDL_GPUDevice *device, const SDL_GPUGraphicsPipelineCreateInfo *createinfo)
    SDL_GPUSampler *SDL_CreateGPUSampler (SDL_GPUDevice *device, const SDL_GPUSamplerCreateInfo *createinfo)
    SDL_GPUShader *SDL_CreateGPUShader (SDL_GPUDevice *device, const SDL_GPUShaderCreateInfo *createinfo)
    SDL_GPUTexture *SDL_CreateGPUTexture (SDL_GPUDevice *device, const SDL_GPUTextureCreateInfo *createinfo)
    SDL_GPUBuffer *SDL_CreateGPUBuffer (SDL_GPUDevice *device, const SDL_GPUBufferCreateInfo *createinfo)
    SDL_GPUTransferBuffer *SDL_CreateGPUTransferBuffer (SDL_GPUDevice *device, const SDL_GPUTransferBufferCreateInfo *createinfo)
    void SDL_SetGPUBufferName (SDL_GPUDevice *device, SDL_GPUBuffer *buffer, const char *text)
    void SDL_SetGPUTextureName (SDL_GPUDevice *device, SDL_GPUTexture *texture, const char *text)
    void SDL_InsertGPUDebugLabel (SDL_GPUCommandBuffer *command_buffer, const char *text)
    void SDL_PushGPUDebugGroup (SDL_GPUCommandBuffer *command_buffer, const char *name)
    void SDL_PopGPUDebugGroup (SDL_GPUCommandBuffer *command_buffer)
    void SDL_ReleaseGPUTexture (SDL_GPUDevice *device, SDL_GPUTexture *texture)
    void SDL_ReleaseGPUSampler (SDL_GPUDevice *device, SDL_GPUSampler *sampler)
    void SDL_ReleaseGPUBuffer (SDL_GPUDevice *device, SDL_GPUBuffer *buffer)
    void SDL_ReleaseGPUTransferBuffer (SDL_GPUDevice *device, SDL_GPUTransferBuffer *transfer_buffer)
    void SDL_ReleaseGPUComputePipeline (SDL_GPUDevice *device, SDL_GPUComputePipeline *compute_pipeline)
    void SDL_ReleaseGPUShader (SDL_GPUDevice *device, SDL_GPUShader *shader)
    void SDL_ReleaseGPUGraphicsPipeline (SDL_GPUDevice *device, SDL_GPUGraphicsPipeline *graphics_pipeline)
    SDL_GPUCommandBuffer *SDL_AcquireGPUCommandBuffer (SDL_GPUDevice *device)
    void SDL_PushGPUVertexUniformData (SDL_GPUCommandBuffer *command_buffer, Uint32 slot_index, const void *data, Uint32 length)
    void SDL_PushGPUFragmentUniformData (SDL_GPUCommandBuffer *command_buffer, Uint32 slot_index, const void *data, Uint32 length)
    void SDL_PushGPUComputeUniformData (SDL_GPUCommandBuffer *command_buffer, Uint32 slot_index, const void *data, Uint32 length)
    SDL_GPURenderPass *SDL_BeginGPURenderPass (SDL_GPUCommandBuffer *command_buffer, const SDL_GPUColorTargetInfo *color_target_infos, Uint32 num_color_targets, const SDL_GPUDepthStencilTargetInfo *depth_stencil_target_info)
    void SDL_BindGPUGraphicsPipeline (SDL_GPURenderPass *render_pass, SDL_GPUGraphicsPipeline *graphics_pipeline)
    void SDL_SetGPUViewport (SDL_GPURenderPass *render_pass, const SDL_GPUViewport *viewport)
    void SDL_SetGPUScissor (SDL_GPURenderPass *render_pass, const SDL_Rect *scissor)
    void SDL_SetGPUBlendConstants (SDL_GPURenderPass *render_pass, SDL_FColor blend_constants)
    void SDL_SetGPUStencilReference (SDL_GPURenderPass *render_pass, Uint8 reference)
    void SDL_BindGPUVertexBuffers (SDL_GPURenderPass *render_pass, Uint32 first_slot, const SDL_GPUBufferBinding *bindings, Uint32 num_bindings)
    void SDL_BindGPUIndexBuffer (SDL_GPURenderPass *render_pass, const SDL_GPUBufferBinding *binding, SDL_GPUIndexElementSize index_element_size)
    void SDL_BindGPUVertexSamplers (SDL_GPURenderPass *render_pass, Uint32 first_slot, const SDL_GPUTextureSamplerBinding *texture_sampler_bindings, Uint32 num_bindings)
    void SDL_BindGPUVertexStorageTextures (SDL_GPURenderPass *render_pass, Uint32 first_slot, SDL_GPUTexture *const *storage_textures, Uint32 num_bindings)
    void SDL_BindGPUVertexStorageBuffers (SDL_GPURenderPass *render_pass, Uint32 first_slot, SDL_GPUBuffer *const *storage_buffers, Uint32 num_bindings)
    void SDL_BindGPUFragmentSamplers (SDL_GPURenderPass *render_pass, Uint32 first_slot, const SDL_GPUTextureSamplerBinding *texture_sampler_bindings, Uint32 num_bindings)
    void SDL_BindGPUFragmentStorageTextures (SDL_GPURenderPass *render_pass, Uint32 first_slot, SDL_GPUTexture *const *storage_textures, Uint32 num_bindings)
    void SDL_BindGPUFragmentStorageBuffers (SDL_GPURenderPass *render_pass, Uint32 first_slot, SDL_GPUBuffer *const *storage_buffers, Uint32 num_bindings)
    void SDL_DrawGPUIndexedPrimitives (SDL_GPURenderPass *render_pass, Uint32 num_indices, Uint32 num_instances, Uint32 first_index, Sint32 vertex_offset, Uint32 first_instance)
    void SDL_DrawGPUPrimitives (SDL_GPURenderPass *render_pass, Uint32 num_vertices, Uint32 num_instances, Uint32 first_vertex, Uint32 first_instance)
    void SDL_DrawGPUPrimitivesIndirect (SDL_GPURenderPass *render_pass, SDL_GPUBuffer *buffer, Uint32 offset, Uint32 draw_count)
    void SDL_DrawGPUIndexedPrimitivesIndirect (SDL_GPURenderPass *render_pass, SDL_GPUBuffer *buffer, Uint32 offset, Uint32 draw_count)
    void SDL_EndGPURenderPass (SDL_GPURenderPass *render_pass)
    SDL_GPUComputePass *SDL_BeginGPUComputePass (SDL_GPUCommandBuffer *command_buffer, const SDL_GPUStorageTextureReadWriteBinding *storage_texture_bindings, Uint32 num_storage_texture_bindings, const SDL_GPUStorageBufferReadWriteBinding *storage_buffer_bindings, Uint32 num_storage_buffer_bindings)
    void SDL_BindGPUComputePipeline (SDL_GPUComputePass *compute_pass, SDL_GPUComputePipeline *compute_pipeline)
    void SDL_BindGPUComputeSamplers (SDL_GPUComputePass *compute_pass, Uint32 first_slot, const SDL_GPUTextureSamplerBinding *texture_sampler_bindings, Uint32 num_bindings)
    void SDL_BindGPUComputeStorageTextures (SDL_GPUComputePass *compute_pass, Uint32 first_slot, SDL_GPUTexture *const *storage_textures, Uint32 num_bindings)
    void SDL_BindGPUComputeStorageBuffers (SDL_GPUComputePass *compute_pass, Uint32 first_slot, SDL_GPUBuffer *const *storage_buffers, Uint32 num_bindings)
    void SDL_DispatchGPUCompute (SDL_GPUComputePass *compute_pass, Uint32 groupcount_x, Uint32 groupcount_y, Uint32 groupcount_z)
    void SDL_DispatchGPUComputeIndirect (SDL_GPUComputePass *compute_pass, SDL_GPUBuffer *buffer, Uint32 offset)
    void SDL_EndGPUComputePass (SDL_GPUComputePass *compute_pass)
    void *SDL_MapGPUTransferBuffer (SDL_GPUDevice *device, SDL_GPUTransferBuffer *transfer_buffer, cbool cycle)
    void SDL_UnmapGPUTransferBuffer (SDL_GPUDevice *device, SDL_GPUTransferBuffer *transfer_buffer)
    SDL_GPUCopyPass *SDL_BeginGPUCopyPass (SDL_GPUCommandBuffer *command_buffer)
    void SDL_UploadToGPUTexture (SDL_GPUCopyPass *copy_pass, const SDL_GPUTextureTransferInfo *source, const SDL_GPUTextureRegion *destination, cbool cycle)
    void SDL_UploadToGPUBuffer (SDL_GPUCopyPass *copy_pass, const SDL_GPUTransferBufferLocation *source, const SDL_GPUBufferRegion *destination, cbool cycle)
    void SDL_CopyGPUTextureToTexture (SDL_GPUCopyPass *copy_pass, const SDL_GPUTextureLocation *source, const SDL_GPUTextureLocation *destination, Uint32 w, Uint32 h, Uint32 d, cbool cycle)
    void SDL_CopyGPUBufferToBuffer (SDL_GPUCopyPass *copy_pass, const SDL_GPUBufferLocation *source, const SDL_GPUBufferLocation *destination, Uint32 size, cbool cycle)
    void SDL_DownloadFromGPUTexture (SDL_GPUCopyPass *copy_pass, const SDL_GPUTextureRegion *source, const SDL_GPUTextureTransferInfo *destination)
    void SDL_DownloadFromGPUBuffer (SDL_GPUCopyPass *copy_pass, const SDL_GPUBufferRegion *source, const SDL_GPUTransferBufferLocation *destination)
    void SDL_EndGPUCopyPass (SDL_GPUCopyPass *copy_pass)
    void SDL_GenerateMipmapsForGPUTexture (SDL_GPUCommandBuffer *command_buffer, SDL_GPUTexture *texture)
    void SDL_BlitGPUTexture (SDL_GPUCommandBuffer *command_buffer, const SDL_GPUBlitInfo *info)
    cbool SDL_WindowSupportsGPUSwapchainComposition (SDL_GPUDevice *device, SDL_Window *window, SDL_GPUSwapchainComposition swapchain_composition)
    cbool SDL_WindowSupportsGPUPresentMode (SDL_GPUDevice *device, SDL_Window *window, SDL_GPUPresentMode present_mode)
    cbool SDL_ClaimWindowForGPUDevice (SDL_GPUDevice *device, SDL_Window *window)
    void SDL_ReleaseWindowFromGPUDevice (SDL_GPUDevice *device, SDL_Window *window)
    cbool SDL_SetGPUSwapchainParameters (SDL_GPUDevice *device, SDL_Window *window, SDL_GPUSwapchainComposition swapchain_composition, SDL_GPUPresentMode present_mode)
    cbool SDL_SetGPUAllowedFramesInFlight (SDL_GPUDevice *device, Uint32 allowed_frames_in_flight)
    SDL_GPUTextureFormat SDL_GetGPUSwapchainTextureFormat (SDL_GPUDevice *device, SDL_Window *window)
    cbool SDL_AcquireGPUSwapchainTexture (SDL_GPUCommandBuffer *command_buffer, SDL_Window *window, SDL_GPUTexture **swapchain_texture, Uint32 *swapchain_texture_width, Uint32 *swapchain_texture_height)
    cbool SDL_WaitForGPUSwapchain (SDL_GPUDevice *device, SDL_Window *window)
    cbool SDL_WaitAndAcquireGPUSwapchainTexture (SDL_GPUCommandBuffer *command_buffer, SDL_Window *window, SDL_GPUTexture **swapchain_texture, Uint32 *swapchain_texture_width, Uint32 *swapchain_texture_height)
    cbool SDL_SubmitGPUCommandBuffer (SDL_GPUCommandBuffer *command_buffer)
    SDL_GPUFence *SDL_SubmitGPUCommandBufferAndAcquireFence (SDL_GPUCommandBuffer *command_buffer)
    cbool SDL_CancelGPUCommandBuffer (SDL_GPUCommandBuffer *command_buffer)
    cbool SDL_WaitForGPUIdle (SDL_GPUDevice *device)
    cbool SDL_WaitForGPUFences (SDL_GPUDevice *device, cbool wait_all, SDL_GPUFence *const *fences, Uint32 num_fences)
    cbool SDL_QueryGPUFence (SDL_GPUDevice *device, SDL_GPUFence *fence)
    void SDL_ReleaseGPUFence (SDL_GPUDevice *device, SDL_GPUFence *fence)
    Uint32 SDL_GPUTextureFormatTexelBlockSize (SDL_GPUTextureFormat format)
    cbool SDL_GPUTextureSupportsFormat (SDL_GPUDevice *device, SDL_GPUTextureFormat format, SDL_GPUTextureType type, SDL_GPUTextureUsageFlags usage)
    cbool SDL_GPUTextureSupportsSampleCount (SDL_GPUDevice *device, SDL_GPUTextureFormat format, SDL_GPUSampleCount sample_count)
    Uint32 SDL_CalculateGPUTextureFormatSize (SDL_GPUTextureFormat format, Uint32 width, Uint32 height, Uint32 depth_or_layer_count)
    SDL_PixelFormat SDL_GetPixelFormatFromGPUTextureFormat (SDL_GPUTextureFormat format)
    SDL_GPUTextureFormat SDL_GetGPUTextureFormatFromPixelFormat (SDL_PixelFormat format)

    # Definitions from SDL3/SDL_haptic.h
    cdef struct SDL_Haptic
    ctypedef Uint16 SDL_HapticEffectType
    ctypedef Uint8 SDL_HapticDirectionType
    ctypedef int SDL_HapticEffectID
    cdef struct SDL_HapticDirection:
        SDL_HapticDirectionType type
        Sint32 dir [ 3 ]
    cdef struct SDL_HapticConstant:
        SDL_HapticEffectType type
        SDL_HapticDirection direction
        Uint32 length
        Uint16 delay
        Uint16 button
        Uint16 interval
        Sint16 level
        Uint16 attack_length
        Uint16 attack_level
        Uint16 fade_length
        Uint16 fade_level
    cdef struct SDL_HapticPeriodic:
        SDL_HapticEffectType type
        SDL_HapticDirection direction
        Uint32 length
        Uint16 delay
        Uint16 button
        Uint16 interval
        Uint16 period
        Sint16 magnitude
        Sint16 offset
        Uint16 phase
        Uint16 attack_length
        Uint16 attack_level
        Uint16 fade_length
        Uint16 fade_level
    cdef struct SDL_HapticCondition:
        SDL_HapticEffectType type
        SDL_HapticDirection direction
        Uint32 length
        Uint16 delay
        Uint16 button
        Uint16 interval
        Uint16 right_sat [ 3 ]
        Uint16 left_sat [ 3 ]
        Sint16 right_coeff [ 3 ]
        Sint16 left_coeff [ 3 ]
        Uint16 deadband [ 3 ]
        Sint16 center [ 3 ]
    cdef struct SDL_HapticRamp:
        SDL_HapticEffectType type
        SDL_HapticDirection direction
        Uint32 length
        Uint16 delay
        Uint16 button
        Uint16 interval
        Sint16 start
        Sint16 end
        Uint16 attack_length
        Uint16 attack_level
        Uint16 fade_length
        Uint16 fade_level
    cdef struct SDL_HapticLeftRight:
        SDL_HapticEffectType type
        Uint32 length
        Uint16 large_magnitude
        Uint16 small_magnitude
    cdef struct SDL_HapticCustom:
        SDL_HapticEffectType type
        SDL_HapticDirection direction
        Uint32 length
        Uint16 delay
        Uint16 button
        Uint16 interval
        Uint8 channels
        Uint16 period
        Uint16 samples
        Uint16 *data
        Uint16 attack_length
        Uint16 attack_level
        Uint16 fade_length
        Uint16 fade_level
    cdef union SDL_HapticEffect:
        SDL_HapticEffectType type
        SDL_HapticConstant constant
        SDL_HapticPeriodic periodic
        SDL_HapticCondition condition
        SDL_HapticRamp ramp
        SDL_HapticLeftRight leftright
        SDL_HapticCustom custom
    ctypedef Uint32 SDL_HapticID
    SDL_HapticID *SDL_GetHaptics (int *count)
    const char *SDL_GetHapticNameForID (SDL_HapticID instance_id)
    SDL_Haptic *SDL_OpenHaptic (SDL_HapticID instance_id)
    SDL_Haptic *SDL_GetHapticFromID (SDL_HapticID instance_id)
    SDL_HapticID SDL_GetHapticID (SDL_Haptic *haptic)
    const char *SDL_GetHapticName (SDL_Haptic *haptic)
    cbool SDL_IsMouseHaptic ()
    SDL_Haptic *SDL_OpenHapticFromMouse ()
    cbool SDL_IsJoystickHaptic (SDL_Joystick *joystick)
    SDL_Haptic *SDL_OpenHapticFromJoystick (SDL_Joystick *joystick)
    void SDL_CloseHaptic (SDL_Haptic *haptic)
    int SDL_GetMaxHapticEffects (SDL_Haptic *haptic)
    int SDL_GetMaxHapticEffectsPlaying (SDL_Haptic *haptic)
    Uint32 SDL_GetHapticFeatures (SDL_Haptic *haptic)
    int SDL_GetNumHapticAxes (SDL_Haptic *haptic)
    cbool SDL_HapticEffectSupported (SDL_Haptic *haptic, const SDL_HapticEffect *effect)
    SDL_HapticEffectID SDL_CreateHapticEffect (SDL_Haptic *haptic, const SDL_HapticEffect *effect)
    cbool SDL_UpdateHapticEffect (SDL_Haptic *haptic, SDL_HapticEffectID effect, const SDL_HapticEffect *data)
    cbool SDL_RunHapticEffect (SDL_Haptic *haptic, SDL_HapticEffectID effect, Uint32 iterations)
    cbool SDL_StopHapticEffect (SDL_Haptic *haptic, SDL_HapticEffectID effect)
    void SDL_DestroyHapticEffect (SDL_Haptic *haptic, SDL_HapticEffectID effect)
    cbool SDL_GetHapticEffectStatus (SDL_Haptic *haptic, SDL_HapticEffectID effect)
    cbool SDL_SetHapticGain (SDL_Haptic *haptic, int gain)
    cbool SDL_SetHapticAutocenter (SDL_Haptic *haptic, int autocenter)
    cbool SDL_PauseHaptic (SDL_Haptic *haptic)
    cbool SDL_ResumeHaptic (SDL_Haptic *haptic)
    cbool SDL_StopHapticEffects (SDL_Haptic *haptic)
    cbool SDL_HapticRumbleSupported (SDL_Haptic *haptic)
    cbool SDL_InitHapticRumble (SDL_Haptic *haptic)
    cbool SDL_PlayHapticRumble (SDL_Haptic *haptic, float strength, Uint32 length)
    cbool SDL_StopHapticRumble (SDL_Haptic *haptic)

    # Definitions from SDL3/SDL_hidapi.h
    cdef struct SDL_hid_device
    cdef enum SDL_hid_bus_type:
        SDL_HID_API_BUS_UNKNOWN
        SDL_HID_API_BUS_USB
        SDL_HID_API_BUS_BLUETOOTH
        SDL_HID_API_BUS_I2C
        SDL_HID_API_BUS_SPI
    cdef struct SDL_hid_device_info:
        char *path
        unsigned short vendor_id
        unsigned short product_id
        wchar_t *serial_number
        unsigned short release_number
        wchar_t *manufacturer_string
        wchar_t *product_string
        unsigned short usage_page
        unsigned short usage
        int interface_number
        int interface_class
        int interface_subclass
        int interface_protocol
        SDL_hid_bus_type bus_type
        SDL_hid_device_info *next
    int SDL_hid_init ()
    int SDL_hid_exit ()
    Uint32 SDL_hid_device_change_count ()
    SDL_hid_device_info *SDL_hid_enumerate (unsigned short vendor_id, unsigned short product_id)
    void SDL_hid_free_enumeration (SDL_hid_device_info *devs)
    SDL_hid_device *SDL_hid_open (unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number)
    SDL_hid_device *SDL_hid_open_path (const char *path)
    SDL_PropertiesID SDL_hid_get_properties (SDL_hid_device *dev)
    int SDL_hid_write (SDL_hid_device *dev, const unsigned char *data, size_t length)
    int SDL_hid_read_timeout (SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds)
    int SDL_hid_read (SDL_hid_device *dev, unsigned char *data, size_t length)
    int SDL_hid_set_nonblocking (SDL_hid_device *dev, int nonblock)
    int SDL_hid_send_feature_report (SDL_hid_device *dev, const unsigned char *data, size_t length)
    int SDL_hid_get_feature_report (SDL_hid_device *dev, unsigned char *data, size_t length)
    int SDL_hid_get_input_report (SDL_hid_device *dev, unsigned char *data, size_t length)
    int SDL_hid_close (SDL_hid_device *dev)
    int SDL_hid_get_manufacturer_string (SDL_hid_device *dev, wchar_t *string, size_t maxlen)
    int SDL_hid_get_product_string (SDL_hid_device *dev, wchar_t *string, size_t maxlen)
    int SDL_hid_get_serial_number_string (SDL_hid_device *dev, wchar_t *string, size_t maxlen)
    int SDL_hid_get_indexed_string (SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen)
    SDL_hid_device_info *SDL_hid_get_device_info (SDL_hid_device *dev)
    int SDL_hid_get_report_descriptor (SDL_hid_device *dev, unsigned char *buf, size_t buf_size)
    void SDL_hid_ble_scan (cbool active)

    # Definitions from SDL3/SDL_hints.h
    cdef enum SDL_HintPriority:
        SDL_HINT_DEFAULT
        SDL_HINT_NORMAL
        SDL_HINT_OVERRIDE
    cbool SDL_SetHintWithPriority (const char *name, const char *value, SDL_HintPriority priority)
    cbool SDL_SetHint (const char *name, const char *value)
    cbool SDL_ResetHint (const char *name)
    void SDL_ResetHints ()
    const char *SDL_GetHint (const char *name)
    cbool SDL_GetHintBoolean (const char *name, cbool default_value)
    ctypedef void (*SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue)
    cbool SDL_AddHintCallback (const char *name, SDL_HintCallback callback, void *userdata)
    void SDL_RemoveHintCallback (const char *name, SDL_HintCallback callback, void *userdata)

    # Definitions from SDL3/SDL_init.h
    ctypedef Uint32 SDL_InitFlags
    cdef enum SDL_AppResult:
        SDL_APP_CONTINUE
        SDL_APP_SUCCESS
        SDL_APP_FAILURE
    ctypedef SDL_AppResult (*SDL_AppInit_func)(void **appstate, int argc, char *argv [ ])
    ctypedef SDL_AppResult (*SDL_AppIterate_func)(void *appstate)
    ctypedef SDL_AppResult (*SDL_AppEvent_func)(void *appstate, SDL_Event *event)
    ctypedef void (*SDL_AppQuit_func)(void *appstate, SDL_AppResult result)
    cbool SDL_Init (SDL_InitFlags flags)
    cbool SDL_InitSubSystem (SDL_InitFlags flags)
    void SDL_QuitSubSystem (SDL_InitFlags flags)
    SDL_InitFlags SDL_WasInit (SDL_InitFlags flags)
    void SDL_Quit ()
    cbool SDL_IsMainThread ()
    ctypedef void (*SDL_MainThreadCallback)(void *userdata)
    cbool SDL_RunOnMainThread (SDL_MainThreadCallback callback, void *userdata, cbool wait_complete)
    cbool SDL_SetAppMetadata (const char *appname, const char *appversion, const char *appidentifier)
    cbool SDL_SetAppMetadataProperty (const char *name, const char *value)
    const char *SDL_GetAppMetadataProperty (const char *name)

    # Definitions from SDL3/SDL_loadso.h
    cdef struct SDL_SharedObject
    SDL_SharedObject *SDL_LoadObject (const char *sofile)
    SDL_FunctionPointer SDL_LoadFunction (SDL_SharedObject *handle, const char *name)
    void SDL_UnloadObject (SDL_SharedObject *handle)

    # Definitions from SDL3/SDL_locale.h
    cdef struct SDL_Locale:
        const char *language
        const char *country
    SDL_Locale **SDL_GetPreferredLocales (int *count)

    # Definitions from SDL3/SDL_log.h
    cdef enum SDL_LogCategory:
        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
        SDL_LOG_CATEGORY_GPU
        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
        SDL_LOG_CATEGORY_CUSTOM
    cdef enum SDL_LogPriority:
        SDL_LOG_PRIORITY_INVALID
        SDL_LOG_PRIORITY_TRACE
        SDL_LOG_PRIORITY_VERBOSE
        SDL_LOG_PRIORITY_DEBUG
        SDL_LOG_PRIORITY_INFO
        SDL_LOG_PRIORITY_WARN
        SDL_LOG_PRIORITY_ERROR
        SDL_LOG_PRIORITY_CRITICAL
        SDL_LOG_PRIORITY_COUNT
    void SDL_SetLogPriorities (SDL_LogPriority priority)
    void SDL_SetLogPriority (int category, SDL_LogPriority priority)
    SDL_LogPriority SDL_GetLogPriority (int category)
    void SDL_ResetLogPriorities ()
    cbool SDL_SetLogPriorityPrefix (SDL_LogPriority priority, const char *prefix)
    void SDL_Log (const char *fmt, ...) 
    void SDL_LogTrace (int category, const char *fmt, ...) 
    void SDL_LogVerbose (int category, const char *fmt, ...) 
    void SDL_LogDebug (int category, const char *fmt, ...) 
    void SDL_LogInfo (int category, const char *fmt, ...) 
    void SDL_LogWarn (int category, const char *fmt, ...) 
    void SDL_LogError (int category, const char *fmt, ...) 
    void SDL_LogCritical (int category, const char *fmt, ...) 
    void SDL_LogMessage (int category, SDL_LogPriority priority, const char *fmt, ...) 
    void SDL_LogMessageV (int category, SDL_LogPriority priority, const char *fmt, va_list ap) 
    ctypedef void (*SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message)
    SDL_LogOutputFunction SDL_GetDefaultLogOutputFunction ()
    void SDL_GetLogOutputFunction (SDL_LogOutputFunction *callback, void **userdata)
    void SDL_SetLogOutputFunction (SDL_LogOutputFunction callback, void *userdata)

    # Definitions from SDL3/SDL_messagebox.h
    ctypedef Uint32 SDL_MessageBoxFlags
    ctypedef Uint32 SDL_MessageBoxButtonFlags
    cdef struct SDL_MessageBoxButtonData:
        SDL_MessageBoxButtonFlags flags
        int buttonID
        const char *text
    cdef struct SDL_MessageBoxColor:
        Uint8 r
        Uint8 r, g
        Uint8 r, g, b
    cdef enum SDL_MessageBoxColorType:
        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_COUNT
    cdef struct SDL_MessageBoxColorScheme:
        SDL_MessageBoxColor colors []
    cdef struct SDL_MessageBoxData:
        SDL_MessageBoxFlags flags
        SDL_Window *window
        const char *title
        const char *message
        int numbuttons
        const SDL_MessageBoxButtonData *buttons
        const SDL_MessageBoxColorScheme *colorScheme
    cbool SDL_ShowMessageBox (const SDL_MessageBoxData *messageboxdata, int *buttonid)
    cbool SDL_ShowSimpleMessageBox (SDL_MessageBoxFlags flags, const char *title, const char *message, SDL_Window *window)

    # Definitions from SDL3/SDL_metal.h
    ctypedef void *SDL_MetalView
    SDL_MetalView SDL_Metal_CreateView (SDL_Window *window)
    void SDL_Metal_DestroyView (SDL_MetalView view)
    void *SDL_Metal_GetLayer (SDL_MetalView view)

    # Definitions from SDL3/SDL_misc.h
    cbool SDL_OpenURL (const char *url)

    # Definitions from SDL3/SDL_platform.h
    const char *SDL_GetPlatform ()

    # Definitions from SDL3/SDL_process.h
    cdef struct SDL_Process
    SDL_Process *SDL_CreateProcess (const char *const *args, cbool pipe_stdio)
    cdef enum SDL_ProcessIO:
        SDL_PROCESS_STDIO_INHERITED
        SDL_PROCESS_STDIO_NULL
        SDL_PROCESS_STDIO_APP
        SDL_PROCESS_STDIO_REDIRECT
    SDL_Process *SDL_CreateProcessWithProperties (SDL_PropertiesID props)
    SDL_PropertiesID SDL_GetProcessProperties (SDL_Process *process)
    void *SDL_ReadProcess (SDL_Process *process, size_t *datasize, int *exitcode)
    SDL_IOStream *SDL_GetProcessInput (SDL_Process *process)
    SDL_IOStream *SDL_GetProcessOutput (SDL_Process *process)
    cbool SDL_KillProcess (SDL_Process *process, cbool force)
    cbool SDL_WaitProcess (SDL_Process *process, cbool block, int *exitcode)
    void SDL_DestroyProcess (SDL_Process *process)

    # Definitions from SDL3/SDL_render.h
    cdef struct SDL_Vertex:
        SDL_FPoint position
        SDL_FColor color
        SDL_FPoint tex_coord
    cdef enum SDL_TextureAccess:
        SDL_TEXTUREACCESS_STATIC
        SDL_TEXTUREACCESS_STREAMING
        SDL_TEXTUREACCESS_TARGET
    cdef enum SDL_TextureAddressMode:
        SDL_TEXTURE_ADDRESS_INVALID
        SDL_TEXTURE_ADDRESS_AUTO
        SDL_TEXTURE_ADDRESS_CLAMP
        SDL_TEXTURE_ADDRESS_WRAP
    cdef enum SDL_RendererLogicalPresentation:
        SDL_LOGICAL_PRESENTATION_DISABLED
        SDL_LOGICAL_PRESENTATION_STRETCH
        SDL_LOGICAL_PRESENTATION_LETTERBOX
        SDL_LOGICAL_PRESENTATION_OVERSCAN
        SDL_LOGICAL_PRESENTATION_INTEGER_SCALE
    cdef struct SDL_Renderer
    cdef struct SDL_Texture:
        SDL_PixelFormat format
        int w
        int h
        int refcount
    int SDL_GetNumRenderDrivers ()
    const char *SDL_GetRenderDriver (int index)
    cbool SDL_CreateWindowAndRenderer (const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer)
    SDL_Renderer *SDL_CreateRenderer (SDL_Window *window, const char *name)
    SDL_Renderer *SDL_CreateRendererWithProperties (SDL_PropertiesID props)
    SDL_Renderer *SDL_CreateGPURenderer (SDL_GPUDevice *device, SDL_Window *window)
    SDL_GPUDevice *SDL_GetGPURendererDevice (SDL_Renderer *renderer)
    SDL_Renderer *SDL_CreateSoftwareRenderer (SDL_Surface *surface)
    SDL_Renderer *SDL_GetRenderer (SDL_Window *window)
    SDL_Window *SDL_GetRenderWindow (SDL_Renderer *renderer)
    const char *SDL_GetRendererName (SDL_Renderer *renderer)
    SDL_PropertiesID SDL_GetRendererProperties (SDL_Renderer *renderer)
    cbool SDL_GetRenderOutputSize (SDL_Renderer *renderer, int *w, int *h)
    cbool SDL_GetCurrentRenderOutputSize (SDL_Renderer *renderer, int *w, int *h)
    SDL_Texture *SDL_CreateTexture (SDL_Renderer *renderer, SDL_PixelFormat format, SDL_TextureAccess access, int w, int h)
    SDL_Texture *SDL_CreateTextureFromSurface (SDL_Renderer *renderer, SDL_Surface *surface)
    SDL_Texture *SDL_CreateTextureWithProperties (SDL_Renderer *renderer, SDL_PropertiesID props)
    SDL_PropertiesID SDL_GetTextureProperties (SDL_Texture *texture)
    SDL_Renderer *SDL_GetRendererFromTexture (SDL_Texture *texture)
    cbool SDL_GetTextureSize (SDL_Texture *texture, float *w, float *h)
    cbool SDL_SetTexturePalette (SDL_Texture *texture, SDL_Palette *palette)
    SDL_Palette *SDL_GetTexturePalette (SDL_Texture *texture)
    cbool SDL_SetTextureColorMod (SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b)
    cbool SDL_SetTextureColorModFloat (SDL_Texture *texture, float r, float g, float b)
    cbool SDL_GetTextureColorMod (SDL_Texture *texture, Uint8 *r, Uint8 *g, Uint8 *b)
    cbool SDL_GetTextureColorModFloat (SDL_Texture *texture, float *r, float *g, float *b)
    cbool SDL_SetTextureAlphaMod (SDL_Texture *texture, Uint8 alpha)
    cbool SDL_SetTextureAlphaModFloat (SDL_Texture *texture, float alpha)
    cbool SDL_GetTextureAlphaMod (SDL_Texture *texture, Uint8 *alpha)
    cbool SDL_GetTextureAlphaModFloat (SDL_Texture *texture, float *alpha)
    cbool SDL_SetTextureBlendMode (SDL_Texture *texture, SDL_BlendMode blendMode)
    cbool SDL_GetTextureBlendMode (SDL_Texture *texture, SDL_BlendMode *blendMode)
    cbool SDL_SetTextureScaleMode (SDL_Texture *texture, SDL_ScaleMode scaleMode)
    cbool SDL_GetTextureScaleMode (SDL_Texture *texture, SDL_ScaleMode *scaleMode)
    cbool SDL_UpdateTexture (SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
    cbool SDL_UpdateYUVTexture (SDL_Texture *texture, const SDL_Rect *rect, const Uint8 *Yplane, int Ypitch, const Uint8 *Uplane, int Upitch, const Uint8 *Vplane, int Vpitch)
    cbool SDL_UpdateNVTexture (SDL_Texture *texture, const SDL_Rect *rect, const Uint8 *Yplane, int Ypitch, const Uint8 *UVplane, int UVpitch)
    cbool SDL_LockTexture (SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch)
    cbool SDL_LockTextureToSurface (SDL_Texture *texture, const SDL_Rect *rect, SDL_Surface **surface)
    void SDL_UnlockTexture (SDL_Texture *texture)
    cbool SDL_SetRenderTarget (SDL_Renderer *renderer, SDL_Texture *texture)
    SDL_Texture *SDL_GetRenderTarget (SDL_Renderer *renderer)
    cbool SDL_SetRenderLogicalPresentation (SDL_Renderer *renderer, int w, int h, SDL_RendererLogicalPresentation mode)
    cbool SDL_GetRenderLogicalPresentation (SDL_Renderer *renderer, int *w, int *h, SDL_RendererLogicalPresentation *mode)
    cbool SDL_GetRenderLogicalPresentationRect (SDL_Renderer *renderer, SDL_FRect *rect)
    cbool SDL_RenderCoordinatesFromWindow (SDL_Renderer *renderer, float window_x, float window_y, float *x, float *y)
    cbool SDL_RenderCoordinatesToWindow (SDL_Renderer *renderer, float x, float y, float *window_x, float *window_y)
    cbool SDL_ConvertEventToRenderCoordinates (SDL_Renderer *renderer, SDL_Event *event)
    cbool SDL_SetRenderViewport (SDL_Renderer *renderer, const SDL_Rect *rect)
    cbool SDL_GetRenderViewport (SDL_Renderer *renderer, SDL_Rect *rect)
    cbool SDL_RenderViewportSet (SDL_Renderer *renderer)
    cbool SDL_GetRenderSafeArea (SDL_Renderer *renderer, SDL_Rect *rect)
    cbool SDL_SetRenderClipRect (SDL_Renderer *renderer, const SDL_Rect *rect)
    cbool SDL_GetRenderClipRect (SDL_Renderer *renderer, SDL_Rect *rect)
    cbool SDL_RenderClipEnabled (SDL_Renderer *renderer)
    cbool SDL_SetRenderScale (SDL_Renderer *renderer, float scaleX, float scaleY)
    cbool SDL_GetRenderScale (SDL_Renderer *renderer, float *scaleX, float *scaleY)
    cbool SDL_SetRenderDrawColor (SDL_Renderer *renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
    cbool SDL_SetRenderDrawColorFloat (SDL_Renderer *renderer, float r, float g, float b, float a)
    cbool SDL_GetRenderDrawColor (SDL_Renderer *renderer, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)
    cbool SDL_GetRenderDrawColorFloat (SDL_Renderer *renderer, float *r, float *g, float *b, float *a)
    cbool SDL_SetRenderColorScale (SDL_Renderer *renderer, float scale)
    cbool SDL_GetRenderColorScale (SDL_Renderer *renderer, float *scale)
    cbool SDL_SetRenderDrawBlendMode (SDL_Renderer *renderer, SDL_BlendMode blendMode)
    cbool SDL_GetRenderDrawBlendMode (SDL_Renderer *renderer, SDL_BlendMode *blendMode)
    cbool SDL_RenderClear (SDL_Renderer *renderer)
    cbool SDL_RenderPoint (SDL_Renderer *renderer, float x, float y)
    cbool SDL_RenderPoints (SDL_Renderer *renderer, const SDL_FPoint *points, int count)
    cbool SDL_RenderLine (SDL_Renderer *renderer, float x1, float y1, float x2, float y2)
    cbool SDL_RenderLines (SDL_Renderer *renderer, const SDL_FPoint *points, int count)
    cbool SDL_RenderRect (SDL_Renderer *renderer, const SDL_FRect *rect)
    cbool SDL_RenderRects (SDL_Renderer *renderer, const SDL_FRect *rects, int count)
    cbool SDL_RenderFillRect (SDL_Renderer *renderer, const SDL_FRect *rect)
    cbool SDL_RenderFillRects (SDL_Renderer *renderer, const SDL_FRect *rects, int count)
    cbool SDL_RenderTexture (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FRect *dstrect)
    cbool SDL_RenderTextureRotated (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FRect *dstrect, double angle, const SDL_FPoint *center, SDL_FlipMode flip)
    cbool SDL_RenderTextureAffine (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FPoint *origin, const SDL_FPoint *right, const SDL_FPoint *down)
    cbool SDL_RenderTextureTiled (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float scale, const SDL_FRect *dstrect)
    cbool SDL_RenderTexture9Grid (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect)
    cbool SDL_RenderTexture9GridTiled (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect, float tileScale)
    cbool SDL_RenderGeometry (SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Vertex *vertices, int num_vertices, const int *indices, int num_indices)
    cbool SDL_RenderGeometryRaw (SDL_Renderer *renderer, SDL_Texture *texture, const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride, int num_vertices, const void *indices, int num_indices, int size_indices)
    cbool SDL_SetRenderTextureAddressMode (SDL_Renderer *renderer, SDL_TextureAddressMode u_mode, SDL_TextureAddressMode v_mode)
    cbool SDL_GetRenderTextureAddressMode (SDL_Renderer *renderer, SDL_TextureAddressMode *u_mode, SDL_TextureAddressMode *v_mode)
    SDL_Surface *SDL_RenderReadPixels (SDL_Renderer *renderer, const SDL_Rect *rect)
    cbool SDL_RenderPresent (SDL_Renderer *renderer)
    void SDL_DestroyTexture (SDL_Texture *texture)
    void SDL_DestroyRenderer (SDL_Renderer *renderer)
    cbool SDL_FlushRenderer (SDL_Renderer *renderer)
    void *SDL_GetRenderMetalLayer (SDL_Renderer *renderer)
    void *SDL_GetRenderMetalCommandEncoder (SDL_Renderer *renderer)
    cbool SDL_AddVulkanRenderSemaphores (SDL_Renderer *renderer, Uint32 wait_stage_mask, Sint64 wait_semaphore, Sint64 signal_semaphore)
    cbool SDL_SetRenderVSync (SDL_Renderer *renderer, int vsync)
    cbool SDL_GetRenderVSync (SDL_Renderer *renderer, int *vsync)
    cbool SDL_RenderDebugText (SDL_Renderer *renderer, float x, float y, const char *str)
    cbool SDL_RenderDebugTextFormat (SDL_Renderer *renderer, float x, float y, const char *fmt, ...) 
    cbool SDL_SetDefaultTextureScaleMode (SDL_Renderer *renderer, SDL_ScaleMode scale_mode)
    cbool SDL_GetDefaultTextureScaleMode (SDL_Renderer *renderer, SDL_ScaleMode *scale_mode)
    cdef struct SDL_GPURenderStateCreateInfo:
        SDL_GPUShader *fragment_shader
        Sint32 num_sampler_bindings
        const SDL_GPUTextureSamplerBinding *sampler_bindings
        Sint32 num_storage_textures
        SDL_GPUTexture *const *storage_textures
        Sint32 num_storage_buffers
        SDL_GPUBuffer *const *storage_buffers
        SDL_PropertiesID props
    cdef struct SDL_GPURenderState
    SDL_GPURenderState *SDL_CreateGPURenderState (SDL_Renderer *renderer, SDL_GPURenderStateCreateInfo *createinfo)
    cbool SDL_SetGPURenderStateFragmentUniforms (SDL_GPURenderState *state, Uint32 slot_index, const void *data, Uint32 length)
    cbool SDL_SetGPURenderState (SDL_Renderer *renderer, SDL_GPURenderState *state)
    void SDL_DestroyGPURenderState (SDL_GPURenderState *state)

    # Definitions from SDL3/SDL_storage.h
    cdef struct SDL_StorageInterface:
        Uint32 version
        
        
        
        
        
        
        
        
        
        
        Uint64 (*space_remaining)(void *userdata)
    cdef struct SDL_Storage
    SDL_Storage *SDL_OpenTitleStorage (const char *override, SDL_PropertiesID props)
    SDL_Storage *SDL_OpenUserStorage (const char *org, const char *app, SDL_PropertiesID props)
    SDL_Storage *SDL_OpenFileStorage (const char *path)
    SDL_Storage *SDL_OpenStorage (const SDL_StorageInterface *iface, void *userdata)
    cbool SDL_CloseStorage (SDL_Storage *storage)
    cbool SDL_StorageReady (SDL_Storage *storage)
    cbool SDL_GetStorageFileSize (SDL_Storage *storage, const char *path, Uint64 *length)
    cbool SDL_ReadStorageFile (SDL_Storage *storage, const char *path, void *destination, Uint64 length)
    cbool SDL_WriteStorageFile (SDL_Storage *storage, const char *path, const void *source, Uint64 length)
    cbool SDL_CreateStorageDirectory (SDL_Storage *storage, const char *path)
    cbool SDL_EnumerateStorageDirectory (SDL_Storage *storage, const char *path, SDL_EnumerateDirectoryCallback callback, void *userdata)
    cbool SDL_RemoveStoragePath (SDL_Storage *storage, const char *path)
    cbool SDL_RenameStoragePath (SDL_Storage *storage, const char *oldpath, const char *newpath)
    cbool SDL_CopyStorageFile (SDL_Storage *storage, const char *oldpath, const char *newpath)
    cbool SDL_GetStoragePathInfo (SDL_Storage *storage, const char *path, SDL_PathInfo *info)
    Uint64 SDL_GetStorageSpaceRemaining (SDL_Storage *storage)
    char **SDL_GlobStorageDirectory (SDL_Storage *storage, const char *path, const char *pattern, SDL_GlobFlags flags, int *count)

    # Definitions from SDL3/SDL_system.h
    cdef union _XEvent:
        pass
    ctypedef _XEvent XEvent
    # Skipping empty typedef SDL_X11EventHook
    ctypedef void (*SDL_X11EventHook)(void *userdata, XEvent *event)
    void SDL_SetX11EventHook (SDL_X11EventHook callback, void *userdata)
    cbool SDL_SetLinuxThreadPriority (Sint64 threadID, int priority)
    cbool SDL_SetLinuxThreadPriorityAndPolicy (Sint64 threadID, int sdlPriority, int schedPolicy)
    cbool SDL_IsTablet ()
    cbool SDL_IsTV ()
    cdef enum SDL_Sandbox:
        SDL_SANDBOX_NONE
        SDL_SANDBOX_UNKNOWN_CONTAINER
        SDL_SANDBOX_FLATPAK
        SDL_SANDBOX_SNAP
        SDL_SANDBOX_MACOS
    SDL_Sandbox SDL_GetSandbox ()
    void SDL_OnApplicationWillTerminate ()
    void SDL_OnApplicationDidReceiveMemoryWarning ()
    void SDL_OnApplicationWillEnterBackground ()
    void SDL_OnApplicationDidEnterBackground ()
    void SDL_OnApplicationWillEnterForeground ()
    void SDL_OnApplicationDidEnterForeground ()

    # Definitions from SDL3/SDL_time.h
    cdef struct SDL_DateTime:
        int year
        int month
        int day
        int hour
        int minute
        int second
        int nanosecond
        int day_of_week
        int utc_offset
    cdef enum SDL_DateFormat:
        SDL_DATE_FORMAT_YYYYMMDD
        SDL_DATE_FORMAT_DDMMYYYY
        SDL_DATE_FORMAT_MMDDYYYY
    cdef enum SDL_TimeFormat:
        SDL_TIME_FORMAT_24HR
        SDL_TIME_FORMAT_12HR
    cbool SDL_GetDateTimeLocalePreferences (SDL_DateFormat *dateFormat, SDL_TimeFormat *timeFormat)
    cbool SDL_GetCurrentTime (SDL_Time *ticks)
    cbool SDL_TimeToDateTime (SDL_Time ticks, SDL_DateTime *dt, cbool localTime)
    cbool SDL_DateTimeToTime (const SDL_DateTime *dt, SDL_Time *ticks)
    void SDL_TimeToWindows (SDL_Time ticks, Uint32 *dwLowDateTime, Uint32 *dwHighDateTime)
    SDL_Time SDL_TimeFromWindows (Uint32 dwLowDateTime, Uint32 dwHighDateTime)
    int SDL_GetDaysInMonth (int year, int month)
    int SDL_GetDayOfYear (int year, int month, int day)
    int SDL_GetDayOfWeek (int year, int month, int day)

    # Definitions from SDL3/SDL_timer.h
    Uint64 SDL_GetTicks ()
    Uint64 SDL_GetTicksNS ()
    Uint64 SDL_GetPerformanceCounter ()
    Uint64 SDL_GetPerformanceFrequency ()
    void SDL_Delay (Uint32 ms)
    void SDL_DelayNS (Uint64 ns)
    void SDL_DelayPrecise (Uint64 ns)
    ctypedef Uint32 SDL_TimerID
    ctypedef Uint32 (*SDL_TimerCallback)(void *userdata, SDL_TimerID timerID, Uint32 interval)
    SDL_TimerID SDL_AddTimer (Uint32 interval, SDL_TimerCallback callback, void *userdata)
    ctypedef Uint64 (*SDL_NSTimerCallback)(void *userdata, SDL_TimerID timerID, Uint64 interval)
    SDL_TimerID SDL_AddTimerNS (Uint64 interval, SDL_NSTimerCallback callback, void *userdata)
    cbool SDL_RemoveTimer (SDL_TimerID id)

    # Definitions from SDL3/SDL_tray.h
    cdef struct SDL_Tray
    cdef struct SDL_TrayMenu
    cdef struct SDL_TrayEntry
    ctypedef Uint32 SDL_TrayEntryFlags
    ctypedef void (*SDL_TrayCallback)(void *userdata, SDL_TrayEntry *entry)
    SDL_Tray *SDL_CreateTray (SDL_Surface *icon, const char *tooltip)
    void SDL_SetTrayIcon (SDL_Tray *tray, SDL_Surface *icon)
    void SDL_SetTrayTooltip (SDL_Tray *tray, const char *tooltip)
    SDL_TrayMenu *SDL_CreateTrayMenu (SDL_Tray *tray)
    SDL_TrayMenu *SDL_CreateTraySubmenu (SDL_TrayEntry *entry)
    SDL_TrayMenu *SDL_GetTrayMenu (SDL_Tray *tray)
    SDL_TrayMenu *SDL_GetTraySubmenu (SDL_TrayEntry *entry)
    const SDL_TrayEntry **SDL_GetTrayEntries (SDL_TrayMenu *menu, int *count)
    void SDL_RemoveTrayEntry (SDL_TrayEntry *entry)
    SDL_TrayEntry *SDL_InsertTrayEntryAt (SDL_TrayMenu *menu, int pos, const char *label, SDL_TrayEntryFlags flags)
    void SDL_SetTrayEntryLabel (SDL_TrayEntry *entry, const char *label)
    const char *SDL_GetTrayEntryLabel (SDL_TrayEntry *entry)
    void SDL_SetTrayEntryChecked (SDL_TrayEntry *entry, cbool checked)
    cbool SDL_GetTrayEntryChecked (SDL_TrayEntry *entry)
    void SDL_SetTrayEntryEnabled (SDL_TrayEntry *entry, cbool enabled)
    cbool SDL_GetTrayEntryEnabled (SDL_TrayEntry *entry)
    void SDL_SetTrayEntryCallback (SDL_TrayEntry *entry, SDL_TrayCallback callback, void *userdata)
    void SDL_ClickTrayEntry (SDL_TrayEntry *entry)
    void SDL_DestroyTray (SDL_Tray *tray)
    SDL_TrayMenu *SDL_GetTrayEntryParent (SDL_TrayEntry *entry)
    SDL_TrayEntry *SDL_GetTrayMenuParentEntry (SDL_TrayMenu *menu)
    SDL_Tray *SDL_GetTrayMenuParentTray (SDL_TrayMenu *menu)
    void SDL_UpdateTrays ()

    # Definitions from SDL3/SDL_version.h
    int SDL_GetVersion ()
    const char *SDL_GetRevision ()

    # Definitions from SDL3/SDL_main.h
    ctypedef int (*SDL_main_func)(int argc, char *argv [ ])
    int SDL_main (int argc, char *argv [ ])
    void SDL_SetMainReady ()
    int SDL_RunApp (int argc, char *argv [ ], SDL_main_func mainFunction, void *reserved)
    int SDL_EnterAppMainCallbacks (int argc, char *argv [ ], SDL_AppInit_func appinit, SDL_AppIterate_func appiter, SDL_AppEvent_func appevent, SDL_AppQuit_func appquit)
    void SDL_GDKSuspendComplete ()

    int SDL_MUSTLOCK(SDL_Surface *surface)

    cdef enum:
        SDL_MAX_UINT64
        SDL_MIN_UINT64
        SDL_INVALID_UNICODE_CODEPOINT
        SDL_ASSERT_LEVEL
        SDL_NULL_WHILE_LOOP_CONDITION
        SDL_LIL_ENDIAN
        SDL_BIG_ENDIAN
        SDL_AUDIO_MASK_BITSIZE
        SDL_BLENDMODE_NONE
        SDL_BLENDMODE_BLEND
        SDL_BLENDMODE_BLEND_PREMULTIPLIED
        SDL_BLENDMODE_ADD
        SDL_BLENDMODE_ADD_PREMULTIPLIED
        SDL_BLENDMODE_MOD
        SDL_BLENDMODE_MUL
        SDL_BLENDMODE_INVALID
        SDL_ALPHA_OPAQUE
        SDL_ALPHA_TRANSPARENT
        SDL_SURFACE_PREALLOCATED
        SDL_SURFACE_LOCK_NEEDED
        SDL_SURFACE_LOCKED
        SDL_SURFACE_SIMD_ALIGNED
        SDL_CACHELINE_SIZE
        SDL_WINDOW_FULLSCREEN
        SDL_WINDOW_OPENGL
        SDL_WINDOW_OCCLUDED
        SDL_WINDOW_HIDDEN
        SDL_WINDOW_BORDERLESS
        SDL_WINDOW_RESIZABLE
        SDL_WINDOW_MINIMIZED
        SDL_WINDOW_MAXIMIZED
        SDL_WINDOW_MOUSE_GRABBED
        SDL_WINDOW_INPUT_FOCUS
        SDL_WINDOW_MOUSE_FOCUS
        SDL_WINDOW_EXTERNAL
        SDL_WINDOW_MODAL
        SDL_WINDOW_HIGH_PIXEL_DENSITY
        SDL_WINDOW_MOUSE_CAPTURE
        SDL_WINDOW_MOUSE_RELATIVE_MODE
        SDL_WINDOW_ALWAYS_ON_TOP
        SDL_WINDOW_UTILITY
        SDL_WINDOW_TOOLTIP
        SDL_WINDOW_POPUP_MENU
        SDL_WINDOW_KEYBOARD_GRABBED
        SDL_WINDOW_FILL_DOCUMENT
        SDL_WINDOW_VULKAN
        SDL_WINDOW_METAL
        SDL_WINDOW_TRANSPARENT
        SDL_WINDOW_NOT_FOCUSABLE
        SDL_WINDOWPOS_UNDEFINED_MASK
        SDL_WINDOWPOS_UNDEFINED
        SDL_WINDOWPOS_CENTERED_MASK
        SDL_WINDOWPOS_CENTERED
        SDL_GL_CONTEXT_PROFILE_CORE
        SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
        SDL_GL_CONTEXT_PROFILE_ES
        SDL_GL_CONTEXT_DEBUG_FLAG
        SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG
        SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG
        SDL_GL_CONTEXT_RESET_ISOLATION_FLAG
        SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE
        SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH
        SDL_GL_CONTEXT_RESET_NO_NOTIFICATION
        SDL_GL_CONTEXT_RESET_LOSE_CONTEXT
        SDL_WINDOW_SURFACE_VSYNC_DISABLED
        SDL_WINDOW_SURFACE_VSYNC_ADAPTIVE
        SDL_ELF_NOTE_DLOPEN_TYPE
        SDL_JOYSTICK_AXIS_MAX
        SDL_JOYSTICK_AXIS_MIN
        SDL_HAT_CENTERED
        SDL_HAT_UP
        SDL_HAT_RIGHT
        SDL_HAT_DOWN
        SDL_HAT_LEFT
        SDLK_UNKNOWN
        SDLK_RETURN
        SDLK_ESCAPE
        SDLK_BACKSPACE
        SDLK_TAB
        SDLK_SPACE
        SDLK_EXCLAIM
        SDLK_DBLAPOSTROPHE
        SDLK_HASH
        SDLK_DOLLAR
        SDLK_PERCENT
        SDLK_AMPERSAND
        SDLK_APOSTROPHE
        SDLK_LEFTPAREN
        SDLK_RIGHTPAREN
        SDLK_ASTERISK
        SDLK_PLUS
        SDLK_COMMA
        SDLK_MINUS
        SDLK_PERIOD
        SDLK_SLASH
        SDLK_0
        SDLK_1
        SDLK_2
        SDLK_3
        SDLK_4
        SDLK_5
        SDLK_6
        SDLK_7
        SDLK_8
        SDLK_9
        SDLK_COLON
        SDLK_SEMICOLON
        SDLK_LESS
        SDLK_EQUALS
        SDLK_GREATER
        SDLK_QUESTION
        SDLK_AT
        SDLK_LEFTBRACKET
        SDLK_BACKSLASH
        SDLK_RIGHTBRACKET
        SDLK_CARET
        SDLK_UNDERSCORE
        SDLK_GRAVE
        SDLK_A
        SDLK_B
        SDLK_C
        SDLK_D
        SDLK_E
        SDLK_F
        SDLK_G
        SDLK_H
        SDLK_I
        SDLK_J
        SDLK_K
        SDLK_L
        SDLK_M
        SDLK_N
        SDLK_O
        SDLK_P
        SDLK_Q
        SDLK_R
        SDLK_S
        SDLK_T
        SDLK_U
        SDLK_V
        SDLK_W
        SDLK_X
        SDLK_Y
        SDLK_Z
        SDLK_LEFTBRACE
        SDLK_PIPE
        SDLK_RIGHTBRACE
        SDLK_TILDE
        SDLK_DELETE
        SDLK_PLUSMINUS
        SDLK_CAPSLOCK
        SDLK_F1
        SDLK_F2
        SDLK_F3
        SDLK_F4
        SDLK_F5
        SDLK_F6
        SDLK_F7
        SDLK_F8
        SDLK_F9
        SDLK_F10
        SDLK_F11
        SDLK_F12
        SDLK_PRINTSCREEN
        SDLK_SCROLLLOCK
        SDLK_PAUSE
        SDLK_INSERT
        SDLK_HOME
        SDLK_PAGEUP
        SDLK_END
        SDLK_PAGEDOWN
        SDLK_RIGHT
        SDLK_LEFT
        SDLK_DOWN
        SDLK_UP
        SDLK_NUMLOCKCLEAR
        SDLK_KP_DIVIDE
        SDLK_KP_MULTIPLY
        SDLK_KP_MINUS
        SDLK_KP_PLUS
        SDLK_KP_ENTER
        SDLK_KP_1
        SDLK_KP_2
        SDLK_KP_3
        SDLK_KP_4
        SDLK_KP_5
        SDLK_KP_6
        SDLK_KP_7
        SDLK_KP_8
        SDLK_KP_9
        SDLK_KP_0
        SDLK_KP_PERIOD
        SDLK_APPLICATION
        SDLK_POWER
        SDLK_KP_EQUALS
        SDLK_F13
        SDLK_F14
        SDLK_F15
        SDLK_F16
        SDLK_F17
        SDLK_F18
        SDLK_F19
        SDLK_F20
        SDLK_F21
        SDLK_F22
        SDLK_F23
        SDLK_F24
        SDLK_EXECUTE
        SDLK_HELP
        SDLK_MENU
        SDLK_SELECT
        SDLK_STOP
        SDLK_AGAIN
        SDLK_UNDO
        SDLK_CUT
        SDLK_COPY
        SDLK_PASTE
        SDLK_FIND
        SDLK_MUTE
        SDLK_VOLUMEUP
        SDLK_VOLUMEDOWN
        SDLK_KP_COMMA
        SDLK_KP_EQUALSAS400
        SDLK_ALTERASE
        SDLK_SYSREQ
        SDLK_CANCEL
        SDLK_CLEAR
        SDLK_PRIOR
        SDLK_RETURN2
        SDLK_SEPARATOR
        SDLK_OUT
        SDLK_OPER
        SDLK_CLEARAGAIN
        SDLK_CRSEL
        SDLK_EXSEL
        SDLK_KP_00
        SDLK_KP_000
        SDLK_THOUSANDSSEPARATOR
        SDLK_DECIMALSEPARATOR
        SDLK_CURRENCYUNIT
        SDLK_CURRENCYSUBUNIT
        SDLK_KP_LEFTPAREN
        SDLK_KP_RIGHTPAREN
        SDLK_KP_LEFTBRACE
        SDLK_KP_RIGHTBRACE
        SDLK_KP_TAB
        SDLK_KP_BACKSPACE
        SDLK_KP_A
        SDLK_KP_B
        SDLK_KP_C
        SDLK_KP_D
        SDLK_KP_E
        SDLK_KP_F
        SDLK_KP_XOR
        SDLK_KP_POWER
        SDLK_KP_PERCENT
        SDLK_KP_LESS
        SDLK_KP_GREATER
        SDLK_KP_AMPERSAND
        SDLK_KP_DBLAMPERSAND
        SDLK_KP_VERTICALBAR
        SDLK_KP_DBLVERTICALBAR
        SDLK_KP_COLON
        SDLK_KP_HASH
        SDLK_KP_SPACE
        SDLK_KP_AT
        SDLK_KP_EXCLAM
        SDLK_KP_MEMSTORE
        SDLK_KP_MEMRECALL
        SDLK_KP_MEMCLEAR
        SDLK_KP_MEMADD
        SDLK_KP_MEMSUBTRACT
        SDLK_KP_MEMMULTIPLY
        SDLK_KP_MEMDIVIDE
        SDLK_KP_PLUSMINUS
        SDLK_KP_CLEAR
        SDLK_KP_CLEARENTRY
        SDLK_KP_BINARY
        SDLK_KP_OCTAL
        SDLK_KP_DECIMAL
        SDLK_KP_HEXADECIMAL
        SDLK_LCTRL
        SDLK_LSHIFT
        SDLK_LALT
        SDLK_LGUI
        SDLK_RCTRL
        SDLK_RSHIFT
        SDLK_RALT
        SDLK_RGUI
        SDLK_MODE
        SDLK_SLEEP
        SDLK_WAKE
        SDLK_CHANNEL_INCREMENT
        SDLK_CHANNEL_DECREMENT
        SDLK_MEDIA_PLAY
        SDLK_MEDIA_PAUSE
        SDLK_MEDIA_RECORD
        SDLK_MEDIA_FAST_FORWARD
        SDLK_MEDIA_REWIND
        SDLK_MEDIA_NEXT_TRACK
        SDLK_MEDIA_PREVIOUS_TRACK
        SDLK_MEDIA_STOP
        SDLK_MEDIA_EJECT
        SDLK_MEDIA_PLAY_PAUSE
        SDLK_MEDIA_SELECT
        SDLK_AC_NEW
        SDLK_AC_OPEN
        SDLK_AC_CLOSE
        SDLK_AC_EXIT
        SDLK_AC_SAVE
        SDLK_AC_PRINT
        SDLK_AC_PROPERTIES
        SDLK_AC_SEARCH
        SDLK_AC_HOME
        SDLK_AC_BACK
        SDLK_AC_FORWARD
        SDLK_AC_STOP
        SDLK_AC_REFRESH
        SDLK_AC_BOOKMARKS
        SDLK_SOFTLEFT
        SDLK_SOFTRIGHT
        SDLK_CALL
        SDLK_ENDCALL
        SDLK_LEFT_TAB
        SDLK_LEVEL5_SHIFT
        SDLK_MULTI_KEY_COMPOSE
        SDLK_LMETA
        SDLK_RMETA
        SDLK_LHYPER
        SDLK_RHYPER
        SDL_KMOD_NONE
        SDL_KMOD_LSHIFT
        SDL_KMOD_RSHIFT
        SDL_KMOD_LEVEL5
        SDL_KMOD_LCTRL
        SDL_KMOD_RCTRL
        SDL_KMOD_LALT
        SDL_KMOD_RALT
        SDL_KMOD_LGUI
        SDL_KMOD_RGUI
        SDL_KMOD_NUM
        SDL_KMOD_CAPS
        SDL_KMOD_MODE
        SDL_KMOD_SCROLL
        SDL_BUTTON_LEFT
        SDL_BUTTON_MIDDLE
        SDL_BUTTON_RIGHT
        SDL_BUTTON_X1
        SDL_BUTTON_X2
        SDL_BUTTON_LMASK
        SDL_BUTTON_MMASK
        SDL_BUTTON_RMASK
        SDL_BUTTON_X1MASK
        SDL_BUTTON_X2MASK
        SDL_GPU_SHADERFORMAT_INVALID
        SDL_HAPTIC_INFINITY
        SDL_HAPTIC_POLAR
        SDL_HAPTIC_CARTESIAN
        SDL_HAPTIC_SPHERICAL
        SDL_HAPTIC_STEERING_AXIS
        SDL_INIT_AUDIO
        SDL_INIT_VIDEO
        SDL_INIT_JOYSTICK
        SDL_INIT_HAPTIC
        SDL_INIT_GAMEPAD
        SDL_INIT_EVENTS
        SDL_INIT_SENSOR
        SDL_INIT_CAMERA
        SDL_MESSAGEBOX_ERROR
        SDL_MESSAGEBOX_WARNING
        SDL_MESSAGEBOX_INFORMATION
        SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT
        SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT
        SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT
        SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT
        SDL_RENDERER_VSYNC_DISABLED
        SDL_RENDERER_VSYNC_ADAPTIVE
        SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE
        SDL_MS_PER_SECOND
        SDL_US_PER_SECOND
        SDL_NS_PER_SECOND
        SDL_NS_PER_MS
        SDL_NS_PER_US
        SDL_TRAYENTRY_BUTTON
        SDL_TRAYENTRY_CHECKBOX
        SDL_TRAYENTRY_SUBMENU
        SDL_TRAYENTRY_DISABLED
        SDL_TRAYENTRY_CHECKED
        SDL_MAJOR_VERSION
        SDL_MINOR_VERSION
        SDL_MICRO_VERSION
