Unit sdl2

Description

 

Overview

Classes, Interfaces, Objects and Records

Name Description
Record TAndroidIO  
Record THat  
Record TMem  
Record TSDL_Atomic  
Record TSDL_AudioCVT  
Record TSDL_AudioDeviceEvent  
Record TSDL_AudioSpec  
Record TSDL_Color  
Record TSDL_CommonEvent  
Record TSDL_ControllerAxisEvent  
Record TSDL_ControllerButtonEvent  
Record TSDL_ControllerDeviceEvent  
Record TSDL_ControllerSensorEvent  
Record TSDL_ControllerTouchpadEvent  
Record TSDL_DisplayEvent  
Record TSDL_DisplayMode  
Record TSDL_DollarGestureEvent  
Record TSDL_DropEvent  
Record TSDL_Event  
Record TSDL_Finger  
Record TSDL_FPoint  
Record TSDL_FRect  
Record TSDL_GameControllerButtonBind  
Record TSDL_GUID  
Record TSDL_HapticCondition  
Record TSDL_HapticConstant  
Record TSDL_HapticCustom  
Record TSDL_HapticDirection  
Record TSDL_HapticEffect  
Record TSDL_HapticLeftRight  
Record TSDL_HapticPeriodic  
Record TSDL_HapticRamp  
Record TSDL_hid_device_info  
Record TSDL_JoyAxisEvent  
Record TSDL_JoyBallEvent  
Record TSDL_JoyBatteryEvent  
Record TSDL_JoyButtonEvent  
Record TSDL_JoyDeviceEvent  
Record TSDL_JoyHatEvent  
Record TSDL_KeyboardEvent  
Record TSDL_Keysym  
Record TSDL_Locale  
Record TSDL_MessageBoxButtonData  
Record TSDL_MessageBoxColor  
Record TSDL_MessageBoxColorScheme  
Record TSDL_MessageBoxData  
Record TSDL_MouseButtonEvent  
Record TSDL_MouseMotionEvent  
Record TSDL_MouseWheelEvent  
Record TSDL_MultiGestureEvent  
Record TSDL_Palette  
Record TSDL_PixelFormat  
Record TSDL_Point  
Record TSDL_QuitEvent  
Record TSDL_Rect  
Record TSDL_RendererInfo  
Packed Record TSDL_RWops  
Record TSDL_SensorEvent  
Record TSDL_Surface  
Record TSDL_SysWMEvent  
Record TSDL_SysWMinfo  
Record TSDL_SysWMmsg  
Record TSDL_TextEditingEvent  
Record TSDL_TextEditingExtEvent  
Record TSDL_TextInputEvent  
Record TSDL_TouchFingerEvent  
Record TSDL_UserEvent  
Record TSDL_Version  
Record TSDL_Vertex  
Record TSDL_VirtualJoystickDesc  
Record TSDL_WindowEvent  
Record TSDL_WindowShapeMode  
Record TSDL_WindowShapeParams  
Record TStdio  
Record TUnknown  
Record TWindowsIO  
Record TWindowsIOBuffer  

Functions and Procedures

function SDL_acos(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_acosf(x: cfloat): cfloat; cdecl; external SDL_LibName;
procedure SDL_AddEventWatch(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;
procedure SDL_AddHintCallback(const name: PAnsiChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName;
function SDL_AddTimer(interval: cuint32; callback: TSDL_TimerCallback; param: Pointer): TSDL_TimerID; cdecl; external SDL_LibName;
function SDL_AllocFormat(pixel_format: cuint32): PSDL_PixelFormat; cdecl; external SDL_LibName;
function SDL_AllocPalette(ncolors: cint): PSDL_Palette; cdecl; external SDL_LibName;
function SDL_AllocRW: PSDL_RWops; cdecl; external SDL_LibName;
function SDL_asin(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_asinf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_atan(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_atan2(y, x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_atan2f(y, x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_atanf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_AtomicAdd(atomic: PSDL_Atomic; value: cint): cint; cdecl; external SDL_LibName;
function SDL_AtomicCAS(atomic: PSDL_Atomic; oldValue, newValue: cint): TSDL_bool; cdecl; external SDL_LibName;
function SDL_AtomicCASPtr(ptr: PPointer; oldValue, newValue: Pointer): TSDL_bool; cdecl; external SDL_LibName;
function SDL_AtomicDecRef(atomic: PSDL_Atomic): Boolean;
function SDL_AtomicGet(atomic: PSDL_Atomic): cint; cdecl; external SDL_LibName;
function SDL_AtomicGetPtr(ptr: PPointer): Pointer; cdecl; external SDL_LibName;
function SDL_AtomicIncRef(atomic: PSDL_Atomic): cint;
function SDL_AtomicLock(lock: PSDL_SpinLock): TSDL_bool; cdecl; external SDL_LibName;
function SDL_AtomicSet(atomic: PSDL_Atomic; value: cint): cint; cdecl; external SDL_LibName;
function SDL_AtomicSetPtr(ptr: PPointer; value: Pointer): Pointer; cdecl; external SDL_LibName;
function SDL_AtomicTryLock(lock: PSDL_SpinLock): TSDL_bool; cdecl; external SDL_LibName;
procedure SDL_AtomicUnlock(lock: PSDL_SpinLock); cdecl; external SDL_LibName;
function SDL_AudioInit(driver_name: PAnsiChar): cint; cdecl; external SDL_LibName;
procedure SDL_AudioQuit; cdecl; external SDL_LibName;
function SDL_AudioStreamAvailable(stream: PSDL_AudioStream): cint; cdecl; external SDL_LibName;
procedure SDL_AudioStreamClear(stream: PSDL_AudioStream); cdecl; external SDL_LibName;
function SDL_AudioStreamFlush(stream: PSDL_AudioStream): cint; cdecl; external SDL_LibName;
function SDL_AudioStreamGet(stream: PSDL_AudioStream; buf: pointer; len: cint): cint; cdecl; external SDL_LibName;
function SDL_AudioStreamPut(stream: PSDL_AudioStream; buf: pointer; len: cint): cint; cdecl; external SDL_LibName;
function SDL_AUDIO_BITSIZE(x: Cardinal): Cardinal;
function SDL_AUDIO_ISBIGENDIAN(x: Cardinal): Cardinal;
function SDL_AUDIO_ISFLOAT(x: Cardinal): Cardinal;
function SDL_AUDIO_ISINT(x: Cardinal): Cardinal;
function SDL_AUDIO_ISLITTLEENDIAN(x: Cardinal): Cardinal;
function SDL_AUDIO_ISSIGNED(x: Cardinal): Cardinal;
function SDL_AUDIO_ISUNSIGNED(x: Cardinal): Cardinal;
function SDL_BITSPERPIXEL(X: cuint32): cuint32;
function SDL_BlitSurface(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName name '_SDL_UpperBlit';
function SDL_BlitSurfaceScaled(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName name '_SDL_UpperBlitScaled';
function SDL_BuildAudioCVT(cvt: PSDL_AudioCVT; src_format: TSDL_AudioFormat; src_channels: cuint8; src_rate: cint; dst_format: TSDL_AudioFormat; dst_channels: cuint8; dst_rate: cint): cint; cdecl; external SDL_LibName;
function SDL_Button(X: cint): cint;
procedure SDL_CalculateGammaRamp(gamma: cfloat; ramp: pcuint16); cdecl; external SDL_LibName;
function SDL_calloc(nmemb, size: csize_t): Pointer; cdecl; external SDL_LibName;
function SDL_CaptureMouse(enabled: TSDL_Bool): cint; cdecl; external SDL_LibName;
function SDL_ceil(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_ceilf(x: cfloat): cfloat; cdecl; external SDL_LibName;
procedure SDL_ClearComposition; cdecl; external SDL_LibName;
procedure SDL_ClearErrorcdecl; external SDL_LibName;
procedure SDL_ClearHints(); cdecl; external SDL_LibName;
procedure SDL_ClearQueuedAudio(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;
procedure SDL_CloseAudio; cdecl; external SDL_LibName;
procedure SDL_CloseAudioDevice(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;
function SDL_COMPILEDVERSION: Cardinal;
procedure SDL_CompilerBarrier();
function SDL_ComposeCustomBlendMode(srcColorFactor, dstColorFactor: TSDL_BlendFactor; colorOperation: TSDL_BlendOperation; srcAlphaFactor, dstAlphaFactor: TSDL_BlendFactor; alphaOperation: TSDL_BlendOperation): TSDL_BlendMode; cdecl; external SDL_LibName;
function SDL_CondBroadcast(cond: PSDL_Cond): cint; cdecl; external SDL_LibName;
function SDL_CondSignal(cond: PSDL_Cond): cint; cdecl; external SDL_LibName;
function SDL_CondWait(cond: PSDL_Cond; mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;
function SDL_CondWaitTimeout(cond: PSDL_Cond; mutex: PSDL_Mutex; ms: cuint32): cint; cdecl; external SDL_LibName;
function SDL_ConvertAudio(cvt: PSDL_AudioCVT): cint; cdecl; external SDL_LibName;
function SDL_ConvertPixels(width: cint; height: cint; src_format: cuint32; const src: Pointer; src_pitch: cint; dst_format: cuint32; dst: Pointer; dst_pitch: cint): cint; cdecl; external SDL_LibName;
function SDL_ConvertSurface(src: PSDL_Surface; const fmt: PSDL_PixelFormat; flags: cuint32): PSDL_Surface; cdecl; external SDL_LibName;
function SDL_ConvertSurfaceFormat(src: PSDL_Surface; pixel_format: cuint32; flags: cuint32): PSDL_Surface; cdecl; external SDL_LibName;
function SDL_copysign(x, y: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_copysignf(x, y: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_cos(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_cosf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_CreateColorCursor( surface: PSDL_Surface; hot_x: cint; hot_y: cint): PSDL_Cursor; cdecl; external SDL_LibName;
function SDL_CreateCond: PSDL_Cond; cdecl; external SDL_LibName;
function SDL_CreateCursor( const data: pcuint8; const mask: pcuint8; w: cint; h: cint; hot_x: cint; hot_y: cint): PSDL_Cursor; cdecl; external SDL_LibName;
function SDL_CreateMutex: PSDL_Mutex; cdecl; external SDL_LibName;
function SDL_CreateRenderer(window: PSDL_Window; index: cint32; flags: cuint32): PSDL_Renderer cdecl; external SDL_LibName;
function SDL_CreateRGBSurface(flags: cuint32; width: cint; height: cint; depth: cint; Rmask: cuint32; Gmask: cuint32; Bmask: cuint32; Amask: cuint32): PSDL_Surface; cdecl; external SDL_LibName;
function SDL_CreateRGBSurfaceFrom(pixels: Pointer; width: cint; height: cint; depth: cint; pitch: cint; Rmask: cuint32; Gmask: cuint32; Bmask: cuint32; Amask: cuint32): PSDL_Surface; cdecl; external SDL_LibName;
function SDL_CreateRGBSurfaceWithFormat(flags: cuint32; width, height, depth: cint; format: cuint32):PSDL_Surface; cdecl; external SDL_LibName;
function SDL_CreateRGBSurfaceWithFormatFrom(pixels: Pointer; width, height, depth, pitch: cint; format: cuint32):PSDL_Surface; cdecl; external SDL_LibName;
function SDL_CreateSemaphore(initial_value: cuint32): PSDL_sem; cdecl; external SDL_LibName;
function SDL_CreateShapedWindow(title: PAnsiChar; x: cuint; y: cuint; w: cuint; h: cuint; flags: cuint32): PSDL_Window; cdecl; external SDL_LibName;
function SDL_CreateSoftwareRenderer(surface: PSDL_Surface): PSDL_Renderer cdecl; external SDL_LibName;
function SDL_CreateSystemCursor(id: TSDL_SystemCursor): PSDL_Cursor; cdecl; external SDL_LibName;
function SDL_CreateTexture(renderer: PSDL_Renderer; format: cuint32; access: cint32; w: cint32; h: cint32): PSDL_Texture cdecl; external SDL_LibName;
function SDL_CreateTextureFromSurface(renderer: PSDL_Renderer; surface: PSDL_Surface): PSDL_Texture cdecl; external SDL_LibName;
function SDL_CreateThread(fn: TSDL_ThreadFunction; name: PAnsiChar; data: Pointer): PSDL_Thread; cdecl; external SDL_LibName;
function SDL_CreateThreadWithStackSize(fn: TSDL_ThreadFunction; name: PAnsiChar; stacksize: csize_t; data: Pointer): PSDL_Thread; cdecl; external SDL_LibName;
function SDL_CreateWindow(const title: PAnsiChar; x: cint; y: cint; w: cint; h: cint; flags: TSDL_WindowFlags): PSDL_Window; cdecl; external SDL_LibName;
function SDL_CreateWindowAndRenderer(width: cint32; height: cint32; window_flags: cuint32; window: PPSDL_Window; renderer: PPSDL_Renderer): cint32 cdecl; external SDL_LibName;
function SDL_CreateWindowFrom(const data: Pointer): PSDL_Window; cdecl; external SDL_LibName;
procedure SDL_Delay(ms: cuint32); cdecl; external SDL_LibName;
procedure SDL_DelEventWatch(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;
procedure SDL_DelHintCallback(const name: PAnsiChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName;
function SDL_DequeueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len: cuint32): cuint32; cdecl; external SDL_LibName;
procedure SDL_DestroyCond(cond: PSDL_Cond); cdecl; external SDL_LibName;
procedure SDL_DestroyMutex(mutex: PSDL_Mutex); cdecl; external SDL_LibName;
procedure SDL_DestroyRenderer(renderer: PSDL_Renderer) cdecl; external SDL_LibName;
procedure SDL_DestroySemaphore(sem: PSDL_Sem); cdecl; external SDL_LibName;
procedure SDL_DestroyTexture(texture: PSDL_Texture) cdecl; external SDL_LibName;
procedure SDL_DestroyWindow(window: PSDL_Window); cdecl; external SDL_LibName;
function SDL_DestroyWindowSurface(window: PSDL_Window): cint; cdecl; external SDL_LibName;
procedure SDL_DetachThread(thread:PSDL_Thread); cdecl; external SDL_LibName;
procedure SDL_DisableScreenSaver; cdecl; external SDL_LibName;
function SDL_DuplicateSurface(surface: PSDL_Surface): PSDL_Surface; cdecl; external SDL_LibName;
procedure SDL_EnableScreenSaver; cdecl; external SDL_LibName;
function SDL_EncloseFPoints(const points: PSDL_FPoint; count: cint; const clip: PSDL_FRect; result: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_EnclosePoints(const points: PSDL_Point; count: cint; const clip: PSDL_Rect; result: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_Error(code: TSDL_ErrorCode): cint; cdecl; external SDL_LibName;
function SDL_EventState(type_: TSDL_EventType; state: cint32): cuint8 cdecl; external SDL_LibName;
function SDL_exp(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_expf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_fabs(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_fabsf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_FillRect(dst: PSDL_Surface; const rect: PSDL_Rect; color: cuint32): cint; cdecl; external SDL_LibName;
function SDL_FillRects(dst: PSDL_Surface; const rects: PSDL_Rect; count: cint; color: cuint32): cint; cdecl; external SDL_LibName;
procedure SDL_FilterEvents(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;
function SDL_FlashWindow(window: PSDL_Window; operation: TSDL_FlashOperation): cint; cdecl; external SDL_LibName;
function SDL_floor(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_floorf(x: cfloat): cfloat; cdecl; external SDL_LibName;
procedure SDL_FlushEvent(type_: TSDL_EventType) cdecl; external SDL_LibName;
procedure SDL_FlushEvents(minType, maxType: TSDL_EventType) cdecl; external SDL_LibName;
function SDL_fmod(x, y: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_fmodf(x, y: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_FRectEmpty(const r: PSDL_FRect): Boolean; inline;
function SDL_FRectEquals(const a, b: PSDL_FRect): Boolean; Inline;
function SDL_FRectEqualsEpsilon(const a, b: PSDL_FRect; const epsilon: cfloat): Boolean; Inline;
procedure SDL_free(mem: Pointer); cdecl; external SDL_LibName;
procedure SDL_FreeAudioStream(stream: PSDL_AudioStream); cdecl; external SDL_LibName;
procedure SDL_FreeCursor(cursor: PSDL_Cursor); cdecl; external SDL_LibName;
procedure SDL_FreeFormat(format: PSDL_PixelFormat); cdecl; external SDL_LibName;
procedure SDL_FreePalette(palette: PSDL_Palette); cdecl; external SDL_LibName;
procedure SDL_FreeRW(area: PSDL_RWops); cdecl; external SDL_LibName;
procedure SDL_FreeSurface(surface: PSDL_Surface); cdecl; external SDL_LibName;
procedure SDL_FreeWAV(audio_buf: pcuint8); cdecl; external SDL_LibName;
function SDL_GameControllerAddMapping( mappingString: PAnsiChar ): cint cdecl; external SDL_LibName;
function SDL_GameControllerAddMappingsFromFile(Const FilePath:PAnsiChar):cint32;
function SDL_GameControllerAddMappingsFromRW(rw: PSDL_RWops; freerw: cint32):cint32; cdecl; external SDL_LibName;
procedure SDL_GameControllerClose(gamecontroller: PSDL_GameController) cdecl; external SDL_LibName;
function SDL_GameControllerEventState(state: cint): cint cdecl; external SDL_LibName;
function SDL_GameControllerFromInstanceID(joyid: TSDL_JoystickID): PSDL_GameController; cdecl; external SDL_LibName;
function SDL_GameControllerFromPlayerIndex(player_index: cint): PSDL_GameController; cdecl; external SDL_LibName;
function SDL_GameControllerGetAppleSFSymbolsNameForAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GameControllerGetAppleSFSymbolsNameForButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GameControllerGetAttached(gamecontroller: PSDL_GameController): TSDL_Bool cdecl; external SDL_LibName;
function SDL_GameControllerGetAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): cint16 cdecl; external SDL_LibName;
function SDL_GameControllerGetAxisFromString(pchString: PAnsiChar): TSDL_GameControllerAxis cdecl; external SDL_LibName;
function SDL_GameControllerGetBindForAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): TSDL_GameControllerButtonBind cdecl; external SDL_LibName;
function SDL_GameControllerGetBindForButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): TSDL_GameControllerButtonBind cdecl; external SDL_LibName;
function SDL_GameControllerGetButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): cuint8 cdecl; external SDL_LibName;
function SDL_GameControllerGetButtonFromString(pchString: PAnsiChar): TSDL_GameControllerButton cdecl; external SDL_LibName;
function SDL_GameControllerGetFirmwareVersion(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;
function SDL_GameControllerGetJoystick(gamecontroller: PSDL_GameController): PSDL_Joystick cdecl; external SDL_LibName;
function SDL_GameControllerGetNumTouchpadFingers(gamecontroller: PSDL_GameController; touchpad: cint): cint; cdecl; external SDL_LibName;
function SDL_GameControllerGetNumTouchpads(gamecontroller: PSDL_GameController): cint; cdecl; external SDL_LibName;
function SDL_GameControllerGetPlayerIndex(gamecontroller: PSDL_GameController): cint; cdecl; external SDL_LibName;
function SDL_GameControllerGetProduct(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;
function SDL_GameControllerGetProductVersion(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;
function SDL_GameControllerGetSensorData(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType; data: pcfloat; num_values: cint): cint; cdecl; external SDL_LibName;
function SDL_GameControllerGetSensorDataRate(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType): cfloat; cdecl; external SDL_LibName;
function SDL_GameControllerGetSensorDataWithTimestamp( gamecontroller: PSDL_GameController; senstype: TSDL_SensorType; timestamp: pcuint64; data: pcfloat; num_values: cint ): cint; cdecl; external SDL_LibName;
function SDL_GameControllerGetSerial(gamecontroller: PSDL_GameController): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GameControllerGetSteamHandle(gamecontroller: PSDL_GameController): cuint64; cdecl; external SDL_LibName;
function SDL_GameControllerGetStringForAxis(axis: TSDL_GameControllerAxis): PAnsiChar cdecl; external SDL_LibName;
function SDL_GameControllerGetStringForButton(button: TSDL_GameControllerButton): PAnsiChar cdecl; external SDL_LibName;
function SDL_GameControllerGetTouchpadFinger( gamecontroller: PSDL_GameController; touchpad, finger: cint; state: pcuint8; x, y, pressure: pcfloat ): cint; cdecl; external SDL_LibName;
function SDL_GameControllerGetType(gamecontroller: PSDL_GameController): TSDL_GameControllerType; cdecl; external SDL_LibName;
function SDL_GameControllerGetVendor(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;
function SDL_GameControllerHasAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GameControllerHasButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GameControllerHasLED(gamecontroller: PSDL_GameController): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GameControllerHasRumble(gamecontroller: PSDL_GameController): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GameControllerHasRumbleTriggers(gamecontroller: PSDL_GameController): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GameControllerHasSensor(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GameControllerIsSensorEnabled(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GameControllerMapping( gamecontroller: PSDL_GameController ): PAnsiChar cdecl; external SDL_LibName;
function SDL_GameControllerMappingForDeviceIndex(joystick_index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GameControllerMappingForGUID( guid: TSDL_JoystickGUID ): PAnsiChar cdecl; external SDL_LibName;
function SDL_GameControllerMappingForIndex(mapping_index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GameControllerName(gamecontroller: PSDL_GameController): PAnsiChar cdecl; external SDL_LibName;
function SDL_GameControllerNameForIndex(joystick_index: cint): PAnsiChar cdecl; external SDL_LibName;
function SDL_GameControllerNumMappings():cint; cdecl; external SDL_LibName;
function SDL_GameControllerOpen(joystick_index: cint): PSDL_GameController cdecl; external SDL_LibName;
function SDL_GameControllerPath(gamecontroller: PSDL_GameController): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GameControllerPathForIndex(joystick_index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GameControllerRumble( gamecontroller: PSDL_GameController; low_frequency_rumble, high_frequency_rumble: cuint16; duration_ms: cuint32 ): cint; cdecl; external SDL_LibName;
function SDL_GameControllerRumbleTriggers( gamecontroller: PSDL_GameController; left_rumble, right_rumble: cuint16; duration_ms: cuint32 ): cint; cdecl; external SDL_LibName;
function SDL_GameControllerSendEffect(gamecontroller: PSDL_GameController; data: Pointer; size: cint): cint; cdecl; external SDL_LibName;
function SDL_GameControllerSetLED(gamecontroller: PSDL_GameController; red, green, blue: cuint8): cint; cdecl; external SDL_LibName;
procedure SDL_GameControllerSetPlayerIndex(gamecontroller: PSDL_GameController; player_index: cint); cdecl; external SDL_LibName;
function SDL_GameControllerSetSensorEnabled(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType; enabled: TSDL_bool): cint; cdecl; external SDL_LibName;
function SDL_GameControllerTypeForIndex(joystick_index: cint): TSDL_GameControllerType; cdecl; external SDL_LibName;
procedure SDL_GameControllerUpdate() cdecl; external SDL_LibName;
function SDL_GetAudioDeviceName(index: cint; iscapture: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetAudioDeviceSpec(index: cint; iscapture: cint; spec: PSDL_AudioSpec): cint; cdecl; external SDL_LibName;
function SDL_GetAudioDeviceStatus(dev: TSDL_AudioDeviceID): TSDL_AudioStatus; cdecl; external SDL_LibName;
function SDL_GetAudioDriver(index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetAudioStatus: TSDL_AudioStatus; cdecl; external SDL_LibName;
function SDL_GetBasePath(): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetClipboardText(): PAnsiChar; cdecl; external SDL_LibName;
procedure SDL_GetClipRect(surface: PSDL_Surface; rect: PSDL_Rect); cdecl; external SDL_LibName;
function SDL_GetClosestDisplayMode(displayIndex: cint; const mode: PSDL_DisplayMode; closest: PSDL_DisplayMode): PSDL_DisplayMode; cdecl; external SDL_LibName;
function SDL_GetColorKey(surface: PSDL_Surface; key: pcuint32): cint; cdecl; external SDL_LibName;
function SDL_GetCPUCacheLineSize(): cint; cdecl; external SDL_LibName;
function SDL_GetCPUCount(): cint; cdecl; external SDL_LibName;
function SDL_GetCurrentAudioDriver: PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetCurrentDisplayMode(displayIndex: cint; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;
function SDL_GetCurrentVideoDriver: PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetCursor: PSDL_Cursor; cdecl; external SDL_LibName;
function SDL_GetDefaultAudioInfo(name: PPAnsiChar; spec: PSDL_AudioSpec; iscapture: cint): cint; cdecl; external SDL_LibName;
function SDL_GetDefaultCursor: PSDL_Cursor; cdecl; external SDL_LibName;
function SDL_GetDesktopDisplayMode(displayIndex: cint; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;
function SDL_GetDisplayBounds(displayIndex: cint; rect: PSDL_Rect): cint; cdecl; external SDL_LibName;
function SDL_GetDisplayDPI(displayIndex: cint; ddpi, hdpi, vdpi: pcfloat): cint; cdecl; external SDL_LibName;
function SDL_GetDisplayMode(displayIndex: cint; modeIndex: cint; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;
function SDL_GetDisplayName(displayIndex: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetDisplayOrientation(displayIndex: cint): TSDL_DisplayOrientation; cdecl; external SDL_LibName;
function SDL_GetDisplayUsableBounds(displayIndex: cint; rect: PSDL_Rect): cint; cdecl; external SDL_LibName;
function SDL_GetError: PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetErrorMsg(const errstr: PAnsiChar; maxlen: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetEventFilter(var filter: PSDL_EventFilter; var userdata: PPointer): TSDL_Bool cdecl; external SDL_LibName;
function SDL_GetEventState(type_: TSDL_EventType): cuint8;
function SDL_GetGlobalMouseState(x, y: pcint32): cuint32; cdecl; external SDL_LibName;
function SDL_GetGrabbedWindow(): PSDL_Window; cdecl; external SDL_LibName;
function SDL_GetHint(const name: PAnsiChar): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetHintBoolean(const name: PAnsiChar; default_value: TSDL_Bool): TSDL_Bool; cdecl; external SDL_LibName;
procedure SDL_GetJoystickGUIDInfo(guid: TSDL_JoystickGUID; vendor: pcuint16; product: pcuint16; version: pcuint16; crc16: pcuint16); cdecl; external SDL_LibName;
function SDL_GetKeyboardFocus: PSDL_Window; cdecl; external SDL_LibName;
function SDL_GetKeyboardState(numkeys: pcint): pcuint8; cdecl; external SDL_LibName;
function SDL_GetKeyFromName(name: PAnsiChar): TSDL_Keycode; cdecl; external SDL_LibName;
function SDL_GetKeyFromScancode(scancode: TSDL_Scancode): TSDL_Keycode; cdecl; external SDL_LibName;
function SDL_GetKeyName(key: TSDL_Keycode): PAnsiChar; cdecl; external SDL_LibName;
procedure SDL_GetMemoryFunctions( malloc_func: PSDL_malloc_func; calloc_func: PSDL_calloc_func; realloc_func: PSDL_realloc_func; free_func: PSDL_free_func ); cdecl; external SDL_LibName;
function SDL_GetModState: TSDL_Keymod; cdecl; external SDL_LibName;
function SDL_GetMouseFocus: PSDL_Window; cdecl; external SDL_LibName;
function SDL_GetMouseState(x: pcint; y: pcint): cuint32; cdecl; external SDL_LibName;
function SDL_GetNumAllocations(): cint; cdecl; external SDL_LibName;
function SDL_GetNumAudioDevices(iscapture: cint): cint; cdecl; external SDL_LibName;
function SDL_GetNumAudioDrivers: cint; cdecl; external SDL_LibName;
function SDL_GetNumDisplayModes(displayIndex: cint): cint; cdecl; external SDL_LibName;
function SDL_GetNumRenderDrivers: cint32 cdecl; external SDL_LibName;
function SDL_GetNumTouchDevices(): cint; cdecl; external SDL_LibName;
function SDL_GetNumTouchFingers(touchID: TSDL_TouchID): cint; cdecl; external SDL_LibName;
function SDL_GetNumVideoDisplays: cint; cdecl; external SDL_LibName;
function SDL_GetNumVideoDrivers: cint; cdecl; external SDL_LibName;
procedure SDL_GetOriginalMemoryFunctions( malloc_func: PSDL_malloc_func; calloc_func: PSDL_calloc_func; realloc_func: PSDL_realloc_func; free_func: PSDL_free_func ); cdecl; external SDL_LibName;
function SDL_GetPerformanceCounter: cuint64; cdecl; external SDL_LibName;
function SDL_GetPerformanceFrequency: cuint64; cdecl; external SDL_LibName;
function SDL_GetPixelFormatName(format: cuint32): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetPlatform: PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetPointDisplayIndex(const point: PSDL_Point): cint; cdecl; external SDL_LibName;
function SDL_GetPowerInfo(secs: pcint; pct: pcint): TSDL_PowerState; cdecl; external SDL_LibName;
function SDL_GetPreferredLocales(): PSDL_Locale; cdecl; external SDL_LibName;
function SDL_GetPrefPath(org: PAnsiChar; app: PAnsiChar): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetPrimarySelectionText(): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetQueuedAudioSize(dev: TSDL_AudioDeviceID): cuint32; cdecl; external SDL_LibName;
function SDL_GetRectDisplayIndex(const rect: PSDL_Rect): cint; cdecl; external SDL_LibName;
function SDL_GetRelativeMouseMode: TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GetRelativeMouseState(x: pcint; y: pcint): cuint32; cdecl; external SDL_LibName;
function SDL_GetRenderDrawBlendMode(renderer: PSDL_Renderer; blendMode: PSDL_BlendMode): cint32 cdecl; external SDL_LibName;
function SDL_GetRenderDrawColor(renderer: PSDL_Renderer; r: pcuint8; g: pcuint8; b: pcuint8; a: pcuint8): cint32 cdecl; external SDL_LibName;
function SDL_GetRenderDriverInfo(index: cint32; info: PSDL_RendererInfo): cint32 cdecl; external SDL_LibName;
function SDL_GetRenderer(window: PSDL_Window): PSDL_Renderer cdecl; external SDL_LibName;
function SDL_GetRendererInfo(renderer: PSDL_Renderer; info: PSDL_RendererInfo): cint32 cdecl; external SDL_LibName;
function SDL_GetRendererOutputSize(renderer: PSDL_Renderer; w: pcint; h: pcint): cint32 cdecl; external SDL_LibName;
function SDL_GetRenderTarget(renderer: PSDL_Renderer): PSDL_Texture cdecl; external SDL_LibName;
function SDL_GetRevision: PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetRevisionNumber: cint; cdecl; external SDL_LibName;
procedure SDL_GetRGB(pixel: cuint32; const format: PSDL_PixelFormat; r: pcuint8; g: pcuint8; b: pcuint8); cdecl; external SDL_LibName;
procedure SDL_GetRGBA(pixel: cuint32; const format: PSDL_PixelFormat; r: pcuint8; g: pcuint8; b: pcuint8; a: pcuint8); cdecl; external SDL_LibName;
function SDL_GetScancodeFromKey(key: TSDL_Keycode): TSDL_Scancode; cdecl; external SDL_LibName;
function SDL_GetScancodeFromName(name: PAnsiChar): TSDL_Scancode; cdecl; external SDL_LibName;
function SDL_GetScancodeName(scancode: TSDL_Scancode): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetShapedWindowMode(window: PSDL_Window; shape_mode: PSDL_WindowShapeMode): cint; cdecl; external SDL_LibName;
function SDL_GetSurfaceAlphaMod(surface: PSDL_Surface; alpha: pcuint8): cint; cdecl; external SDL_LibName;
function SDL_GetSurfaceBlendMode(surface: PSDL_Surface; blendMode: PSDL_BlendMode): cint; cdecl; external SDL_LibName;
function SDL_GetSurfaceColorMod(surface: PSDL_Surface; r: pcuint8; g: pcuint8; b: pcuint8): cint; cdecl; external SDL_LibName;
function SDL_GetSystemRAM(): cint; cdecl; external SDL_LibName;
function SDL_GetTextureAlphaMod(texture: PSDL_Texture; alpha: pcuint8): cint32 cdecl; external SDL_LibName;
function SDL_GetTextureBlendMode(texture: PSDL_Texture; blendMode: PSDL_BlendMode): cint32 cdecl; external SDL_LibName;
function SDL_GetTextureColorMod(texture: PSDL_Texture; r: pcuint8; g: pcuint8; b: pcuint8): cint32 cdecl; external SDL_LibName;
function SDL_GetTextureScaleMode(texture: PSDL_Texture; scaleMode: PSDL_ScaleMode): cint; cdecl; external SDL_LibName;
function SDL_GetTextureUserData(texture: PSDL_Texture): Pointer; cdecl; external SDL_LibName;
function SDL_GetThreadID(thread: PSDL_Thread): TSDL_ThreadID; cdecl; external SDL_LibName;
function SDL_GetThreadName(thread: PSDL_Thread): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetTicks: cuint32; cdecl; external SDL_LibName;
function SDL_GetTicks64: cuint64; cdecl; external SDL_LibName;
function SDL_GetTouchDevice(index: cint): TSDL_TouchID; cdecl; external SDL_LibName;
function SDL_GetTouchDeviceType(touchID: TSDL_TouchID): TSDL_TouchDeviceType; cdecl; external SDL_LibName;
function SDL_GetTouchFinger(touchID: TSDL_TouchID; index: cint): PSDL_Finger; cdecl; external SDL_LibName;
function SDL_GetTouchName(index: cint): PAnsiChar; cdecl; external SDL_LibName;
procedure SDL_GetVersion(ver: PSDL_Version); cdecl; external SDL_LibName;
function SDL_GetVideoDriver(index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetWindowBordersSize(window: PSDL_Window; top, left, bottom, right: pcint): cint; cdecl; external SDL_LibName;
function SDL_GetWindowBrightness(window: PSDL_Window): cfloat; cdecl; external SDL_LibName;
function SDL_GetWindowData(window: PSDL_Window; const name: PAnsiChar): Pointer; cdecl; external SDL_LibName;
function SDL_GetWindowDisplayIndex(window: PSDL_Window): cint; cdecl; external SDL_LibName;
function SDL_GetWindowDisplayMode(window: PSDL_Window; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;
function SDL_GetWindowFlags(window: PSDL_Window): TSDL_WindowFlags; cdecl; external SDL_LibName;
function SDL_GetWindowFromID(id: cuint32): PSDL_Window; cdecl; external SDL_LibName;
function SDL_GetWindowGammaRamp(window: PSDL_Window; red: pcuint16; green: pcuint16; blue: pcuint16): cint; cdecl; external SDL_LibName;
function SDL_GetWindowGrab(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GetWindowICCProfile(window: PSDL_Window; size: pcsize_t): Pointer; cdecl; external SDL_LibName;
function SDL_GetWindowID(window: PSDL_Window): cuint32; cdecl; external SDL_LibName;
function SDL_GetWindowKeyboardGrab(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;
procedure SDL_GetWindowMaximumSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;
procedure SDL_GetWindowMinimumSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;
function SDL_GetWindowMouseGrab(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GetWindowMouseRect(window: PSDL_Window): PSDL_Rect; cdecl; external SDL_LibName;
function SDL_GetWindowOpacity(window: PSDL_Window; out_opacity: pcfloat): cint; cdecl; external SDL_LibName;
function SDL_GetWindowPixelFormat(window: PSDL_Window): cuint32; cdecl; external SDL_LibName;
procedure SDL_GetWindowPosition(window: PSDL_Window; x: pcint; y: pcint); cdecl; external SDL_LibName;
procedure SDL_GetWindowSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;
procedure SDL_GetWindowSizeInPixels(window: PSDL_Window; w, h: pcuint); cdecl; external SDL_LibName;
function SDL_GetWindowSurface(window: PSDL_Window): PSDL_Surface; cdecl; external SDL_LibName;
function SDL_GetWindowTitle(window: PSDL_Window): PAnsiChar; cdecl; external SDL_LibName;
function SDL_GetWindowWMInfo(window: PSDL_Window; info: PSDL_SysWMinfo): TSDL_bool; cdecl; external SDL_LibName;
function SDL_GetYUVConversionMode: TSDL_YUV_CONVERSION_MODE; cdecl; external SDL_LibName;
function SDL_GetYUVConversionModeForResolution(width: cint; height: cint): TSDL_YUV_CONVERSION_MODE; cdecl; external SDL_LibName;
function SDL_GL_BindTexture(texture: PSDL_Texture; texw: pcfloat; texh: pcfloat): cint32 cdecl; external SDL_LibName;
function SDL_GL_CreateContext(window: PSDL_Window): TSDL_GLContext; cdecl; external SDL_LibName;
procedure SDL_GL_DeleteContext(context: TSDL_GLContext); cdecl; external SDL_LibName;
function SDL_GL_ExtensionSupported(const extension: PAnsiChar): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_GL_GetAttribute(attr: TSDL_GLattr; value: pcint): cint; cdecl; external SDL_LibName;
function SDL_GL_GetCurrentContext: TSDL_GLContext; cdecl; external SDL_LibName;
function SDL_GL_GetCurrentWindow: PSDL_Window; cdecl; external SDL_LibName;
procedure SDL_GL_GetDrawableSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;
function SDL_GL_GetProcAddress(const proc: PAnsiChar): Pointer; cdecl; external SDL_LibName;
function SDL_GL_GetSwapInterval: cint; cdecl; external SDL_LibName;
function SDL_GL_LoadLibrary(const path: PAnsiChar): cint; cdecl; external SDL_LibName;
function SDL_GL_MakeCurrent(window: PSDL_Window; context: TSDL_GLContext): cint; cdecl; external SDL_LibName;
procedure SDL_GL_ResetAttributes(); cdecl; external SDL_LibName;
function SDL_GL_SetAttribute(attr: TSDL_GLattr; value: cint): cint; cdecl; external SDL_LibName;
function SDL_GL_SetSwapInterval(interval: cint): cint; cdecl; external SDL_LibName;
procedure SDL_GL_SwapWindow(window: PSDL_Window); cdecl; external SDL_LibName;
function SDL_GL_UnbindTexture(texture: PSDL_Texture): cint32 cdecl; external SDL_LibName;
procedure SDL_GL_UnloadLibrary; cdecl; external SDL_LibName;
function SDL_GUIDFromString(const pchGUID: PAnsiChar): TSDL_GUID; cdecl; external SDL_LibName;
procedure SDL_GUIDToString(guid: TSDL_GUID; pszGUID: PAnsiChar; cbGUID: cint); cdecl; external SDL_LibName;
procedure SDL_HapticClose(haptic: PSDL_Haptic); cdecl; external SDL_LibName;
procedure SDL_HapticDestroyEffect(haptic: PSDL_Haptic; effect: cint); cdecl; external SDL_LibName;
function SDL_HapticEffectSupported(haptic: PSDL_Haptic; effect: PSDL_HapticEffect): cint; cdecl; external SDL_LibName;
function SDL_HapticGetEffectStatus(haptic: PSDL_Haptic; effect: cint): cint; cdecl; external SDL_LibName;
function SDL_HapticIndex(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticName(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_HapticNewEffect(haptic: PSDL_Haptic; effect: PSDL_HapticEffect): cint; cdecl; external SDL_LibName;
function SDL_HapticNumAxes(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticNumEffects(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticNumEffectsPlaying(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticOpen(device_index: cint): PSDL_Haptic; cdecl; external SDL_LibName;
function SDL_HapticOpened(device_index: cint): cint; cdecl; external SDL_LibName;
function SDL_HapticOpenFromJoystick(joystick: PSDL_Joystick): PSDL_Haptic; cdecl; external SDL_LibName;
function SDL_HapticOpenFromMouse: PSDL_Haptic; cdecl; external SDL_LibName;
function SDL_HapticPause(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticQuery(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticRumbleInit(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticRumblePlay(haptic: PSDL_Haptic; strength: cfloat; length: cuint32): cint; cdecl; external SDL_LibName;
function SDL_HapticRumbleStop(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticRumbleSupported(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticRunEffect(haptic: PSDL_Haptic; effect: cint; iterations: cuint32): cint; cdecl; external SDL_LibName;
function SDL_HapticSetAutocenter(haptic: PSDL_Haptic; autocenter: cint): cint; cdecl; external SDL_LibName;
function SDL_HapticSetGain(haptic: PSDL_Haptic; gain: cint): cint; cdecl; external SDL_LibName;
function SDL_HapticStopAll(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticStopEffect(haptic: PSDL_Haptic; effect: cint): cint; cdecl; external SDL_LibName;
function SDL_HapticUnpause(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;
function SDL_HapticUpdateEffect(haptic: PSDL_Haptic; effect: cint; data: PSDL_HapticEffect): cint; cdecl; external SDL_LibName;
function SDL_Has3DNow(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasAltiVec(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasARMSIMD(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasAVX(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasAVX2(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasAVX512F(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasClipboardText(): TSDL_bool; cdecl; external SDL_LibName;
function SDL_HasColorKey(surface: PSDL_Surface): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasEvent(type_: TSDL_EventType): TSDL_Bool cdecl; external SDL_LibName;
function SDL_HasEvents(minType, maxType: TSDL_EventType): TSDL_Bool cdecl; external SDL_LibName;
function SDL_HasIntersection(const a, b: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasIntersectionF(const a, b: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasMMX(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasNEON(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasPrimarySelectionText(): TSDL_bool; cdecl; external SDL_LibName;
function SDL_HasRDTSC(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasScreenKeyboardSupport: TSDL_bool; cdecl; external SDL_LibName;
function SDL_HasSSE(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasSSE2(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasSSE3(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasSSE41(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasSSE42(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasSurfaceRLE(surface: PSDL_Surface): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_HasWindowSurface(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;
procedure SDL_HideWindow(window: PSDL_Window); cdecl; external SDL_LibName;
procedure SDL_hid_ble_scan(active: TSDL_bool); cdecl; external SDL_LibName;
procedure SDL_hid_close(dev: PSDL_hid_device); cdecl; external SDL_LibName;
function SDL_hid_device_change_count(): cUint32; cdecl; external SDL_LibName;
function SDL_hid_enumerate(vendor_id, product_id: cushort): PSDL_hid_device_info; cdecl; external SDL_LibName;
function SDL_hid_exit(): cint; cdecl; external SDL_LibName;
procedure SDL_hid_free_enumeration(devs: PSDL_hid_device_info); cdecl; external SDL_LibName;
function SDL_hid_get_feature_report(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;
function SDL_hid_get_indexed_string(dev: PSDL_hid_device; string_index: cint; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;
function SDL_hid_get_manufacturer_string(dev: PSDL_hid_device; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;
function SDL_hid_get_product_string(dev: PSDL_hid_device; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;
function SDL_hid_get_serial_number_string(dev: PSDL_hid_device; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;
function SDL_hid_init(): cint; cdecl; external SDL_LibName;
function SDL_hid_open(vendor_id, product_id: cushort; serial_number: pcwchar_t): PSDL_hid_device; cdecl; external SDL_LibName;
function SDL_hid_open_path(path: PAnsiChar; bExclusive: cuint): PSDL_hid_device; cdecl; external SDL_LibName;
function SDL_hid_read(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;
function SDL_hid_read_timeout(dev: PSDL_hid_device; data: pcUint8; length: csize_t; milliseconds: cint): cint; cdecl; external SDL_LibName;
function SDL_hid_send_feature_report(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;
function SDL_hid_set_nonblocking(dev: PSDL_hid_device; nonblock: cint): cint; cdecl; external SDL_LibName;
function SDL_hid_write(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;
function SDL_iconv(cd: PSDL_iconv; Const inbuf: PPAnsiChar; inbytesleft: pcsize_t; outbuf: PPAnsiChar; outbytesleft: pcsize_t): csize_t; cdecl; external SDL_LibName;
function SDL_iconv_close(cd: PSDL_iconv): cint; cdecl; external SDL_LibName;
function SDL_iconv_open(Const tocode, fromcode: PAnsiChar): PSDL_iconv; cdecl; external SDL_LibName;
function SDL_iconv_string(Const tocode, fromcode, inbuf: PAnsiChar; inbytesleft: csize_t): PAnsiChar; cdecl; external SDL_LibName;
function SDL_iconv_utf8_locale(Const str: PAnsiChar): PAnsiChar; cdecl;
function SDL_iconv_utf8_ucs2(Const str: PAnsiChar): pcUint16; cdecl;
function SDL_iconv_utf8_ucs4(Const str: PAnsiChar): pcUint32; cdecl;
function SDL_Init(flags: TSDL_Init): cint; cdecl; external SDL_LibName;
function SDL_InitSubSystem(flags: TSDL_Init): cint; cdecl; external SDL_LibName;
function SDL_IntersectFRect(const a, b: PSDL_FRect; result: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_IntersectFRectAndLine(const rect: PSDL_FRect; X1, Y1, X2, Y2: pcfloat): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_IntersectRect(const A, B: PSDL_Rect; result: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_IntersectRectAndLine(const rect: PSDL_Rect; X1, Y1, X2, Y2: pcint): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_isalnum(x: cint):cint; cdecl; external SDL_LibName;
function SDL_isalpha(x: cint):cint; cdecl; external SDL_LibName;
function SDL_isblank(x: cint):cint; cdecl; external SDL_LibName;
function SDL_iscntrl(x: cint):cint; cdecl; external SDL_LibName;
function SDL_isdigit(x: cint):cint; cdecl; external SDL_LibName;
function SDL_IsGameController(joystick_index: cint): TSDL_Bool cdecl; external SDL_LibName;
function SDL_isgraph(x: cint):cint; cdecl; external SDL_LibName;
function SDL_islower(x: cint):cint; cdecl; external SDL_LibName;
function SDL_ISPIXELFORMAT_FOURCC(format: Variant): Boolean;
function SDL_isprint(x: cint):cint; cdecl; external SDL_LibName;
function SDL_ispunct(x: cint):cint; cdecl; external SDL_LibName;
function SDL_IsScreenKeyboardShown(window: PSDL_Window): TSDL_bool; cdecl; external SDL_LibName;
function SDL_IsScreenSaverEnabled: TSDL_Bool; cdecl; external SDL_LibName;
function SDL_IsShapedWindow(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_isspace(x: cint):cint; cdecl; external SDL_LibName;
function SDL_IsTablet(): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_IsTextInputActive: TSDL_bool; cdecl; external SDL_LibName;
function SDL_IsTextInputShown: TSDL_bool; cdecl; external SDL_LibName;
function SDL_isupper(x: cint):cint; cdecl; external SDL_LibName;
function SDL_isxdigit(x: cint):cint; cdecl; external SDL_LibName;
function SDL_JoystickAttachVirtual(type_: TSDL_JoystickType; naxes: cint; nbuttons: cint; nhats: cint): cint; cdecl; external SDL_LibName;
function SDL_JoystickAttachVirtualEx(const desc: PSDL_VirtualJoystickDesc): cint; cdecl; external SDL_LibName;
procedure SDL_JoystickClose(joystick: PSDL_Joystick); cdecl; external SDL_LibName;
function SDL_JoystickCurrentPowerLevel(joystick: PSDL_Joystick): TSDL_JoystickPowerLevel; cdecl; external SDL_LibName;
function SDL_JoystickDetachVirtual(device_index: cint): cint; cdecl; external SDL_LibName;
function SDL_JoystickEventState(state: cint): cint; cdecl; external SDL_LibName;
function SDL_JoystickFromInstanceID(instance_id: TSDL_JoystickID): PSDL_Joystick; cdecl; external SDL_LibName;
function SDL_JoystickFromPlayerIndex(player_index: cint): PSDL_Joystick; cdecl; external SDL_LibName;
function SDL_JoystickGetAttached(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_JoystickGetAxis(joystick: PSDL_Joystick; axis: cint): cint16; cdecl; external SDL_LibName;
function SDL_JoystickGetAxisInitialState(joystick: PSDL_Joystick; axis: cint; state: pcint16): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_JoystickGetBall(joystick: PSDL_Joystick; ball: cint; dx: pcint; dy: pcint): cint; cdecl; external SDL_LibName;
function SDL_JoystickGetButton(joystick: PSDL_Joystick; button: cint): cuint8; cdecl; external SDL_LibName;
function SDL_JoystickGetDeviceGUID(device_index: cint): TSDL_JoystickGUID; cdecl; external SDL_LibName;
function SDL_JoystickGetDeviceInstanceID(device_index: cint): TSDL_JoystickID; cdecl; external SDL_LibName;
function SDL_JoystickGetDevicePlayerIndex(device_index: cint): cint; cdecl; external SDL_LibName;
function SDL_JoystickGetDeviceProduct(device_index: cint): cuint16; cdecl; external SDL_LibName;
function SDL_JoystickGetDeviceProductVersion(device_index: cint): cuint16; cdecl; external SDL_LibName;
function SDL_JoystickGetDeviceType(device_index: cint): TSDL_JoystickType; cdecl; external SDL_LibName;
function SDL_JoystickGetDeviceVendor(device_index: cint): cuint16; cdecl; external SDL_LibName;
function SDL_JoystickGetFirmwareVersion(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;
function SDL_JoystickGetGUID(joystick: PSDL_Joystick): TSDL_JoystickGUID; cdecl; external SDL_LibName;
function SDL_JoystickGetGUIDFromString(const pchGUID: PAnsiChar): TSDL_JoystickGUID; cdecl; external SDL_LibName;
procedure SDL_JoystickGetGUIDString(guid: TSDL_JoystickGUID; pszGUID: PAnsiChar; cbGUID: cint); cdecl; external SDL_LibName;
function SDL_JoystickGetHat(joystick: PSDL_Joystick; hat: cint): cuint8; cdecl; external SDL_LibName;
function SDL_JoystickGetPlayerIndex(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;
function SDL_JoystickGetProduct(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;
function SDL_JoystickGetProductVersion(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;
function SDL_JoystickGetSerial(joystick: PSDL_Joystick): PAnsiChar; cdecl; external SDL_LibName;
function SDL_JoystickGetType(joystick: PSDL_Joystick): TSDL_JoystickType; cdecl; external SDL_LibName;
function SDL_JoystickGetVendor(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;
function SDL_JoystickHasLED(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_JoystickHasRumble(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_JoystickHasRumbleTriggers(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_JoystickInstanceID(joystick: PSDL_Joystick): TSDL_JoystickID; cdecl; external SDL_LibName;
function SDL_JoystickIsHaptic(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;
function SDL_JoystickIsVirtual(device_index: cint): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_JoystickName(joystick: PSDL_Joystick): PAnsiChar; cdecl; external SDL_LibName;
function SDL_JoystickNameForIndex(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_JoystickNumAxes(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;
function SDL_JoystickNumBalls(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;
function SDL_JoystickNumButtons(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;
function SDL_JoystickNumHats(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;
function SDL_JoystickOpen(device_index: cint): PSDL_Joystick; cdecl; external SDL_LibName;
function SDL_JoystickPath(joystick: PSDL_Joystick): PAnsiChar; cdecl; external SDL_LibName;
function SDL_JoystickPathForIndex(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_JoystickRumble(joystick: PSDL_Joystick; low_frequency_rumble: cuint16; high_frequency_rumble: cuint16; duration_ms: cuint32): cint; cdecl; external SDL_LibName;
function SDL_JoystickRumbleTriggers(joystick: PSDL_Joystick; left_rumble: cuint16; right_rumble: cuint16; duration_ms: cuint32): cint; cdecl; external SDL_LibName;
function SDL_JoystickSendEffect(joystick: PSDL_Joystick; const data: Pointer; size: cint): cint; cdecl; external SDL_LibName;
function SDL_JoystickSetLED(joystick: PSDL_Joystick; red: cuint8; green: cuint8; blue: cuint8): cint; cdecl; external SDL_LibName;
procedure SDL_JoystickSetPlayerIndex(joystick: PSDL_Joystick; player_index: cint); cdecl; external SDL_LibName;
function SDL_JoystickSetVirtualAxis(joystick: PSDL_Joystick; axis: cint; value: cint16): cint; cdecl; external SDL_LibName;
function SDL_JoystickSetVirtualButton(joystick: PSDL_Joystick; button: cint; value: cuint8): cint; cdecl; external SDL_LibName;
function SDL_JoystickSetVirtualHat(joystick: PSDL_Joystick; hat: cint; value: cuint8): cint; cdecl; external SDL_LibName;
procedure SDL_JoystickUpdate(); cdecl; external SDL_LibName;
function SDL_LoadBMP(_file: PAnsiChar): PSDL_Surface;
function SDL_LoadBMP_RW(src: PSDL_RWops; freesrc: cint): PSDL_Surface; cdecl; external SDL_LibName;
function SDL_LoadDollarTemplates(touchId: TSDL_TouchID; src: PSDL_RWops): cint; cdecl; external SDL_LibName;
function SDL_LoadFile(file_: PAnsiChar; datasize: pcsize_t): Pointer; cdecl; external SDL_LibName;
function SDL_LoadFile_RW(src: PSDL_RWops; datasize: pcsize_t; freesrc: cint): Pointer; cdecl; external SDL_LibName;
function SDL_LoadFunction(handle: Pointer; name: PAnsiChar): Pointer; cdecl; external SDL_LibName;
function SDL_LoadObject(sofile: PAnsiChar): Pointer; cdecl; external SDL_LibName;
function SDL_LoadWAV(file_: PAnsiChar; spec: PSDL_AudioSpec; audio_buf: ppcuint8; audio_len: pcuint32): PSDL_AudioSpec;
function SDL_LoadWAV_RW(src: PSDL_RWops; freesrc: cint; spec: PSDL_AudioSpec; audio_buf: ppcuint8; audio_len: pcuint32): PSDL_AudioSpec; cdecl; external SDL_LibName;
procedure SDL_LockAudio; cdecl; external SDL_LibName;
procedure SDL_LockAudioDevice(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;
procedure SDL_LockJoysticks(); cdecl; external SDL_LibName;
function SDL_LockMutex(mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;
procedure SDL_LockSensors(); cdecl; external SDL_LibName;
function SDL_LockSurface(surface: PSDL_Surface): cint; cdecl; external SDL_LibName;
function SDL_LockTexture(texture: PSDL_Texture; const rect: PSDL_Rect; pixels: PPointer; pitch: pcint): cint; cdecl; external SDL_LibName;
function SDL_LockTextureToSurface(texture: PSDL_Texture; const rect: PSDL_Rect; surface: PPSDL_Surface): cint; cdecl; external SDL_LibName;
procedure SDL_Log(const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
function SDL_log10(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_log10f(x: cfloat): cfloat; cdecl; external SDL_LibName;
procedure SDL_LogCritical(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
procedure SDL_LogDebug(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
procedure SDL_LogError(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
procedure SDL_LogGetOutputFunction(callback: PSDL_LogOutputFunction; userdata: PPointer); cdecl; external SDL_LibName;
function SDL_LogGetPriority(category: TSDL_LogCategory): TSDL_LogPriority; cdecl; external SDL_LibName;
procedure SDL_LogInfo(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
procedure SDL_LogMessage(category: TSDL_LogCategory; priority: TSDL_LogPriority; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
procedure SDL_LogMessageV(category: TSDL_LogCategory; priority: TSDL_LogPriority; const fmt: PAnsiChar; ap: array of const); cdecl; external SDL_LibName;
procedure SDL_LogResetPriorities(); cdecl; external SDL_LibName;
procedure SDL_LogSetAllPriority(priority: TSDL_LogPriority); cdecl; external SDL_LibName;
procedure SDL_LogSetOutputFunction(callback: TSDL_LogOutputFunction; userdata: Pointer); cdecl; external SDL_LibName;
procedure SDL_LogSetPriority(category: TSDL_LogCategory; priority: TSDL_LogPriority); cdecl; external SDL_LibName;
procedure SDL_LogVerbose(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
procedure SDL_LogWarn(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;
function SDL_LowerBlit(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;
function SDL_LowerBlitScaled(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;
function SDL_lround(x: cdouble): clong; cdecl; external SDL_LibName;
function SDL_lroundf(x: cfloat): clong; cdecl; external SDL_LibName;
function SDL_malloc(size: csize_t): Pointer; cdecl; external SDL_LibName;
function SDL_MapRGB(const format: PSDL_PixelFormat; r: cuint8; g: cuint8; b: cuint8): cuint32; cdecl; external SDL_LibName;
function SDL_MapRGBA(const format: PSDL_PixelFormat; r: cuint8; g: cuint8; b: cuint8; a: cuint8): cuint32; cdecl; external SDL_LibName;
function SDL_MasksToPixelFormatEnum(bpp: cint; Rmask: cuint32; Gmask: cuint32; Bmask: cuint32; Amask: cuint32): cuint32; cdecl; external SDL_LibName;
procedure SDL_MaximizeWindow(window: PSDL_Window); cdecl; external SDL_LibName;
procedure SDL_MinimizeWindow(window: PSDL_Window); cdecl; external SDL_LibName;
procedure SDL_MixAudio(dst: pcuint8; src: pcuint8; len: cuint32; volume: cint); cdecl; external SDL_LibName;
procedure SDL_MixAudioFormat(dst: pcuint8; src: pcuint8; format: TSDL_AudioFormat; len: cuint32; volume: cint); cdecl; external SDL_LibName;
function SDL_MouseIsHaptic: cint; cdecl; external SDL_LibName;
function SDL_MUSTLOCK(Const S:PSDL_Surface):Boolean;
function SDL_NewAudioStream(src_format: TSDL_AudioFormat; src_channels: cuint8; src_rate: cint; dst_format: TSDL_AudioFormat; dst_channels: cuint8; dst_rate: cint): PSDL_AudioStream; cdecl; external SDL_LibName;
function SDL_nlog(x: cdouble): cdouble; cdecl; external SDL_LibName name '_SDL_log';
function SDL_nlogf(x: cfloat): cfloat; cdecl; external SDL_LibName name '_SDL_logf';
function SDL_NumHaptics: cint; cdecl; external SDL_LibName;
function SDL_NumJoysticks(): cint; cdecl; external SDL_LibName;
function SDL_NumSensors(): cint; cdecl; external SDL_LibName;
procedure SDL_OnApplicationDidBecomeActive(); cdecl; external SDL_LibName;
procedure SDL_OnApplicationDidEnterBackground(); cdecl; external SDL_LibName;
procedure SDL_OnApplicationDidReceiveMemoryWarning(); cdecl; external SDL_LibName;
procedure SDL_OnApplicationWillEnterForeground(); cdecl; external SDL_LibName;
procedure SDL_OnApplicationWillResignActive(); cdecl; external SDL_LibName;
procedure SDL_OnApplicationWillTerminate(); cdecl; external SDL_LibName;
function SDL_OpenAudio(desired: PSDL_AudioSpec; obtained: PSDL_AudioSpec): cint; cdecl; external SDL_LibName;
function SDL_OpenAudioDevice(device: PAnsiChar; iscapture: cint; desired: PSDL_AudioSpec; obtained: PSDL_AudioSpec; allowed_changes: cint): TSDL_AudioDeviceID; cdecl; external SDL_LibName;
function SDL_OpenURL(const url: PAnsiChar): cint; cdecl; external SDL_LibName;
procedure SDL_PauseAudio(pause_on: cint); cdecl; external SDL_LibName;
procedure SDL_PauseAudioDevice(dev: TSDL_AudioDeviceID; pause_on: cint); cdecl; external SDL_LibName;
function SDL_PeepEvents(events: PSDL_Event; numevents: cint32; action: TSDL_EventAction; minType, maxType: TSDL_EventType): cint32 cdecl; external SDL_LibName;
function SDL_PIXELFLAG(X: cuint32): cuint32;
function SDL_PixelFormatEnumToMasks(format: cuint32; bpp: pcint; Rmask: pcuint32; Gmask: pcuint32; Bmask: pcuint32; Amask: pcuint32): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_PIXELLAYOUT(X: cuint32): cuint32;
function SDL_PIXELORDER(X: cuint32): cuint32;
function SDL_PIXELTYPE(X: cuint32): cuint32;
function SDL_PointInFRect(const p: PSDL_FPoint; const r: PSDL_FRect): Boolean; Inline;
function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inline;
function SDL_PollEvent(event: PSDL_Event): cint32 cdecl; external SDL_LibName;
function SDL_pow(x, y: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_powf(x, y: cfloat): cfloat; cdecl; external SDL_LibName;
procedure SDL_PumpEventscdecl; external SDL_LibName;
function SDL_PushEvent(event: PSDL_Event): cint32 cdecl; external SDL_LibName;
function SDL_QueryTexture(texture: PSDL_Texture; format: pcuint32; access: pcint; w: pcint; h: pcint): cint32 cdecl; external SDL_LibName;
function SDL_QueueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len: cuint32): cint; cdecl; external SDL_LibName;
procedure SDL_Quit(); cdecl; external SDL_LibName;
procedure SDL_QuitSubSystem(flags: TSDL_Init); cdecl; external SDL_LibName;
procedure SDL_RaiseWindow(window: PSDL_Window); cdecl; external SDL_LibName;
function SDL_ReadBE16(src: PSDL_RWops): cuint16; cdecl; external SDL_LibName;
function SDL_ReadBE32(src: PSDL_RWops): cuint32; cdecl; external SDL_LibName;
function SDL_ReadBE64(src: PSDL_RWops): cuint64; cdecl; external SDL_LibName;
function SDL_ReadLE16(src: PSDL_RWops): cuint16; cdecl; external SDL_LibName;
function SDL_ReadLE32(src: PSDL_RWops): cuint32; cdecl; external SDL_LibName;
function SDL_ReadLE64(src: PSDL_RWops): cuint64; cdecl; external SDL_LibName;
function SDL_ReadU8(src: PSDL_RWops): cuint8; cdecl; external SDL_LibName;
function SDL_realloc(mem: Pointer; size: csize_t): Pointer; cdecl; external SDL_LibName;
function SDL_RecordGesture(touchId: TSDL_TouchID): cint; cdecl; external SDL_LibName;
function SDL_RectEmpty(const r: PSDL_Rect): Boolean; inline;
function SDL_RectEquals(const a, b: PSDL_Rect): Boolean; inline;
function SDL_RegisterEvents(numevents: cint32): cuint32 cdecl; external SDL_LibName;
function SDL_RemoveTimer(id: TSDL_TimerID): Boolean; cdecl; external SDL_LibName;
function SDL_RenderClear(renderer: PSDL_Renderer): cint32 cdecl; external SDL_LibName;
function SDL_RenderCopy(renderer: PSDL_Renderer; texture: PSDL_Texture; srcrect: PSDL_Rect; dstrect: PSDL_Rect): cint32 cdecl; external SDL_LibName;
function SDL_RenderCopyEx(renderer: PSDL_Renderer; texture: PSDL_Texture; const srcrect: PSDL_Rect; dstrect: PSDL_Rect; angle: cdouble; center: PSDL_Point; flip: TSDL_RenderFlip): cint32 cdecl; external SDL_LibName;
function SDL_RenderCopyExF(renderer: PSDL_Renderer; texture: PSDL_Texture; const srcrect: PSDL_Rect; dstrect: PSDL_FRect; angle: cdouble; center: PSDL_FPoint; flip: TSDL_RenderFlip): cint32 cdecl; external SDL_LibName;
function SDL_RenderCopyF(renderer: PSDL_Renderer; texture: PSDL_Texture; srcrect: PSDL_Rect; dstrect: PSDL_FRect): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawLine(renderer: PSDL_Renderer; x1: cint32; y1: cint32; x2: cint32; y2: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawLineF(renderer: PSDL_Renderer; x1, y1, x2, y2: single): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawLines(renderer: PSDL_Renderer; points: PSDL_Point; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawLinesF(renderer: PSDL_Renderer; points: PSDL_FPoint; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawPoint(renderer: PSDL_Renderer; x: cint32; y: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawPointF(renderer: PSDL_Renderer; x, y: single): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawPoints(renderer: PSDL_Renderer; points: PSDL_Point; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawPointsF(renderer: PSDL_Renderer; points: PSDL_FPoint; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawRect(renderer: PSDL_Renderer; rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawRectF(renderer: PSDL_Renderer; rect: PSDL_FRect): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawRects(renderer: PSDL_Renderer; rects: PSDL_Rect; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderDrawRectsF(renderer: PSDL_Renderer; rects: PSDL_FRect; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderFillRect(renderer: PSDL_Renderer; rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;
function SDL_RenderFillRectF(renderer: PSDL_Renderer; rect: PSDL_FRect): cint32 cdecl; external SDL_LibName;
function SDL_RenderFillRects(renderer: PSDL_Renderer; rects: PSDL_Rect; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderFillRectsF(renderer: PSDL_Renderer; rects: PSDL_FRect; count: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderFlush(renderer: PSDL_Renderer): cint; cdecl; external SDL_LibName;
function SDL_RenderGeometry( renderer: PSDL_Renderer; texture: PSDL_Texture; Const vertices: PSDL_Vertex; num_vertices: cint; Const indices: Pcint; num_indices: cint ): cint; cdecl; external SDL_LibName;
function SDL_RenderGeometryRaw( renderer: PSDL_Renderer; texture: PSDL_Texture; Const xy: PSingle; xy_stride: cint; Const color: PSDL_Color; color_stride: cint; Const uv: PSingle; uv_stride: cint; num_vertices: cint; Const indices: Pointer; num_indices, size_indices: cint ): cint; cdecl; external SDL_LibName;
procedure SDL_RenderGetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect) cdecl; external SDL_LibName;
function SDL_RenderGetIntegerScale(renderer: PSDL_Renderer): TSDL_bool cdecl; external SDL_LibName;
procedure SDL_RenderGetLogicalSize(renderer: PSDL_Renderer; w: pcint; h: pcint) cdecl; external SDL_LibName;
function SDL_RenderGetMetalCommandEncoder(renderer: PSDL_Renderer): Pointer; cdecl; external SDL_LibName;
function SDL_RenderGetMetalLayer(renderer: PSDL_Renderer): Pointer; cdecl; external SDL_LibName;
procedure SDL_RenderGetScale(renderer: PSDL_Renderer; scaleX: pcfloat; scaleY: pcfloat) cdecl; external SDL_LibName;
procedure SDL_RenderGetViewport(renderer: PSDL_Renderer; rect: PSDL_Rect) cdecl; external SDL_LibName;
function SDL_RenderGetWindow(renderer: PSDL_Renderer): PSDL_Window; cdecl; external SDL_LibName;
function SDL_RenderIsClipEnabled(renderer: PSDL_Renderer): TSDL_Bool; cdecl; external SDL_LibName;
procedure SDL_RenderLogicalToWindow(renderer: PSDL_Renderer; logicalX, logicalY: Single; windowX, windowY: Pcint); cdecl; external SDL_LibName;
procedure SDL_RenderPresent(renderer: PSDL_Renderer) cdecl; external SDL_LibName;
function SDL_RenderReadPixels(renderer: PSDL_Renderer; rect: PSDL_Rect; format: cuint32; pixels: Pointer; pitch: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderSetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;
function SDL_RenderSetIntegerScale(renderer: PSDL_Renderer; enable : TSDL_bool): cint32 cdecl; external SDL_LibName;
function SDL_RenderSetLogicalSize(renderer: PSDL_Renderer; w: cint32; h: cint32): cint32 cdecl; external SDL_LibName;
function SDL_RenderSetScale(renderer: PSDL_Renderer; scaleX: cfloat; scaleY: cfloat): cint32 cdecl; external SDL_LibName;
function SDL_RenderSetViewport(renderer: PSDL_Renderer; const rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;
function SDL_RenderSetVSync(renderer: PSDL_Renderer; vsync: cint): cint; cdecl; external SDL_LibName;
function SDL_RenderTargetSupported(renderer: PSDL_Renderer): Boolean cdecl; external SDL_LibName;
procedure SDL_RenderWindowToLogical(renderer: PSDL_Renderer; windowX, windowY: cint; logicalX, logicalY: PSingle); cdecl; external SDL_LibName;
function SDL_ResetHint(const name: PAnsiChar): TSDL_Bool; cdecl; external SDL_LibName;
procedure SDL_ResetHints(); cdecl; external SDL_LibName;
procedure SDL_ResetKeyboard; cdecl; external SDL_LibName;
procedure SDL_RestoreWindow(window: PSDL_Window); cdecl; external SDL_LibName;
function SDL_round(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_roundf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_RWclose(context: PSDL_RWops): cint; cdecl; external SDL_LibName;
function SDL_RWFromConstMem(const mem: Pointer; size: cint): PSDL_RWops; cdecl; external SDL_LibName;
function SDL_RWFromFile(const _file: PAnsiChar; const mode: PAnsiChar): PSDL_RWops; cdecl; external SDL_LibName;
function SDL_RWFromFP(fp: Pointer; autoclose: TSDL_Bool): PSDL_RWops; cdecl; external SDL_LibName;
function SDL_RWFromMem(mem: Pointer; size: cint): PSDL_RWops; cdecl; external SDL_LibName;
function SDL_RWread(context: PSDL_RWops; ptr: Pointer; size: csize_t; n: csize_t): csize_t; cdecl; external SDL_LibName;
function SDL_RWseek(context: PSDL_RWops; offset: cint64; whence: cint): cint64; cdecl; external SDL_LibName;
function SDL_RWsize(context: PSDL_RWops): cint64; cdecl; external SDL_LibName;
function SDL_RWtell(context: PSDL_RWops): cint64; cdecl; external SDL_LibName;
function SDL_RWwrite(context: PSDL_RWops; ptr: Pointer; size: csize_t; n: csize_t): csize_t; cdecl; external SDL_LibName;
function SDL_SaveAllDollarTemplates(dst: PSDL_RWops): cint; cdecl; external SDL_LibName;
function SDL_SaveBMP(const surface: PSDL_Surface; const filename:AnsiString): cint;
function SDL_SaveBMP_RW(surface: PSDL_Surface; dst: PSDL_RWops; freedst: cint): cint; cdecl; external SDL_LibName;
function SDL_SaveDollarTemplate(gestureId: TSDL_GestureID; dst: PSDL_RWops): cint; cdecl; external SDL_LibName;
function SDL_scalbn(x: cdouble; n: cint): cdouble; cdecl; external SDL_LibName;
function SDL_scalbnf(x: cfloat; n: cint): cfloat; cdecl; external SDL_LibName;
function SDL_SemPost(sem: PSDL_Sem): cint; cdecl; external SDL_LibName;
function SDL_SemTryWait(sem: PSDL_Sem): cint; cdecl; external SDL_LibName;
function SDL_SemValue(sem: PSDL_Sem): cuint32; cdecl; external SDL_LibName;
function SDL_SemWait(sem: PSDL_Sem): cint; cdecl; external SDL_LibName;
function SDL_SemWaitTimeout(sem: PSDL_Sem; ms: cuint32): cint; cdecl; external SDL_LibName;
procedure SDL_SensorClose(sensor: PSDL_Sensor); cdecl; external SDL_LibName;
function SDL_SensorFromInstanceID(instance_id: TSDL_SensorID): PSDL_Sensor; cdecl; external SDL_LibName;
function SDL_SensorGetData(sensor: PSDL_Sensor; data: pcfloat; num_values: cint): cint; cdecl; external SDL_LibName;
function SDL_SensorGetDataWithTimestamp(sensor: PSDL_Sensor; timestamp: pcuint64; data: pcfloat; num_values: cint): cint; cdecl; external SDL_LibName;
function SDL_SensorGetDeviceInstanceID(device_index: cint): TSDL_SensorID; cdecl; external SDL_LibName;
function SDL_SensorGetDeviceName(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;
function SDL_SensorGetDeviceNonPortableType(device_index: cint): cint; cdecl; external SDL_LibName;
function SDL_SensorGetDeviceType(device_index: cint): TSDL_SensorType; cdecl; external SDL_LibName;
function SDL_SensorGetInstanceID(sensor: PSDL_Sensor): TSDL_SensorID; cdecl; external SDL_LibName;
function SDL_SensorGetName(sensor: PSDL_Sensor): PAnsiChar; cdecl; external SDL_LibName;
function SDL_SensorGetNonPortableType(sensor: PSDL_Sensor): cint; cdecl; external SDL_LibName;
function SDL_SensorGetType(sensor: PSDL_Sensor): TSDL_SensorType; cdecl; external SDL_LibName;
function SDL_SensorOpen(device_index: cint): PSDL_Sensor; cdecl; external SDL_LibName;
procedure SDL_SensorUpdate(); cdecl; external SDL_LibName;
function SDL_SetClipboardText(text: PAnsiChar): cint; cdecl; external SDL_LibName;
function SDL_SetClipRect(surface: PSDL_Surface; const rect: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_SetColorKey(surface: PSDL_Surface; flag: cint; key: cuint32): cint; cdecl; external SDL_LibName;
procedure SDL_SetCursor(cursor: PSDL_Cursor); cdecl; external SDL_LibName;
function SDL_SetError(const fmt: PAnsiChar; args: array of const): cint; cdecl; external SDL_LibName;
procedure SDL_SetEventFilter(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;
function SDL_SetHint(const name: PAnsiChar; const value: PAnsiChar): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_SetHintWithPriority(const name: PAnsiChar; const value: PAnsiChar; priority: TSDL_HintPriority): TSDL_Bool; cdecl; external SDL_LibName;
function SDL_SetMemoryFunctions( malloc_func: TSDL_malloc_func; calloc_func: TSDL_calloc_func; realloc_func: TSDL_realloc_func; free_func: TSDL_free_func ): cint; cdecl; external SDL_LibName;
procedure SDL_SetModState(modstate: TSDL_Keymod); cdecl; external SDL_LibName;
function SDL_SetPaletteColors(palette: PSDL_Palette; const colors: PSDL_Color; firstcolor: cint; ncolors: cint): cint; cdecl; external SDL_LibName;
function SDL_SetPixelFormatPalette(format: PSDL_PixelFormat; palette: PSDL_Palette): cint; cdecl; external SDL_LibName;
function SDL_SetPrimarySelectionText(text: PAnsiChar): cint; cdecl; external SDL_LibName;
function SDL_SetRelativeMouseMode(enabled: TSDL_Bool): cint; cdecl; external SDL_LibName;
function SDL_SetRenderDrawBlendMode(renderer: PSDL_Renderer; blendMode: TSDL_BlendMode): cint32 cdecl; external SDL_LibName;
function SDL_SetRenderDrawColor(renderer: PSDL_Renderer; r: cuint8; g: cuint8; b: cuint8; a: cuint8): cint32 cdecl; external SDL_LibName;
function SDL_SetRenderTarget(renderer: PSDL_Renderer; texture: PSDL_Texture): cint32 cdecl; external SDL_LibName;
function SDL_SetSurfaceAlphaMod(surface: PSDL_Surface; alpha: cuint8): cint; cdecl; external SDL_LibName;
function SDL_SetSurfaceBlendMode(surface: PSDL_Surface; blendMode: TSDL_BlendMode): cint; cdecl; external SDL_LibName;
function SDL_SetSurfaceColorMod(surface: PSDL_Surface; r: cuint8; g: cuint8; b: cuint8): cint; cdecl; external SDL_LibName;
function SDL_SetSurfacePalette(surface: PSDL_Surface; palette: PSDL_Palette): cint; cdecl; external SDL_LibName;
function SDL_SetSurfaceRLE(surface: PSDL_Surface; flag: cint): cint; cdecl; external SDL_LibName;
procedure SDL_SetTextInputRect(rect: PSDL_Rect); cdecl; external SDL_LibName;
function SDL_SetTextureAlphaMod(texture: PSDL_Texture; alpha: cuint8): cint32 cdecl; external SDL_LibName;
function SDL_SetTextureBlendMode(texture: PSDL_Texture; blendMode: TSDL_BlendMode): cint32 cdecl; external SDL_LibName;
function SDL_SetTextureColorMod(texture: PSDL_Texture; r: cuint8; g: cuint8; b: cuint8): cint32 cdecl; external SDL_LibName;
function SDL_SetTextureScaleMode(texture: PSDL_Texture; scaleMode: TSDL_ScaleMode): cint; cdecl; external SDL_LibName;
function SDL_SetTextureUserData(texture: PSDL_Texture; userdata: Pointer): cint; cdecl; external SDL_LibName;
function SDL_SetThreadPriority(priority: TSDL_ThreadPriority): cint; cdecl; external SDL_LibName;
procedure SDL_SetWindowAlwaysOnTop(window: PSDL_Window; on_top: TSDL_Bool); cdecl; external SDL_LibName;
procedure SDL_SetWindowBordered(window: PSDL_Window; bordered: TSDL_Bool); cdecl; external SDL_LibName;
function SDL_SetWindowBrightness(window: PSDL_Window; brightness: cfloat): cint; cdecl; external SDL_LibName;
function SDL_SetWindowData(window: PSDL_Window; const name: PAnsiChar; userdata: Pointer): Pointer; cdecl; external SDL_LibName;
function SDL_SetWindowDisplayMode(window: PSDL_Window; const mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;
function SDL_SetWindowFullscreen(window: PSDL_Window; flags: TSDL_WindowFlags): cint; cdecl; external SDL_LibName;
function SDL_SetWindowGammaRamp(window: PSDL_Window; const red: pcuint16; const green: pcuint16; const blue: pcuint16): cint; cdecl; external SDL_LibName;
procedure SDL_SetWindowGrab(window: PSDL_Window; grabbed: TSDL_Bool); cdecl; external SDL_LibName;
function SDL_SetWindowHitTest(window: PSDL_Window; callback: TSDL_HitTest; callback_data: Pointer): cint; cdecl; external SDL_LibName;
procedure SDL_SetWindowIcon(window: PSDL_Window; icon: PSDL_Surface); cdecl; external SDL_LibName;
function SDL_SetWindowInputFocus(window: PSDL_Window): cint; cdecl; external SDL_LibName;
procedure SDL_SetWindowKeyboardGrab(window: PSDL_Window; grabbed: TSDL_Bool); cdecl; external SDL_LibName;
procedure SDL_SetWindowMaximumSize(window: PSDL_Window; max_w: cint; max_h: cint); cdecl; external SDL_LibName;
procedure SDL_SetWindowMinimumSize(window: PSDL_Window; min_w: cint; min_h: cint); cdecl; external SDL_LibName;
function SDL_SetWindowModalFor(modal_window, parent_window: PSDL_Window): cint; cdecl; external SDL_LibName;
procedure SDL_SetWindowMouseGrab(window: PSDL_Window; grabbed: TSDL_Bool); cdecl; external SDL_LibName;
procedure SDL_SetWindowMouseRect(window: PSDL_Window; rect: PSDL_Rect); cdecl; external SDL_LibName;
function SDL_SetWindowOpacity(window: PSDL_Window; opacity: cfloat): cint; cdecl; external SDL_LibName;
procedure SDL_SetWindowPosition(window: PSDL_Window; x: cint; y: cint); cdecl; external SDL_LibName;
procedure SDL_SetWindowResizable(window: PSDL_Window; resizable: TSDL_Bool); cdecl; external SDL_LibName;
function SDL_SetWindowShape(window: PSDL_Window; shape: PSDL_Surface; shape_mode: PSDL_WindowShapeMode): cint; cdecl; external SDL_LibName;
procedure SDL_SetWindowSize(window: PSDL_Window; w: cint; h: cint); cdecl; external SDL_LibName;
procedure SDL_SetWindowTitle(window: PSDL_Window; const title: PAnsiChar); cdecl; external SDL_LibName;
procedure SDL_SetYUVConversionMode(mode: TSDL_YUV_CONVERSION_MODE); cdecl; external SDL_LibName;
function SDL_SHAPEMODEALPHA(mode: TWindowShapeMode): Boolean;
function SDL_ShowCursor(toggle: cint): cint; cdecl; external SDL_LibName;
function SDL_ShowMessageBox(messageboxdata: PSDL_MessageBoxData; buttonid: pcint): cint; cdecl; external SDL_LibName;
function SDL_ShowSimpleMessageBox(flags: TSDL_MessageBoxFlags; title: PAnsiChar; _message: PAnsiChar; window: PSDL_Window): cint; cdecl; external SDL_LibName;
procedure SDL_ShowWindow(window: PSDL_Window); cdecl; external SDL_LibName;
function SDL_SIMDAlloc(const len: csize_t): Pointer; cdecl; external SDL_LibName;
procedure SDL_SIMDFree(mem: Pointer); cdecl; external SDL_LibName;
function SDL_SIMDGetAlignment(): csize_t; cdecl; external SDL_LibName;
function SDL_SIMDRealloc(mem: Pointer; const len: csize_t): Pointer; cdecl; external SDL_LibName;
function SDL_sin(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_sinf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_SoftStretch(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; const dstrect: PSDL_Surface): cint; cdecl; external SDL_LibName;
function SDL_sqrt(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_sqrtf(x: cfloat): cfloat; cdecl; external SDL_LibName;
procedure SDL_StartTextInput; cdecl; external SDL_LibName;
procedure SDL_StopTextInput; cdecl; external SDL_LibName;
function SDL_tan(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_tanf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_ThreadID: TSDL_ThreadID; cdecl; external SDL_LibName;
function SDL_TICKS_PASSED(const A, B: cint32): Boolean;
procedure SDL_TLSCleanup; cdecl; external SDL_LibName;
function SDL_TLSCreate: TSDL_TLSID; cdecl; external SDL_LibName;
function SDL_TLSGet(id: TSDL_TLSID): Pointer; cdecl; external SDL_LibName;
function SDL_TLSSet(id: TSDL_TLSID; const value: Pointer; destructor_: TTLSDestructor): cint; cdecl; external SDL_LibName;
function SDL_tolower(x: cint):cint; cdecl; external SDL_LibName;
function SDL_toupper(x: cint):cint; cdecl; external SDL_LibName;
function SDL_trunc(x: cdouble): cdouble; cdecl; external SDL_LibName;
function SDL_truncf(x: cfloat): cfloat; cdecl; external SDL_LibName;
function SDL_TryLockMutex(mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;
function SDL_UnionFRect(const a, b: PSDL_FRect; result: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;
procedure SDL_UnionRect(const A, B: PSDL_Rect; result: PSDL_Rect); cdecl; external SDL_LibName;
procedure SDL_UnloadObject(handle: Pointer); cdecl; external SDL_LibName;
procedure SDL_UnlockAudio; cdecl; external SDL_LibName;
procedure SDL_UnlockAudioDevice(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;
procedure SDL_UnlockJoysticks(); cdecl; external SDL_LibName;
function SDL_UnlockMutex(mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;
procedure SDL_UnlockSensors(); cdecl; external SDL_LibName;
procedure SDL_UnlockSurface(surface: PSDL_Surface); cdecl; external SDL_LibName;
procedure SDL_UnlockTexture(texture: PSDL_Texture) cdecl; external SDL_LibName;
function SDL_UpdateNVTexture( texture: PSDL_Texture; Const rect: PSDL_Rect; Const Yplane: Pcuint8; Ypitch: cint; Const UVplane: Pcuint8; UVpitch: cint ): cint; cdecl; external SDL_LibName;
function SDL_UpdateTexture(texture: PSDL_Texture; rect: PSDL_Rect; pixels: Pointer; pitch: cint32): cint32 cdecl; external SDL_LibName;
function SDL_UpdateWindowSurface(window: PSDL_Window): cint; cdecl; external SDL_LibName;
function SDL_UpdateWindowSurfaceRects(window: PSDL_Window; rects: PSDL_Rect; numrects: cint): cint; cdecl; external SDL_LibName;
function SDL_UpdateYUVTexture(texture: PSDL_Texture; rect: PSDL_Rect; Yplane: pcuint8; Ypitch: cint32; Uplane: pcuint8; UPitch: cint32; Vplane: pcuint8; VPitch: cint32):cint32; cdecl; external SDL_LibName;
function SDL_UpperBlit(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;
function SDL_UpperBlitScaled(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;
procedure SDL_VERSION(out x: TSDL_Version);
function SDL_VERSIONNUM(X,Y,Z: cuint8): Cardinal;
function SDL_VERSION_ATLEAST(X,Y,Z: cuint8): Boolean;
function SDL_VideoInit(const driver_name: PAnsiChar): cint; cdecl; external SDL_LibName;
procedure SDL_VideoQuit; cdecl; external SDL_LibName;
function SDL_WaitEvent(event: PSDL_Event): cint32 cdecl; external SDL_LibName;
function SDL_WaitEventTimeout(event: PSDL_Event; timeout: cint32): cint32 cdecl; external SDL_LibName;
procedure SDL_WaitThread(thread: PSDL_Thread; status: pcint); cdecl; external SDL_LibName;
function SDL_WarpMouseGlobal(x, y: cint): cint; cdecl; external SDL_LibName;
procedure SDL_WarpMouseInWindow(window: PSDL_Window; x: cint; y: cint); cdecl; external SDL_LibName;
function SDL_WasInit(flags: TSDL_Init): cuint32; cdecl; external SDL_LibName;
function SDL_WINDOWPOS_CENTERED_DISPLAY(X: Variant): Variant;
function SDL_WINDOWPOS_ISCENTERED(X: Variant): Variant;
function SDL_WINDOWPOS_ISUNDEFINED(X: Variant): Variant;
function SDL_WINDOWPOS_UNDEFINED_DISPLAY(X: Variant): Variant;
function SDL_WriteBE16(dst: PSDL_RWops; value: cuint16): csize_t; cdecl; external SDL_LibName;
function SDL_WriteBE32(dst: PSDL_RWops; value: cuint32): csize_t; cdecl; external SDL_LibName;
function SDL_WriteBE64(dst: PSDL_RWops; value: cuint64): csize_t; cdecl; external SDL_LibName;
function SDL_WriteLE16(dst: PSDL_RWops; value: cuint16): csize_t; cdecl; external SDL_LibName;
function SDL_WriteLE32(dst: PSDL_RWops; value: cuint32): csize_t; cdecl; external SDL_LibName;
function SDL_WriteLE64(dst: PSDL_RWops; value: cuint64): csize_t; cdecl; external SDL_LibName;
function SDL_WriteU8(dst: PSDL_RWops; value: cuint8): csize_t; cdecl; external SDL_LibName;

Types

cintptr_t = PtrInt;
cuintptr_t = PtrUInt;
cwchar_t = UnixType.wchar_t;
pcwchar_t = ˆcwchar_t;
PKeyStateArr = ˆTKeyStateArr;
ppcuint8 = ˆpcuint8;
PPKeyStateArr = ˆPKeyStateArr;
PPSDL_ArrayOrder = ˆPSDL_ArrayOrder;
PPSDL_Atomic = ˆPSDL_Atomic;
PPSDL_AudioCallback = ˆPSDL_AudioCallback;
PPSDL_AudioCVT = ˆPSDL_AudioCVT;
PPSDL_AudioDeviceEvent = ˆPSDL_AudioDeviceEvent;
PPSDL_AudioDeviceID = ˆPSDL_AudioDeviceID;
PPSDL_AudioFormat = ˆPSDL_AudioFormat;
PPSDL_AudioSpec = ˆPSDL_AudioSpec;
PPSDL_AudioStatus = ˆPSDL_AudioStatus;
PPSDL_BitmapOrder = ˆPSDL_BitmapOrder;
PPSDL_BlendFactor = ˆPSDL_BlendFactor;
PPSDL_BlendMode = ˆPSDL_BlendMode;
PPSDL_BlendOperation = ˆPSDL_BlendOperation;
PPSDL_Blit = ˆPSDL_Blit;
PPSDL_BlitMap = ˆPSDL_BlitMap;
PPSDL_Bool = ˆPSDL_Bool;
PPSDL_calloc_func = ˆPSDL_calloc_func;
PPSDL_Color = ˆPSDL_Color;
PPSDL_Colour = ˆPSDL_Colour;
PPSDL_CommonEvent = ˆPSDL_CommonEvent;
PPSDL_Cond = ˆPSDL_Cond;
PPSDL_ControllerAxisEvent = ˆPSDL_ControllerAxisEvent;
PPSDL_ControllerButtonEvent = ˆPSDL_ControllerButtonEvent;
PPSDL_ControllerDeviceEvent = ˆPSDL_ControllerDeviceEvent;
PPSDL_ControllerSensorEvent = ˆPSDL_ControllerSensorEvent;
PPSDL_ControllerTouchpadEvent = ˆPSDL_ControllerTouchpadEvent;
PPSDL_Cursor = ˆPSDL_Cursor;
PPSDL_DisplayEvent = ˆPSDL_DisplayEvent;
PPSDL_DisplayEventID = ˆPSDL_DisplayEventID;
PPSDL_DisplayMode = ˆPSDL_DisplayMode;
PPSDL_DisplayOrientation = ˆPSDL_DisplayOrientation;
PPSDL_DollarGestureEvent = ˆPSDL_DollarGestureEvent;
PPSDL_DropEvent = ˆPSDL_DropEvent;
PPSDL_ErrorCode = ˆPSDL_ErrorCode;
PPSDL_Event = ˆPSDL_Event;
PPSDL_EventAction = ˆPSDL_EventAction;
PPSDL_EventFilter = ˆPSDL_EventFilter;
PPSDL_EventType = ˆPSDL_EventType;
PPSDL_Finger = ˆPSDL_Finger;
PPSDL_FingerID = ˆPSDL_FingerID;
PPSDL_FlashOperation = ˆPSDL_FlashOperation;
PPSDL_FPoint = ˆPSDL_FPoint;
PPSDL_FRect = ˆPSDL_FRect;
PPSDL_free_func = ˆPSDL_free_func;
PPSDL_GameController = ˆPSDL_GameController;
PPSDL_GameControllerAxis = ˆPSDL_GameControllerAxis;
PPSDL_GameControllerBindType = ˆPSDL_GameControllerBindType;
PPSDL_GameControllerButton = ˆPSDL_GameControllerButton;
PPSDL_GameControllerButtonBind = ˆPSDL_GameControllerButtonBind;
PPSDL_GameControllerType = ˆPSDL_GameControllerType;
PPSDL_GestureID = ˆPSDL_GestureID;
PPSDL_GLattr = ˆPSDL_GLattr;
PPSDL_GLContext = ˆPSDL_GLContext;
PPSDL_GLcontextFlag = ˆPSDL_GLcontextFlag;
PPSDL_GLcontextReleaseFlag = ˆPSDL_GLcontextReleaseFlag;
PPSDL_GLContextResetNotification = ˆPSDL_GLContextResetNotification;
PPSDL_GLprofile = ˆPSDL_GLprofile;
PPSDL_GUID = ˆPSDL_GUID;
PPSDL_Haptic = ˆPSDL_Haptic;
PPSDL_HapticCondition = ˆPSDL_HapticCondition;
PPSDL_HapticConstant = ˆPSDL_HapticConstant;
PPSDL_HapticCustom = ˆPSDL_HapticCustom;
PPSDL_HapticDirection = ˆPSDL_HapticDirection;
PPSDL_HapticEffect = ˆPSDL_HapticEffect;
PPSDL_HapticPeriodic = ˆPSDL_HapticPeriodic;
PPSDL_HapticRamp = ˆPSDL_HapticRamp;
PPSDL_HintCallback = ˆPSDL_HintCallback;
PPSDL_HintPriority = ˆPSDL_HintPriority;
PPSDL_HitTest = ˆPSDL_HitTest;
PPSDL_HitTestResult = ˆPSDL_HitTestResult;
PPSDL_Init = ˆPSDL_Init;
PPSDL_JoyAxisEvent = ˆPSDL_JoyAxisEvent;
PPSDL_JoyBallEvent = ˆPSDL_JoyBallEvent;
PPSDL_JoyBatteryEvent = ˆPSDL_JoyBatteryEvent;
PPSDL_JoyButtonEvent = ˆPSDL_JoyButtonEvent;
PPSDL_JoyDeviceEvent = ˆPSDL_JoyDeviceEvent;
PPSDL_JoyHatEvent = ˆPSDL_JoyHatEvent;
PPSDL_Joystick = ˆPSDL_Joystick;
PPSDL_JoystickGUID = ˆPSDL_JoystickGUID;
PPSDL_JoystickID = ˆPSDL_JoystickID;
PPSDL_JoystickPowerLevel = ˆPSDL_JoystickPowerLevel;
PPSDL_JoystickType = ˆPSDL_JoystickType;
PPSDL_KeyboardEvent = ˆPSDL_KeyboardEvent;
PPSDL_KeyCode = ˆPSDL_KeyCode;
PPSDL_KeyMod = ˆPSDL_KeyMod;
PPSDL_Keysym = ˆPSDL_Keysym;
PPSDL_Locale = ˆPSDL_Locale;
PPSDL_LogCategory = ˆPSDL_LogCategory;
PPSDL_LogOutputFunction = ˆPSDL_LogOutputFunction;
PPSDL_LogPriority = ˆPSDL_LogPriority;
PPSDL_malloc_func = ˆPSDL_malloc_func;
PPSDL_MessageBoxButtonData = ˆPSDL_MessageBoxButtonData;
PPSDL_MessageBoxButtonFlags = ˆPSDL_MessageBoxButtonFlags;
PPSDL_MessageBoxColor = ˆPSDL_MessageBoxColor;
PPSDL_MessageBoxColorScheme = ˆPSDL_MessageBoxColorScheme;
PPSDL_MessageBoxColorType = ˆPSDL_MessageBoxColorType;
PPSDL_MessageBoxData = ˆPSDL_MessageBoxData;
PPSDL_MessageBoxFlags = ˆPSDL_MessageBoxFlags;
PPSDL_MouseButtonEvent = ˆPSDL_MouseButtonEvent;
PPSDL_MouseMotionEvent = ˆPSDL_MouseMotionEvent;
PPSDL_MouseWheelDirection = ˆPSDL_MouseWheelDirection;
PPSDL_MouseWheelEvent = ˆPSDL_MouseWheelEvent;
PPSDL_MultiGestureEvent = ˆPSDL_MultiGestureEvent;
PPSDL_Mutex = ˆPSDL_Mutex;
PPSDL_PackedLayout = ˆPSDL_PackedLayout;
PPSDL_PackOrder = ˆPSDL_PackOrder;
PPSDL_Palette = ˆPSDL_Palette;
PPSDL_PixelFormat = ˆPSDL_PixelFormat;
PPSDL_PixelType = ˆPSDL_PixelType;
PPSDL_Point = ˆPSDL_Point;
PPSDL_PowerState = ˆPSDL_PowerState;
PPSDL_QuitEvent = ˆPSDL_QuitEvent;
PPSDL_realloc_func = ˆPSDL_realloc_func;
PPSDL_Rect = ˆPSDL_Rect;
PPSDL_Renderer = ˆPSDL_Renderer;
PPSDL_RendererFlags = ˆPSDL_RendererFlags;
PPSDL_RendererInfo = ˆPSDL_RendererInfo;
PPSDL_RenderFlip = ˆPSDL_RenderFlip;
PPSDL_RWops = ˆPSDL_RWops;
PPSDL_ScaleMode = ˆPSDL_ScaleMode;
PPSDL_ScanCode = ˆPSDL_ScanCode;
PPSDL_Sem = ˆPSDL_Sem;
PPSDL_Sensor = ˆPSDL_Sensor;
PPSDL_SensorEvent = ˆPSDL_SensorEvent;
PPSDL_SensorID = ˆPSDL_SensorID;
PPSDL_SensorType = ˆPSDL_SensorType;
PPSDL_SpinLock = ˆPSDL_SpinLock;
PPSDL_Surface = ˆPSDL_Surface;
PPSDL_SystemCursor = ˆPSDL_SystemCursor;
PPSDL_SysWMEvent = ˆPSDL_SysWMEvent;
PPSDL_SysWMinfo = ˆPSDL_SysWMinfo;
PPSDL_SysWMmsg = ˆPSDL_SysWMmsg;
PPSDL_TextEditingEvent = ˆPSDL_TextEditingEvent;
PPSDL_TextEditingExtEvent = ˆPSDL_TextEditingExtEvent;
PPSDL_TextInputEvent = ˆPSDL_TextInputEvent;
PPSDL_Texture = ˆPSDL_Texture;
PPSDL_TextureAccess = ˆPSDL_TextureAccess;
PPSDL_TextureModulate = ˆPSDL_TextureModulate;
PPSDL_ThreadFunction = ˆPSDL_ThreadFunction;
PPSDL_threadID = ˆPSDL_threadID;
PPSDL_ThreadPriority = ˆPSDL_ThreadPriority;
PPSDL_TimerCallback = ˆPSDL_TimerCallback;
PPSDL_TimerID = ˆPSDL_TimerID;
PPSDL_TLSID = ˆPSDL_TLSID;
PPSDL_TouchDeviceType = ˆPSDL_TouchDeviceType;
PPSDL_TouchFingerEvent = ˆPSDL_TouchFingerEvent;
PPSDL_TouchID = ˆPSDL_TouchID;
PPSDL_UserEvent = ˆPSDL_UserEvent;
PPSDL_Version = ˆPSDL_Version;
PPSDL_Vertex = ˆPSDL_Vertex;
PPSDL_VirtualJoystickDesc = ˆPSDL_VirtualJoystickDesc;
PPSDL_Window = ˆPSDL_Window;
PPSDL_WindowEvent = ˆPSDL_WindowEvent;
PPSDL_WindowEventID = ˆPSDL_WindowEventID;
PPSDL_WindowFlags = ˆPSDL_WindowFlags;
PPSDL_WindowShapeMode = ˆPSDL_WindowShapeMode;
PPSDL_WindowShapeParams = ˆPSDL_WindowShapeParams;
PPUInt8Array = ˆPUInt8Array;
PPWindowShapeMode = ˆPWindowShapeMode;
PSDL_ArrayOrder = ˆTSDL_ArrayOrder;
PSDL_Atomic = ˆTSDL_Atomic;
PSDL_AudioCallback = ˆTSDL_AudioCallback;
PSDL_AudioCVT = ˆTSDL_AudioCVT;
PSDL_AudioDeviceEvent = ˆTSDL_AudioDeviceEvent;
PSDL_AudioDeviceID = ˆTSDL_AudioDeviceID;
PSDL_AudioFormat = ˆTSDL_AudioFormat;
PSDL_AudioSpec = ˆTSDL_AudioSpec;
PSDL_AudioStatus = ˆTSDL_AudioStatus;
PSDL_AudioStream = type Pointer;
PSDL_BitmapOrder = ˆTSDL_BitmapOrder;
PSDL_BlendFactor = ˆTSDL_BlendFactor;
PSDL_BlendMode = ˆTSDL_BlendMode;
PSDL_BlendOperation = ˆTSDL_BlendOperation;
PSDL_Blit = ˆTSDL_Blit;
PSDL_BlitMap = type Pointer;
PSDL_Bool = ˆTSDL_Bool;
PSDL_calloc_func = ˆTSDL_calloc_func;
PSDL_Color = ˆTSDL_Color;
PSDL_Colour = ˆTSDL_Colour;
PSDL_CommonEvent = ˆTSDL_CommonEvent;
PSDL_Cond = Type Pointer;
PSDL_ControllerAxisEvent = ˆTSDL_ControllerAxisEvent;
PSDL_ControllerButtonEvent = ˆTSDL_ControllerButtonEvent;
PSDL_ControllerDeviceEvent = ˆTSDL_ControllerDeviceEvent;
PSDL_ControllerSensorEvent = ˆTSDL_ControllerSensorEvent;
PSDL_ControllerTouchpadEvent = ˆTSDL_ControllerTouchpadEvent;
PSDL_Cursor = type Pointer;
PSDL_DisplayEvent = ˆTSDL_DisplayEvent;
PSDL_DisplayEventID = ˆTSDL_DisplayEventID;
PSDL_DisplayMode = ˆTSDL_DisplayMode;
PSDL_DisplayOrientation = ˆTSDL_DisplayOrientation;
PSDL_DollarGestureEvent = ˆTSDL_DollarGestureEvent;
PSDL_DropEvent = ˆTSDL_DropEvent;
PSDL_ErrorCode = ˆTSDL_ErrorCode;
PSDL_Event = ˆTSDL_Event;
PSDL_EventAction = ˆTSDL_EventAction;
PSDL_EventFilter = ˆTSDL_EventFilter;
PSDL_EventType = ˆTSDL_EventType;
PSDL_Finger = ˆTSDL_Finger;
PSDL_FingerID = ˆTSDL_FingerID;
PSDL_FlashOperation = ˆTSDL_FlashOperation;
PSDL_FPoint = ˆTSDL_FPoint;
PSDL_FRect = ˆTSDL_FRect;
PSDL_free_func = ˆTSDL_free_func;
PSDL_GameController = type Pointer;
PSDL_GameControllerAxis = ˆTSDL_GameControllerAxis;
PSDL_GameControllerBindType = ˆTSDL_GameControllerBindType;
PSDL_GameControllerButton = ˆTSDL_GameControllerButton;
PSDL_GameControllerButtonBind = ˆTSDL_GameControllerButtonBind;
PSDL_GameControllerType = ˆTSDL_GameControllerType;
PSDL_GestureID = ˆTSDL_GestureID;
PSDL_GLattr = ˆTSDL_GLattr;
PSDL_GLContext = ˆTSDL_GLContext;
PSDL_GLcontextFlag = ˆTSDL_GLcontextFlag;
PSDL_GLcontextReleaseFlag = ˆTSDL_GLcontextReleaseFlag;
PSDL_GLContextResetNotification = ˆTSDL_GLContextResetNotification;
PSDL_GLprofile = ˆTSDL_GLprofile;
PSDL_GUID = ˆTSDL_GUID;
PSDL_Haptic = type Pointer;
PSDL_HapticCondition = ˆTSDL_HapticCondition;
PSDL_HapticConstant = ˆTSDL_HapticConstant;
PSDL_HapticCustom = ˆTSDL_HapticCustom;
PSDL_HapticDirection = ˆTSDL_HapticDirection;
PSDL_HapticEffect = ˆTSDL_HapticEffect;
PSDL_HapticPeriodic = ˆTSDL_HapticPeriodic;
PSDL_HapticRamp = ˆTSDL_HapticRamp;
PSDL_hid_device = type Pointer;
PSDL_hid_device_info = ˆTSDL_hid_device_info;
PSDL_HintCallback = ˆTSDL_HintCallback;
PSDL_HintPriority = ˆTSDL_HintPriority;
PSDL_HitTest = ˆTSDL_HitTest;
PSDL_HitTestResult = ˆTSDL_HitTestResult;
PSDL_iconv = type Pointer;
PSDL_Init = ˆTSDL_Init;
PSDL_JoyAxisEvent = ˆTSDL_JoyAxisEvent;
PSDL_JoyBallEvent = ˆTSDL_JoyBallEvent;
PSDL_JoyBatteryEvent = ˆTSDL_JoyBatteryEvent;
PSDL_JoyButtonEvent = ˆTSDL_JoyButtonEvent;
PSDL_JoyDeviceEvent = ˆTSDL_JoyDeviceEvent;
PSDL_JoyHatEvent = ˆTSDL_JoyHatEvent;
PSDL_Joystick = type Pointer;
PSDL_JoystickGUID = ˆTSDL_JoystickGUID;
PSDL_JoystickID = ˆTSDL_JoystickID;
PSDL_JoystickPowerLevel = ˆTSDL_JoystickPowerLevel;
PSDL_JoystickType = ˆTSDL_JoystickType;
PSDL_KeyboardEvent = ˆTSDL_KeyboardEvent;
PSDL_KeyCode = ˆTSDL_KeyCode;
PSDL_KeyMod = ˆTSDL_KeyMod;
PSDL_Keysym = ˆTSDL_Keysym;
PSDL_Locale = ˆTSDL_Locale;
PSDL_LogCategory = ˆTSDL_LogCategory;
PSDL_LogOutputFunction = ˆTSDL_LogOutputFunction;
PSDL_LogPriority = ˆTSDL_LogPriority;
PSDL_malloc_func = ˆTSDL_malloc_func;
PSDL_MessageBoxButtonData = ˆTSDL_MessageBoxButtonData;
PSDL_MessageBoxButtonFlags = ˆTSDL_MessageBoxButtonFlags;
PSDL_MessageBoxColor = ˆTSDL_MessageBoxColor;
PSDL_MessageBoxColorScheme = ˆTSDL_MessageBoxColorScheme;
PSDL_MessageBoxColorType = ˆTSDL_MessageBoxColorType;
PSDL_MessageBoxData = ˆTSDL_MessageBoxData;
PSDL_MessageBoxFlags = ˆTSDL_MessageBoxFlags;
PSDL_MouseButtonEvent = ˆTSDL_MouseButtonEvent;
PSDL_MouseMotionEvent = ˆTSDL_MouseMotionEvent;
PSDL_MouseWheelDirection = ˆTSDL_MouseWheelDirection;
PSDL_MouseWheelEvent = ˆTSDL_MouseWheelEvent;
PSDL_MultiGestureEvent = ˆTSDL_MultiGestureEvent;
PSDL_Mutex = Type Pointer;
PSDL_PackedLayout = ˆTSDL_PackedLayout;
PSDL_PackOrder = ˆTSDL_PackOrder;
PSDL_Palette = ˆTSDL_Palette;
PSDL_PixelFormat = ˆTSDL_PixelFormat;
PSDL_PixelType = ˆTSDL_PixelType;
PSDL_Point = ˆTSDL_Point;
PSDL_PowerState = ˆTSDL_PowerState;
PSDL_QuitEvent = ˆTSDL_QuitEvent;
PSDL_realloc_func = ˆTSDL_realloc_func;
PSDL_Rect = ˆTSDL_Rect;
PSDL_Renderer = type Pointer;
PSDL_RendererFlags = ˆTSDL_RendererFlags;
PSDL_RendererInfo = ˆTSDL_RendererInfo;
PSDL_RenderFlip = ˆTSDL_RenderFlip;
PSDL_RWops = ˆTSDL_RWops;
PSDL_ScaleMode = ˆTSDL_ScaleMode;
PSDL_ScanCode = ˆTSDL_ScanCode;
PSDL_Sem = Type Pointer;
PSDL_Sensor = type Pointer;
PSDL_SensorEvent = ˆTSDL_SensorEvent;
PSDL_SensorID = ˆTSDL_SensorID;
PSDL_SensorType = ˆTSDL_SensorType;
PSDL_SpinLock = ˆTSDL_SpinLock;
PSDL_Surface = ˆTSDL_Surface;
PSDL_SystemCursor = ˆTSDL_SystemCursor;
PSDL_SysWMEvent = ˆTSDL_SysWMEvent;
PSDL_SysWMinfo = ˆTSDL_SysWMinfo;
PSDL_SysWMmsg = ˆTSDL_SysWMmsg;
PSDL_TextEditingEvent = ˆTSDL_TextEditingEvent;
PSDL_TextEditingExtEvent = ˆTSDL_TextEditingExtEvent;
PSDL_TextInputEvent = ˆTSDL_TextInputEvent;
PSDL_Texture = type Pointer;
PSDL_TextureAccess = ˆTSDL_TextureAccess;
PSDL_TextureModulate = ˆTSDL_TextureModulate;
PSDL_Thread = type Pointer;
PSDL_ThreadFunction = ˆTSDL_ThreadFunction;
PSDL_threadID = ˆTSDL_threadID;
PSDL_ThreadPriority = ˆTSDL_ThreadPriority;
PSDL_TimerCallback = ˆTSDL_TimerCallback;
PSDL_TimerID = ˆTSDL_TimerID;
PSDL_TLSID = ˆTSDL_TLSID;
PSDL_TouchDeviceType = ˆTSDL_TouchDeviceType;
PSDL_TouchFingerEvent = ˆTSDL_TouchFingerEvent;
PSDL_TouchID = ˆTSDL_TouchID;
PSDL_UserEvent = ˆTSDL_UserEvent;
PSDL_Version = ˆTSDL_Version;
PSDL_Vertex = ˆTSDL_Vertex;
PSDL_VirtualJoystickDesc = ˆTSDL_VirtualJoystickDesc;
PSDL_Window = type Pointer;
PSDL_WindowEvent = ˆTSDL_WindowEvent;
PSDL_WindowEventID = ˆTSDL_WindowEventID;
PSDL_WindowFlags = ˆTSDL_WindowFlags;
PSDL_WindowShapeMode = ˆTSDL_WindowShapeMode;
PSDL_WindowShapeParams = ˆTSDL_WindowShapeParams;
PUInt8Array = ˆTUInt8Array;
PWindowShapeMode = ˆTWindowShapeMode;
TClose = function(context: PSDL_RWops): cint; cdecl;
TKeyStateArr = array[0..65000] of cuint8;
TRead = function(context: PSDL_RWops; ptr: Pointer; size: csize_t; maxnum: csize_t): csize_t; cdecl;
TRumbleFunc = function(userdata: Pointer; low_frequency_rumble: cuint16; high_frequency_rumble: cuint16): cint; cdecl;
TRumbleTriggersFunc = function(userdata: Pointer; left_rumble: cuint16; right_rumble: cuint16): cint; cdecl;
TSDL_ArrayOrder = type cuint32;
TSDL_AudioCallback = procedure(userdata: Pointer; stream: pcuint8; len: cint); cdecl;
TSDL_AudioDeviceID = cuint32;
TSDL_AudioFilter = procedure(cvt: PSDL_AudioCVT; format: TSDL_AudioFormat); cdecl;
TSDL_AudioFormat = cuint16;
TSDL_AudioStatus = type cint;
TSDL_BitmapOrder = type cuint32;
TSDL_BlendFactor = type DWord;
TSDL_BlendMode = type DWord;
TSDL_BlendOperation = type DWord;
TSDL_Blit = function(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint;
TSDL_Bool = cbool;
TSDL_calloc_func = function(nmemb, size: csize_t): Pointer; cdecl;
TSDL_Colour = TSDL_Color;
TSDL_DisplayEventID = type Integer;
TSDL_DisplayOrientation = type Integer;
TSDL_ErrorCode = (...);
TSDL_EventAction = Word;
TSDL_EventFilter = function(userdata: Pointer; event: PSDL_Event): cint; cdecl;
TSDL_EventType = type cuint32;
TSDL_FingerID = type cint64;
TSDL_FlashOperation = type Integer;
TSDL_free_func = procedure(mem: Pointer); cdecl;
TSDL_GameControllerAxis = type cint;
TSDL_GameControllerBindType = type cint;
TSDL_GameControllerButton = type cint;
TSDL_GameControllerType = type cint;
TSDL_GestureID = type cint64;
TSDL_GLattr = type Integer;
TSDL_GLContext = Pointer;
TSDL_GLcontextFlag = type Integer;
TSDL_GLcontextReleaseFlag = type Integer;
TSDL_GLContextResetNotification = type Integer;
TSDL_GLprofile = type Integer;
TSDL_HintCallback = procedure(userdata: Pointer; const name: PAnsiChar; const oldValue: PAnsiChar; const newValue: PAnsiChar); cdecl;
TSDL_HintPriority = type Integer;
TSDL_HitTest = function(win: PSDL_Window; const area: PSDL_Point; data: Pointer): TSDL_HitTestResult; cdecl;
TSDL_HitTestResult = type Integer;
TSDL_Init = type cuint32;
TSDL_JoystickGUID = type TSDL_GUID;
TSDL_JoystickID = type cint32;
TSDL_JoystickPowerLevel = type Integer;
TSDL_JoystickType = type Integer;
TSDL_KeyCode = type cint32;
TSDL_KeyMod = type cint;
TSDL_LogCategory = type cint;
TSDL_LogOutputFunction = procedure( userdata: Pointer; category: TSDL_LogCategory; priority: TSDL_LogPriority; const msg: PAnsiChar); cdecl;
TSDL_LogPriority = type cint32;
TSDL_malloc_func = function(size: csize_t): Pointer; cdecl;
TSDL_MessageBoxButtonFlags = type cuint32;
TSDL_MessageBoxColorType = type Word;
TSDL_MessageBoxFlags = type cuint32;
TSDL_MouseWheelDirection = type Integer;
TSDL_PackedLayout = type cuint32;
TSDL_PackOrder = type cuint32;
TSDL_PixelType = type cuint;
TSDL_PowerState = (...);
TSDL_realloc_func = function(mem: Pointer; size: csize_t): Pointer; cdecl;
TSDL_RendererFlags = Word;
TSDL_RenderFlip = type cint;
TSDL_ScaleMode = type cint;
TSDL_ScanCode = type cint;
TSDL_SensorID = type cint32;
TSDL_SensorType = type cint;
TSDL_SpinLock = type cint;
TSDL_SystemCursor = type Integer;
TSDL_SYSWM_TYPE = type cint;
TSDL_TextureAccess = type cint;
TSDL_TextureModulate = type cint;
TSDL_ThreadFunction = function(data: Pointer): cint; cdecl;
TSDL_threadID = culong;
TSDL_ThreadPriority = cint;
TSDL_TimerCallback = function(interval: cuint32; param: Pointer): cuint32; cdecl;
TSDL_TimerID = cint;
TSDL_TLSID = cuint;
TSDL_TouchDeviceType = type cint;
TSDL_TouchID = type cint64;
TSDL_WindowEventID = type cint;
TSDL_WindowFlags = type cuint;
TSDL_YUV_CONVERSION_MODE = type Integer;
TSeek = function(context: PSDL_RWops; offset: cint64; whence: cint): cint64; cdecl;
TSendEffectFunc = function(userdata: Pointer; const data: Pointer; size: cint): cint; cdecl;
TSetLEDFunc = function(userdata: Pointer; red: cuint8; green: cuint8; blue: cuint8): cint; cdecl;
TSetPlayerIndexProc = procedure(userdata: Pointer; player_index: cint); cdecl;
TSize = function(context: PSDL_RWops): cint64; cdecl;
TTLSDestructor = procedure(value: Pointer); cdecl;
TUInt8Array = array [0..MAXINT shr 1] of cuint8;
TUpdateProc = procedure(userdata: Pointer); cdecl;
TWindowShapeMode = type Integer;
TWrite = function(context: PSDL_RWops; const ptr: Pointer; size: csize_t; num: csize_t): csize_t; cdecl;

Constants

AUDIO_F32 = AUDIO_F32LSB;
AUDIO_F32LSB = $8120;
AUDIO_F32MSB = $9120;
AUDIO_S16 = AUDIO_S16LSB;
AUDIO_S16LSB = $8010;
AUDIO_S16MSB = $9010;
AUDIO_S32 = AUDIO_S32LSB;
AUDIO_S32LSB = $8020;
AUDIO_S32MSB = $9020;
AUDIO_S8 = $8008;
AUDIO_U16 = AUDIO_U16LSB;
AUDIO_U16LSB = $0010;
AUDIO_U16MSB = $1010;
AUDIO_U8 = $0008;
KMOD_ALT = KMOD_LALT or KMOD_RALT;
KMOD_CAPS = TSDL_KeyMod($2000);
KMOD_CTRL = KMOD_LCTRL or KMOD_RCTRL;
KMOD_GUI = KMOD_LGUI or KMOD_RGUI;
KMOD_LALT = TSDL_KeyMod($0100);
KMOD_LCTRL = TSDL_KeyMod($0040);
KMOD_LGUI = TSDL_KeyMod($0400);
KMOD_LSHIFT = TSDL_KeyMod($0001);
KMOD_MODE = TSDL_KeyMod($4000);
KMOD_NONE = TSDL_KeyMod($0000);
KMOD_NUM = TSDL_KeyMod($1000);
KMOD_RALT = TSDL_KeyMod($0200);
KMOD_RCTRL = TSDL_KeyMod($0080);
KMOD_RESERVED = KMOD_SCROLL;
KMOD_RGUI = TSDL_KeyMod($0800);
KMOD_RSHIFT = TSDL_KeyMod($0002);
KMOD_SCROLL = TSDL_KeyMod($8000);
KMOD_SHIFT = KMOD_LSHIFT or KMOD_RSHIFT;
RW_SEEK_CUR = 1;
RW_SEEK_END = 2;
RW_SEEK_SET = 0;
SDLK_0 = TSDL_KeyCode('0');
SDLK_1 = TSDL_KeyCode('1');
SDLK_2 = TSDL_KeyCode('2');
SDLK_3 = TSDL_KeyCode('3');
SDLK_4 = TSDL_KeyCode('4');
SDLK_5 = TSDL_KeyCode('5');
SDLK_6 = TSDL_KeyCode('6');
SDLK_7 = TSDL_KeyCode('7');
SDLK_8 = TSDL_KeyCode('8');
SDLK_9 = TSDL_KeyCode('9');
SDLK_a = TSDL_KeyCode('a');
SDLK_AC_BACK = TSDL_KeyCode(SDL_SCANCODE_AC_BACK or SDLK_SCANCODE_MASK);
SDLK_AC_BOOKMARKS = TSDL_KeyCode(SDL_SCANCODE_AC_BOOKMARKS or SDLK_SCANCODE_MASK);
SDLK_AC_FORWARD = TSDL_KeyCode(SDL_SCANCODE_AC_FORWARD or SDLK_SCANCODE_MASK);
SDLK_AC_HOME = TSDL_KeyCode(SDL_SCANCODE_AC_HOME or SDLK_SCANCODE_MASK);
SDLK_AC_REFRESH = TSDL_KeyCode(SDL_SCANCODE_AC_REFRESH or SDLK_SCANCODE_MASK);
SDLK_AC_SEARCH = TSDL_KeyCode(SDL_SCANCODE_AC_SEARCH or SDLK_SCANCODE_MASK);
SDLK_AC_STOP = TSDL_KeyCode(SDL_SCANCODE_AC_STOP or SDLK_SCANCODE_MASK);
SDLK_AGAIN = TSDL_KeyCode(SDL_SCANCODE_AGAIN or SDLK_SCANCODE_MASK);
SDLK_ALTERASE = TSDL_KeyCode(SDL_SCANCODE_ALTERASE or SDLK_SCANCODE_MASK);
SDLK_AMPERSAND = TSDL_KeyCode('&');
SDLK_APP1 = TSDL_KeyCode(SDL_SCANCODE_APP1 or SDLK_SCANCODE_MASK);
SDLK_APP2 = TSDL_KeyCode(SDL_SCANCODE_APP2 or SDLK_SCANCODE_MASK);
SDLK_APPLICATION = TSDL_KeyCode(SDL_SCANCODE_APPLICATION or SDLK_SCANCODE_MASK);
SDLK_ASTERISK = TSDL_KeyCode('*');
SDLK_AT = TSDL_KeyCode('@');
SDLK_AUDIOFASTFORWARD = TSDL_KeyCode(SDL_SCANCODE_AUDIOFASTFORWARD or SDLK_SCANCODE_MASK);
SDLK_AUDIOMUTE = TSDL_KeyCode(SDL_SCANCODE_AUDIOMUTE or SDLK_SCANCODE_MASK);
SDLK_AUDIONEXT = TSDL_KeyCode(SDL_SCANCODE_AUDIONEXT or SDLK_SCANCODE_MASK);
SDLK_AUDIOPLAY = TSDL_KeyCode(SDL_SCANCODE_AUDIOPLAY or SDLK_SCANCODE_MASK);
SDLK_AUDIOPREV = TSDL_KeyCode(SDL_SCANCODE_AUDIOPREV or SDLK_SCANCODE_MASK);
SDLK_AUDIOREWIND = TSDL_KeyCode(SDL_SCANCODE_AUDIOREWIND or SDLK_SCANCODE_MASK);
SDLK_AUDIOSTOP = TSDL_KeyCode(SDL_SCANCODE_AUDIOSTOP or SDLK_SCANCODE_MASK);
SDLK_b = TSDL_KeyCode('b');
SDLK_BACKQUOTE = TSDL_KeyCode('`');
SDLK_BACKSLASH = TSDL_KeyCode('\');
SDLK_BACKSPACE = TSDL_KeyCode(#8);
SDLK_BRIGHTNESSDOWN = TSDL_KeyCode(SDL_SCANCODE_BRIGHTNESSDOWN or SDLK_SCANCODE_MASK);
SDLK_BRIGHTNESSUP = TSDL_KeyCode(SDL_SCANCODE_BRIGHTNESSUP or SDLK_SCANCODE_MASK);
SDLK_c = TSDL_KeyCode('c');
SDLK_CALCULATOR = TSDL_KeyCode(SDL_SCANCODE_CALCULATOR or SDLK_SCANCODE_MASK);
SDLK_CALL = TSDL_KeyCode(SDL_SCANCODE_CALL or SDLK_SCANCODE_MASK);
SDLK_CANCEL = TSDL_KeyCode(SDL_SCANCODE_CANCEL or SDLK_SCANCODE_MASK);
SDLK_CAPSLOCK = TSDL_KeyCode(SDL_SCANCODE_CAPSLOCK or SDLK_SCANCODE_MASK);
SDLK_CARET = TSDL_KeyCode('ˆ');
SDLK_CLEAR = TSDL_KeyCode(SDL_SCANCODE_CLEAR or SDLK_SCANCODE_MASK);
SDLK_CLEARAGAIN = TSDL_KeyCode(SDL_SCANCODE_CLEARAGAIN or SDLK_SCANCODE_MASK);
SDLK_COLON = TSDL_KeyCode(':');
SDLK_COMMA = TSDL_KeyCode(',');
SDLK_COMPUTER = TSDL_KeyCode(SDL_SCANCODE_COMPUTER or SDLK_SCANCODE_MASK);
SDLK_COPY = TSDL_KeyCode(SDL_SCANCODE_COPY or SDLK_SCANCODE_MASK);
SDLK_CRSEL = TSDL_KeyCode(SDL_SCANCODE_CRSEL or SDLK_SCANCODE_MASK);
SDLK_CURRENCYSUBUNIT = TSDL_KeyCode(SDL_SCANCODE_CURRENCYSUBUNIT or SDLK_SCANCODE_MASK);
SDLK_CURRENCYUNIT = TSDL_KeyCode(SDL_SCANCODE_CURRENCYUNIT or SDLK_SCANCODE_MASK);
SDLK_CUT = TSDL_KeyCode(SDL_SCANCODE_CUT or SDLK_SCANCODE_MASK);
SDLK_d = TSDL_KeyCode('d');
SDLK_DECIMALSEPARATOR = TSDL_KeyCode(SDL_SCANCODE_DECIMALSEPARATOR or SDLK_SCANCODE_MASK);
SDLK_DELETE = TSDL_KeyCode(#127);
SDLK_DISPLAYSWITCH = TSDL_KeyCode(SDL_SCANCODE_DISPLAYSWITCH or SDLK_SCANCODE_MASK);
SDLK_DOLLAR = TSDL_KeyCode('$');
SDLK_DOWN = TSDL_KeyCode(SDL_SCANCODE_DOWN or SDLK_SCANCODE_MASK);
SDLK_e = TSDL_KeyCode('e');
SDLK_EJECT = TSDL_KeyCode(SDL_SCANCODE_EJECT or SDLK_SCANCODE_MASK);
SDLK_END = TSDL_KeyCode(SDL_SCANCODE_END or SDLK_SCANCODE_MASK);
SDLK_ENDCALL = TSDL_KeyCode(SDL_SCANCODE_ENDCALL or SDLK_SCANCODE_MASK);
SDLK_EQUALS = TSDL_KeyCode('=');
SDLK_ESCAPE = TSDL_KeyCode(#27);
SDLK_EXCLAIM = TSDL_KeyCode('!');
SDLK_EXECUTE = TSDL_KeyCode(SDL_SCANCODE_EXECUTE or SDLK_SCANCODE_MASK);
SDLK_EXSEL = TSDL_KeyCode(SDL_SCANCODE_EXSEL or SDLK_SCANCODE_MASK);
SDLK_f = TSDL_KeyCode('f');
SDLK_F1 = TSDL_KeyCode(SDL_SCANCODE_F1 or SDLK_SCANCODE_MASK);
SDLK_F10 = TSDL_KeyCode(SDL_SCANCODE_F10 or SDLK_SCANCODE_MASK);
SDLK_F11 = TSDL_KeyCode(SDL_SCANCODE_F11 or SDLK_SCANCODE_MASK);
SDLK_F12 = TSDL_KeyCode(SDL_SCANCODE_F12 or SDLK_SCANCODE_MASK);
SDLK_F13 = TSDL_KeyCode(SDL_SCANCODE_F13 or SDLK_SCANCODE_MASK);
SDLK_F14 = TSDL_KeyCode(SDL_SCANCODE_F14 or SDLK_SCANCODE_MASK);
SDLK_F15 = TSDL_KeyCode(SDL_SCANCODE_F15 or SDLK_SCANCODE_MASK);
SDLK_F16 = TSDL_KeyCode(SDL_SCANCODE_F16 or SDLK_SCANCODE_MASK);
SDLK_F17 = TSDL_KeyCode(SDL_SCANCODE_F17 or SDLK_SCANCODE_MASK);
SDLK_F18 = TSDL_KeyCode(SDL_SCANCODE_F18 or SDLK_SCANCODE_MASK);
SDLK_F19 = TSDL_KeyCode(SDL_SCANCODE_F19 or SDLK_SCANCODE_MASK);
SDLK_F2 = TSDL_KeyCode(SDL_SCANCODE_F2 or SDLK_SCANCODE_MASK);
SDLK_F20 = TSDL_KeyCode(SDL_SCANCODE_F20 or SDLK_SCANCODE_MASK);
SDLK_F21 = TSDL_KeyCode(SDL_SCANCODE_F21 or SDLK_SCANCODE_MASK);
SDLK_F22 = TSDL_KeyCode(SDL_SCANCODE_F22 or SDLK_SCANCODE_MASK);
SDLK_F23 = TSDL_KeyCode(SDL_SCANCODE_F23 or SDLK_SCANCODE_MASK);
SDLK_F24 = TSDL_KeyCode(SDL_SCANCODE_F24 or SDLK_SCANCODE_MASK);
SDLK_F3 = TSDL_KeyCode(SDL_SCANCODE_F3 or SDLK_SCANCODE_MASK);
SDLK_F4 = TSDL_KeyCode(SDL_SCANCODE_F4 or SDLK_SCANCODE_MASK);
SDLK_F5 = TSDL_KeyCode(SDL_SCANCODE_F5 or SDLK_SCANCODE_MASK);
SDLK_F6 = TSDL_KeyCode(SDL_SCANCODE_F6 or SDLK_SCANCODE_MASK);
SDLK_F7 = TSDL_KeyCode(SDL_SCANCODE_F7 or SDLK_SCANCODE_MASK);
SDLK_F8 = TSDL_KeyCode(SDL_SCANCODE_F8 or SDLK_SCANCODE_MASK);
SDLK_F9 = TSDL_KeyCode(SDL_SCANCODE_F9 or SDLK_SCANCODE_MASK);
SDLK_FIND = TSDL_KeyCode(SDL_SCANCODE_FIND or SDLK_SCANCODE_MASK);
SDLK_g = TSDL_KeyCode('g');
SDLK_GREATER = TSDL_KeyCode('>');
SDLK_h = TSDL_KeyCode('h');
SDLK_HASH = TSDL_KeyCode('#');
SDLK_HELP = TSDL_KeyCode(SDL_SCANCODE_HELP or SDLK_SCANCODE_MASK);
SDLK_HOME = TSDL_KeyCode(SDL_SCANCODE_HOME or SDLK_SCANCODE_MASK);
SDLK_i = TSDL_KeyCode('i');
SDLK_INSERT = TSDL_KeyCode(SDL_SCANCODE_INSERT or SDLK_SCANCODE_MASK);
SDLK_j = TSDL_KeyCode('j');
SDLK_k = TSDL_KeyCode('k');
SDLK_KBDILLUMDOWN = TSDL_KeyCode(SDL_SCANCODE_KBDILLUMDOWN or SDLK_SCANCODE_MASK);
SDLK_KBDILLUMTOGGLE = TSDL_KeyCode(SDL_SCANCODE_KBDILLUMTOGGLE or SDLK_SCANCODE_MASK);
SDLK_KBDILLUMUP = TSDL_KeyCode(SDL_SCANCODE_KBDILLUMUP or SDLK_SCANCODE_MASK);
SDLK_KP_0 = TSDL_KeyCode(SDL_SCANCODE_KP_0 or SDLK_SCANCODE_MASK);
SDLK_KP_00 = TSDL_KeyCode(SDL_SCANCODE_KP_00 or SDLK_SCANCODE_MASK);
SDLK_KP_000 = TSDL_KeyCode(SDL_SCANCODE_KP_000 or SDLK_SCANCODE_MASK);
SDLK_KP_1 = TSDL_KeyCode(SDL_SCANCODE_KP_1 or SDLK_SCANCODE_MASK);
SDLK_KP_2 = TSDL_KeyCode(SDL_SCANCODE_KP_2 or SDLK_SCANCODE_MASK);
SDLK_KP_3 = TSDL_KeyCode(SDL_SCANCODE_KP_3 or SDLK_SCANCODE_MASK);
SDLK_KP_4 = TSDL_KeyCode(SDL_SCANCODE_KP_4 or SDLK_SCANCODE_MASK);
SDLK_KP_5 = TSDL_KeyCode(SDL_SCANCODE_KP_5 or SDLK_SCANCODE_MASK);
SDLK_KP_6 = TSDL_KeyCode(SDL_SCANCODE_KP_6 or SDLK_SCANCODE_MASK);
SDLK_KP_7 = TSDL_KeyCode(SDL_SCANCODE_KP_7 or SDLK_SCANCODE_MASK);
SDLK_KP_8 = TSDL_KeyCode(SDL_SCANCODE_KP_8 or SDLK_SCANCODE_MASK);
SDLK_KP_9 = TSDL_KeyCode(SDL_SCANCODE_KP_9 or SDLK_SCANCODE_MASK);
SDLK_KP_A = TSDL_KeyCode(SDL_SCANCODE_KP_A or SDLK_SCANCODE_MASK);
SDLK_KP_AMPERSAND = TSDL_KeyCode(SDL_SCANCODE_KP_AMPERSAND or SDLK_SCANCODE_MASK);
SDLK_KP_AT = TSDL_KeyCode(SDL_SCANCODE_KP_AT or SDLK_SCANCODE_MASK);
SDLK_KP_B = TSDL_KeyCode(SDL_SCANCODE_KP_B or SDLK_SCANCODE_MASK);
SDLK_KP_BACKSPACE = TSDL_KeyCode(SDL_SCANCODE_KP_BACKSPACE or SDLK_SCANCODE_MASK);
SDLK_KP_BINARY = TSDL_KeyCode(SDL_SCANCODE_KP_BINARY or SDLK_SCANCODE_MASK);
SDLK_KP_C = TSDL_KeyCode(SDL_SCANCODE_KP_C or SDLK_SCANCODE_MASK);
SDLK_KP_CLEAR = TSDL_KeyCode(SDL_SCANCODE_KP_CLEAR or SDLK_SCANCODE_MASK);
SDLK_KP_CLEARENTRY = TSDL_KeyCode(SDL_SCANCODE_KP_CLEARENTRY or SDLK_SCANCODE_MASK);
SDLK_KP_COLON = TSDL_KeyCode(SDL_SCANCODE_KP_COLON or SDLK_SCANCODE_MASK);
SDLK_KP_COMMA = TSDL_KeyCode(SDL_SCANCODE_KP_COMMA or SDLK_SCANCODE_MASK);
SDLK_KP_D = TSDL_KeyCode(SDL_SCANCODE_KP_D or SDLK_SCANCODE_MASK);
SDLK_KP_DBLAMPERSAND = TSDL_KeyCode(SDL_SCANCODE_KP_DBLAMPERSAND or SDLK_SCANCODE_MASK);
SDLK_KP_DBLVERTICALBAR = TSDL_KeyCode(SDL_SCANCODE_KP_DBLVERTICALBAR or SDLK_SCANCODE_MASK);
SDLK_KP_DECIMAL = TSDL_KeyCode(SDL_SCANCODE_KP_DECIMAL or SDLK_SCANCODE_MASK);
SDLK_KP_DIVIDE = TSDL_KeyCode(SDL_SCANCODE_KP_DIVIDE or SDLK_SCANCODE_MASK);
SDLK_KP_E = TSDL_KeyCode(SDL_SCANCODE_KP_E or SDLK_SCANCODE_MASK);
SDLK_KP_ENTER = TSDL_KeyCode(SDL_SCANCODE_KP_ENTER or SDLK_SCANCODE_MASK);
SDLK_KP_EQUALS = TSDL_KeyCode(SDL_SCANCODE_KP_EQUALS or SDLK_SCANCODE_MASK);
SDLK_KP_EQUALSAS400 = TSDL_KeyCode(SDL_SCANCODE_KP_EQUALSAS400 or SDLK_SCANCODE_MASK);
SDLK_KP_EXCLAM = TSDL_KeyCode(SDL_SCANCODE_KP_EXCLAM or SDLK_SCANCODE_MASK);
SDLK_KP_F = TSDL_KeyCode(SDL_SCANCODE_KP_F or SDLK_SCANCODE_MASK);
SDLK_KP_GREATER = TSDL_KeyCode(SDL_SCANCODE_KP_GREATER or SDLK_SCANCODE_MASK);
SDLK_KP_HASH = TSDL_KeyCode(SDL_SCANCODE_KP_HASH or SDLK_SCANCODE_MASK);
SDLK_KP_HEXADECIMAL = TSDL_KeyCode(SDL_SCANCODE_KP_HEXADECIMAL or SDLK_SCANCODE_MASK);
SDLK_KP_LEFTBRACE = TSDL_KeyCode(SDL_SCANCODE_KP_LEFTBRACE or SDLK_SCANCODE_MASK);
SDLK_KP_LEFTPAREN = TSDL_KeyCode(SDL_SCANCODE_KP_LEFTPAREN or SDLK_SCANCODE_MASK);
SDLK_KP_LESS = TSDL_KeyCode(SDL_SCANCODE_KP_LESS or SDLK_SCANCODE_MASK);
SDLK_KP_MEMADD = TSDL_KeyCode(SDL_SCANCODE_KP_MEMADD or SDLK_SCANCODE_MASK);
SDLK_KP_MEMCLEAR = TSDL_KeyCode(SDL_SCANCODE_KP_MEMCLEAR or SDLK_SCANCODE_MASK);
SDLK_KP_MEMDIVIDE = TSDL_KeyCode(SDL_SCANCODE_KP_MEMDIVIDE or SDLK_SCANCODE_MASK);
SDLK_KP_MEMMULTIPLY = TSDL_KeyCode(SDL_SCANCODE_KP_MEMMULTIPLY or SDLK_SCANCODE_MASK);
SDLK_KP_MEMRECALL = TSDL_KeyCode(SDL_SCANCODE_KP_MEMRECALL or SDLK_SCANCODE_MASK);
SDLK_KP_MEMSTORE = TSDL_KeyCode(SDL_SCANCODE_KP_MEMSTORE or SDLK_SCANCODE_MASK);
SDLK_KP_MEMSUBTRACT = TSDL_KeyCode(SDL_SCANCODE_KP_MEMSUBTRACT or SDLK_SCANCODE_MASK);
SDLK_KP_MINUS = TSDL_KeyCode(SDL_SCANCODE_KP_MINUS or SDLK_SCANCODE_MASK);
SDLK_KP_MULTIPLY = TSDL_KeyCode(SDL_SCANCODE_KP_MULTIPLY or SDLK_SCANCODE_MASK);
SDLK_KP_OCTAL = TSDL_KeyCode(SDL_SCANCODE_KP_OCTAL or SDLK_SCANCODE_MASK);
SDLK_KP_PERCENT = TSDL_KeyCode(SDL_SCANCODE_KP_PERCENT or SDLK_SCANCODE_MASK);
SDLK_KP_PERIOD = TSDL_KeyCode(SDL_SCANCODE_KP_PERIOD or SDLK_SCANCODE_MASK);
SDLK_KP_PLUS = TSDL_KeyCode(SDL_SCANCODE_KP_PLUS or SDLK_SCANCODE_MASK);
SDLK_KP_PLUSMINUS = TSDL_KeyCode(SDL_SCANCODE_KP_PLUSMINUS or SDLK_SCANCODE_MASK);
SDLK_KP_POWER = TSDL_KeyCode(SDL_SCANCODE_KP_POWER or SDLK_SCANCODE_MASK);
SDLK_KP_RIGHTBRACE = TSDL_KeyCode(SDL_SCANCODE_KP_RIGHTBRACE or SDLK_SCANCODE_MASK);
SDLK_KP_RIGHTPAREN = TSDL_KeyCode(SDL_SCANCODE_KP_RIGHTPAREN or SDLK_SCANCODE_MASK);
SDLK_KP_SPACE = TSDL_KeyCode(SDL_SCANCODE_KP_SPACE or SDLK_SCANCODE_MASK);
SDLK_KP_TAB = TSDL_KeyCode(SDL_SCANCODE_KP_TAB or SDLK_SCANCODE_MASK);
SDLK_KP_VERTICALBAR = TSDL_KeyCode(SDL_SCANCODE_KP_VERTICALBAR or SDLK_SCANCODE_MASK);
SDLK_KP_XOR = TSDL_KeyCode(SDL_SCANCODE_KP_XOR or SDLK_SCANCODE_MASK);
SDLK_l = TSDL_KeyCode('l');
SDLK_LALT = TSDL_KeyCode(SDL_SCANCODE_LALT or SDLK_SCANCODE_MASK);
SDLK_LCTRL = TSDL_KeyCode(SDL_SCANCODE_LCTRL or SDLK_SCANCODE_MASK);
SDLK_LEFT = TSDL_KeyCode(SDL_SCANCODE_LEFT or SDLK_SCANCODE_MASK);
SDLK_LEFTBRACKET = TSDL_KeyCode('[');
SDLK_LEFTPAREN = TSDL_KeyCode('(');
SDLK_LESS = TSDL_KeyCode('<');
SDLK_LGUI = TSDL_KeyCode(SDL_SCANCODE_LGUI or SDLK_SCANCODE_MASK);
SDLK_LSHIFT = TSDL_KeyCode(SDL_SCANCODE_LSHIFT or SDLK_SCANCODE_MASK);
SDLK_m = TSDL_KeyCode('m');
SDLK_MAIL = TSDL_KeyCode(SDL_SCANCODE_MAIL or SDLK_SCANCODE_MASK);
SDLK_MEDIASELECT = TSDL_KeyCode(SDL_SCANCODE_MEDIASELECT or SDLK_SCANCODE_MASK);
SDLK_MENU = TSDL_KeyCode(SDL_SCANCODE_MENU or SDLK_SCANCODE_MASK);
SDLK_MINUS = TSDL_KeyCode('-');
SDLK_MODE = TSDL_KeyCode(SDL_SCANCODE_MODE or SDLK_SCANCODE_MASK);
SDLK_MUTE = TSDL_KeyCode(SDL_SCANCODE_MUTE or SDLK_SCANCODE_MASK);
SDLK_n = TSDL_KeyCode('n');
SDLK_NUMLOCKCLEAR = TSDL_KeyCode(SDL_SCANCODE_NUMLOCKCLEAR or SDLK_SCANCODE_MASK);
SDLK_o = TSDL_KeyCode('o');
SDLK_OPER = TSDL_KeyCode(SDL_SCANCODE_OPER or SDLK_SCANCODE_MASK);
SDLK_OUT = TSDL_KeyCode(SDL_SCANCODE_OUT or SDLK_SCANCODE_MASK);
SDLK_p = TSDL_KeyCode('p');
SDLK_PAGEDOWN = TSDL_KeyCode(SDL_SCANCODE_PAGEDOWN or SDLK_SCANCODE_MASK);
SDLK_PAGEUP = TSDL_KeyCode(SDL_SCANCODE_PAGEUP or SDLK_SCANCODE_MASK);
SDLK_PASTE = TSDL_KeyCode(SDL_SCANCODE_PASTE or SDLK_SCANCODE_MASK);
SDLK_PAUSE = TSDL_KeyCode(SDL_SCANCODE_PAUSE or SDLK_SCANCODE_MASK);
SDLK_PERCENT = TSDL_KeyCode('%');
SDLK_PERIOD = TSDL_KeyCode('.');
SDLK_PLUS = TSDL_KeyCode('+');
SDLK_POWER = TSDL_KeyCode(SDL_SCANCODE_POWER or SDLK_SCANCODE_MASK);
SDLK_PRINTSCREEN = TSDL_KeyCode(SDL_SCANCODE_PRINTSCREEN or SDLK_SCANCODE_MASK);
SDLK_PRIOR = TSDL_KeyCode(SDL_SCANCODE_PRIOR or SDLK_SCANCODE_MASK);
SDLK_q = TSDL_KeyCode('q');
SDLK_QUESTION = TSDL_KeyCode('?');
SDLK_QUOTE = TSDL_KeyCode('''');
SDLK_QUOTEDBL = TSDL_KeyCode('"');
SDLK_r = TSDL_KeyCode('r');
SDLK_RALT = TSDL_KeyCode(SDL_SCANCODE_RALT or SDLK_SCANCODE_MASK);
SDLK_RCTRL = TSDL_KeyCode(SDL_SCANCODE_RCTRL or SDLK_SCANCODE_MASK);
SDLK_RETURN = TSDL_KeyCode(#13);
SDLK_RETURN2 = TSDL_KeyCode(SDL_SCANCODE_RETURN2 or SDLK_SCANCODE_MASK);
SDLK_RGUI = TSDL_KeyCode(SDL_SCANCODE_RGUI or SDLK_SCANCODE_MASK);
SDLK_RIGHT = TSDL_KeyCode(SDL_SCANCODE_RIGHT or SDLK_SCANCODE_MASK);
SDLK_RIGHTBRACKET = TSDL_KeyCode(']');
SDLK_RIGHTPAREN = TSDL_KeyCode(')');
SDLK_RSHIFT = TSDL_KeyCode(SDL_SCANCODE_RSHIFT or SDLK_SCANCODE_MASK);
SDLK_s = TSDL_KeyCode('s');
SDLK_SCANCODE_MASK = 1 shl 30;
SDLK_SCROLLLOCK = TSDL_KeyCode(SDL_SCANCODE_SCROLLLOCK or SDLK_SCANCODE_MASK);
SDLK_SELECT = TSDL_KeyCode(SDL_SCANCODE_SELECT or SDLK_SCANCODE_MASK);
SDLK_SEMICOLON = TSDL_KeyCode(';');
SDLK_SEPARATOR = TSDL_KeyCode(SDL_SCANCODE_SEPARATOR or SDLK_SCANCODE_MASK);
SDLK_SLASH = TSDL_KeyCode('/');
SDLK_SLEEP = TSDL_KeyCode(SDL_SCANCODE_SLEEP or SDLK_SCANCODE_MASK);
SDLK_SOFTLEFT = TSDL_KeyCode(SDL_SCANCODE_SOFTLEFT or SDLK_SCANCODE_MASK);
SDLK_SOFTRIGHT = TSDL_KeyCode(SDL_SCANCODE_SOFTRIGHT or SDLK_SCANCODE_MASK);
SDLK_SPACE = TSDL_KeyCode(' ');
SDLK_STOP = TSDL_KeyCode(SDL_SCANCODE_STOP or SDLK_SCANCODE_MASK);
SDLK_SYSREQ = TSDL_KeyCode(SDL_SCANCODE_SYSREQ or SDLK_SCANCODE_MASK);
SDLK_t = TSDL_KeyCode('t');
SDLK_TAB = TSDL_KeyCode(#9);
SDLK_THOUSANDSSEPARATOR = TSDL_KeyCode(SDL_SCANCODE_THOUSANDSSEPARATOR or SDLK_SCANCODE_MASK);
SDLK_u = TSDL_KeyCode('u');
SDLK_UNDERSCORE = TSDL_KeyCode('_');
SDLK_UNDO = TSDL_KeyCode(SDL_SCANCODE_UNDO or SDLK_SCANCODE_MASK);
SDLK_UNKNOWN = TSDL_KeyCode(0);
SDLK_UP = TSDL_KeyCode(SDL_SCANCODE_UP or SDLK_SCANCODE_MASK);
SDLK_v = TSDL_KeyCode('v');
SDLK_VOLUMEDOWN = TSDL_KeyCode(SDL_SCANCODE_VOLUMEDOWN or SDLK_SCANCODE_MASK);
SDLK_VOLUMEUP = TSDL_KeyCode(SDL_SCANCODE_VOLUMEUP or SDLK_SCANCODE_MASK);
SDLK_w = TSDL_KeyCode('w');
SDLK_WWW = TSDL_KeyCode(SDL_SCANCODE_WWW or SDLK_SCANCODE_MASK);
SDLK_x = TSDL_KeyCode('x');
SDLK_y = TSDL_KeyCode('y');
SDLK_z = TSDL_KeyCode('z');
SDL_ADDEVENT = 0;
SDL_ALPHA_OPAQUE = 255;
SDL_ALPHA_TRANSPARENT = 0;
SDL_APP_DIDENTERBACKGROUND = TSDL_EventType($104);
SDL_APP_DIDENTERFOREGROUND = TSDL_EventType($106);
SDL_APP_LOWMEMORY = TSDL_EventType($102);
SDL_APP_TERMINATING = TSDL_EventType($101);
SDL_APP_WILLENTERBACKGROUND = TSDL_EventType($103);
SDL_APP_WILLENTERFOREGROUND = TSDL_EventType($105);
SDL_ARRAYORDER_ABGR = TSDL_ArrayOrder(6);
SDL_ARRAYORDER_ARGB = TSDL_ArrayOrder(3);
SDL_ARRAYORDER_BGR = TSDL_ArrayOrder(4);
SDL_ARRAYORDER_BGRA = TSDL_ArrayOrder(5);
SDL_ARRAYORDER_NONE = TSDL_ArrayOrder(0);
SDL_ARRAYORDER_RGB = TSDL_ArrayOrder(1);
SDL_ARRAYORDER_RGBA = TSDL_ArrayOrder(2);
SDL_AUDIOCVT_MAX_FILTERS = 9;
SDL_AUDIODEVICEADDED = TSDL_EventType($1100);
SDL_AUDIODEVICEREMOVED = TSDL_EventType($1101);
SDL_AUDIO_ALLOW_ANY_CHANGE = (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE or SDL_AUDIO_ALLOW_FORMAT_CHANGE or SDL_AUDIO_ALLOW_CHANNELS_CHANGE);
SDL_AUDIO_ALLOW_CHANNELS_CHANGE = $00000004;
SDL_AUDIO_ALLOW_FORMAT_CHANGE = $00000002;
SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = $00000001;
SDL_AUDIO_MASK_BITSIZE = ($FF);
SDL_AUDIO_MASK_DATATYPE = (1 shl 8);
SDL_AUDIO_MASK_ENDIAN = (1 shl 12);
SDL_AUDIO_MASK_SIGNED = (1 shl 15);
SDL_AUDIO_PAUSED = TSDL_AudioStatus(2);
SDL_AUDIO_PLAYING = TSDL_AudioStatus(1);
SDL_AUDIO_STOPPED = TSDL_AudioStatus(0);
SDL_BITMAPORDER_1234 = TSDL_BitmapOrder(2);
SDL_BITMAPORDER_4321 = TSDL_BitmapOrder(1);
SDL_BITMAPORDER_NONE = TSDL_BitmapOrder(0);
SDL_BLENDFACTOR_DST_ALPHA = TSDL_BlendFactor($9);
SDL_BLENDFACTOR_DST_COLOR = TSDL_BlendFactor($7);
SDL_BLENDFACTOR_ONE = TSDL_BlendFactor($2);
SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = TSDL_BlendFactor($A);
SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = TSDL_BlendFactor($8);
SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = TSDL_BlendFactor($6);
SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = TSDL_BlendFactor($4);
SDL_BLENDFACTOR_SRC_ALPHA = TSDL_BlendFactor($5);
SDL_BLENDFACTOR_SRC_COLOR = TSDL_BlendFactor($3);
SDL_BLENDFACTOR_ZERO = TSDL_BlendFactor($1);
SDL_BLENDMODE_ADD = TSDL_BlendMode($00000002);
SDL_BLENDMODE_BLEND = TSDL_BlendMode($00000001);
SDL_BLENDMODE_INVALID = TSDL_BlendMode($7FFFFFFF);
SDL_BLENDMODE_MOD = TSDL_BlendMode($00000004);
SDL_BLENDMODE_MUL = TSDL_BlendMode($00000008);
SDL_BLENDMODE_NONE = TSDL_BlendMode($00000000);
SDL_BLENDOPERATION_ADD = TSDL_BlendOperation($1);
SDL_BLENDOPERATION_MAXIMUM = TSDL_BlendOperation($5);
SDL_BLENDOPERATION_MINIMUM = TSDL_BlendOperation($4);
SDL_BLENDOPERATION_REV_SUBTRACT = TSDL_BlendOperation($3);
SDL_BLENDOPERATION_SUBTRACT = TSDL_BlendOperation($2);
SDL_BUTTON_LEFT = 1;
SDL_BUTTON_LMASK = 1 shl ((SDL_BUTTON_LEFT) - 1);
SDL_BUTTON_MIDDLE = 2;
SDL_BUTTON_MMASK = 1 shl ((SDL_BUTTON_MIDDLE) - 1);
SDL_BUTTON_RIGHT = 3;
SDL_BUTTON_RMASK = 1 shl ((SDL_BUTTON_RIGHT) - 1);
SDL_BUTTON_X1 = 4;
SDL_BUTTON_X1MASK = 1 shl ((SDL_BUTTON_X1) - 1);
SDL_BUTTON_X2 = 5;
SDL_BUTTON_X2MASK = 1 shl ((SDL_BUTTON_X2) - 1);
SDL_CACHELINE_SIZE = 128;
SDL_CLIPBOARDUPDATE = TSDL_EventType($900);
SDL_COMMONEVENT = TSDL_EventType(1);
SDL_CONTROLLERAXISMOTION = TSDL_EventType($650);
SDL_CONTROLLERBUTTONDOWN = TSDL_EventType($651);
SDL_CONTROLLERBUTTONUP = TSDL_EventType($652);
SDL_CONTROLLERDEVICEADDED = TSDL_EventType($653);
SDL_CONTROLLERDEVICEREMAPPED = TSDL_EventType($655);
SDL_CONTROLLERDEVICEREMOVED = TSDL_EventType($654);
SDL_CONTROLLERSENSORUPDATE = TSDL_EventType($669);
SDL_CONTROLLERTOUCHPADDOWN = TSDL_EventType($666);
SDL_CONTROLLERTOUCHPADMOTION = TSDL_EventType($667);
SDL_CONTROLLERTOUCHPADUP = TSDL_EventType($668);
SDL_CONTROLLER_AXIS_INVALID = TSDL_GameControllerAxis(-1);
SDL_CONTROLLER_AXIS_LEFTX = TSDL_GameControllerAxis(0);
SDL_CONTROLLER_AXIS_LEFTY = TSDL_GameControllerAxis(1);
SDL_CONTROLLER_AXIS_MAX = TSDL_GameControllerAxis(6);
SDL_CONTROLLER_AXIS_RIGHTX = TSDL_GameControllerAxis(2);
SDL_CONTROLLER_AXIS_RIGHTY = TSDL_GameControllerAxis(3);
SDL_CONTROLLER_AXIS_TRIGGERLEFT = TSDL_GameControllerAxis(4);
SDL_CONTROLLER_AXIS_TRIGGERRIGHT = TSDL_GameControllerAxis(5);
SDL_CONTROLLER_BINDTYPE_AXIS = TSDL_GameControllerBindType(2);
SDL_CONTROLLER_BINDTYPE_BUTTON = TSDL_GameControllerBindType(1);
SDL_CONTROLLER_BINDTYPE_HAT = TSDL_GameControllerBindType(3);
SDL_CONTROLLER_BINDTYPE_NONE = TSDL_GameControllerBindType(0);
SDL_CONTROLLER_BUTTON_A = TSDL_GameControllerButton(0);
SDL_CONTROLLER_BUTTON_B = TSDL_GameControllerButton(1);
SDL_CONTROLLER_BUTTON_BACK = TSDL_GameControllerButton(4);
SDL_CONTROLLER_BUTTON_DPAD_DOWN = TSDL_GameControllerButton(12);
SDL_CONTROLLER_BUTTON_DPAD_LEFT = TSDL_GameControllerButton(13);
SDL_CONTROLLER_BUTTON_DPAD_RIGHT = TSDL_GameControllerButton(14);
SDL_CONTROLLER_BUTTON_DPAD_UP = TSDL_GameControllerButton(11);
SDL_CONTROLLER_BUTTON_GUIDE = TSDL_GameControllerButton(5);
SDL_CONTROLLER_BUTTON_INVALID = TSDL_GameControllerButton(-1);
SDL_CONTROLLER_BUTTON_LEFTSHOULDER = TSDL_GameControllerButton(9);
SDL_CONTROLLER_BUTTON_LEFTSTICK = TSDL_GameControllerButton(7);
SDL_CONTROLLER_BUTTON_MAX = TSDL_GameControllerButton(21);
SDL_CONTROLLER_BUTTON_MISC1 = TSDL_GameControllerButton(15);
SDL_CONTROLLER_BUTTON_PADDLE1 = TSDL_GameControllerButton(16);
SDL_CONTROLLER_BUTTON_PADDLE2 = TSDL_GameControllerButton(17);
SDL_CONTROLLER_BUTTON_PADDLE3 = TSDL_GameControllerButton(18);
SDL_CONTROLLER_BUTTON_PADDLE4 = TSDL_GameControllerButton(19);
SDL_CONTROLLER_BUTTON_RIGHTSHOULDER = TSDL_GameControllerButton(10);
SDL_CONTROLLER_BUTTON_RIGHTSTICK = TSDL_GameControllerButton(8);
SDL_CONTROLLER_BUTTON_START = TSDL_GameControllerButton(6);
SDL_CONTROLLER_BUTTON_TOUCHPAD = TSDL_GameControllerButton(20);
SDL_CONTROLLER_BUTTON_X = TSDL_GameControllerButton(2);
SDL_CONTROLLER_BUTTON_Y = TSDL_GameControllerButton(3);
SDL_CONTROLLER_TYPE_AMAZON_LUNA = TSDL_GameControllerType(8);
SDL_CONTROLLER_TYPE_GOOGLE_STADIA = TSDL_GameControllerType(9);
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT = TSDL_GameControllerType(11);
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR = TSDL_GameControllerType(13);
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT = TSDL_GameControllerType(12);
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO = TSDL_GameControllerType(5);
SDL_CONTROLLER_TYPE_NVIDIA_SHIELD = TSDL_GameControllerType(10);
SDL_CONTROLLER_TYPE_PS3 = TSDL_GameControllerType(3);
SDL_CONTROLLER_TYPE_PS4 = TSDL_GameControllerType(4);
SDL_CONTROLLER_TYPE_PS5 = TSDL_GameControllerType(7);
SDL_CONTROLLER_TYPE_UNKNOWN = TSDL_GameControllerType(0);
SDL_CONTROLLER_TYPE_VIRTUAL = TSDL_GameControllerType(6);
SDL_CONTROLLER_TYPE_XBOX360 = TSDL_GameControllerType(1);
SDL_CONTROLLER_TYPE_XBOXONE = TSDL_GameControllerType(2);
SDL_DISABLE = 0;
SDL_DISPLAYEVENT = TSDL_EventType($150);
SDL_DISPLAYEVENT_CONNECTED = TSDL_DisplayEventID(2);
SDL_DISPLAYEVENT_DISCONNECTED = TSDL_DisplayEventID(3);
SDL_DISPLAYEVENT_NONE = TSDL_DisplayEventID(0);
SDL_DISPLAYEVENT_ORIENTATION = TSDL_DisplayEventID(1);
SDL_DOLLARGESTURE = TSDL_EventType($800);
SDL_DOLLARRECORD = TSDL_EventType($801);
SDL_DONTFREE = $00000004;
SDL_DROPBEGIN = TSDL_EventType($1002);
SDL_DROPCOMPLETE = TSDL_EventType($1003);
SDL_DROPFILE = TSDL_EventType($1000);
SDL_DROPTEXT = TSDL_EventType($1001);
SDL_ENABLE = 1;
SDL_FALSE = TSDL_Bool(0);
SDL_FINGERDOWN = TSDL_EventType($700);
SDL_FINGERMOTION = TSDL_EventType($702);
SDL_FINGERUP = TSDL_EventType($701);
SDL_FIRSTEVENT = TSDL_EventType(0);
SDL_FLASH_BRIEFLY = TSDL_FlashOperation(1);
SDL_FLASH_CANCEL = TSDL_FlashOperation(0);
SDL_FLASH_UNTIL_FOCUSED = TSDL_FlashOperation(2);
SDL_FLIP_HORIZONTAL = TSDL_RenderFlip($1);
SDL_FLIP_NONE = TSDL_RenderFlip($0);
SDL_FLIP_VERTICAL = TSDL_RenderFlip($2);
SDL_FLT_EPSILON = cfloat(1.1920928955078125e-07);
SDL_GETEVENT = 2;
SDL_GL_ACCELERATED_VISUAL = TSDL_GLattr(15);
SDL_GL_ACCUM_ALPHA_SIZE = TSDL_GLattr(11);
SDL_GL_ACCUM_BLUE_SIZE = TSDL_GLattr(10);
SDL_GL_ACCUM_GREEN_SIZE = TSDL_GLattr(9);
SDL_GL_ACCUM_RED_SIZE = TSDL_GLattr(8);
SDL_GL_ALPHA_SIZE = TSDL_GLattr(3);
SDL_GL_BLUE_SIZE = TSDL_GLattr(2);
SDL_GL_BUFFER_SIZE = TSDL_GLattr(4);
SDL_GL_CONTEXT_DEBUG_FLAG = TSDL_GLcontextFlag($0001);
SDL_GL_CONTEXT_EGL = TSDL_GLattr(19);
SDL_GL_CONTEXT_FLAGS = TSDL_GLattr(20);
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = TSDL_GLcontextFlag($0002);
SDL_GL_CONTEXT_MAJOR_VERSION = TSDL_GLattr(17);
SDL_GL_CONTEXT_MINOR_VERSION = TSDL_GLattr(18);
SDL_GL_CONTEXT_NO_ERROR = TSDL_GLattr(26);
SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = TSDL_GLprofile($0002);
SDL_GL_CONTEXT_PROFILE_CORE = TSDL_GLprofile($0001);
SDL_GL_CONTEXT_PROFILE_ES = TSDL_GLprofile($0004);
SDL_GL_CONTEXT_PROFILE_MASK = TSDL_GLattr(21);
SDL_GL_CONTEXT_RELEASE_BEHAVIOR = TSDL_GLattr(24);
SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = TSDL_GLcontextReleaseFlag($0001);
SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = TSDL_GLcontextReleaseFlag($0000);
SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = TSDL_GLcontextFlag($0008);
SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = TSDL_GLContextResetNotification($0001);
SDL_GL_CONTEXT_RESET_NOTIFICATION = TSDL_GLattr(25);
SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = TSDL_GLContextResetNotification($0000);
SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = TSDL_GLcontextFlag($0004);
SDL_GL_DEPTH_SIZE = TSDL_GLattr(6);
SDL_GL_DOUBLEBUFFER = TSDL_GLattr(5);
SDL_GL_FLOATBUFFERS = TSDL_GLattr(27);
SDL_GL_FRAMEBUFFER_SRGB_CAPABLE = TSDL_GLattr(23);
SDL_GL_GREEN_SIZE = TSDL_GLattr(1);
SDL_GL_MULTISAMPLEBUFFERS = TSDL_GLattr(13);
SDL_GL_MULTISAMPLESAMPLES = TSDL_GLattr(14);
SDL_GL_RED_SIZE = TSDL_GLattr(0);
SDL_GL_RETAINED_BACKING = TSDL_GLattr(16);
SDL_GL_SHARE_WITH_CURRENT_CONTEXT = TSDL_GLattr(22);
SDL_GL_STENCIL_SIZE = TSDL_GLattr(7);
SDL_GL_STEREO = TSDL_GLattr(12);
SDL_HAPTIC_AUTOCENTER = (1 shl 13);
SDL_HAPTIC_CARTESIAN = 1;
SDL_HAPTIC_CONSTANT = (1 shl 0);
SDL_HAPTIC_CUSTOM = (1 shl 11);
SDL_HAPTIC_DAMPER = (1 shl 8);
SDL_HAPTIC_FRICTION = (1 shl 10);
SDL_HAPTIC_GAIN = (1 shl 12);
SDL_HAPTIC_INERTIA = (1 shl 9);
SDL_HAPTIC_INFINITY = 4294967295;
SDL_HAPTIC_LEFTRIGHT = (1 shl 2);
SDL_HAPTIC_PAUSE = (1 shl 15);
SDL_HAPTIC_POLAR = 0;
SDL_HAPTIC_RAMP = (1 shl 6);
SDL_HAPTIC_SAWTOOTHDOWN = (1 shl 5);
SDL_HAPTIC_SAWTOOTHUP = (1 shl 4);
SDL_HAPTIC_SINE = (1 shl 1);
SDL_HAPTIC_SPHERICAL = 2;
SDL_HAPTIC_SPRING = (1 shl 7);
SDL_HAPTIC_SQUARE = (1 shl 2);
SDL_HAPTIC_STATUS = (1 shl 14);
SDL_HAPTIC_STEERING_AXIS = 3;
SDL_HAPTIC_TRIANGLE = (1 shl 3);
SDL_HAT_CENTERED = $00;
SDL_HAT_DOWN = $04;
SDL_HAT_LEFT = $08;
SDL_HAT_LEFTDOWN = SDL_HAT_LEFT or SDL_HAT_DOWN;
SDL_HAT_LEFTUP = SDL_HAT_LEFT or SDL_HAT_UP;
SDL_HAT_RIGHT = $02;
SDL_HAT_RIGHTDOWN = SDL_HAT_RIGHT or SDL_HAT_DOWN;
SDL_HAT_RIGHTUP = SDL_HAT_RIGHT or SDL_HAT_UP;
SDL_HAT_UP = $01;
SDL_HINT_ACCELEROMETER_AS_JOYSTICK = 'SDL_ACCELEROMETER_AS_JOYSTICK';
SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED = 'SDL_ALLOW_ALT_TAB_WHILE_GRABBED';
SDL_HINT_ALLOW_TOPMOST = 'SDL_ALLOW_TOPMOST';
SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION = 'SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION';
SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION = 'SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION';
SDL_HINT_ANDROID_BLOCK_ON_PAUSE = 'SDL_ANDROID_BLOCK_ON_PAUSE';
SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO = 'SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO';
SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH = 'SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH' deprecated 'This hint is no longer supported on SDL >= 2.0.10. Use SDL_HINT_MOUSE_TOUCH_EVENTS and SDL_HINT_TOUCH_MOUSE_EVENTS instead.';
SDL_HINT_ANDROID_TRAP_BACK_BUTTON = 'SDL_ANDROID_TRAP_BACK_BUTTON';
SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS = 'SDL_APPLE_TV_CONTROLLER_UI_EVENTS';
SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION = 'SDL_APPLE_TV_REMOTE_ALLOW_ROTATION';
SDL_HINT_APP_NAME = 'SDL_APP_NAME';
SDL_HINT_AUDIODRIVER = 'SDL_AUDIODRIVER';
SDL_HINT_AUDIO_CATEGORY = 'SDL_AUDIO_CATEGORY';
SDL_HINT_AUDIO_DEVICE_APP_NAME = 'SDL_AUDIO_DEVICE_APP_NAME';
SDL_HINT_AUDIO_DEVICE_STREAM_NAME = 'SDL_AUDIO_DEVICE_STREAM_NAME';
SDL_HINT_AUDIO_DEVICE_STREAM_ROLE = 'SDL_AUDIO_DEVICE_STREAM_ROLE';
SDL_HINT_AUDIO_INCLUDE_MONITORS = 'SDL_AUDIO_INCLUDE_MONITORS';
SDL_HINT_AUDIO_RESAMPLING_MODE = 'SDL_AUDIO_RESAMPLING_MODE';
SDL_HINT_AUTO_UPDATE_JOYSTICKS = 'SDL_AUTO_UPDATE_JOYSTICKS';
SDL_HINT_AUTO_UPDATE_SENSORS = 'SDL_AUTO_UPDATE_SENSORS';
SDL_HINT_BMP_SAVE_LEGACY_FORMAT = 'SDL_BMP_SAVE_LEGACY_FORMAT';
SDL_HINT_DEFAULT = TSDL_HintPriority(0);
SDL_HINT_DIRECTINPUT_ENABLED = 'SDL_DIRECTINPUT_ENABLED';
SDL_HINT_DISPLAY_USABLE_BOUNDS = 'SDL_DISPLAY_USABLE_BOUNDS';
SDL_HINT_EMSCRIPTEN_ASYNCIFY = 'SDL_EMSCRIPTEN_ASYNCIFY';
SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT = 'SDL_EMSCRIPTEN_KEYBOARD_ELEMENT';
SDL_HINT_ENABLE_STEAM_CONTROLLERS = 'SDL_ENABLE_STEAM_CONTROLLERS';
SDL_HINT_EVENT_LOGGING = 'SDL_EVENT_LOGGING';
SDL_HINT_FORCE_RAISEWINDOW = 'SDL_HINT_FORCE_RAISEWINDOW';
SDL_HINT_FRAMEBUFFER_ACCELERATION = 'SDL_FRAMEBUFFER_ACCELERATION';
SDL_HINT_GAMECONTROLLERCONFIG = 'SDL_GAMECONTROLLERCONFIG';
SDL_HINT_GAMECONTROLLERCONFIG_FILE = 'SDL_GAMECONTROLLERCONFIG_FILE';
SDL_HINT_GAMECONTROLLERTYPE = 'SDL_GAMECONTROLLERTYPE';
SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES = 'SDL_GAMECONTROLLER_IGNORE_DEVICES';
SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT = 'SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT';
SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS = 'SDL_GAMECONTROLLER_USE_BUTTON_LABELS';
SDL_HINT_GRAB_KEYBOARD = 'SDL_GRAB_KEYBOARD';
SDL_HINT_HIDAPI_IGNORE_DEVICES = 'SDL_HIDAPI_IGNORE_DEVICES';
SDL_HINT_IDLE_TIMER_DISABLED = 'SDL_IOS_IDLE_TIMER_DISABLED';
SDL_HINT_IME_INTERNAL_EDITING = 'SDL_IME_INTERNAL_EDITING';
SDL_HINT_IME_SHOW_UI = 'SDL_IME_SHOW_UI';
SDL_HINT_IME_SUPPORT_EXTENDED_TEXT = 'SDL_IME_SUPPORT_EXTENDED_TEXT';
SDL_HINT_IOS_HIDE_HOME_INDICATOR = 'SDL_IOS_HIDE_HOME_INDICATOR';
SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS = 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS';
SDL_HINT_JOYSTICK_DEVICE = 'SDL_JOYSTICK_DEVICE';
SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE = 'SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE';
SDL_HINT_JOYSTICK_HIDAPI = 'SDL_JOYSTICK_HIDAPI';
SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS = 'SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS';
SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE = 'SDL_JOYSTICK_HIDAPI_GAMECUBE';
SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED = 'SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED';
SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS = 'SDL_JOYSTICK_HIDAPI_JOY_CONS';
SDL_HINT_JOYSTICK_HIDAPI_LUNA = 'SDL_JOYSTICK_HIDAPI_LUNA';
SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC = 'SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC';
SDL_HINT_JOYSTICK_HIDAPI_PS3 = 'SDL_JOYSTICK_HIDAPI_PS3';
SDL_HINT_JOYSTICK_HIDAPI_PS4 = 'SDL_JOYSTICK_HIDAPI_PS4';
SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE = 'SDL_JOYSTICK_HIDAPI_PS4_RUMBLE';
SDL_HINT_JOYSTICK_HIDAPI_PS5 = 'SDL_JOYSTICK_HIDAPI_PS5';
SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED';
SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE = 'SDL_JOYSTICK_HIDAPI_PS5_RUMBLE';
SDL_HINT_JOYSTICK_HIDAPI_SHIELD = 'SDL_JOYSTICK_HIDAPI_SHIELD';
SDL_HINT_JOYSTICK_HIDAPI_STADIA = 'SDL_JOYSTICK_HIDAPI_STADIA';
SDL_HINT_JOYSTICK_HIDAPI_STEAM = 'SDL_JOYSTICK_HIDAPI_STEAM';
SDL_HINT_JOYSTICK_HIDAPI_SWITCH = 'SDL_JOYSTICK_HIDAPI_SWITCH';
SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED = 'SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED';
SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED';
SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS = 'SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS';
SDL_HINT_JOYSTICK_HIDAPI_WII = 'SDL_JOYSTICK_HIDAPI_WII';
SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED';
SDL_HINT_JOYSTICK_HIDAPI_XBOX = 'SDL_JOYSTICK_HIDAPI_XBOX';
SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 = 'SDL_JOYSTICK_HIDAPI_XBOX_360';
SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED';
SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS = 'SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS';
SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE = 'SDL_JOYSTICK_HIDAPI_XBOX_ONE';
SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED = 'SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED';
SDL_HINT_JOYSTICK_RAWINPUT = 'SDL_JOYSTICK_RAWINPUT';
SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT = 'SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT';
SDL_HINT_JOYSTICK_ROG_CHAKRAM = 'SDL_JOYSTICK_ROG_CHAKRAM';
SDL_HINT_JOYSTICK_THREAD = 'SDL_JOYSTICK_THREAD';
SDL_HINT_KMSDRM_DEVICE_INDEX = 'SDL_KMSDRM_DEVICE_INDEX';
SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER = 'SDL_KMSDRM_REQUIRE_DRM_MASTER';
SDL_HINT_LINUX_DIGITAL_HATS = 'SDL_LINUX_DIGITAL_HATS';
SDL_HINT_LINUX_HAT_DEADZONES = 'SDL_LINUX_HAT_DEADZONES';
SDL_HINT_LINUX_JOYSTICK_CLASSIC = 'SDL_LINUX_JOYSTICK_CLASSIC';
SDL_HINT_LINUX_JOYSTICK_DEADZONES = 'SDL_LINUX_JOYSTICK_DEADZONES';
SDL_HINT_MAC_BACKGROUND_APP = 'SDL_MAC_BACKGROUND_APP';
SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK = 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK';
SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH = 'SDL_MAC_OPENGL_ASYNC_DISPATCH';
SDL_HINT_MOUSE_AUTO_CAPTURE = 'SDL_MOUSE_AUTO_CAPTURE';
SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS = 'SDL_MOUSE_DOUBLE_CLICK_RADIUS';
SDL_HINT_MOUSE_DOUBLE_CLICK_TIME = 'SDL_MOUSE_DOUBLE_CLICK_TIME';
SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH = 'SDL_MOUSE_FOCUS_CLICKTHROUGH';
SDL_HINT_MOUSE_NORMAL_SPEED_SCALE = 'SDL_MOUSE_NORMAL_SPEED_SCALE';
SDL_HINT_MOUSE_RELATIVE_MODE_CENTER = 'SDL_MOUSE_RELATIVE_MODE_CENTER';
SDL_HINT_MOUSE_RELATIVE_MODE_WARP = 'SDL_MOUSE_RELATIVE_MODE_WARP';
SDL_HINT_MOUSE_RELATIVE_SCALING = 'SDL_MOUSE_RELATIVE_SCALING';
SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE = 'SDL_MOUSE_RELATIVE_SPEED_SCALE';
SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE = 'SDL_MOUSE_RELATIVE_SYSTEM_SCALE';
SDL_HINT_MOUSE_RELATIVE_WARP_MOTION = 'SDL_MOUSE_RELATIVE_WARP_MOTION';
SDL_HINT_MOUSE_TOUCH_EVENTS = 'SDL_MOUSE_TOUCH_EVENTS';
SDL_HINT_NORMAL = TSDL_HintPriority(1);
SDL_HINT_NO_SIGNAL_HANDLERS = 'SDL_NO_SIGNAL_HANDLERS';
SDL_HINT_OPENGL_ES_DRIVER = 'SDL_OPENGL_ES_DRIVER';
SDL_HINT_ORIENTATIONS = 'SDL_IOS_ORIENTATIONS';
SDL_HINT_OVERRIDE = TSDL_HintPriority(2);
SDL_HINT_POLL_SENTINEL = 'SDL_POLL_SENTINEL';
SDL_HINT_PREFERRED_LOCALES = 'SDL_PREFERRED_LOCALES';
SDL_HINT_PS2_DYNAMIC_VSYNC = 'SDL_PS2_DYNAMIC_VSYNC';
SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION = 'SDL_QTWAYLAND_CONTENT_ORIENTATION';
SDL_HINT_QTWAYLAND_WINDOW_FLAGS = 'SDL_QTWAYLAND_WINDOW_FLAGS';
SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE = 'SDL_QUIT_ON_LAST_WINDOW_CLOSE';
SDL_HINT_RENDER_BATCHING = 'SDL_RENDER_BATCHING';
SDL_HINT_RENDER_DIRECT3D11_DEBUG = 'SDL_RENDER_DIRECT3D11_DEBUG';
SDL_HINT_RENDER_DIRECT3D_THREADSAFE = 'SDL_RENDER_DIRECT3D_THREADSAFE';
SDL_HINT_RENDER_DRIVER = 'SDL_RENDER_DRIVER';
SDL_HINT_RENDER_LINE_METHOD = 'SDL_RENDER_LINE_METHOD';
SDL_HINT_RENDER_LOGICAL_SIZE_MODE = 'SDL_RENDER_LOGICAL_SIZE_MODE';
SDL_HINT_RENDER_OPENGL_SHADERS = 'SDL_RENDER_OPENGL_SHADERS';
SDL_HINT_RENDER_SCALE_QUALITY = 'SDL_RENDER_SCALE_QUALITY';
SDL_HINT_RENDER_VSYNC = 'SDL_RENDER_VSYNC';
SDL_HINT_RETURN_KEY_HIDES_IME = 'SDL_RETURN_KEY_HIDES_IME';
SDL_HINT_RPI_VIDEO_LAYER = 'SDL_RPI_VIDEO_LAYER';
SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME = 'SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME';
SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL = 'SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL';
SDL_HINT_THREAD_PRIORITY_POLICY = 'SDL_THREAD_PRIORITY_POLICY';
SDL_HINT_THREAD_STACK_SIZE = 'SDL_THREAD_STACK_SIZE';
SDL_HINT_TIMER_RESOLUTION = 'SDL_TIMER_RESOLUTION';
SDL_HINT_TOUCH_MOUSE_EVENTS = 'SDL_TOUCH_MOUSE_EVENTS';
SDL_HINT_TRACKPAD_IS_TOUCH_ONLY = 'SDL_TRACKPAD_IS_TOUCH_ONLY';
SDL_HINT_TV_REMOTE_AS_JOYSTICK = 'SDL_TV_REMOTE_AS_JOYSTICK';
SDL_HINT_VIDEODRIVER = 'SDL_VIDEODRIVER';
SDL_HINT_VIDEO_ALLOW_SCREENSAVER = 'SDL_VIDEO_ALLOW_SCREENSAVER';
SDL_HINT_VIDEO_DOUBLE_BUFFER = 'SDL_VIDEO_DOUBLE_BUFFER';
SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY = 'SDL_VIDEO_EGL_ALLOW_TRANSPARENCY';
SDL_HINT_VIDEO_EXTERNAL_CONTEXT = 'SDL_VIDEO_EXTERNAL_CONTEXT';
SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL = 'SDL_VIDEO_FOREIGN_WINDOW_OPENGL';
SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN = 'SDL_VIDEO_FOREIGN_WINDOW_VULKAN';
SDL_HINT_VIDEO_HIGHDPI_DISABLED = 'SDL_VIDEO_HIGHDPI_DISABLED';
SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES = 'SDL_VIDEO_MAC_FULLSCREEN_SPACES';
SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS = 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS';
SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR = 'SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR';
SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP = 'SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP';
SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION = 'SDL_VIDEO_WAYLAND_MODE_EMULATION';
SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR = 'SDL_VIDEO_WAYLAND_PREFER_LIBDECOR';
SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT = 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT';
SDL_HINT_VIDEO_WIN_D3DCOMPILER = 'SDL_VIDEO_WIN_D3DCOMPILER';
SDL_HINT_VIDEO_X11_FORCE_EGL = 'SDL_VIDEO_X11_FORCE_EGL';
SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR = 'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR';
SDL_HINT_VIDEO_X11_NET_WM_PING = 'SDL_VIDEO_X11_NET_WM_PING';
SDL_HINT_VIDEO_X11_WINDOW_VISUALID = 'SDL_VIDEO_X11_WINDOW_VISUALID';
SDL_HINT_VIDEO_X11_XINERAMA = 'SDL_VIDEO_X11_XINERAMA';
SDL_HINT_VIDEO_X11_XRANDR = 'SDL_VIDEO_X11_XRANDR';
SDL_HINT_VIDEO_X11_XVIDMODE = 'SDL_VIDEO_X11_XVIDMODE';
SDL_HINT_VITA_TOUCH_MOUSE_DEVICE = 'SDL_HINT_VITA_TOUCH_MOUSE_DEVICE';
SDL_HINT_WAVE_FACT_CHUNK = 'SDL_WAVE_FACT_CHUNK';
SDL_HINT_WAVE_RIFF_CHUNK_SIZE = 'SDL_WAVE_RIFF_CHUNK_SIZE';
SDL_HINT_WAVE_TRUNCATION = 'SDL_WAVE_TRUNCATION';
SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING = 'SDL_WINDOWS_DISABLE_THREAD_NAMING';
SDL_HINT_WINDOWS_DPI_AWARENESS = 'SDL_WINDOWS_DPI_AWARENESS';
SDL_HINT_WINDOWS_DPI_SCALING = 'SDL_WINDOWS_DPI_SCALING';
SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP = 'SDL_WINDOWS_ENABLE_MESSAGELOOP';
SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS = 'SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS';
SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL = 'SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL';
SDL_HINT_WINDOWS_INTRESOURCE_ICON = 'SDL_WINDOWS_INTRESOURCE_ICON';
SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL = 'SDL_WINDOWS_INTRESOURCE_ICON_SMALL';
SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 = 'SDL_WINDOWS_NO_CLOSE_ON_ALT_F4';
SDL_HINT_WINDOWS_USE_D3D9EX = 'SDL_WINDOWS_USE_D3D9EX';
SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN = 'SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN';
SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN = 'SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN';
SDL_HINT_WINRT_HANDLE_BACK_BUTTON = 'SDL_WINRT_HANDLE_BACK_BUTTON';
SDL_HINT_WINRT_PRIVACY_POLICY_LABEL = 'SDL_WINRT_PRIVACY_POLICY_LABEL';
SDL_HINT_WINRT_PRIVACY_POLICY_URL = 'SDL_WINRT_PRIVACY_POLICY_URL';
SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT = 'SDL_X11_FORCE_OVERRIDE_REDIRECT';
SDL_HINT_X11_WINDOW_TYPE = 'SDL_X11_WINDOW_TYPE';
SDL_HINT_XINPUT_ENABLED = 'SDL_XINPUT_ENABLED';
SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING = 'SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING';
SDL_HITTEST_DRAGGABLE = TSDL_HitTestResult(1);
SDL_HITTEST_NORMAL = TSDL_HitTestResult(0);
SDL_HITTEST_RESIZE_BOTTOM = TSDL_HitTestResult(7);
SDL_HITTEST_RESIZE_BOTTOMLEFT = TSDL_HitTestResult(8);
SDL_HITTEST_RESIZE_BOTTOMRIGHT = TSDL_HitTestResult(6);
SDL_HITTEST_RESIZE_LEFT = TSDL_HitTestResult(9);
SDL_HITTEST_RESIZE_RIGHT = TSDL_HitTestResult(5);
SDL_HITTEST_RESIZE_TOP = TSDL_HitTestResult(3);
SDL_HITTEST_RESIZE_TOPLEFT = TSDL_HitTestResult(2);
SDL_HITTEST_RESIZE_TOPRIGHT = TSDL_HitTestResult(4);
SDL_ICONV_E2BIG = csize_t(-2);
SDL_ICONV_EILSEQ = csize_t(-3);
SDL_ICONV_EINVAL = csize_t(-4);
SDL_ICONV_ERROR = csize_t(-1);
SDL_IGNORE = 0;
SDL_INIT_AUDIO = TSDL_Init($00000010);
SDL_INIT_EVENTS = TSDL_Init($00004000);
SDL_INIT_EVERYTHING = TSDL_Init( SDL_INIT_TIMER or SDL_INIT_AUDIO or SDL_INIT_VIDEO or SDL_INIT_EVENTS or SDL_INIT_JOYSTICK or SDL_INIT_HAPTIC or SDL_INIT_GAMECONTROLLER or SDL_INIT_SENSOR );
SDL_INIT_GAMECONTROLLER = TSDL_Init($00002000);
SDL_INIT_HAPTIC = TSDL_Init($00001000);
SDL_INIT_JOYSTICK = TSDL_Init($00000200);
SDL_INIT_NOPARACHUTE = TSDL_Init($00100000);
SDL_INIT_SENSOR = TSDL_Init($00008000);
SDL_INIT_TIMER = TSDL_Init($00000001);
SDL_INIT_VIDEO = TSDL_Init($00000020);
SDL_INVALID_SHAPE_ARGUMENT = -2;
SDL_IPHONE_MAX_GFORCE = 5.0;
SDL_JOYAXISMOTION = TSDL_EventType($600);
SDL_JOYBALLMOTION = TSDL_EventType($601);
SDL_JOYBATTERYUPDATED = TSDL_EventType($607);
SDL_JOYBUTTONDOWN = TSDL_EventType($603);
SDL_JOYBUTTONUP = TSDL_EventType($604);
SDL_JOYDEVICEADDED = TSDL_EventType($605);
SDL_JOYDEVICEREMOVED = TSDL_EventType($606);
SDL_JOYHATMOTION = TSDL_EventType($602);
SDL_JOYSTICK_AXIS_MAX = 32767;
SDL_JOYSTICK_AXIS_MIN = -32768;
SDL_JOYSTICK_POWER_EMPTY = TSDL_JoystickPowerLevel(0);
SDL_JOYSTICK_POWER_FULL = TSDL_JoystickPowerLevel(3);
SDL_JOYSTICK_POWER_LOW = TSDL_JoystickPowerLevel(1);
SDL_JOYSTICK_POWER_MAX = TSDL_JoystickPowerLevel(5);
SDL_JOYSTICK_POWER_MEDIUM = TSDL_JoystickPowerLevel(2);
SDL_JOYSTICK_POWER_UNKNOWN = TSDL_JoystickPowerLevel(-1);
SDL_JOYSTICK_POWER_WIRED = TSDL_JoystickPowerLevel(4);
SDL_JOYSTICK_TYPE_ARCADE_PAD = TSDL_JoystickType(8);
SDL_JOYSTICK_TYPE_ARCADE_STICK = TSDL_JoystickType(3);
SDL_JOYSTICK_TYPE_DANCE_PAD = TSDL_JoystickType(5);
SDL_JOYSTICK_TYPE_DRUM_KIT = TSDL_JoystickType(7);
SDL_JOYSTICK_TYPE_FLIGHT_STICK = TSDL_JoystickType(4);
SDL_JOYSTICK_TYPE_GAMECONTROLLER = TSDL_JoystickType(1);
SDL_JOYSTICK_TYPE_GUITAR = TSDL_JoystickType(6);
SDL_JOYSTICK_TYPE_THROTTLE = TSDL_JoystickType(9);
SDL_JOYSTICK_TYPE_UNKNOWN = TSDL_JoystickType(0);
SDL_JOYSTICK_TYPE_WHEEL = TSDL_JoystickType(2);
SDL_KEYDOWN = TSDL_EventType($300);
SDL_KEYMAPCHANGED = TSDL_EventType($304);
SDL_KEYUP = TSDL_EventType($301);
SDL_LASTEVENT = TSDL_EventType($FFFF);
SDL_LOCALECHANGED = TSDL_EventType($107);
SDL_LOG_CATEGORY_APPLICATION = TSDL_LogCategory(0);
SDL_LOG_CATEGORY_ASSERT = TSDL_LogCategory(2);
SDL_LOG_CATEGORY_AUDIO = TSDL_LogCategory(4);
SDL_LOG_CATEGORY_CUSTOM = TSDL_LogCategory(19);
SDL_LOG_CATEGORY_ERROR = TSDL_LogCategory(1);
SDL_LOG_CATEGORY_INPUT = TSDL_LogCategory(7);
SDL_LOG_CATEGORY_RENDER = TSDL_LogCategory(6);
SDL_LOG_CATEGORY_RESERVED1 = TSDL_LogCategory(9);
SDL_LOG_CATEGORY_RESERVED10 = TSDL_LogCategory(18);
SDL_LOG_CATEGORY_RESERVED2 = TSDL_LogCategory(10);
SDL_LOG_CATEGORY_RESERVED3 = TSDL_LogCategory(11);
SDL_LOG_CATEGORY_RESERVED4 = TSDL_LogCategory(12);
SDL_LOG_CATEGORY_RESERVED5 = TSDL_LogCategory(13);
SDL_LOG_CATEGORY_RESERVED6 = TSDL_LogCategory(14);
SDL_LOG_CATEGORY_RESERVED7 = TSDL_LogCategory(15);
SDL_LOG_CATEGORY_RESERVED8 = TSDL_LogCategory(16);
SDL_LOG_CATEGORY_RESERVED9 = TSDL_LogCategory(17);
SDL_LOG_CATEGORY_SYSTEM = TSDL_LogCategory(3);
SDL_LOG_CATEGORY_TEST = TSDL_LogCategory(8);
SDL_LOG_CATEGORY_VIDEO = TSDL_LogCategory(5);
SDL_LOG_PRIORITY_CRITICAL = TSDL_LogPriority(6);
SDL_LOG_PRIORITY_DEBUG = TSDL_LogPriority(2);
SDL_LOG_PRIORITY_ERROR = TSDL_LogPriority(5);
SDL_LOG_PRIORITY_INFO = TSDL_LogPriority(3);
SDL_LOG_PRIORITY_VERBOSE = TSDL_LogPriority(1);
SDL_LOG_PRIORITY_WARN = TSDL_LogPriority(4);
SDL_MAJOR_VERSION = 2;
SDL_MAX_LOG_MESSAGE = 4096;
SDL_MAX_SINT16 = High(cint16);
SDL_MAX_SINT32 = High(cint32);
SDL_MAX_SINT64 = High(cint64);
SDL_MAX_SINT8 = High(cint8);
SDL_MAX_UINT16 = High(cuint16);
SDL_MAX_UINT32 = High(cuint32);
SDL_MAX_UINT64 = High(cuint64);
SDL_MAX_UINT8 = High(cuint8);
SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = TSDL_MessageBoxFlags($00000080);
SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = TSDL_MessageBoxFlags($00000100);
SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = TSDL_MessageBoxButtonFlags($00000002);
SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = TSDL_MessageBoxButtonFlags($00000001);
SDL_MESSAGEBOX_COLOR_BACKGROUND = TSDL_MessageBoxColorType(0);
SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND = TSDL_MessageBoxColorType(3);
SDL_MESSAGEBOX_COLOR_BUTTON_BORDER = TSDL_MessageBoxColorType(2);
SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED = TSDL_MessageBoxColorType(4);
SDL_MESSAGEBOX_COLOR_MAX = TSDL_MessageBoxColorType(5);
SDL_MESSAGEBOX_COLOR_TEXT = TSDL_MessageBoxColorType(1);
SDL_MESSAGEBOX_ERROR = TSDL_MessageBoxFlags($00000010);
SDL_MESSAGEBOX_INFORMATION = TSDL_MessageBoxFlags($00000040);
SDL_MESSAGEBOX_WARNING = TSDL_MessageBoxFlags($00000020);
SDL_MINOR_VERSION = 0;
SDL_MIN_SINT16 = Low(cint16);
SDL_MIN_SINT32 = Low(cint32);
SDL_MIN_SINT64 = Low(cint64);
SDL_MIN_SINT8 = Low(cint8);
SDL_MIN_UINT16 = Low(cuint16);
SDL_MIN_UINT32 = Low(cuint32);
SDL_MIN_UINT64 = Low(cuint64);
SDL_MIN_UINT8 = Low(cuint8);
SDL_MIX_MAXVOLUME = 128;
SDL_MOUSEBUTTONDOWN = TSDL_EventType($401);
SDL_MOUSEBUTTONUP = TSDL_EventType($402);
SDL_MOUSEMOTION = TSDL_EventType($400);
SDL_MOUSEWHEEL = TSDL_EventType($403);
SDL_MOUSEWHEEL_FLIPPED = TSDL_MouseWheelDirection(1);
SDL_MOUSEWHEEL_NORMAL = TSDL_MouseWheelDirection(0);
SDL_MOUSE_TOUCHID = TSDL_TouchID(-1);
SDL_MULTIGESTURE = TSDL_EventType($802);
SDL_MUTEX_MAXWAIT = Not cuint32(0);
SDL_MUTEX_TIMEDOUT = 1;
SDL_NONSHAPEABLE_WINDOW = -1;
SDL_NUM_LOG_PRIORITIES = TSDL_LogPriority(7);
SDL_NUM_SCANCODES = TSDL_ScanCode(512);
SDL_NUM_SYSTEM_CURSORS = TSDL_SystemCursor(12);
SDL_ORIENTATION_LANDSCAPE = TSDL_DisplayOrientation(1);
SDL_ORIENTATION_LANDSCAPE_FLIPPED = TSDL_DisplayOrientation(2);
SDL_ORIENTATION_PORTRAIT = TSDL_DisplayOrientation(3);
SDL_ORIENTATION_PORTRAIT_FLIPPED = TSDL_DisplayOrientation(4);
SDL_ORIENTATION_UNKNOWN = TSDL_DisplayOrientation(0);
SDL_PACKEDLAYOUT_1010102 = TSDL_PackedLayout(8);
SDL_PACKEDLAYOUT_1555 = TSDL_PackedLayout(3);
SDL_PACKEDLAYOUT_2101010 = TSDL_PackedLayout(7);
SDL_PACKEDLAYOUT_332 = TSDL_PackedLayout(1);
SDL_PACKEDLAYOUT_4444 = TSDL_PackedLayout(2);
SDL_PACKEDLAYOUT_5551 = TSDL_PackedLayout(4);
SDL_PACKEDLAYOUT_565 = TSDL_PackedLayout(5);
SDL_PACKEDLAYOUT_8888 = TSDL_PackedLayout(6);
SDL_PACKEDLAYOUT_NONE = TSDL_PackedLayout(0);
SDL_PACKEDORDER_ABGR = TSDL_PackOrder(7);
SDL_PACKEDORDER_ARGB = TSDL_PackOrder(3);
SDL_PACKEDORDER_BGRA = TSDL_PackOrder(8);
SDL_PACKEDORDER_BGRX = TSDL_PackOrder(6);
SDL_PACKEDORDER_NONE = TSDL_PackOrder(0);
SDL_PACKEDORDER_RGBA = TSDL_PackOrder(4);
SDL_PACKEDORDER_RGBX = TSDL_PackOrder(2);
SDL_PACKEDORDER_XBGR = TSDL_PackOrder(5);
SDL_PACKEDORDER_XRGB = TSDL_PackOrder(1);
SDL_PATCHLEVEL = 10;
SDL_PEEKEVENT = 1;
SDL_PIXELFORMAT_ABGR1555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ABGR shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_ABGR4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ABGR shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_ABGR8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_ABGR shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_ARGB1555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_ARGB2101010 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_2101010 shl 16)or (32 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_ARGB4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_ARGB8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_BGR24 = (1 shl 28) or (SDL_PIXELTYPE_ARRAYU8 shl 24) or (SDL_ARRAYORDER_BGR shl 20) or (0 shl 16) or (24 shl 8) or (3 shl 0);
SDL_PIXELFORMAT_BGR555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XBGR shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (15 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_BGR565 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XBGR shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_BGR888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_XBGR shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_BGRA4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_BGRA shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_BGRA5551 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_BGRA shl 20) or (SDL_PACKEDLAYOUT_5551 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_BGRA8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_RGBX shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_BGRX8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_BGRX shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_EXTERMAL_OES = (cuint32('O') ) or (cuint32('E') shl 8) or (cuint32('S') shl 16) or (cuint32(' ') shl 24);
SDL_PIXELFORMAT_INDEX1LSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX1 shl 24) or (SDL_BITMAPORDER_4321 shl 20) or (0 shl 16) or (1 shl 8) or (0 shl 0);
SDL_PIXELFORMAT_INDEX1MSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX1 shl 24) or (SDL_BITMAPORDER_1234 shl 20) or (0 shl 16) or (1 shl 8) or (0 shl 0);
SDL_PIXELFORMAT_INDEX4LSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX4 shl 24) or (SDL_BITMAPORDER_4321 shl 20) or (0 shl 16) or (4 shl 8) or (0 shl 0);
SDL_PIXELFORMAT_INDEX4MSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX4 shl 24) or (SDL_BITMAPORDER_1234 shl 20) or (0 shl 16) or (4 shl 8) or (0 shl 0);
SDL_PIXELFORMAT_INDEX8 = (1 shl 28) or (SDL_PIXELTYPE_PACKED8 shl 24) or (0 shl 20) or (0 shl 16) or (8 shl 8) or (1 shl 0);
SDL_PIXELFORMAT_IYUV = (cuint32('I') ) or (cuint32('Y') shl 8) or (cuint32('U') shl 16) or (cuint32('V') shl 24);
SDL_PIXELFORMAT_NV12 = (cuint32('N') ) or (cuint32('V') shl 8) or (cuint32('1') shl 16) or (cuint32('2') shl 24);
SDL_PIXELFORMAT_NV21 = (cuint32('N') ) or (cuint32('V') shl 8) or (cuint32('2') shl 16) or (cuint32('1') shl 24);
SDL_PIXELFORMAT_RGB24 = (1 shl 28) or (SDL_PIXELTYPE_ARRAYU8 shl 24) or (SDL_ARRAYORDER_RGB shl 20) or (0 shl 16) or (24 shl 8) or (3 shl 0);
SDL_PIXELFORMAT_RGB332 = (1 shl 28) or (SDL_PIXELTYPE_PACKED8 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_332 shl 16) or (8 shl 8) or (1 shl 0);
SDL_PIXELFORMAT_RGB444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (12 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_RGB555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (15 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_RGB565 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_565 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_RGB888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_RGBA4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_RGBA shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_RGBA5551 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_RGBA shl 20) or (SDL_PACKEDLAYOUT_5551 shl 16) or (16 shl 8) or (2 shl 0);
SDL_PIXELFORMAT_RGBA8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_RGBA shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_RGBX8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_RGBX shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
SDL_PIXELFORMAT_UNKNOWN = 0;
SDL_PIXELFORMAT_UYVY = (cuint32('U') ) or (cuint32('Y') shl 8) or (cuint32('V') shl 16) or (cuint32('Y') shl 24);
SDL_PIXELFORMAT_YUY2 = (cuint32('Y') ) or (cuint32('U') shl 8) or (cuint32('Y') shl 16) or (cuint32('2') shl 24);
SDL_PIXELFORMAT_YV12 = (cuint32('Y') ) or (cuint32('V') shl 8) or (cuint32('1') shl 16) or (cuint32('2') shl 24);
SDL_PIXELFORMAT_YVYU = (cuint32('Y') ) or (cuint32('V') shl 8) or (cuint32('Y') shl 16) or (cuint32('U') shl 24);
SDL_PIXELTYPE_ARRAYF16 = TSDL_PixelType(10);
SDL_PIXELTYPE_ARRAYF32 = TSDL_PixelType(11);
SDL_PIXELTYPE_ARRAYU16 = TSDL_PixelType(8);
SDL_PIXELTYPE_ARRAYU32 = TSDL_PixelType(9);
SDL_PIXELTYPE_ARRAYU8 = TSDL_PixelType(7);
SDL_PIXELTYPE_INDEX1 = TSDL_PixelType(1);
SDL_PIXELTYPE_INDEX4 = TSDL_PixelType(2);
SDL_PIXELTYPE_INDEX8 = TSDL_PixelType(3);
SDL_PIXELTYPE_PACKED16 = TSDL_PixelType(5);
SDL_PIXELTYPE_PACKED32 = TSDL_PixelType(6);
SDL_PIXELTYPE_PACKED8 = TSDL_PixelType(4);
SDL_PIXELTYPE_UNKNOWN = TSDL_PixelType(0);
SDL_POLLSENTINEL = TSDL_EventType($7F00);
SDL_PREALLOC = $00000001;
SDL_PRESSED = 1;
SDL_QUERY = -1;
SDL_QUITEV = TSDL_EventType($100);
SDL_RELEASED = 0;
SDL_RENDERER_ACCELERATED = $00000002;
SDL_RENDERER_PRESENTVSYNC = $00000004;
SDL_RENDERER_SOFTWARE = $00000001;
SDL_RENDERER_TARGETTEXTURE = $00000008;
SDL_RENDER_DEVICE_RESET = TSDL_EventType($2001);
SDL_RENDER_TARGETS_RESET = TSDL_EventType($2000);
SDL_RLEACCEL = $00000002;
SDL_RWOPS_JNIFILE = 3;
SDL_RWOPS_MEMORY = 4;
SDL_RWOPS_MEMORY_RO = 5;
SDL_RWOPS_STDFILE = 2;
SDL_RWOPS_UNKNOWN = 0;
SDL_RWOPS_WINFILE = 1;
SDL_ScaleModeBest = TSDL_ScaleMode(2);
SDL_ScaleModeLinear = TSDL_ScaleMode(1);
SDL_ScaleModeNearest = TSDL_ScaleMode(0);
SDL_SCANCODE_0 = TSDL_ScanCode(39);
SDL_SCANCODE_1 = TSDL_ScanCode(30);
SDL_SCANCODE_2 = TSDL_ScanCode(31);
SDL_SCANCODE_3 = TSDL_ScanCode(32);
SDL_SCANCODE_4 = TSDL_ScanCode(33);
SDL_SCANCODE_5 = TSDL_ScanCode(34);
SDL_SCANCODE_6 = TSDL_ScanCode(35);
SDL_SCANCODE_7 = TSDL_ScanCode(36);
SDL_SCANCODE_8 = TSDL_ScanCode(37);
SDL_SCANCODE_9 = TSDL_ScanCode(38);
SDL_SCANCODE_A = TSDL_ScanCode(4);
SDL_SCANCODE_AC_BACK = TSDL_ScanCode(270);
SDL_SCANCODE_AC_BOOKMARKS = TSDL_ScanCode(274);
SDL_SCANCODE_AC_FORWARD = TSDL_ScanCode(271);
SDL_SCANCODE_AC_HOME = TSDL_ScanCode(269);
SDL_SCANCODE_AC_REFRESH = TSDL_ScanCode(273);
SDL_SCANCODE_AC_SEARCH = TSDL_ScanCode(268);
SDL_SCANCODE_AC_STOP = TSDL_ScanCode(272);
SDL_SCANCODE_AGAIN = TSDL_ScanCode(121);
SDL_SCANCODE_ALTERASE = TSDL_ScanCode(153);
SDL_SCANCODE_APOSTROPHE = TSDL_ScanCode(52);
SDL_SCANCODE_APP1 = TSDL_ScanCode(283);
SDL_SCANCODE_APP2 = TSDL_ScanCode(284);
SDL_SCANCODE_APPLICATION = TSDL_ScanCode(101);
SDL_SCANCODE_AUDIOFASTFORWARD = TSDL_ScanCode(286);
SDL_SCANCODE_AUDIOMUTE = TSDL_ScanCode(262);
SDL_SCANCODE_AUDIONEXT = TSDL_ScanCode(258);
SDL_SCANCODE_AUDIOPLAY = TSDL_ScanCode(261);
SDL_SCANCODE_AUDIOPREV = TSDL_ScanCode(259);
SDL_SCANCODE_AUDIOREWIND = TSDL_ScanCode(285);
SDL_SCANCODE_AUDIOSTOP = TSDL_ScanCode(260);
SDL_SCANCODE_B = TSDL_ScanCode(5);
SDL_SCANCODE_BACKSLASH = TSDL_ScanCode(49);
SDL_SCANCODE_BACKSPACE = TSDL_ScanCode(42);
SDL_SCANCODE_BRIGHTNESSDOWN = TSDL_ScanCode(275);
SDL_SCANCODE_BRIGHTNESSUP = TSDL_ScanCode(276);
SDL_SCANCODE_C = TSDL_ScanCode(6);
SDL_SCANCODE_CALCULATOR = TSDL_ScanCode(266);
SDL_SCANCODE_CALL = TSDL_ScanCode(289);
SDL_SCANCODE_CANCEL = TSDL_ScanCode(155);
SDL_SCANCODE_CAPSLOCK = TSDL_ScanCode(57);
SDL_SCANCODE_CLEAR = TSDL_ScanCode(156);
SDL_SCANCODE_CLEARAGAIN = TSDL_ScanCode(162);
SDL_SCANCODE_COMMA = TSDL_ScanCode(54);
SDL_SCANCODE_COMPUTER = TSDL_ScanCode(267);
SDL_SCANCODE_COPY = TSDL_ScanCode(124);
SDL_SCANCODE_CRSEL = TSDL_ScanCode(163);
SDL_SCANCODE_CURRENCYSUBUNIT = TSDL_ScanCode(181);
SDL_SCANCODE_CURRENCYUNIT = TSDL_ScanCode(180);
SDL_SCANCODE_CUT = TSDL_ScanCode(123);
SDL_SCANCODE_D = TSDL_ScanCode(7);
SDL_SCANCODE_DECIMALSEPARATOR = TSDL_ScanCode(179);
SDL_SCANCODE_DELETE = TSDL_ScanCode(76);
SDL_SCANCODE_DISPLAYSWITCH = TSDL_ScanCode(277);
SDL_SCANCODE_DOWN = TSDL_ScanCode(81);
SDL_SCANCODE_E = TSDL_ScanCode(8);
SDL_SCANCODE_EJECT = TSDL_ScanCode(281);
SDL_SCANCODE_END = TSDL_ScanCode(77);
SDL_SCANCODE_ENDCALL = TSDL_ScanCode(290);
SDL_SCANCODE_EQUALS = TSDL_ScanCode(46);
SDL_SCANCODE_ESCAPE = TSDL_ScanCode(41);
SDL_SCANCODE_EXECUTE = TSDL_ScanCode(116);
SDL_SCANCODE_EXSEL = TSDL_ScanCode(164);
SDL_SCANCODE_F = TSDL_ScanCode(9);
SDL_SCANCODE_F1 = TSDL_ScanCode(58);
SDL_SCANCODE_F10 = TSDL_ScanCode(67);
SDL_SCANCODE_F11 = TSDL_ScanCode(68);
SDL_SCANCODE_F12 = TSDL_ScanCode(69);
SDL_SCANCODE_F13 = TSDL_ScanCode(104);
SDL_SCANCODE_F14 = TSDL_ScanCode(105);
SDL_SCANCODE_F15 = TSDL_ScanCode(106);
SDL_SCANCODE_F16 = TSDL_ScanCode(107);
SDL_SCANCODE_F17 = TSDL_ScanCode(108);
SDL_SCANCODE_F18 = TSDL_ScanCode(109);
SDL_SCANCODE_F19 = TSDL_ScanCode(110);
SDL_SCANCODE_F2 = TSDL_ScanCode(59);
SDL_SCANCODE_F20 = TSDL_ScanCode(111);
SDL_SCANCODE_F21 = TSDL_ScanCode(112);
SDL_SCANCODE_F22 = TSDL_ScanCode(113);
SDL_SCANCODE_F23 = TSDL_ScanCode(114);
SDL_SCANCODE_F24 = TSDL_ScanCode(115);
SDL_SCANCODE_F3 = TSDL_ScanCode(60);
SDL_SCANCODE_F4 = TSDL_ScanCode(61);
SDL_SCANCODE_F5 = TSDL_ScanCode(62);
SDL_SCANCODE_F6 = TSDL_ScanCode(63);
SDL_SCANCODE_F7 = TSDL_ScanCode(64);
SDL_SCANCODE_F8 = TSDL_ScanCode(65);
SDL_SCANCODE_F9 = TSDL_ScanCode(66);
SDL_SCANCODE_FIND = TSDL_ScanCode(126);
SDL_SCANCODE_G = TSDL_ScanCode(10);
SDL_SCANCODE_GRAVE = TSDL_ScanCode(53);
SDL_SCANCODE_H = TSDL_ScanCode(11);
SDL_SCANCODE_HELP = TSDL_ScanCode(117);
SDL_SCANCODE_HOME = TSDL_ScanCode(74);
SDL_SCANCODE_I = TSDL_ScanCode(12);
SDL_SCANCODE_INSERT = TSDL_ScanCode(73);
SDL_SCANCODE_INTERNATIONAL1 = TSDL_ScanCode(135);
SDL_SCANCODE_INTERNATIONAL2 = TSDL_ScanCode(136);
SDL_SCANCODE_INTERNATIONAL3 = TSDL_ScanCode(137);
SDL_SCANCODE_INTERNATIONAL4 = TSDL_ScanCode(138);
SDL_SCANCODE_INTERNATIONAL5 = TSDL_ScanCode(139);
SDL_SCANCODE_INTERNATIONAL6 = TSDL_ScanCode(140);
SDL_SCANCODE_INTERNATIONAL7 = TSDL_ScanCode(141);
SDL_SCANCODE_INTERNATIONAL8 = TSDL_ScanCode(142);
SDL_SCANCODE_INTERNATIONAL9 = TSDL_ScanCode(143);
SDL_SCANCODE_J = TSDL_ScanCode(13);
SDL_SCANCODE_K = TSDL_ScanCode(14);
SDL_SCANCODE_KBDILLUMDOWN = TSDL_ScanCode(279);
SDL_SCANCODE_KBDILLUMTOGGLE = TSDL_ScanCode(278);
SDL_SCANCODE_KBDILLUMUP = TSDL_ScanCode(280);
SDL_SCANCODE_KP_0 = TSDL_ScanCode(98);
SDL_SCANCODE_KP_00 = TSDL_ScanCode(176);
SDL_SCANCODE_KP_000 = TSDL_ScanCode(177);
SDL_SCANCODE_KP_1 = TSDL_ScanCode(89);
SDL_SCANCODE_KP_2 = TSDL_ScanCode(90);
SDL_SCANCODE_KP_3 = TSDL_ScanCode(91);
SDL_SCANCODE_KP_4 = TSDL_ScanCode(92);
SDL_SCANCODE_KP_5 = TSDL_ScanCode(93);
SDL_SCANCODE_KP_6 = TSDL_ScanCode(94);
SDL_SCANCODE_KP_7 = TSDL_ScanCode(95);
SDL_SCANCODE_KP_8 = TSDL_ScanCode(96);
SDL_SCANCODE_KP_9 = TSDL_ScanCode(97);
SDL_SCANCODE_KP_A = TSDL_ScanCode(188);
SDL_SCANCODE_KP_AMPERSAND = TSDL_ScanCode(199);
SDL_SCANCODE_KP_AT = TSDL_ScanCode(206);
SDL_SCANCODE_KP_B = TSDL_ScanCode(189);
SDL_SCANCODE_KP_BACKSPACE = TSDL_ScanCode(187);
SDL_SCANCODE_KP_BINARY = TSDL_ScanCode(218);
SDL_SCANCODE_KP_C = TSDL_ScanCode(190);
SDL_SCANCODE_KP_CLEAR = TSDL_ScanCode(216);
SDL_SCANCODE_KP_CLEARENTRY = TSDL_ScanCode(217);
SDL_SCANCODE_KP_COLON = TSDL_ScanCode(203);
SDL_SCANCODE_KP_COMMA = TSDL_ScanCode(133);
SDL_SCANCODE_KP_D = TSDL_ScanCode(191);
SDL_SCANCODE_KP_DBLAMPERSAND = TSDL_ScanCode(200);
SDL_SCANCODE_KP_DBLVERTICALBAR = TSDL_ScanCode(202);
SDL_SCANCODE_KP_DECIMAL = TSDL_ScanCode(220);
SDL_SCANCODE_KP_DIVIDE = TSDL_ScanCode(84);
SDL_SCANCODE_KP_E = TSDL_ScanCode(192);
SDL_SCANCODE_KP_ENTER = TSDL_ScanCode(88);
SDL_SCANCODE_KP_EQUALS = TSDL_ScanCode(103);
SDL_SCANCODE_KP_EQUALSAS400 = TSDL_ScanCode(134);
SDL_SCANCODE_KP_EXCLAM = TSDL_ScanCode(207);
SDL_SCANCODE_KP_F = TSDL_ScanCode(193);
SDL_SCANCODE_KP_GREATER = TSDL_ScanCode(198);
SDL_SCANCODE_KP_HASH = TSDL_ScanCode(204);
SDL_SCANCODE_KP_HEXADECIMAL = TSDL_ScanCode(221);
SDL_SCANCODE_KP_LEFTBRACE = TSDL_ScanCode(184);
SDL_SCANCODE_KP_LEFTPAREN = TSDL_ScanCode(182);
SDL_SCANCODE_KP_LESS = TSDL_ScanCode(197);
SDL_SCANCODE_KP_MEMADD = TSDL_ScanCode(211);
SDL_SCANCODE_KP_MEMCLEAR = TSDL_ScanCode(210);
SDL_SCANCODE_KP_MEMDIVIDE = TSDL_ScanCode(214);
SDL_SCANCODE_KP_MEMMULTIPLY = TSDL_ScanCode(213);
SDL_SCANCODE_KP_MEMRECALL = TSDL_ScanCode(209);
SDL_SCANCODE_KP_MEMSTORE = TSDL_ScanCode(208);
SDL_SCANCODE_KP_MEMSUBTRACT = TSDL_ScanCode(212);
SDL_SCANCODE_KP_MINUS = TSDL_ScanCode(86);
SDL_SCANCODE_KP_MULTIPLY = TSDL_ScanCode(85);
SDL_SCANCODE_KP_OCTAL = TSDL_ScanCode(219);
SDL_SCANCODE_KP_PERCENT = TSDL_ScanCode(196);
SDL_SCANCODE_KP_PERIOD = TSDL_ScanCode(99);
SDL_SCANCODE_KP_PLUS = TSDL_ScanCode(87);
SDL_SCANCODE_KP_PLUSMINUS = TSDL_ScanCode(215);
SDL_SCANCODE_KP_POWER = TSDL_ScanCode(195);
SDL_SCANCODE_KP_RIGHTBRACE = TSDL_ScanCode(185);
SDL_SCANCODE_KP_RIGHTPAREN = TSDL_ScanCode(183);
SDL_SCANCODE_KP_SPACE = TSDL_ScanCode(205);
SDL_SCANCODE_KP_TAB = TSDL_ScanCode(186);
SDL_SCANCODE_KP_VERTICALBAR = TSDL_ScanCode(201);
SDL_SCANCODE_KP_XOR = TSDL_ScanCode(194);
SDL_SCANCODE_L = TSDL_ScanCode(15);
SDL_SCANCODE_LALT = TSDL_ScanCode(226);
SDL_SCANCODE_LANG1 = TSDL_ScanCode(144);
SDL_SCANCODE_LANG2 = TSDL_ScanCode(145);
SDL_SCANCODE_LANG3 = TSDL_ScanCode(146);
SDL_SCANCODE_LANG4 = TSDL_ScanCode(147);
SDL_SCANCODE_LANG5 = TSDL_ScanCode(148);
SDL_SCANCODE_LANG6 = TSDL_ScanCode(149);
SDL_SCANCODE_LANG7 = TSDL_ScanCode(150);
SDL_SCANCODE_LANG8 = TSDL_ScanCode(151);
SDL_SCANCODE_LANG9 = TSDL_ScanCode(152);
SDL_SCANCODE_LCTRL = TSDL_ScanCode(224);
SDL_SCANCODE_LEFT = TSDL_ScanCode(80);
SDL_SCANCODE_LEFTBRACKET = TSDL_ScanCode(47);
SDL_SCANCODE_LGUI = TSDL_ScanCode(227);
SDL_SCANCODE_LSHIFT = TSDL_ScanCode(225);
SDL_SCANCODE_M = TSDL_ScanCode(16);
SDL_SCANCODE_MAIL = TSDL_ScanCode(265);
SDL_SCANCODE_MEDIASELECT = TSDL_ScanCode(263);
SDL_SCANCODE_MENU = TSDL_ScanCode(118);
SDL_SCANCODE_MINUS = TSDL_ScanCode(45);
SDL_SCANCODE_MODE = TSDL_ScanCode(257);
SDL_SCANCODE_MUTE = TSDL_ScanCode(127);
SDL_SCANCODE_N = TSDL_ScanCode(17);
SDL_SCANCODE_NONUSBACKSLASH = TSDL_ScanCode(100);
SDL_SCANCODE_NONUSHASH = TSDL_ScanCode(50);
SDL_SCANCODE_NUMLOCKCLEAR = TSDL_ScanCode(83);
SDL_SCANCODE_O = TSDL_ScanCode(18);
SDL_SCANCODE_OPER = TSDL_ScanCode(161);
SDL_SCANCODE_OUT = TSDL_ScanCode(160);
SDL_SCANCODE_P = TSDL_ScanCode(19);
SDL_SCANCODE_PAGEDOWN = TSDL_ScanCode(78);
SDL_SCANCODE_PAGEUP = TSDL_ScanCode(75);
SDL_SCANCODE_PASTE = TSDL_ScanCode(125);
SDL_SCANCODE_PAUSE = TSDL_ScanCode(72);
SDL_SCANCODE_PERIOD = TSDL_ScanCode(55);
SDL_SCANCODE_POWER = TSDL_ScanCode(102);
SDL_SCANCODE_PRINTSCREEN = TSDL_ScanCode(70);
SDL_SCANCODE_PRIOR = TSDL_ScanCode(157);
SDL_SCANCODE_Q = TSDL_ScanCode(20);
SDL_SCANCODE_R = TSDL_ScanCode(21);
SDL_SCANCODE_RALT = TSDL_ScanCode(230);
SDL_SCANCODE_RCTRL = TSDL_ScanCode(228);
SDL_SCANCODE_RETURN = TSDL_ScanCode(40);
SDL_SCANCODE_RETURN2 = TSDL_ScanCode(158);
SDL_SCANCODE_RGUI = TSDL_ScanCode(231);
SDL_SCANCODE_RIGHT = TSDL_ScanCode(79);
SDL_SCANCODE_RIGHTBRACKET = TSDL_ScanCode(48);
SDL_SCANCODE_RSHIFT = TSDL_ScanCode(229);
SDL_SCANCODE_S = TSDL_ScanCode(22);
SDL_SCANCODE_SCROLLLOCK = TSDL_ScanCode(71);
SDL_SCANCODE_SELECT = TSDL_ScanCode(119);
SDL_SCANCODE_SEMICOLON = TSDL_ScanCode(51);
SDL_SCANCODE_SEPARATOR = TSDL_ScanCode(159);
SDL_SCANCODE_SLASH = TSDL_ScanCode(56);
SDL_SCANCODE_SLEEP = TSDL_ScanCode(282);
SDL_SCANCODE_SOFTLEFT = TSDL_ScanCode(287);
SDL_SCANCODE_SOFTRIGHT = TSDL_ScanCode(288);
SDL_SCANCODE_SPACE = TSDL_ScanCode(44);
SDL_SCANCODE_STOP = TSDL_ScanCode(120);
SDL_SCANCODE_SYSREQ = TSDL_ScanCode(154);
SDL_SCANCODE_T = TSDL_ScanCode(23);
SDL_SCANCODE_TAB = TSDL_ScanCode(43);
SDL_SCANCODE_THOUSANDSSEPARATOR = TSDL_ScanCode(178);
SDL_SCANCODE_U = TSDL_ScanCode(24);
SDL_SCANCODE_UNDO = TSDL_ScanCode(122);
SDL_SCANCODE_UNKNOWN = TSDL_ScanCode(0);
SDL_SCANCODE_UP = TSDL_ScanCode(82);
SDL_SCANCODE_V = TSDL_ScanCode(25);
SDL_SCANCODE_VOLUMEDOWN = TSDL_ScanCode(129);
SDL_SCANCODE_VOLUMEUP = TSDL_ScanCode(128);
SDL_SCANCODE_W = TSDL_ScanCode(26);
SDL_SCANCODE_WWW = TSDL_ScanCode(264);
SDL_SCANCODE_X = TSDL_ScanCode(27);
SDL_SCANCODE_Y = TSDL_ScanCode(28);
SDL_SCANCODE_Z = TSDL_ScanCode(29);
SDL_SENSORUPDATED = TSDL_EventType($1200);
SDL_SENSOR_ACCEL = TSDL_SensorType(1);
SDL_SENSOR_ACCEL_L = TSDL_SensorType(3);
SDL_SENSOR_ACCEL_R = TSDL_SensorType(5);
SDL_SENSOR_GYRO = TSDL_SensorType(2);
SDL_SENSOR_GYRO_L = TSDL_SensorType(4);
SDL_SENSOR_GYRO_R = TSDL_SensorType(6);
SDL_SENSOR_INVALID = TSDL_SensorType(-1);
SDL_SENSOR_UNKNOWN = TSDL_SensorType(0);
SDL_SIMD_ALIGNED = $00000008;
SDL_STANDARD_GRAVITY = 9.80665;
SDL_SWSURFACE = 0;
SDL_SYSTEM_CURSOR_ARROW = TSDL_SystemCursor(0);
SDL_SYSTEM_CURSOR_CROSSHAIR = TSDL_SystemCursor(3);
SDL_SYSTEM_CURSOR_HAND = TSDL_SystemCursor(11);
SDL_SYSTEM_CURSOR_IBEAM = TSDL_SystemCursor(1);
SDL_SYSTEM_CURSOR_NO = TSDL_SystemCursor(10);
SDL_SYSTEM_CURSOR_SIZEALL = TSDL_SystemCursor(9);
SDL_SYSTEM_CURSOR_SIZENESW = TSDL_SystemCursor(6);
SDL_SYSTEM_CURSOR_SIZENS = TSDL_SystemCursor(8);
SDL_SYSTEM_CURSOR_SIZENWSE = TSDL_SystemCursor(5);
SDL_SYSTEM_CURSOR_SIZEWE = TSDL_SystemCursor(7);
SDL_SYSTEM_CURSOR_WAIT = TSDL_SystemCursor(2);
SDL_SYSTEM_CURSOR_WAITARROW = TSDL_SystemCursor(4);
SDL_SYSWMEVENT = TSDL_EventType($201);
SDL_SYSWM_ANDROID = TSDL_SYSWM_TYPE(9);
SDL_SYSWM_COCOA = TSDL_SYSWM_TYPE(4);
SDL_SYSWM_DIRECTFB = TSDL_SYSWM_TYPE(3);
SDL_SYSWM_HAIKU = TSDL_SYSWM_TYPE(12);
SDL_SYSWM_KMSDRM = TSDL_SYSWM_TYPE(13);
SDL_SYSWM_MIR = TSDL_SYSWM_TYPE(7);
SDL_SYSWM_OS2 = TSDL_SYSWM_TYPE(11);
SDL_SYSWM_RISCOS = TSDL_SYSWM_TYPE(14);
SDL_SYSWM_UIKIT = TSDL_SYSWM_TYPE(5);
SDL_SYSWM_UNKNOWN = TSDL_SYSWM_TYPE(0);
SDL_SYSWM_VIVANTE = TSDL_SYSWM_TYPE(10);
SDL_SYSWM_WAYLAND = TSDL_SYSWM_TYPE(6);
SDL_SYSWM_WINDOWS = TSDL_SYSWM_TYPE(1);
SDL_SYSWM_WINRT = TSDL_SYSWM_TYPE(8);
SDL_SYSWM_X11 = TSDL_SYSWM_TYPE(2);
SDL_TEXTEDITING = TSDL_EventType($302);
SDL_TEXTEDITINGEVENT_TEXT_SIZE = 32;
SDL_TEXTEDITING_EXT = TSDL_EventType($305);
SDL_TEXTINPUT = TSDL_EventType($303);
SDL_TEXTINPUTEVENT_TEXT_SIZE = 32;
SDL_TEXTUREACCESS_STATIC = 0;
SDL_TEXTUREACCESS_STREAMING = 1;
SDL_TEXTUREACCESS_TARGET = 2;
SDL_TEXTUREMODULATE_ALPHA = TSDL_TextureModulate(2);
SDL_TEXTUREMODULATE_COLOR = TSDL_TextureModulate(1);
SDL_TEXTUREMODULATE_NONE = TSDL_TextureModulate(0);
SDL_THREAD_PRIORITY_HIGH = TSDL_ThreadPriority(2);
SDL_THREAD_PRIORITY_LOW = TSDL_ThreadPriority(0);
SDL_THREAD_PRIORITY_NORMAL = TSDL_ThreadPriority(1);
SDL_THREAD_PRIORITY_TIME_CRITICAL = TSDL_ThreadPriority(3);
SDL_TOUCH_DEVICE_DIRECT = TSDL_TouchDeviceType(0);
SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE = TSDL_TouchDeviceType(1);
SDL_TOUCH_DEVICE_INDIRECT_RELATIVE = TSDL_TouchDeviceType(2);
SDL_TOUCH_DEVICE_INVALID = TSDL_TouchDeviceType(-1);
SDL_TOUCH_MOUSEID = cuint32(-1);
SDL_TRUE = TSDL_Bool(1);
SDL_USEREVENT = TSDL_EventType($8000);
SDL_VIRTUAL_JOYSTICK_DESC_VERSION = 1;
SDL_WINDOWEVENT = TSDL_EventType($200);
SDL_WINDOWEVENT_CLOSE = TSDL_WindowEventID(14);
SDL_WINDOWEVENT_DISPLAY_CHANGED = TSDL_WindowEventID(18);
SDL_WINDOWEVENT_ENTER = TSDL_WindowEventID(10);
SDL_WINDOWEVENT_EXPOSED = TSDL_WindowEventID(3);
SDL_WINDOWEVENT_FOCUS_GAINED = TSDL_WindowEventID(12);
SDL_WINDOWEVENT_FOCUS_LOST = TSDL_WindowEventID(13);
SDL_WINDOWEVENT_HIDDEN = TSDL_WindowEventID(2);
SDL_WINDOWEVENT_HIT_TEST = TSDL_WindowEventID(16);
SDL_WINDOWEVENT_ICCPROF_CHANGED = TSDL_WindowEventID(17);
SDL_WINDOWEVENT_LEAVE = TSDL_WindowEventID(11);
SDL_WINDOWEVENT_MAXIMIZED = TSDL_WindowEventID(8);
SDL_WINDOWEVENT_MINIMIZED = TSDL_WindowEventID(7);
SDL_WINDOWEVENT_MOVED = TSDL_WindowEventID(4);
SDL_WINDOWEVENT_NONE = TSDL_WindowEventID(0);
SDL_WINDOWEVENT_RESIZED = TSDL_WindowEventID(5);
SDL_WINDOWEVENT_RESTORED = TSDL_WindowEventID(9);
SDL_WINDOWEVENT_SHOWN = TSDL_WindowEventID(1);
SDL_WINDOWEVENT_SIZE_CHANGED = TSDL_WindowEventID(6);
SDL_WINDOWEVENT_TAKE_FOCUS = TSDL_WindowEventID(15);
SDL_WINDOWPOS_CENTERED = SDL_WINDOWPOS_CENTERED_MASK or 0;
SDL_WINDOWPOS_CENTERED_MASK = $2FFF0000;
SDL_WINDOWPOS_UNDEFINED = SDL_WINDOWPOS_UNDEFINED_MASK or 0;
SDL_WINDOWPOS_UNDEFINED_MASK = $1FFF0000;
SDL_WINDOW_ALLOW_HIGHDPI = TSDL_WindowFlags($00002000);
SDL_WINDOW_ALWAYS_ON_TOP = TSDL_WindowFlags($00008000);
SDL_WINDOW_BORDERLESS = TSDL_WindowFlags($00000010);
SDL_WINDOW_FOREIGN = TSDL_WindowFlags($00000800);
SDL_WINDOW_FULLSCREEN = TSDL_WindowFlags($00000001);
SDL_WINDOW_FULLSCREEN_DESKTOP = TSDL_WindowFlags(SDL_WINDOW_FULLSCREEN or $00001000);
SDL_WINDOW_HIDDEN = TSDL_WindowFlags($00000008);
SDL_WINDOW_INPUT_FOCUS = TSDL_WindowFlags($00000200);
SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED;
SDL_WINDOW_KEYBOARD_GRABBED = TSDL_WindowFlags($00100000);
SDL_WINDOW_LACKS_SHAPE = -3;
SDL_WINDOW_MAXIMIZED = TSDL_WindowFlags($00000080);
SDL_WINDOW_METAL = TSDL_WindowFlags($20000000);
SDL_WINDOW_MINIMIZED = TSDL_WindowFlags($00000040);
SDL_WINDOW_MOUSE_CAPTURE = TSDL_WindowFlags($00004000);
SDL_WINDOW_MOUSE_FOCUS = TSDL_WindowFlags($00000400);
SDL_WINDOW_MOUSE_GRABBED = TSDL_WindowFlags($00000100);
SDL_WINDOW_OPENGL = TSDL_WindowFlags($00000002);
SDL_WINDOW_POPUP_MENU = TSDL_WindowFlags($00080000);
SDL_WINDOW_RESIZABLE = TSDL_WindowFlags($00000020);
SDL_WINDOW_SHOWN = TSDL_WindowFlags($00000004);
SDL_WINDOW_SKIP_TASKBAR = TSDL_WindowFlags($00010000);
SDL_WINDOW_TOOLTIP = TSDL_WindowFlags($00040000);
SDL_WINDOW_UTILITY = TSDL_WindowFlags($00020000);
SDL_WINDOW_VULKAN = TSDL_WindowFlags($10000000);
SDL_YUV_CONVERSION_AUTOMATIC = TSDL_YUV_CONVERSION_MODE(3);
SDL_YUV_CONVERSION_BT601 = TSDL_YUV_CONVERSION_MODE(1);
SDL_YUV_CONVERSION_BT709 = TSDL_YUV_CONVERSION_MODE(2);
SDL_YUV_CONVERSION_JPEG = TSDL_YUV_CONVERSION_MODE(0);
ShapeModeBinarizeAlpha = TWindowShapeMode(1);
ShapeModeColorKey = TWindowShapeMode(3);
ShapeModeDefault = TWindowShapeMode(0);
ShapeModeReverseBinarizeAlpha = TWindowShapeMode(2);

Description

Functions and Procedures

function SDL_acos(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the arc cosine of x; that is, the value (in radians) whose cosine equals x.

\since This function is available since SDL 2.0.4.

function SDL_acosf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the arc cosine of x; that is, the value (in radians) whose cosine equals x.

\since This function is available since SDL 2.0.8.

procedure SDL_AddEventWatch(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;

Add a function which is called when an event is added to the queue.

procedure SDL_AddHintCallback(const name: PAnsiChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName;
 
function SDL_AddTimer(interval: cuint32; callback: TSDL_TimerCallback; param: Pointer): TSDL_TimerID; cdecl; external SDL_LibName;

Add a new timer to the pool of timers already running.

A timer ID, or NULL when an error occurs.

function SDL_AllocFormat(pixel_format: cuint32): PSDL_PixelFormat; cdecl; external SDL_LibName;

Create an SDL_PixelFormat structure corresponding to a pixel format.

Returned structure may come from a shared global cache (i.e. not newly allocated), and hence should not be modified, especially the palette. Weird errors such as `Blit combination not supported` may occur.

\param pixel_format one of the SDL_PixelFormatEnum values \returns the new SDL_PixelFormat structure or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_FreeFormat

function SDL_AllocPalette(ncolors: cint): PSDL_Palette; cdecl; external SDL_LibName;

Create a palette structure with the specified number of color entries.

The palette entries are initialized to white.

\param ncolors represents the number of color entries in the color palette \returns a new SDL_Palette structure on success or NULL on failure (e.g. if there wasn't enough memory); call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_FreePalette

function SDL_AllocRW: PSDL_RWops; cdecl; external SDL_LibName;

RWFrom functions*

function SDL_asin(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the arc sine of x; that is, the value (in radians) whose sine equals x.

\since This function is available since SDL 2.0.4.

function SDL_asinf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the arc sine of x; that is, the value (in radians) whose sine equals x.

\since This function is available since SDL 2.0.8.

function SDL_atan(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the arc tangent of x; that is, the value (in radians) whose tangent equals x.

\since This function is available since SDL 2.0.4.

function SDL_atan2(y, x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the arc tangent of y/x, using the signs of the two arguments to determine the quadrant of the result.

\since This function is available since SDL 2.0.4.

function SDL_atan2f(y, x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the arc tangent of y/x, using the signs of the two arguments to determine the quadrant of the result.

\since This function is available since SDL 2.0.8.

function SDL_atanf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the arc tangent of x; that is, the value (in radians) whose tangent equals x.

\since This function is available since SDL 2.0.8.

function SDL_AtomicAdd(atomic: PSDL_Atomic; value: cint): cint; cdecl; external SDL_LibName;

Add to an atomic variable, and return the old value.

This function also acts as a full memory barrier.

function SDL_AtomicCAS(atomic: PSDL_Atomic; oldValue, newValue: cint): TSDL_bool; cdecl; external SDL_LibName;

Set an atomic variable to a new value if it is currently an old value.

function SDL_AtomicCASPtr(ptr: PPointer; oldValue, newValue: Pointer): TSDL_bool; cdecl; external SDL_LibName;

Set a pointer to a new value if it is currently an old value.

function SDL_AtomicDecRef(atomic: PSDL_Atomic): Boolean;

Decrement an atomic variable used as a reference count and check if it reached zero after decrementing.

function SDL_AtomicGet(atomic: PSDL_Atomic): cint; cdecl; external SDL_LibName;

Get the value of an atomic variable.

function SDL_AtomicGetPtr(ptr: PPointer): Pointer; cdecl; external SDL_LibName;

Get the value of a pointer atomically.

function SDL_AtomicIncRef(atomic: PSDL_Atomic): cint;

Increment an atomic variable used as a reference count.

function SDL_AtomicLock(lock: PSDL_SpinLock): TSDL_bool; cdecl; external SDL_LibName;

Lock a spin lock by setting it to a non-zero value.

function SDL_AtomicSet(atomic: PSDL_Atomic; value: cint): cint; cdecl; external SDL_LibName;

Set an atomic variable to a new value and return the old one.

This function also acts as a full memory barrier.

function SDL_AtomicSetPtr(ptr: PPointer; value: Pointer): Pointer; cdecl; external SDL_LibName;

Set a pointer to a new value atomically, and return the old value.

function SDL_AtomicTryLock(lock: PSDL_SpinLock): TSDL_bool; cdecl; external SDL_LibName;

Try to lock a spin lock by setting it to a non-zero value.

procedure SDL_AtomicUnlock(lock: PSDL_SpinLock); cdecl; external SDL_LibName;

Unlock a spin lock by setting it to 0.

Always returns immediately.

function SDL_AudioInit(driver_name: PAnsiChar): cint; cdecl; external SDL_LibName;

Use this function to initialize a particular audio driver.

This function is used internally, and should not be used unless you have a specific need to designate the audio driver you want to use. You should normally use SDL_Init() or SDL_InitSubSystem().

\param driver_name the name of the desired audio driver \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_AudioQuit

procedure SDL_AudioQuit; cdecl; external SDL_LibName;

Use this function to shut down audio if you initialized it with SDL_AudioInit().

This function is used internally, and should not be used unless you have a specific need to specify the audio driver you want to use. You should normally use SDL_Quit() or SDL_QuitSubSystem().

\since This function is available since SDL 2.0.0.

\sa SDL_AudioInit

function SDL_AudioStreamAvailable(stream: PSDL_AudioStream): cint; cdecl; external SDL_LibName;

Get the number of converted/resampled bytes available.

The stream may be buffering data behind the scenes until it has enough to resample correctly, so this number might be lower than what you expect, or even be zero. Add more data or flush the stream if you need the data now.

\since This function is available since SDL 2.0.7.

\sa SDL_NewAudioStream \sa SDL_AudioStreamPut \sa SDL_AudioStreamGet \sa SDL_AudioStreamFlush \sa SDL_AudioStreamClear \sa SDL_FreeAudioStream

procedure SDL_AudioStreamClear(stream: PSDL_AudioStream); cdecl; external SDL_LibName;

Clear any pending data in the stream without converting it

\since This function is available since SDL 2.0.7.

\sa SDL_NewAudioStream \sa SDL_AudioStreamPut \sa SDL_AudioStreamGet \sa SDL_AudioStreamAvailable \sa SDL_AudioStreamFlush \sa SDL_FreeAudioStream

function SDL_AudioStreamFlush(stream: PSDL_AudioStream): cint; cdecl; external SDL_LibName;

Tell the stream that you're done sending data, and anything being buffered should be converted/resampled and made available immediately.

It is legal to add more data to a stream after flushing, but there will be audio gaps in the output. Generally this is intended to signal the end of input, so the complete output becomes available.

\since This function is available since SDL 2.0.7.

\sa SDL_NewAudioStream \sa SDL_AudioStreamPut \sa SDL_AudioStreamGet \sa SDL_AudioStreamAvailable \sa SDL_AudioStreamClear \sa SDL_FreeAudioStream

function SDL_AudioStreamGet(stream: PSDL_AudioStream; buf: pointer; len: cint): cint; cdecl; external SDL_LibName;

Get converted/resampled data from the stream

\param stream The stream the audio is being requested from \param buf A buffer to fill with audio data \param len The maximum number of bytes to fill \returns the number of bytes read from the stream, or -1 on error

\since This function is available since SDL 2.0.7.

\sa SDL_NewAudioStream \sa SDL_AudioStreamPut \sa SDL_AudioStreamAvailable \sa SDL_AudioStreamFlush \sa SDL_AudioStreamClear \sa SDL_FreeAudioStream

function SDL_AudioStreamPut(stream: PSDL_AudioStream; buf: pointer; len: cint): cint; cdecl; external SDL_LibName;

Add data to be converted/resampled to the stream.

\param stream The stream the audio data is being added to \param buf A pointer to the audio data to add \param len The number of bytes to write to the stream \returns 0 on success, or -1 on error.

\since This function is available since SDL 2.0.7.

\sa SDL_NewAudioStream \sa SDL_AudioStreamGet \sa SDL_AudioStreamAvailable \sa SDL_AudioStreamFlush \sa SDL_AudioStreamClear \sa SDL_FreeAudioStream

function SDL_AUDIO_BITSIZE(x: Cardinal): Cardinal;
 
function SDL_AUDIO_ISBIGENDIAN(x: Cardinal): Cardinal;
 
function SDL_AUDIO_ISFLOAT(x: Cardinal): Cardinal;
 
function SDL_AUDIO_ISINT(x: Cardinal): Cardinal;
 
function SDL_AUDIO_ISLITTLEENDIAN(x: Cardinal): Cardinal;
 
function SDL_AUDIO_ISSIGNED(x: Cardinal): Cardinal;
 
function SDL_AUDIO_ISUNSIGNED(x: Cardinal): Cardinal;
 
function SDL_BITSPERPIXEL(X: cuint32): cuint32;
 
function SDL_BlitSurface(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName name '_SDL_UpperBlit';

SDL_surface.h uses #define to change all SDL_BlitSurface() calls into SDL_UpperBlit() calls. * Since Pascal macro support is very limited, we workaround by outright pointing SDL_BlitSurface() to SDL_UpperBlit().

function SDL_BlitSurfaceScaled(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName name '_SDL_UpperBlitScaled';

SDL_surface.h uses #define to change all SDL_BlitSurfaceScaled() calls into SDL_UpperBlitScaled() calls. * Since Pascal macro support is very limited, we workaround by outright pointing SDL_BlitSurfaceScaled() to SDL_UpperBlitScaled().

function SDL_BuildAudioCVT(cvt: PSDL_AudioCVT; src_format: TSDL_AudioFormat; src_channels: cuint8; src_rate: cint; dst_format: TSDL_AudioFormat; dst_channels: cuint8; dst_rate: cint): cint; cdecl; external SDL_LibName;

Initialize an SDL_AudioCVT structure for conversion.

Before an SDL_AudioCVT structure can be used to convert audio data it must be initialized with source and destination information.

This function will zero out every field of the SDL_AudioCVT, so it must be called before the application fills in the final buffer information.

Once this function has returned successfully, and reported that a conversion is necessary, the application fills in the rest of the fields in SDL_AudioCVT, now that it knows how large a buffer it needs to allocate, and then can call SDL_ConvertAudio() to complete the conversion.

\param cvt an SDL_AudioCVT structure filled in with audio conversion information \param src_format the source format of the audio data; for more info see SDL_AudioFormat \param src_channels the number of channels in the source \param src_rate the frequency (sample-frames-per-second) of the source \param dst_format the destination format of the audio data; for more info see SDL_AudioFormat \param dst_channels the number of channels in the destination \param dst_rate the frequency (sample-frames-per-second) of the destination \returns 1 if the audio filter is prepared, 0 if no conversion is needed, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_ConvertAudio

function SDL_Button(X: cint): cint;

Used as a mask when testing buttons in buttonstate. - Button 1: Left mouse button - Button 2: Middle mouse button - Button 3: Right mouse button

procedure SDL_CalculateGammaRamp(gamma: cfloat; ramp: pcuint16); cdecl; external SDL_LibName;

/** Calculate a 256 entry gamma ramp for a gamma value.

\param gamma a gamma value where 0.0 is black and 1.0 is identity \param ramp an array of 256 values filled in with the gamma ramp

\since This function is available since SDL 2.0.0.

\sa SDL_SetWindowGammaRamp

function SDL_calloc(nmemb, size: csize_t): Pointer; cdecl; external SDL_LibName;

Allocate a block of memory that can fit an array of nmemb elements, each of given size. The memory is initialized by setting every byte to 0.

function SDL_CaptureMouse(enabled: TSDL_Bool): cint; cdecl; external SDL_LibName;

Capture the mouse and to track input outside an SDL window.

Capturing enables your app to obtain mouse events globally, instead of just within your window. Not all video targets support this function. When capturing is enabled, the current window will get all mouse events, but unlike relative mode, no change is made to the cursor and it is not restrained to your window.

This function may also deny mouse input to other windows–both those in your application and others on the system–so you should use this function sparingly, and in small bursts. For example, you might want to track the mouse while the user is dragging something, until the user releases a mouse button. It is not recommended that you capture the mouse for long periods of time, such as the entire time your app is running. For that, you should probably use SDL_SetRelativeMouseMode() or SDL_SetWindowGrab(), depending on your goals.

While captured, mouse events still report coordinates relative to the current (foreground) window, but those coordinates may be outside the bounds of the window (including negative values). Capturing is only allowed for the foreground window. If the window loses focus while capturing, the capture will be disabled automatically.

While capturing is enabled, the current window will have the `SDL_WINDOW_MOUSE_CAPTURE` flag set.

Please note that as of SDL 2.0.22, SDL will attempt to "auto capture" the mouse while the user is pressing a button; this is to try and make mouse behavior more consistent between platforms, and deal with the common case of a user dragging the mouse outside of the window. This means that if you are calling SDL_CaptureMouse() only to deal with this situation, you no longer have to (although it is safe to do so). If this causes problems for your app, you can disable auto capture by setting the `SDL_HINT_MOUSE_AUTO_CAPTURE` hint to zero.

\param enabled SDL_TRUE to enable capturing, SDL_FALSE to disable. \returns 0 on success or -1 if not supported; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.4.

\sa SDL_GetGlobalMouseState

function SDL_ceil(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the smallest integral value that is not less than x.

\since This function is available since SDL 2.0.4.

function SDL_ceilf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the smallest integral value that is not less than x.

\since This function is available since SDL 2.0.8.

procedure SDL_ClearComposition; cdecl; external SDL_LibName;

Dismiss the composition window/IME without disabling the subsystem.

\since This function is available since SDL 2.0.22.

\sa SDL_StartTextInput \sa SDL_StopTextInput

procedure SDL_ClearErrorcdecl; external SDL_LibName;

\brief Clear the error message for the current thread

procedure SDL_ClearHints(); cdecl; external SDL_LibName;

Clear all hints.

This function is automatically called during SDL_Quit(), and deletes all callbacks without calling them and frees all memory associated with hints. If you're calling this from application code you probably want to call SDL_ResetHints() instead.

This function will be removed from the API the next time we rev the ABI.

\since This function is available since SDL 2.0.0.

\sa SDL_ResetHints

procedure SDL_ClearQueuedAudio(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;

Drop any queued audio data waiting to be sent to the hardware.

Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For output devices, the hardware will start playing silence if more audio isn't queued. For capture devices, the hardware will start filling the empty queue with new data if the capture device isn't paused.

This will not prevent playback of queued audio that's already been sent to the hardware, as we can not undo that, so expect there to be some fraction of a second of audio that might still be heard. This can be useful if you want to, say, drop any pending music or any unprocessed microphone input during a level change in your game.

You may not queue or dequeue audio on a device that is using an application-supplied callback; calling this function on such a device always returns 0. You have to use the audio callback or queue audio, but not both.

You should not call SDL_LockAudio() on the device before clearing the queue; SDL handles locking internally for this function.

This function always succeeds and thus returns void.

\param dev the device ID of which to clear the audio queue

\since This function is available since SDL 2.0.4.

\sa SDL_GetQueuedAudioSize \sa SDL_QueueAudio \sa SDL_DequeueAudio

procedure SDL_CloseAudio; cdecl; external SDL_LibName;

This function is a legacy means of closing the audio device.

This function is equivalent to calling...

```c SDL_CloseAudioDevice(1); ```

...and is only useful if you used the legacy SDL_OpenAudio() function.

\since This function is available since SDL 2.0.0.

\sa SDL_OpenAudio

procedure SDL_CloseAudioDevice(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;

Use this function to shut down audio processing and close the audio device.

The application should close open audio devices once they are no longer needed. Calling this function will wait until the device's audio callback is not running, release the audio hardware and then clean up internal state. No further audio will play from this device once this function returns.

This function may block briefly while pending audio data is played by the hardware, so that applications don't drop the last buffer of data they supplied.

The device ID is invalid as soon as the device is closed, and is eligible for reuse in a new SDL_OpenAudioDevice() call immediately.

\param dev an audio device previously opened with SDL_OpenAudioDevice()

\since This function is available since SDL 2.0.0.

\sa SDL_OpenAudioDevice

function SDL_COMPILEDVERSION: Cardinal;

This is the version number macro for the current SDL version.

procedure SDL_CompilerBarrier();

The compiler barrier prevents the compiler from reordering reads and writes to globally visible variables across the call.

function SDL_ComposeCustomBlendMode(srcColorFactor, dstColorFactor: TSDL_BlendFactor; colorOperation: TSDL_BlendOperation; srcAlphaFactor, dstAlphaFactor: TSDL_BlendFactor; alphaOperation: TSDL_BlendOperation): TSDL_BlendMode; cdecl; external SDL_LibName;

\brief Create a custom blend mode, which may or may not be supported by a given renderer

\param srcColorFactor source color factor \param dstColorFactor destination color factor \param colorOperation color operation \param srcAlphaFactor source alpha factor \param dstAlphaFactor destination alpha factor \param alphaOperation alpha operation

The result of the blend mode operation will be: dstRGB = dstRGB * dstColorFactor colorOperation srcRGB * srcColorFactor and dstA = dstA * dstAlphaFactor alphaOperation srcA * srcAlphaFactor

function SDL_CondBroadcast(cond: PSDL_Cond): cint; cdecl; external SDL_LibName;

Restart all threads that are waiting on the condition variable.

\param cond the condition variable to signal \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_CondSignal(cond: PSDL_Cond): cint; cdecl; external SDL_LibName;

Restart one of the threads that are waiting on the condition variable.

\param cond the condition variable to signal \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_CondWait(cond: PSDL_Cond; mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;

Wait until a condition variable is signaled.

This function unlocks the specified `mutex` and waits for another thread to call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable `cond`. Once the condition variable is signaled, the mutex is re-locked and the function returns.

The mutex must be locked before calling this function.

This function is the equivalent of calling SDL_CondWaitTimeout() with a time length of SDL_MUTEX_MAXWAIT.

\param cond the condition variable to wait on \param mutex the mutex used to coordinate thread access \returns 0 when it is signaled or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_CondWaitTimeout(cond: PSDL_Cond; mutex: PSDL_Mutex; ms: cuint32): cint; cdecl; external SDL_LibName;

Wait until a condition variable is signaled or a certain time has passed.

This function unlocks the specified `mutex` and waits for another thread to call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable `cond`, or for the specified time to elapse. Once the condition variable is signaled or the time elapsed, the mutex is re-locked and the function returns.

The mutex must be locked before calling this function.

\param cond the condition variable to wait on \param mutex the mutex used to coordinate thread access \param ms the maximum time to wait, in milliseconds, or SDL_MUTEX_MAXWAIT to wait indefinitely \returns 0 if the condition variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not signaled in the allotted time, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_ConvertAudio(cvt: PSDL_AudioCVT): cint; cdecl; external SDL_LibName;

Convert audio data to a desired audio format.

This function does the actual audio data conversion, after the application has called SDL_BuildAudioCVT() to prepare the conversion information and then filled in the buffer details.

Once the application has initialized the `cvt` structure using SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio data in the source format, this function will convert the buffer, in-place, to the desired format.

The data conversion may go through several passes; any given pass may possibly temporarily increase the size of the data. For example, SDL might expand 16-bit data to 32 bits before resampling to a lower frequency, shrinking the data size after having grown it briefly. Since the supplied buffer will be both the source and destination, converting as necessary in-place, the application must allocate a buffer that will fully contain the data during its largest conversion pass. After SDL_BuildAudioCVT() returns, the application should set the `cvt->len` field to the size, in bytes, of the source data, and allocate a buffer that is `cvt->len * cvt->len_mult` bytes long for the `buf` field.

The source data should be copied into this buffer before the call to SDL_ConvertAudio(). Upon successful return, this buffer will contain the converted audio, and `cvt->len_cvt` will be the size of the converted data, in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once this function returns.

\param cvt an SDL_AudioCVT structure that was previously set up by SDL_BuildAudioCVT(). \returns 0 if the conversion was completed successfully or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_BuildAudioCVT

function SDL_ConvertPixels(width: cint; height: cint; src_format: cuint32; const src: Pointer; src_pitch: cint; dst_format: cuint32; dst: Pointer; dst_pitch: cint): cint; cdecl; external SDL_LibName;

Copy a block of pixels of one format to another format

0 on success, or -1 if there was an error

function SDL_ConvertSurface(src: PSDL_Surface; const fmt: PSDL_PixelFormat; flags: cuint32): PSDL_Surface; cdecl; external SDL_LibName;

Creates a new surface of the specified format, and then copies and maps the given surface to it so the blit of the converted surface will be as fast as possible. If this function fails, it returns NULL.

The flags parameter is passed to SDL_CreateRGBSurface() and has those semantics. You can also pass SDL_RLEACCEL in the flags parameter and SDL will try to RLE accelerate colorkey and alpha blits in the resulting surface.

function SDL_ConvertSurfaceFormat(src: PSDL_Surface; pixel_format: cuint32; flags: cuint32): PSDL_Surface; cdecl; external SDL_LibName;
 
function SDL_copysign(x, y: cdouble): cdouble; cdecl; external SDL_LibName;

Return a number whose absolute value matches that of x, but the sign matches that of y.

\since This function is available since SDL 2.0.4.

function SDL_copysignf(x, y: cfloat): cfloat; cdecl; external SDL_LibName;

Return a number whose absolute value matches that of x, but the sign matches that of y.

\since This function is available since SDL 2.0.8.

function SDL_cos(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the cosine of x, where x is given in radians.

\since This function is available since SDL 2.0.4.

function SDL_cosf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the cosine of x, where x is given in radians.

\since This function is available since SDL 2.0.4.

function SDL_CreateColorCursor( surface: PSDL_Surface; hot_x: cint; hot_y: cint): PSDL_Cursor; cdecl; external SDL_LibName;

Create a color cursor.

\param surface an SDL_Surface structure representing the cursor image \param hot_x the x position of the cursor hot spot \param hot_y the y position of the cursor hot spot \returns the new cursor on success or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_CreateCursor \sa SDL_FreeCursor

function SDL_CreateCond: PSDL_Cond; cdecl; external SDL_LibName;

Create a condition variable.

\returns a new condition variable or NIL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_CreateCursor( const data: pcuint8; const mask: pcuint8; w: cint; h: cint; hot_x: cint; hot_y: cint): PSDL_Cursor; cdecl; external SDL_LibName;

Create a cursor using the specified bitmap data and mask (in MSB format).

`mask` has to be in MSB (Most Significant Bit) format.

The cursor width (`w`) must be a multiple of 8 bits.

The cursor is created in black and white according to the following:

- data=0, mask=1: white - data=1, mask=1: black - data=0, mask=0: transparent - data=1, mask=0: inverted color if possible, black if not.

Cursors created with this function must be freed with SDL_FreeCursor().

If you want to have a color cursor, or create your cursor from an SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can hide the cursor and draw your own as part of your game's rendering, but it will be bound to the framerate.

Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which provides twelve readily available system cursors to pick from.

\param data the color value for each pixel of the cursor \param mask the mask value for each pixel of the cursor \param w the width of the cursor \param h the height of the cursor \param hot_x the X-axis location of the upper left corner of the cursor relative to the actual mouse position \param hot_y the Y-axis location of the upper left corner of the cursor relative to the actual mouse position \returns a new cursor with the specified parameters on success or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_FreeCursor \sa SDL_SetCursor \sa SDL_ShowCursor

function SDL_CreateMutex: PSDL_Mutex; cdecl; external SDL_LibName;

Create a new mutex.

All newly-created mutexes begin in the _unlocked_ state.

Calls to SDL_LockMutex() will not return while the mutex is locked by another thread. See SDL_TryLockMutex() to attempt to lock without blocking.

SDL mutexes are reentrant.

\returns the initialized and unlocked mutex or NIL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_CreateRenderer(window: PSDL_Window; index: cint32; flags: cuint32): PSDL_Renderer cdecl; external SDL_LibName;

Create a 2D rendering context for a window.

window The window where rendering is displayed. index The index of the rendering driver to initialize, or -1 to initialize the first one supporting the requested flags. flags ::SDL_RendererFlags.

A valid rendering context or NULL if there was an error.

SDL_CreateSoftwareRenderer() SDL_GetRendererInfo() SDL_DestroyRenderer()

function SDL_CreateRGBSurface(flags: cuint32; width: cint; height: cint; depth: cint; Rmask: cuint32; Gmask: cuint32; Bmask: cuint32; Amask: cuint32): PSDL_Surface; cdecl; external SDL_LibName;

Allocate and free an RGB surface.

If the depth is 4 or 8 bits, an empty palette is allocated for the surface. If the depth is greater than 8 bits, the pixel format is set using the flags '[RGB]mask'.

If the function runs out of memory, it will return NULL.

\param flags The \c flags are obsolete and should be set to 0. \param width The width in pixels of the surface to create. \param height The height in pixels of the surface to create. \param depth The depth in bits of the surface to create. \param Rmask The red mask of the surface to create. \param Gmask The green mask of the surface to create. \param Bmask The blue mask of the surface to create. \param Amask The alpha mask of the surface to create.

function SDL_CreateRGBSurfaceFrom(pixels: Pointer; width: cint; height: cint; depth: cint; pitch: cint; Rmask: cuint32; Gmask: cuint32; Bmask: cuint32; Amask: cuint32): PSDL_Surface; cdecl; external SDL_LibName;
 
function SDL_CreateRGBSurfaceWithFormat(flags: cuint32; width, height, depth: cint; format: cuint32):PSDL_Surface; cdecl; external SDL_LibName;

!!! FIXME for 2.1: why does this ask for depth? Format provides that. *

function SDL_CreateRGBSurfaceWithFormatFrom(pixels: Pointer; width, height, depth, pitch: cint; format: cuint32):PSDL_Surface; cdecl; external SDL_LibName;
 
function SDL_CreateSemaphore(initial_value: cuint32): PSDL_sem; cdecl; external SDL_LibName;

Create a semaphore.

This function creates a new semaphore and initializes it with the provided initial value. Each wait operation on the semaphore will atomically decrement the semaphore value and potentially block if the semaphore value is 0. Each post operation will atomically increment the semaphore value and wake waiting threads and allow them to retry the wait operation.

\param initial_value the starting value of the semaphore \returns a new semaphore or NIL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_CreateShapedWindow(title: PAnsiChar; x: cuint; y: cuint; w: cuint; h: cuint; flags: cuint32): PSDL_Window; cdecl; external SDL_LibName;

Create a window that can be shaped with the specified position, dimensions, and flags.

\param title The title of the window, in UTF-8 encoding. \param x The x position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED. \param y The y position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED. \param w The width of the window. \param h The height of the window. \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with any of the following: SDL_WINDOW_OPENGL, SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_HIDDEN, SDL_WINDOW_RESIZABLE, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_MINIMIZED. SDL_WINDOW_BORDERLESS is always set, and SDL_WINDOW_FULLSCREEN is always unset. \return the window created, or NIL if window creation failed.

\since This function is available since SDL 2.0.0.

\sa SDL_DestroyWindow

function SDL_CreateSoftwareRenderer(surface: PSDL_Surface): PSDL_Renderer cdecl; external SDL_LibName;

Create a 2D software rendering context for a surface.

surface The surface where rendering is done.

A valid rendering context or NULL if there was an error.

SDL_CreateRenderer() SDL_DestroyRenderer()

function SDL_CreateSystemCursor(id: TSDL_SystemCursor): PSDL_Cursor; cdecl; external SDL_LibName;

Create a system cursor.

\param id an SDL_SystemCursor enum value \returns a cursor on success or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_FreeCursor

function SDL_CreateTexture(renderer: PSDL_Renderer; format: cuint32; access: cint32; w: cint32; h: cint32): PSDL_Texture cdecl; external SDL_LibName;

Create a texture for a rendering context.

renderer The renderer. format The format of the texture. access One of the enumerated values in ::SDL_TextureAccess. w The width of the texture in pixels. h The height of the texture in pixels.

The created texture is returned, or 0 if no rendering context was active, the format was unsupported, or the width or height were out of range.

SDL_QueryTexture() SDL_UpdateTexture() SDL_DestroyTexture()

function SDL_CreateTextureFromSurface(renderer: PSDL_Renderer; surface: PSDL_Surface): PSDL_Texture cdecl; external SDL_LibName;

Create a texture from an existing surface.

renderer The renderer. surface The surface containing pixel data used to fill the texture.

The created texture is returned, or 0 on error.

The surface is not modified or freed by this function.

SDL_QueryTexture() SDL_DestroyTexture()

function SDL_CreateThread(fn: TSDL_ThreadFunction; name: PAnsiChar; data: Pointer): PSDL_Thread; cdecl; external SDL_LibName;

Create a thread.

Thread naming is a little complicated: Most systems have very small limits for the string length (BeOS has 32 bytes, Linux currently has 16, Visual C++ 6.0 has nine!), and possibly other arbitrary rules. You'll have to see what happens with your system's debugger. The name should be UTF-8 (but using the naming limits of C identifiers is a better bet). There are no requirements for thread naming conventions, so long as the string is null-terminated UTF-8, but these guidelines are helpful in choosing a name:

http://stackoverflow.com/questions/149932/naming-conventions-for-threads

If a system imposes requirements, SDL will try to munge the string for it (truncate, etc), but the original string contents will be available from SDL_GetThreadName().

function SDL_CreateThreadWithStackSize(fn: TSDL_ThreadFunction; name: PAnsiChar; stacksize: csize_t; data: Pointer): PSDL_Thread; cdecl; external SDL_LibName;

Create a new thread with a specific stack size.

SDL makes an attempt to report `name` to the system, so that debuggers can display it. Not all platforms support this.

Thread naming is a little complicated: Most systems have very small limits for the string length (Haiku has 32 bytes, Linux currently has 16, Visual C++ 6.0 has _nine_!), and possibly other arbitrary rules. You'll have to see what happens with your system's debugger. The name should be UTF-8 (but using the naming limits of C identifiers is a better bet). There are no requirements for thread naming conventions, so long as the string is null-terminated UTF-8, but these guidelines are helpful in choosing a name:

https://stackoverflow.com/questions/149932/naming-conventions-for-threads

If a system imposes requirements, SDL will try to munge the string for it (truncate, etc), but the original string contents will be available from SDL_GetThreadName().

The size (in bytes) of the new stack can be specified. Zero means "use the system default" which might be wildly different between platforms. x86 Linux generally defaults to eight megabytes, an embedded device might be a few kilobytes instead. You generally need to specify a stack that is a multiple of the system's page size (in many cases, this is 4 kilobytes, but check your system documentation).

In SDL 2.1, stack size will be folded into the original SDL_CreateThread function, but for backwards compatibility, this is currently a separate function.

\param fn the SDL_ThreadFunction function to call in the new thread \param name the name of the thread \param stacksize the size, in bytes, to allocate for the new thread stack. \param data a pointer that is passed to `fn` \returns an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.9.

\sa SDL_WaitThread

function SDL_CreateWindow(const title: PAnsiChar; x: cint; y: cint; w: cint; h: cint; flags: TSDL_WindowFlags): PSDL_Window; cdecl; external SDL_LibName;

\brief Create a window with the specified position, dimensions, and flags.

\param title The title of the window, in UTF-8 encoding. \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or ::SDL_WINDOWPOS_UNDEFINED. \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or ::SDL_WINDOWPOS_UNDEFINED. \param w The width of the window, in screen coordinates. \param h The height of the window, in screen coordinates. \param flags The flags for the window, a mask of any of the following: ::SDL_WINDOW_FULLSCREEN, ::SDL_WINDOW_OPENGL, ::SDL_WINDOW_HIDDEN, ::SDL_WINDOW_BORDERLESS, ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_ALLOW_HIGHDPI, ::SDL_WINDOW_VULKAN.

\return The created window, or NULL if window creation failed.

If the window is created with the SDL_WINDOW_ALLOW_HIGHDPI flag, its size in pixels may differ from its size in screen coordinates on platforms with high-DPI support (e.g. iOS and Mac OS X). Use SDL_GetWindowSize() to query the client area's size in screen coordinates, and SDL_GL_GetDrawableSize(), SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to query the drawable size in pixels.

If the window is created with any of the SDL_WINDOW_OPENGL or SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the corresponding UnloadLibrary function is called by SDL_DestroyWindow().

If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail.

\note On non-Apple devices, SDL requires you to either not link to the Vulkan loader or link to a dynamic library version. This limitation may be removed in a future version of SDL.

\sa SDL_DestroyWindow() \sa SDL_GL_LoadLibrary() \sa SDL_Vulkan_LoadLibrary()

function SDL_CreateWindowAndRenderer(width: cint32; height: cint32; window_flags: cuint32; window: PPSDL_Window; renderer: PPSDL_Renderer): cint32 cdecl; external SDL_LibName;

Create a window and default renderer

width The width of the window height The height of the window window_flags The flags used to create the window window A pointer filled with the window, or NULL on error renderer A pointer filled with the renderer, or NULL on error

0 on success, or -1 on error

function SDL_CreateWindowFrom(const data: Pointer): PSDL_Window; cdecl; external SDL_LibName;

Create an SDL window from an existing native window.

data A pointer to driver-dependent window creation data

The id of the window created, or zero if window creation failed.

SDL_DestroyWindow()

procedure SDL_Delay(ms: cuint32); cdecl; external SDL_LibName;

Wait a specified number of milliseconds before returning.

procedure SDL_DelEventWatch(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;

Remove an event watch function added with SDL_AddEventWatch()

procedure SDL_DelHintCallback(const name: PAnsiChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName;

/** \brief Remove a function watching a particular hint

\param name The hint being watched \param callback The function being called when the hint value changes \param userdata A pointer being passed to the callback function /

function SDL_DequeueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len: cuint32): cuint32; cdecl; external SDL_LibName;

Dequeue more audio on non-callback devices.

If you are looking to queue audio for output on a non-callback playback device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always return 0 if you use it with playback devices.

SDL offers two ways to retrieve audio from a capture device: you can either supply a callback that SDL triggers with some frequency as the device records more audio data, (push method), or you can supply no callback, and then SDL will expect you to retrieve data at regular intervals (pull method) with this function.

There are no limits on the amount of data you can queue, short of exhaustion of address space. Data from the device will keep queuing as necessary without further intervention from you. This means you will eventually run out of memory if you aren't routinely dequeueing data.

Capture devices will not queue data when paused; if you are expecting to not need captured audio for some length of time, use SDL_PauseAudioDevice() to stop the capture device from queueing more data. This can be useful during, say, level loading times. When unpaused, capture devices will start queueing data from that point, having flushed any capturable data available while paused.

This function is thread-safe, but dequeueing from the same device from two threads at once does not promise which thread will dequeue data first.

You may not dequeue audio from a device that is using an application-supplied callback; doing so returns an error. You have to use the audio callback, or dequeue audio with this function, but not both.

You should not call SDL_LockAudio() on the device before dequeueing; SDL handles locking internally for this function.

\param dev the device ID from which we will dequeue audio \param data a pointer into where audio data should be copied \param len the number of bytes (not samples!) to which (data) points \returns the number of bytes dequeued, which could be less than requested; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.5.

\sa SDL_ClearQueuedAudio \sa SDL_GetQueuedAudioSize

procedure SDL_DestroyCond(cond: PSDL_Cond); cdecl; external SDL_LibName;

Destroy a condition variable.

\param cond the condition variable to destroy

\since This function is available since SDL 2.0.0.

procedure SDL_DestroyMutex(mutex: PSDL_Mutex); cdecl; external SDL_LibName;

Destroy a mutex created with SDL_CreateMutex().

This function must be called on any mutex that is no longer needed. Failure to destroy a mutex will result in a system memory or resource leak. While it is safe to destroy a mutex that is _unlocked_, it is not safe to attempt to destroy a locked mutex, and may result in undefined behavior depending on the platform.

\param mutex the mutex to destroy

\since This function is available since SDL 2.0.0.

procedure SDL_DestroyRenderer(renderer: PSDL_Renderer) cdecl; external SDL_LibName;

Destroy the rendering context for a window and free associated textures.

SDL_CreateRenderer()

procedure SDL_DestroySemaphore(sem: PSDL_Sem); cdecl; external SDL_LibName;

Destroy a semaphore.

It is not safe to destroy a semaphore if there are threads currently waiting on it.

\param sem the semaphore to destroy

\since This function is available since SDL 2.0.0.

procedure SDL_DestroyTexture(texture: PSDL_Texture) cdecl; external SDL_LibName;

Destroy the specified texture.

SDL_CreateTexture() SDL_CreateTextureFromSurface()

procedure SDL_DestroyWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Destroy a window.

function SDL_DestroyWindowSurface(window: PSDL_Window): cint; cdecl; external SDL_LibName;

Destroy the surface associated with the window.

\param window the window to update \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.28.0.

\sa SDL_GetWindowSurface \sa SDL_HasWindowSurface

procedure SDL_DetachThread(thread:PSDL_Thread); cdecl; external SDL_LibName;

Let a thread clean up on exit without intervention.

A thread may be "detached" to signify that it should not remain until another thread has called SDL_WaitThread() on it. Detaching a thread is useful for long-running threads that nothing needs to synchronize with or further manage. When a detached thread is done, it simply goes away.

There is no way to recover the return code of a detached thread. If you need this, don't detach the thread and instead use SDL_WaitThread().

Once a thread is detached, you should usually assume the SDL_Thread isn't safe to reference again, as it will become invalid immediately upon the detached thread's exit, instead of remaining until someone has called SDL_WaitThread() to finally clean it up. As such, don't detach the same thread more than once.

If a thread has already exited when passed to SDL_DetachThread(), it will stop waiting for a call to SDL_WaitThread() and clean up immediately. It is not safe to detach a thread that might be used with SDL_WaitThread().

You may not call SDL_WaitThread() on a thread that has been detached. Use either that function or this one, but not both, or behavior is undefined.

It is safe to pass NULL to this function; it is a no-op.

\param thread the SDL_Thread pointer that was returned from the SDL_CreateThread() call that started this thread

\since This function is available since SDL 2.0.2.

\sa SDL_CreateThread \sa SDL_WaitThread

procedure SDL_DisableScreenSaver; cdecl; external SDL_LibName;

Prevent the screen from being blanked by a screensaver

SDL_IsScreenSaverEnabled() SDL_EnableScreenSaver()

function SDL_DuplicateSurface(surface: PSDL_Surface): PSDL_Surface; cdecl; external SDL_LibName;

Creates a new surface identical to the existing surface

procedure SDL_EnableScreenSaver; cdecl; external SDL_LibName;

Allow the screen to be blanked by a screensaver

SDL_IsScreenSaverEnabled() SDL_DisableScreenSaver()

function SDL_EncloseFPoints(const points: PSDL_FPoint; count: cint; const clip: PSDL_FRect; result: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;

Calculate a minimal rectangle enclosing a set of points with float precision.

If `clip` is not NIL then only points inside of the clipping rectangle are considered.

\param points an array of SDL_FPoint structures representing points to be enclosed \param count the number of structures in the `points` array \param clip an SDL_FRect used for clipping or NIL to enclose all points \param result an SDL_FRect structure filled in with the minimal enclosing rectangle \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the points were outside of the clipping rectangle.

\since This function is available since SDL 2.0.22.

function SDL_EnclosePoints(const points: PSDL_Point; count: cint; const clip: PSDL_Rect; result: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;

Calculate a minimal rectangle enclosing a set of points

SDL_TRUE if any points were within the clipping rect

function SDL_Error(code: TSDL_ErrorCode): cint; cdecl; external SDL_LibName;

SDL_Error() unconditionally returns -1. *

function SDL_EventState(type_: TSDL_EventType; state: cint32): cuint8 cdecl; external SDL_LibName;

This function allows you to set the state of processing certain events. - If state is set to SDL_IGNORE, that event will be automatically dropped from the event queue and will not event be filtered. - If state is set to SDL_ENABLE, that event will be processed normally. - If state is set to SDL_QUERY, SDL_EventState() will return the current processing state of the specified event.

function SDL_exp(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the value of e (the base of natural logarithms) raised to the power of x.

\since This function is available since SDL 2.0.9.

function SDL_expf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the value of e (the base of natural logarithms) raised to the power of x.

\since This function is available since SDL 2.0.9.

function SDL_fabs(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the absolute value of x.

\since This function is available since SDL 2.0.4.

function SDL_fabsf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the absolute value of x.

\since This function is available since SDL 2.0.8.

function SDL_FillRect(dst: PSDL_Surface; const rect: PSDL_Rect; color: cuint32): cint; cdecl; external SDL_LibName;

Performs a fast fill of the given rectangle with color.

If rect is NULL, the whole surface will be filled with color.

The color should be a pixel of the format used by the surface, and can be generated by the SDL_MapRGB() function.

0 on success, or -1 on error.

function SDL_FillRects(dst: PSDL_Surface; const rects: PSDL_Rect; count: cint; color: cuint32): cint; cdecl; external SDL_LibName;
 
procedure SDL_FilterEvents(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;

Run the filter function on the current event queue, removing any events for which the filter returns 0.

function SDL_FlashWindow(window: PSDL_Window; operation: TSDL_FlashOperation): cint; cdecl; external SDL_LibName;

Request a window to demand attention from the user.

\param window the window to be flashed \param operation the flash operation \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.16.

function SDL_floor(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the largest integral value that is not greater than x.

\since This function is available since SDL 2.0.4.

function SDL_floorf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the largest integral value that is not greater than x.

\since This function is available since SDL 2.0.8.

procedure SDL_FlushEvent(type_: TSDL_EventType) cdecl; external SDL_LibName;

This function clears events from the event queue

procedure SDL_FlushEvents(minType, maxType: TSDL_EventType) cdecl; external SDL_LibName;
 
function SDL_fmod(x, y: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the floating-point remainder of dividing x by y.

\since This function is available since SDL 2.0.8.

function SDL_fmodf(x, y: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the floating-point remainder of dividing x by y.

\since This function is available since SDL 2.0.8.

function SDL_FRectEmpty(const r: PSDL_FRect): Boolean; inline;

Returns true if the rectangle has no area.

function SDL_FRectEquals(const a, b: PSDL_FRect): Boolean; Inline;

Returns true if the two rectangles are equal, using a default epsilon.

\since This function is available since SDL 2.0.22.

function SDL_FRectEqualsEpsilon(const a, b: PSDL_FRect; const epsilon: cfloat): Boolean; Inline;

Returns true if the two rectangles are equal, within some given epsilon.

\since This function is available since SDL 2.0.22.

procedure SDL_free(mem: Pointer); cdecl; external SDL_LibName;

Free memory returned by functions like SDL_GetBasePath(), SDL_GetPrefPath(), etc.

Calling SDL_free() on the same pointer twice is undefined behaviour and may cause your program to crash or behave in unexpected ways.

procedure SDL_FreeAudioStream(stream: PSDL_AudioStream); cdecl; external SDL_LibName;

Free an audio stream

\since This function is available since SDL 2.0.7.

\sa SDL_NewAudioStream \sa SDL_AudioStreamPut \sa SDL_AudioStreamGet \sa SDL_AudioStreamAvailable \sa SDL_AudioStreamFlush \sa SDL_AudioStreamClear

procedure SDL_FreeCursor(cursor: PSDL_Cursor); cdecl; external SDL_LibName;

Free a previously-created cursor.

Use this function to free cursor resources created with SDL_CreateCursor(), SDL_CreateColorCursor() or SDL_CreateSystemCursor().

\param cursor the cursor to free

\since This function is available since SDL 2.0.0.

\sa SDL_CreateColorCursor \sa SDL_CreateCursor \sa SDL_CreateSystemCursor

procedure SDL_FreeFormat(format: PSDL_PixelFormat); cdecl; external SDL_LibName;

Free an SDL_PixelFormat structure allocated by SDL_AllocFormat().

\param format the SDL_PixelFormat structure to free

\since This function is available since SDL 2.0.0.

\sa SDL_AllocFormat

procedure SDL_FreePalette(palette: PSDL_Palette); cdecl; external SDL_LibName;

Free a palette created with SDL_AllocPalette().

\param palette the SDL_Palette structure to be freed

\since This function is available since SDL 2.0.0.

\sa SDL_AllocPalette

procedure SDL_FreeRW(area: PSDL_RWops); cdecl; external SDL_LibName;
 
procedure SDL_FreeSurface(surface: PSDL_Surface); cdecl; external SDL_LibName;
 
procedure SDL_FreeWAV(audio_buf: pcuint8); cdecl; external SDL_LibName;

Free data previously allocated with SDL_LoadWAV() or SDL_LoadWAV_RW().

After a WAVE file has been opened with SDL_LoadWAV() or SDL_LoadWAV_RW() its data can eventually be freed with SDL_FreeWAV(). It is safe to call this function with a NULL pointer.

\param audio_buf a pointer to the buffer created by SDL_LoadWAV() or SDL_LoadWAV_RW()

\since This function is available since SDL 2.0.0.

\sa SDL_LoadWAV \sa SDL_LoadWAV_RW

function SDL_GameControllerAddMapping( mappingString: PAnsiChar ): cint cdecl; external SDL_LibName;

Add or update an existing mapping configuration

1 if mapping is added, 0 if updated, -1 on error

function SDL_GameControllerAddMappingsFromFile(Const FilePath:PAnsiChar):cint32;
 
function SDL_GameControllerAddMappingsFromRW(rw: PSDL_RWops; freerw: cint32):cint32; cdecl; external SDL_LibName;

Load a set of mappings from a seekable SDL data stream (memory or file), filtered by the current SDL_GetPlatform() A community sourced database of controllers is available at https://raw.github.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt

If freerw is non-zero, the stream will be closed after being read.

Returns number of mappings added, -1 on error

procedure SDL_GameControllerClose(gamecontroller: PSDL_GameController) cdecl; external SDL_LibName;

Close a controller previously opened with SDL_GameControllerOpen().

function SDL_GameControllerEventState(state: cint): cint cdecl; external SDL_LibName;

Enable/disable controller event polling.

If controller events are disabled, you must call SDL_GameControllerUpdate() yourself and check the state of the controller when you want controller information.

The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE.

function SDL_GameControllerFromInstanceID(joyid: TSDL_JoystickID): PSDL_GameController; cdecl; external SDL_LibName;

Return the SDL_GameController associated with an instance id.

function SDL_GameControllerFromPlayerIndex(player_index: cint): PSDL_GameController; cdecl; external SDL_LibName;

Get the SDL_GameController associated with a player index.

Please note that the player index is _not_ the device index, nor is it the instance id!

function SDL_GameControllerGetAppleSFSymbolsNameForAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): PAnsiChar; cdecl; external SDL_LibName;

Return the sfSymbolsName for a given axis on a game controller on Apple platforms.

Returns the sfSymbolsName, or NIL if the name can't be found. Do _not_ pass this string to SDL_free().

function SDL_GameControllerGetAppleSFSymbolsNameForButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): PAnsiChar; cdecl; external SDL_LibName;

Return the sfSymbolsName for a given button on a game controller on Apple platforms.

Returns the sfSymbolsName, or NIL if the name can't be found. Do _not_ pass this string to SDL_free().

function SDL_GameControllerGetAttached(gamecontroller: PSDL_GameController): TSDL_Bool cdecl; external SDL_LibName;

Returns SDL_TRUE if the controller has been opened and currently connected, or SDL_FALSE if it has not.

function SDL_GameControllerGetAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): cint16 cdecl; external SDL_LibName;

Get the current state of an axis control on a game controller.

The state is a value ranging from -32768 to 32767.

The axis indices start at index 0.

function SDL_GameControllerGetAxisFromString(pchString: PAnsiChar): TSDL_GameControllerAxis cdecl; external SDL_LibName;

turn this string into a axis mapping

function SDL_GameControllerGetBindForAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): TSDL_GameControllerButtonBind cdecl; external SDL_LibName;

Get the SDL joystick layer binding for this controller button mapping

function SDL_GameControllerGetBindForButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): TSDL_GameControllerButtonBind cdecl; external SDL_LibName;

Get the SDL joystick layer binding for this controller button mapping

function SDL_GameControllerGetButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): cuint8 cdecl; external SDL_LibName;

Get the current state of a button on a game controller.

The button indices start at index 0.

function SDL_GameControllerGetButtonFromString(pchString: PAnsiChar): TSDL_GameControllerButton cdecl; external SDL_LibName;

turn this string into a button mapping

function SDL_GameControllerGetFirmwareVersion(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;

Get the firmware version of an opened controller, if available.

If the firmware version isn't available this function returns 0.

\param gamecontroller the game controller object to query. \return the controller firmware version, or zero if unavailable.

\since This function is available since SDL 2.24.0.

function SDL_GameControllerGetJoystick(gamecontroller: PSDL_GameController): PSDL_Joystick cdecl; external SDL_LibName;

Get the underlying joystick object used by a controller

function SDL_GameControllerGetNumTouchpadFingers(gamecontroller: PSDL_GameController; touchpad: cint): cint; cdecl; external SDL_LibName;

Get the number of supported simultaneous fingers on a touchpad on a game controller.

function SDL_GameControllerGetNumTouchpads(gamecontroller: PSDL_GameController): cint; cdecl; external SDL_LibName;

Get the number of touchpads on a game controller.

function SDL_GameControllerGetPlayerIndex(gamecontroller: PSDL_GameController): cint; cdecl; external SDL_LibName;

Get the player index of an opened game controller. For XInput controllers this returns the XInput user index.

Returns the player index for controller, or -1 if it's not available.

function SDL_GameControllerGetProduct(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;

Get the USB product ID of an opened controller, if available. If the product ID isn't available, this function returns 0.

function SDL_GameControllerGetProductVersion(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;

Get the product version of an opened controller, if available. If the product version isn't available, this function returns 0.

function SDL_GameControllerGetSensorData(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType; data: pcfloat; num_values: cint): cint; cdecl; external SDL_LibName;

Get the current state of a game controller sensor.

The number of values and interpretation of the data is sensor dependent. See sdlsensor.inc for the details for each type of sensor.

function SDL_GameControllerGetSensorDataRate(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType): cfloat; cdecl; external SDL_LibName;

Get the data rate (number of events per second) of a game controller sensor.

Returns the data rate, or 0.0 if the data rate is not available.

function SDL_GameControllerGetSensorDataWithTimestamp( gamecontroller: PSDL_GameController; senstype: TSDL_SensorType; timestamp: pcuint64; data: pcfloat; num_values: cint ): cint; cdecl; external SDL_LibName;

Get the current state of a game controller sensor with the timestamp of the last update.

The number of values and interpretation of the data is sensor dependent. See SDL_sensor.h for the details for each type of sensor.

\param gamecontroller The controller to query \param type The type of sensor to query \param timestamp A pointer filled with the timestamp in microseconds of the current sensor reading if available, or 0 if not \param data A pointer filled with the current sensor state \param num_values The number of values to write to data \return 0 or -1 if an error occurred.

\since This function is available since SDL 2.26.0.

function SDL_GameControllerGetSerial(gamecontroller: PSDL_GameController): PAnsiChar; cdecl; external SDL_LibName;

Get the serial number of an opened controller, if available.

Returns a string containing the serial number of the controller, or NIL if it is not available. Do _not_ free the string with SDL_free().

function SDL_GameControllerGetSteamHandle(gamecontroller: PSDL_GameController): cuint64; cdecl; external SDL_LibName;

Get the Steam Input handle of an opened controller, if available.

Returns an InputHandle_t for the controller that can be used with Steam Input API: https://partner.steamgames.com/doc/api/ISteamInput

\param gamecontroller the game controller object to query. \returns the gamepad handle, or 0 if unavailable.

\since This function is available since SDL 2.30.0.

function SDL_GameControllerGetStringForAxis(axis: TSDL_GameControllerAxis): PAnsiChar cdecl; external SDL_LibName;

turn this axis enum into a string mapping

function SDL_GameControllerGetStringForButton(button: TSDL_GameControllerButton): PAnsiChar cdecl; external SDL_LibName;

turn this button enum into a string mapping

function SDL_GameControllerGetTouchpadFinger( gamecontroller: PSDL_GameController; touchpad, finger: cint; state: pcuint8; x, y, pressure: pcfloat ): cint; cdecl; external SDL_LibName;

Get the current state of a finger on a touchpad on a game controller.

function SDL_GameControllerGetType(gamecontroller: PSDL_GameController): TSDL_GameControllerType; cdecl; external SDL_LibName;

Get the type of this currently opened controller

This is the same name as returned by SDL_GameControllerTypeForIndex(), but it takes a controller identifier instead of the (unstable) device index.

function SDL_GameControllerGetVendor(gamecontroller: PSDL_GameController): cuint16; cdecl; external SDL_LibName;

Get the USB vendor ID of an opened controller, if available.

If the vendor ID isn't available this function returns 0.

\param gamecontroller the game controller object to query. \return the USB vendor ID, or zero if unavailable.

\since This function is available since SDL 2.0.6.

function SDL_GameControllerHasAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a game controller has a given axis.

This merely reports whether the controller's mapping defined this axis, as that is all the information SDL has about the physical device.

function SDL_GameControllerHasButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a game controller has a given button.

This merely reports whether the controller's mapping defined this button, as that is all the information SDL has about the physical device.

function SDL_GameControllerHasLED(gamecontroller: PSDL_GameController): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a game controller has an LED.

function SDL_GameControllerHasRumble(gamecontroller: PSDL_GameController): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a game controller has rumble support.

function SDL_GameControllerHasRumbleTriggers(gamecontroller: PSDL_GameController): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a game controller has rumble support on triggers.

function SDL_GameControllerHasSensor(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType): TSDL_Bool; cdecl; external SDL_LibName;

Return whether a game controller has a particular sensor.

function SDL_GameControllerIsSensorEnabled(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType): TSDL_Bool; cdecl; external SDL_LibName;

Query whether sensor data reporting is enabled for a game controller.

function SDL_GameControllerMapping( gamecontroller: PSDL_GameController ): PAnsiChar cdecl; external SDL_LibName;

Get a mapping string for an open GameController

the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available

function SDL_GameControllerMappingForDeviceIndex(joystick_index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the mapping of a game controller. This can be called before any controllers are opened.

Returns the mapping string. Must be freed with SDL_free(). Returns NIL if no mapping is available.

function SDL_GameControllerMappingForGUID( guid: TSDL_JoystickGUID ): PAnsiChar cdecl; external SDL_LibName;

Get a mapping string for a GUID

the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available

function SDL_GameControllerMappingForIndex(mapping_index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the mapping at a particular index.

Returns the mapping string. Must be freed with SDL_free(). Returns NIL if the index is out of range.

function SDL_GameControllerName(gamecontroller: PSDL_GameController): PAnsiChar cdecl; external SDL_LibName;

Return the name for this currently opened controller

function SDL_GameControllerNameForIndex(joystick_index: cint): PAnsiChar cdecl; external SDL_LibName;

Get the implementation dependent name of a game controller. This can be called before any controllers are opened. If no name can be found, this function returns NULL.

function SDL_GameControllerNumMappings():cint; cdecl; external SDL_LibName;

Get the number of mappings installed.

function SDL_GameControllerOpen(joystick_index: cint): PSDL_GameController cdecl; external SDL_LibName;

Open a game controller for use. The index passed as an argument refers to the N'th game controller on the system. This index is the value which will identify this controller in future controller events.

A controller identifier, or NULL if an error occurred.

function SDL_GameControllerPath(gamecontroller: PSDL_GameController): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation-dependent path for an opened game controller.

This is the same path as returned by SDL_GameControllerNameForIndex(), but it takes a controller identifier instead of the (unstable) device index.

\param gamecontroller a game controller identifier previously returned by SDL_GameControllerOpen() \returns the implementation dependent path for the game controller, or NIL if there is no path or the identifier passed is invalid.

\since This function is available since SDL 2.24.0.

\sa SDL_GameControllerPathForIndex

function SDL_GameControllerPathForIndex(joystick_index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent path for the game controller.

This function can be called before any controllers are opened.

`joystick_index` is the same as the `device_index` passed to SDL_JoystickOpen().

\param joystick_index the device_index of a device, from zero to SDL_NumJoysticks()-1 \returns the implementation-dependent path for the game controller, or NIL if there is no path or the index is invalid.

\since This function is available since SDL 2.24.0.

\sa SDL_GameControllerPath

function SDL_GameControllerRumble( gamecontroller: PSDL_GameController; low_frequency_rumble, high_frequency_rumble: cuint16; duration_ms: cuint32 ): cint; cdecl; external SDL_LibName;

Start a rumble effect on a game controller.

Each call to this function cancels any previous rumble effect, and calling it with 0 intensity stops any rumbling.

Returns 0, or -1 if rumble isn't supported on this controller.

function SDL_GameControllerRumbleTriggers( gamecontroller: PSDL_GameController; left_rumble, right_rumble: cuint16; duration_ms: cuint32 ): cint; cdecl; external SDL_LibName;

Start a rumble effect in the game controller's triggers.

Each call to this function cancels any previous trigger rumble effect, and calling it with 0 intensity stops any rumbling.

Note that this is rumbling of the _triggers_ and not the game controller as a whole. This is currently only supported on Xbox One controllers. If you want the (more common) whole-controller rumble, use SDL_GameControllerRumble() instead.

Returns 0, or -1 if trigger rumble isn't supported on this controller

function SDL_GameControllerSendEffect(gamecontroller: PSDL_GameController; data: Pointer; size: cint): cint; cdecl; external SDL_LibName;

Send a controller-specific effect packet.

Returns 0, or -1 if this controller or driver does not support effect packets.

function SDL_GameControllerSetLED(gamecontroller: PSDL_GameController; red, green, blue: cuint8): cint; cdecl; external SDL_LibName;

Update a game controller's LED color.

Returns 0, or -1 if this controller does not have a modifiable LED.

procedure SDL_GameControllerSetPlayerIndex(gamecontroller: PSDL_GameController; player_index: cint); cdecl; external SDL_LibName;

Set the player index of an opened game controller.

function SDL_GameControllerSetSensorEnabled(gamecontroller: PSDL_GameController; senstype: TSDL_SensorType; enabled: TSDL_bool): cint; cdecl; external SDL_LibName;

Set whether data reporting for a game controller sensor is enabled.

function SDL_GameControllerTypeForIndex(joystick_index: cint): TSDL_GameControllerType; cdecl; external SDL_LibName;

Get the type of a game controller. This can be called before any controllers are opened.

procedure SDL_GameControllerUpdate() cdecl; external SDL_LibName;

Update the current state of the open game controllers.

This is called automatically by the event loop if any game controller events are enabled.

function SDL_GetAudioDeviceName(index: cint; iscapture: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the human-readable name of a specific audio device.

This function is only valid after successfully initializing the audio subsystem. The values returned by this function reflect the latest call to SDL_GetNumAudioDevices(); re-call that function to redetect available hardware.

The string returned by this function is UTF-8 encoded, read-only, and managed internally. You are not to free it. If you need to keep the string for any length of time, you should make your own copy of it, as it will be invalid next time any of several other SDL functions are called.

\param index the index of the audio device; valid values range from 0 to SDL_GetNumAudioDevices() - 1 \param iscapture non-zero to query the list of recording devices, zero to query the list of output devices. \returns the name of the audio device at the requested index, or NULL on error.

\since This function is available since SDL 2.0.0.

\sa SDL_GetNumAudioDevices \sa SDL_GetDefaultAudioInfo

function SDL_GetAudioDeviceSpec(index: cint; iscapture: cint; spec: PSDL_AudioSpec): cint; cdecl; external SDL_LibName;

Get the preferred audio format of a specific audio device.

This function is only valid after a successfully initializing the audio subsystem. The values returned by this function reflect the latest call to SDL_GetNumAudioDevices(); re-call that function to redetect available hardware.

`spec` will be filled with the sample rate, sample format, and channel count.

\param index the index of the audio device; valid values range from 0 to SDL_GetNumAudioDevices() - 1 \param iscapture non-zero to query the list of recording devices, zero to query the list of output devices. \param spec The SDL_AudioSpec to be initialized by this function. \returns 0 on success, nonzero on error

\since This function is available since SDL 2.0.16.

\sa SDL_GetNumAudioDevices \sa SDL_GetDefaultAudioInfo

function SDL_GetAudioDeviceStatus(dev: TSDL_AudioDeviceID): TSDL_AudioStatus; cdecl; external SDL_LibName;

Use this function to get the current audio state of an audio device.

\param dev the ID of an audio device previously opened with SDL_OpenAudioDevice() \returns the SDL_AudioStatus of the specified audio device.

\since This function is available since SDL 2.0.0.

\sa SDL_PauseAudioDevice

function SDL_GetAudioDriver(index: cint): PAnsiChar; cdecl; external SDL_LibName;

Use this function to get the name of a built in audio driver.

The list of audio drivers is given in the order that they are normally initialized by default; the drivers that seem more reasonable to choose first (as far as the SDL developers believe) are earlier in the list.

The names of drivers are all simple, low-ASCII identifiers, like "alsa", "coreaudio" or "xaudio2". These never have Unicode characters, and are not meant to be proper names.

\param index the index of the audio driver; the value ranges from 0 to SDL_GetNumAudioDrivers() - 1 \returns the name of the audio driver at the requested index, or NULL if an invalid index was specified.

\since This function is available since SDL 2.0.0.

\sa SDL_GetNumAudioDrivers

function SDL_GetAudioStatus: TSDL_AudioStatus; cdecl; external SDL_LibName;

This function is a legacy means of querying the audio device.

New programs might want to use SDL_GetAudioDeviceStatus() instead. This function is equivalent to calling...

```c SDL_GetAudioDeviceStatus(1); ```

...and is only useful if you used the legacy SDL_OpenAudio() function.

\returns the SDL_AudioStatus of the audio device opened by SDL_OpenAudio().

\since This function is available since SDL 2.0.0.

\sa SDL_GetAudioDeviceStatus

function SDL_GetBasePath(): PAnsiChar; cdecl; external SDL_LibName;

Get the directory where the application was run from.

This is not necessarily a fast call, so you should call this once near startup and save the string if you need it.

**Mac OS X and iOS Specific Functionality**: If the application is in a ".app" bundle, this function returns the Resource directory (e.g. MyApp.app/Contents/Resources/). This behaviour can be overridden by adding a property to the Info.plist file. Adding a string key with the name SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the behaviour.

Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an application in /Applications/SDLApp/MyApp.app):

- `resource`: bundle resource directory (the default). For example: `/Applications/SDLApp/MyApp.app/Contents/Resources` - `bundle`: the Bundle directory. For example: `/Applications/SDLApp/MyApp.app/` - `parent`: the containing directory of the bundle. For example: `/Applications/SDLApp/`

The returned path is guaranteed to end with a path separator ('\' on Windows, '/' on most other platforms).

The pointer returned is owned by the caller. Please call SDL_free() on the pointer when done with it.

\returns an absolute path in UTF-8 encoding to the application data directory. nil will be returned on error or when the platform doesn't implement this functionality, call SDL_GetError() for more information.

\since This function is available since SDL 2.0.1.

\sa SDL_GetPrefPath

function SDL_GetClipboardText(): PAnsiChar; cdecl; external SDL_LibName;

Get UTF-8 text from the clipboard, which must be freed with SDL_free().

This functions returns empty string if there was not enough memory left for a copy of the clipboard's content.

\returns the clipboard text on success or an empty string on failure; call SDL_GetError() for more information. Caller must call SDL_free() on the returned pointer when done with it (even if there was an error).

\since This function is available since SDL 2.0.0.

\sa SDL_HasClipboardText \sa SDL_SetClipboardText

procedure SDL_GetClipRect(surface: PSDL_Surface; rect: PSDL_Rect); cdecl; external SDL_LibName;

Gets the clipping rectangle for the destination surface in a blit.

rect must be a pointer to a valid rectangle which will be filled with the correct values.

function SDL_GetClosestDisplayMode(displayIndex: cint; const mode: PSDL_DisplayMode; closest: PSDL_DisplayMode): PSDL_DisplayMode; cdecl; external SDL_LibName;

Get the closest match to the requested display mode.

mode The desired display mode closest A pointer to a display mode to be filled in with the closest match of the available display modes.

The passed in value closest, or nil if no matching video mode was available.

The available display modes are scanned, and closest is filled in with the closest mode matching the requested mode and returned. The mode format and refresh_rate default to the desktop mode if they are 0. The modes are scanned with size being first priority, format being second priority, and finally checking the refresh_rate. If all the available modes are too small, then nil is returned.

SDL_GetNumDisplayModes() SDL_GetDisplayMode()

function SDL_GetColorKey(surface: PSDL_Surface; key: pcuint32): cint; cdecl; external SDL_LibName;

Gets the color key (transparent pixel) in a blittable surface.

surface The surface to update key A pointer filled in with the transparent pixel in the native surface format

0 on success, or -1 if the surface is not valid or colorkey is not enabled.

function SDL_GetCPUCacheLineSize(): cint; cdecl; external SDL_LibName;

This function returns the L1 cache line size of the CPU.

This is useful for determining multi-threaded structure padding or SIMD prefetch sizes.

function SDL_GetCPUCount(): cint; cdecl; external SDL_LibName;

This function returns the number of CPU cores available.

function SDL_GetCurrentAudioDriver: PAnsiChar; cdecl; external SDL_LibName;

Get the name of the current audio driver.

The returned string points to internal static memory and thus never becomes invalid, even if you quit the audio subsystem and initialize a new driver (although such a case would return a different static string from another call to this function, of course). As such, you should not modify or free the returned string.

\returns the name of the current audio driver or NULL if no driver has been initialized.

\since This function is available since SDL 2.0.0.

\sa SDL_AudioInit

function SDL_GetCurrentDisplayMode(displayIndex: cint; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;

Fill in information about the current display mode.

function SDL_GetCurrentVideoDriver: PAnsiChar; cdecl; external SDL_LibName;

Returns the name of the currently initialized video driver.

The name of the current video driver or nil if no driver has been initialized

SDL_GetNumVideoDrivers() SDL_GetVideoDriver()

function SDL_GetCursor: PSDL_Cursor; cdecl; external SDL_LibName;

Get the active cursor.

This function returns a pointer to the current cursor which is owned by the library. It is not necessary to free the cursor with SDL_FreeCursor().

\returns the active cursor or NULL if there is no mouse.

\since This function is available since SDL 2.0.0.

\sa SDL_SetCursor

function SDL_GetDefaultAudioInfo(name: PPAnsiChar; spec: PSDL_AudioSpec; iscapture: cint): cint; cdecl; external SDL_LibName;

Get the name and preferred format of the default audio device.

Some (but not all!) platforms have an isolated mechanism to get information about the "default" device. This can actually be a completely different device that's not in the list you get from SDL_GetAudioDeviceSpec(). It can even be a network address! (This is discussed in SDL_OpenAudioDevice().)

As a result, this call is not guaranteed to be performant, as it can query the sound server directly every time, unlike the other query functions. You should call this function sparingly!

`spec` will be filled with the sample rate, sample format, and channel count, if a default device exists on the system. If `name` is provided, will be filled with either a dynamically-allocated UTF-8 string or nil.

\param name A pointer to be filled with the name of the default device (can be nil). Please call SDL_free() when you are done with this pointer! \param spec The SDL_AudioSpec to be initialized by this function. \param iscapture non-zero to query the default recording device, zero to query the default output device. \returns 0 on success, nonzero on error

\since This function is available since SDL 2.24.0.

\sa SDL_GetAudioDeviceName \sa SDL_GetAudioDeviceSpec \sa SDL_OpenAudioDevice

function SDL_GetDefaultCursor: PSDL_Cursor; cdecl; external SDL_LibName;

Get the default cursor.

\returns the default cursor on success or NULL on failure.

\since This function is available since SDL 2.0.0.

\sa SDL_CreateSystemCursor

function SDL_GetDesktopDisplayMode(displayIndex: cint; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;

Fill in information about the desktop display mode.

function SDL_GetDisplayBounds(displayIndex: cint; rect: PSDL_Rect): cint; cdecl; external SDL_LibName;

Get the desktop area represented by a display, with the primary display located at 0,0

0 on success, or -1 if the index is out of range.

SDL_GetNumVideoDisplays()

function SDL_GetDisplayDPI(displayIndex: cint; ddpi, hdpi, vdpi: pcfloat): cint; cdecl; external SDL_LibName;

\brief Get the dots/pixels-per-inch for a display

\note Diagonal, horizontal and vertical DPI can all be optionally returned if the parameter is non-NULL.

\return 0 on success, or -1 if no DPI information is available or the index is out of range.

\sa SDL_GetNumVideoDisplays()

function SDL_GetDisplayMode(displayIndex: cint; modeIndex: cint; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;

Fill in information about a specific display mode.

The display modes are sorted in this priority: bits per pixel -> more colors to fewer colors width -> largest to smallest height -> largest to smallest refresh rate -> highest to lowest

SDL_GetNumDisplayModes()

function SDL_GetDisplayName(displayIndex: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the name of a display in UTF-8 encoding

The name of a display, or nil for an invalid display index.

SDL_GetNumVideoDisplays()

function SDL_GetDisplayOrientation(displayIndex: cint): TSDL_DisplayOrientation; cdecl; external SDL_LibName;

\brief Get the orientation of a display

\return The orientation of the display, or SDL_ORIENTATION_UNKNOWN if it isn't available.

\sa SDL_GetNumVideoDisplays()

function SDL_GetDisplayUsableBounds(displayIndex: cint; rect: PSDL_Rect): cint; cdecl; external SDL_LibName;

\brief Get the usable desktop area represented by a display, with the primary display located at 0,0

This is the same area as SDL_GetDisplayBounds() reports, but with portions reserved by the system removed. For example, on Mac OS X, this subtracts the area occupied by the menu bar and dock.

Setting a window to be fullscreen generally bypasses these unusable areas, so these are good guidelines for the maximum space available to a non-fullscreen window.

\return 0 on success, or -1 if the index is out of range.

\sa SDL_GetDisplayBounds() \sa SDL_GetNumVideoDisplays()

function SDL_GetError: PAnsiChar; cdecl; external SDL_LibName;

\brief Get the last error message that was set

SDL API functions may set error messages and then succeed, so you should only use the error value if a function fails.

This returns a pointer to a static buffer for convenience and should not be called by multiple threads simultaneously.

\return a pointer to the last error message that was set

function SDL_GetErrorMsg(const errstr: PAnsiChar; maxlen: cint): PAnsiChar; cdecl; external SDL_LibName;

\brief Get the last error message that was set for the current thread

SDL API functions may set error messages and then succeed, so you should only use the error value if a function fails.

\param errstr A buffer to fill with the last error message that was set for the current thread \param maxlen The size of the buffer pointed to by the errstr parameter

\return errstr

function SDL_GetEventFilter(var filter: PSDL_EventFilter; var userdata: PPointer): TSDL_Bool cdecl; external SDL_LibName;

Return the current event filter - can be used to "chain" filters. If there is no event filter set, this function returns SDL_FALSE.

function SDL_GetEventState(type_: TSDL_EventType): cuint8;
 
function SDL_GetGlobalMouseState(x, y: pcint32): cuint32; cdecl; external SDL_LibName;

Get the current state of the mouse in relation to the desktop.

This works similarly to SDL_GetMouseState(), but the coordinates will be reported relative to the top-left of the desktop. This can be useful if you need to track the mouse outside of a specific window and SDL_CaptureMouse() doesn't fit your needs. For example, it could be useful if you need to track the mouse while dragging a window, where coordinates relative to a window might not be in sync at all times.

Note: SDL_GetMouseState() returns the mouse position as SDL understands it from the last pump of the event queue. This function, however, queries the OS for the current mouse position, and as such, might be a slightly less efficient function. Unless you know what you're doing and have a good reason to use this function, you probably want SDL_GetMouseState() instead.

\param x filled in with the current X coord relative to the desktop; can be NULL \param y filled in with the current Y coord relative to the desktop; can be NULL \returns the current button state as a bitmask which can be tested using the SDL_BUTTON(X) macros.

\since This function is available since SDL 2.0.4.

\sa SDL_CaptureMouse

function SDL_GetGrabbedWindow(): PSDL_Window; cdecl; external SDL_LibName;

\brief Get the window that currently has an input grab enabled.

\return This returns the window if input is grabbed, and NULL otherwise.

\sa SDL_SetWindowGrab()

function SDL_GetHint(const name: PAnsiChar): PAnsiChar; cdecl; external SDL_LibName;

/** \brief Get a hint

\return The string value of a hint variable. /

function SDL_GetHintBoolean(const name: PAnsiChar; default_value: TSDL_Bool): TSDL_Bool; cdecl; external SDL_LibName;

/** \brief Get a hint

\return The boolean value of a hint variable. /

procedure SDL_GetJoystickGUIDInfo(guid: TSDL_JoystickGUID; vendor: pcuint16; product: pcuint16; version: pcuint16; crc16: pcuint16); cdecl; external SDL_LibName;

Get the device information encoded in a SDL_JoystickGUID structure

\param guid the SDL_JoystickGUID you wish to get info about \param vendor A pointer filled in with the device VID, or 0 if not available \param product A pointer filled in with the device PID, or 0 if not available \param version A pointer filled in with the device version, or 0 if not available \param crc16 A pointer filled in with a CRC used to distinguish different products with the same VID/PID, or 0 if not available

\since This function is available since SDL 2.26.0.

\sa SDL_JoystickGetDeviceGUID

function SDL_GetKeyboardFocus: PSDL_Window; cdecl; external SDL_LibName;

Query the window which currently has keyboard focus.

\returns the window with keyboard focus.

\since This function is available since SDL 2.0.0.

function SDL_GetKeyboardState(numkeys: pcint): pcuint8; cdecl; external SDL_LibName;

Get a snapshot of the current state of the keyboard.

The pointer returned is a pointer to an internal SDL array. It will be valid for the whole lifetime of the application and should not be freed by the caller.

A array element with a value of 1 means that the key is pressed and a value of 0 means that it is not. Indexes into this array are obtained by using SDL_Scancode values.

Use SDL_PumpEvents() to update the state array.

This function gives you the current state after all events have been processed, so if a key or button has been pressed and released before you process events, then the pressed state will never show up in the SDL_GetKeyboardState() calls.

Note: This function doesn't take into account whether shift has been pressed or not.

\param numkeys if non-nil, receives the length of the returned array \returns a pointer to an array of key states.

\since This function is available since SDL 2.0.0.

\sa SDL_PumpEvents \sa SDL_ResetKeyboard

function SDL_GetKeyFromName(name: PAnsiChar): TSDL_Keycode; cdecl; external SDL_LibName;

Get a key code from a human-readable name.

\param name the human-readable key name \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_GetKeyFromScancode \sa SDL_GetKeyName \sa SDL_GetScancodeFromName

function SDL_GetKeyFromScancode(scancode: TSDL_Scancode): TSDL_Keycode; cdecl; external SDL_LibName;

Get the key code corresponding to the given scancode according to the current keyboard layout.

See SDL_Keycode for details.

\param scancode the desired SDL_Scancode to query \returns the SDL_Keycode that corresponds to the given SDL_Scancode.

\since This function is available since SDL 2.0.0.

\sa SDL_GetKeyName \sa SDL_GetScancodeFromKey

function SDL_GetKeyName(key: TSDL_Keycode): PAnsiChar; cdecl; external SDL_LibName;

Get a human-readable name for a key.

See SDL_Scancode and SDL_Keycode for details.

\param key the desired SDL_Keycode to query \returns a pointer to a UTF-8 string that stays valid at least until the next call to this function. If you need it around any longer, you must copy it. If the key doesn't have a name, this function returns an empty string ("").

\since This function is available since SDL 2.0.0.

\sa SDL_GetKeyFromName \sa SDL_GetKeyFromScancode \sa SDL_GetScancodeFromKey

procedure SDL_GetMemoryFunctions( malloc_func: PSDL_malloc_func; calloc_func: PSDL_calloc_func; realloc_func: PSDL_realloc_func; free_func: PSDL_free_func ); cdecl; external SDL_LibName;

Get the current set of SDL memory functions

\since This function is available since SDL 2.0.7.

function SDL_GetModState: TSDL_Keymod; cdecl; external SDL_LibName;

Get the current key modifier state for the keyboard.

\returns an OR'd combination of the modifier keys for the keyboard. See SDL_Keymod for details.

\since This function is available since SDL 2.0.0.

\sa SDL_GetKeyboardState \sa SDL_SetModState

function SDL_GetMouseFocus: PSDL_Window; cdecl; external SDL_LibName;

Get the window which currently has mouse focus.

\returns the window with mouse focus.

\since This function is available since SDL 2.0.0.

function SDL_GetMouseState(x: pcint; y: pcint): cuint32; cdecl; external SDL_LibName;

Retrieve the current state of the mouse.

The current button state is returned as a button bitmask, which can be tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the left, 2 for middle, 3 for the right button), and `x` and `y` are set to the mouse cursor position relative to the focus window. You can pass NULL for either `x` or `y`.

\param x the x coordinate of the mouse cursor position relative to the focus window \param y the y coordinate of the mouse cursor position relative to the focus window \returns a 32-bit button bitmask of the current button state.

\since This function is available since SDL 2.0.0.

\sa SDL_GetGlobalMouseState \sa SDL_GetRelativeMouseState \sa SDL_PumpEvents

function SDL_GetNumAllocations(): cint; cdecl; external SDL_LibName;

Get the number of outstanding (unfreed) allocations

\since This function is available since SDL 2.0.7.

function SDL_GetNumAudioDevices(iscapture: cint): cint; cdecl; external SDL_LibName;

Get the number of built-in audio devices.

This function is only valid after successfully initializing the audio subsystem.

Note that audio capture support is not implemented as of SDL 2.0.4, so the `iscapture` parameter is for future expansion and should always be zero for now.

This function will return -1 if an explicit list of devices can't be determined. Returning -1 is not an error. For example, if SDL is set up to talk to a remote audio server, it can't list every one available on the Internet, but it will still allow a specific host to be specified in SDL_OpenAudioDevice().

In many common cases, when this function returns a value <= 0, it can still successfully open the default device (NULL for first argument of SDL_OpenAudioDevice()).

This function may trigger a complete redetect of available hardware. It should not be called for each iteration of a loop, but rather once at the start of a loop:

```c // Don't do this: for (int i = 0; i < SDL_GetNumAudioDevices(0); i++)

// do this instead: const int count = SDL_GetNumAudioDevices(0); for (int i = 0; i < count; ++i) do_something_here(); ```

\param iscapture zero to request playback devices, non-zero to request recording devices \returns the number of available devices exposed by the current driver or -1 if an explicit list of devices can't be determined. A return value of -1 does not necessarily mean an error condition.

\since This function is available since SDL 2.0.0.

\sa SDL_GetAudioDeviceName \sa SDL_OpenAudioDevice

function SDL_GetNumAudioDrivers: cint; cdecl; external SDL_LibName;

Use this function to get the number of built-in audio drivers.

This function returns a hardcoded number. This never returns a negative value; if there are no drivers compiled into this build of SDL, this function returns zero. The presence of a driver in this list does not mean it will function, it just means SDL is capable of interacting with that interface. For example, a build of SDL might have esound support, but if there's no esound server available, SDL's esound driver would fail if used.

By default, SDL tries all drivers, in its preferred order, until one is found to be usable.

\returns the number of built-in audio drivers.

\since This function is available since SDL 2.0.0.

\sa SDL_GetAudioDriver

function SDL_GetNumDisplayModes(displayIndex: cint): cint; cdecl; external SDL_LibName;

Returns the number of available display modes.

SDL_GetDisplayMode()

function SDL_GetNumRenderDrivers: cint32 cdecl; external SDL_LibName;

Get the number of 2D rendering drivers available for the current display.

A render driver is a set of code that handles rendering and texture management on a particular display. Normally there is only one, but some drivers may have several available with different capabilities.

SDL_GetRenderDriverInfo() SDL_CreateRenderer()

function SDL_GetNumTouchDevices(): cint; cdecl; external SDL_LibName;

Get the number of registered touch devices.

function SDL_GetNumTouchFingers(touchID: TSDL_TouchID): cint; cdecl; external SDL_LibName;

Get the number of active fingers for a given touch device.

function SDL_GetNumVideoDisplays: cint; cdecl; external SDL_LibName;

Returns the number of available video displays.

SDL_GetDisplayBounds()

function SDL_GetNumVideoDrivers: cint; cdecl; external SDL_LibName;

Get the number of video drivers compiled into SDL

SDL_GetVideoDriver()

procedure SDL_GetOriginalMemoryFunctions( malloc_func: PSDL_malloc_func; calloc_func: PSDL_calloc_func; realloc_func: PSDL_realloc_func; free_func: PSDL_free_func ); cdecl; external SDL_LibName;

Get the original set of SDL memory functions

\since This function is available since SDL 2.24.0.

function SDL_GetPerformanceCounter: cuint64; cdecl; external SDL_LibName;

Get the current value of the high resolution counter

function SDL_GetPerformanceFrequency: cuint64; cdecl; external SDL_LibName;

Get the count per second of the high resolution counter

function SDL_GetPixelFormatName(format: cuint32): PAnsiChar; cdecl; external SDL_LibName;

Get the human readable name of a pixel format.

\param format the pixel format to query \returns the human readable name of the specified pixel format or `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized.

\since This function is available since SDL 2.0.0.

function SDL_GetPlatform: PAnsiChar; cdecl; external SDL_LibName;

Gets the name of the platform.

function SDL_GetPointDisplayIndex(const point: PSDL_Point): cint; cdecl; external SDL_LibName;

Get the index of the display containing a point

\param point the point to query \returns the index of the display containing the point or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.24.0.

\sa SDL_GetDisplayBounds \sa SDL_GetNumVideoDisplays

function SDL_GetPowerInfo(secs: pcint; pct: pcint): TSDL_PowerState; cdecl; external SDL_LibName;

\brief Get the current power supply details.

\param secs Seconds of battery life left. You can pass a NULL here if you don't care. Will return -1 if we can't determine a value, or we're not running on a battery.

\param pct Percentage of battery life left, between 0 and 100. You can pass a NULL here if you don't care. Will return -1 if we can't determine a value, or we're not running on a battery.

\return The state of the battery (if any).

function SDL_GetPreferredLocales(): PSDL_Locale; cdecl; external SDL_LibName;

\brief Report the user's preferred locale.

This returns an array of SDL_Locale structs, the final item zeroed out. When the caller is done with this array, it should call SDL_free() on the returned value; all the memory involved is allocated in a single block, so a single SDL_free() will suffice.

Returned language strings are in the format xx, where 'xx' is an ISO-639 language specifier (such as 'en' for English, 'de' for German, etc). Country strings are in the format YY, where 'YY' is an ISO-3166 country code (such as "US" for the United States, 'CA' for Canada, etc). Country might be NULL if there's no specific guidance on them (so you might get ( 'en', 'US' ) for American English, but ( 'en', NIL ) means "English language, generically"). Language strings are never NIL, except to terminate the array.

Please note that not all of these strings are 2 characters; some are three or more.

The returned list of locales are in the order of the user's preference. For example, a German citizen that is fluent in US English and knows enough Japanese to navigate around Tokyo might have a list like: [ 'de', 'en_US', 'jp', NIL ]. Someone from England might prefer British English (where "color" is spelled "colour", etc), but will settle for anything like it: [ 'en_GB', 'en', NIL ].

This function returns NIL on error, including when the platform does not supply this information at all.

This might be a "slow" call that has to query the operating system. It's best to ask for this once and save the results. However, this list can change, usually because the user has changed a system preference outside of your program; SDL will send an SDL_LOCALECHANGED event in this case, if possible, and you can call this function again to get an updated copy of preferred locales.

\return array of locales, terminated with a locale with a NIL language field. Will return NIL on error.

function SDL_GetPrefPath(org: PAnsiChar; app: PAnsiChar): PAnsiChar; cdecl; external SDL_LibName;

Get the user-and-app-specific path where files can be written.

Get the "pref dir". This is meant to be where users can write personal files (preferences and save games, etc) that are specific to your application. This directory is unique per user, per application.

This function will decide the appropriate location in the native filesystem, create the directory if necessary, and return a string of the absolute path to the directory in UTF-8 encoding.

On Windows, the string might look like:

`C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\`

On Linux, the string might look like:

`/home/bob/.local/share/My Program Name/`

On Mac OS X, the string might look like:

`/Users/bob/Library/Application Support/My Program Name/`

You should assume the path returned by this function is the only safe place to write files (and that SDL_GetBasePath(), while it might be writable, or even the parent of the returned path, isn't where you should be writing things).

Both the org and app strings may become part of a directory name, so please follow these rules:

- Try to use the same org string (_including case-sensitivity_) for all your applications that use this function. - Always use a unique app string for each one, and make sure it never changes for an app once you've decided on it. - Unicode characters are legal, as long as it's UTF-8 encoded, but... - ...only use letters, numbers, and spaces. Avoid punctuation like "Game Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient.

The returned path is guaranteed to end with a path separator ('\' on Windows, '/' on most other platforms).

The pointer returned is owned by the caller. Please call SDL_free() on the pointer when done with it.

\param org the name of your organization \param app the name of your application \returns a UTF-8 string of the user directory in platform-dependent notation. nil if there's a problem (creating directory failed, etc.).

\since This function is available since SDL 2.0.1.

\sa SDL_GetBasePath

function SDL_GetPrimarySelectionText(): PAnsiChar; cdecl; external SDL_LibName;

Get UTF-8 text from the primary selection, which must be freed with SDL_free().

This functions returns empty string if there was not enough memory left for a copy of the primary selection's content.

\returns the primary selection text on success or an empty string on failure; call SDL_GetError() for more information. Caller must call SDL_free() on the returned pointer when done with it (even if there was an error).

\since This function is available since SDL 2.26.1.

\sa SDL_HasPrimarySelectionText \sa SDL_SetPrimarySelectionText

function SDL_GetQueuedAudioSize(dev: TSDL_AudioDeviceID): cuint32; cdecl; external SDL_LibName;

Get the number of bytes of still-queued audio.

For playback devices: this is the number of bytes that have been queued for playback with SDL_QueueAudio(), but have not yet been sent to the hardware.

Once we've sent it to the hardware, this function can not decide the exact byte boundary of what has been played. It's possible that we just gave the hardware several kilobytes right before you called this function, but it hasn't played any of it yet, or maybe half of it, etc.

For capture devices, this is the number of bytes that have been captured by the device and are waiting for you to dequeue. This number may grow at any time, so this only informs of the lower-bound of available data.

You may not queue or dequeue audio on a device that is using an application-supplied callback; calling this function on such a device always returns 0. You have to use the audio callback or queue audio, but not both.

You should not call SDL_LockAudio() on the device before querying; SDL handles locking internally for this function.

\param dev the device ID of which we will query queued audio size \returns the number of bytes (not samples!) of queued audio.

\since This function is available since SDL 2.0.4.

\sa SDL_ClearQueuedAudio \sa SDL_QueueAudio \sa SDL_DequeueAudio

function SDL_GetRectDisplayIndex(const rect: PSDL_Rect): cint; cdecl; external SDL_LibName;

Get the index of the display primarily containing a rect

\param rect the rect to query \returns the index of the display entirely containing the rect or closest to the center of the rect on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.24.0.

\sa SDL_GetDisplayBounds \sa SDL_GetNumVideoDisplays

function SDL_GetRelativeMouseMode: TSDL_Bool; cdecl; external SDL_LibName;

Query whether relative mouse mode is enabled.

\returns SDL_TRUE if relative mode is enabled or SDL_FALSE otherwise.

\since This function is available since SDL 2.0.0.

\sa SDL_SetRelativeMouseMode

function SDL_GetRelativeMouseState(x: pcint; y: pcint): cuint32; cdecl; external SDL_LibName;

Retrieve the relative state of the mouse.

The current button state is returned as a button bitmask, which can be tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the left, 2 for middle, 3 for the right button), and `x` and `y` are set to the mouse deltas since the last call to SDL_GetRelativeMouseState() or since event initialization. You can pass NULL for either `x` or `y`.

\param x a pointer filled with the last recorded x coordinate of the mouse \param y a pointer filled with the last recorded y coordinate of the mouse \returns a 32-bit button bitmask of the relative button state.

\since This function is available since SDL 2.0.0.

\sa SDL_GetMouseState

function SDL_GetRenderDrawBlendMode(renderer: PSDL_Renderer; blendMode: PSDL_BlendMode): cint32 cdecl; external SDL_LibName;

Get the blend mode used for drawing operations.

renderer The renderer from which blend mode should be queried. blendMode A pointer filled in with the current blend mode.

0 on success, or -1 on error

SDL_SetRenderDrawBlendMode()

function SDL_GetRenderDrawColor(renderer: PSDL_Renderer; r: pcuint8; g: pcuint8; b: pcuint8; a: pcuint8): cint32 cdecl; external SDL_LibName;

Get the color used for drawing operations (Rect, Line and Clear).

renderer The renderer from which drawing color should be queried. r A pointer to the red value used to draw on the rendering target. g A pointer to the green value used to draw on the rendering target. b A pointer to the blue value used to draw on the rendering target. a A pointer to the alpha value used to draw on the rendering target, usually SDL_ALPHA_OPAQUE (255).

0 on success, or -1 on error

function SDL_GetRenderDriverInfo(index: cint32; info: PSDL_RendererInfo): cint32 cdecl; external SDL_LibName;

Get information about a specific 2D rendering driver for the current display.

index The index of the driver to query information about. info A pointer to an SDL_RendererInfo struct to be filled with information on the rendering driver.

0 on success, -1 if the index was out of range.

SDL_CreateRenderer()

function SDL_GetRenderer(window: PSDL_Window): PSDL_Renderer cdecl; external SDL_LibName;

Get the renderer associated with a window.

function SDL_GetRendererInfo(renderer: PSDL_Renderer; info: PSDL_RendererInfo): cint32 cdecl; external SDL_LibName;

Get information about a rendering context.

function SDL_GetRendererOutputSize(renderer: PSDL_Renderer; w: pcint; h: pcint): cint32 cdecl; external SDL_LibName;

Get the output size of a rendering context.

function SDL_GetRenderTarget(renderer: PSDL_Renderer): PSDL_Texture cdecl; external SDL_LibName;

Get the current render target or NULL for the default render target.

The current render target

SDL_SetRenderTarget()

function SDL_GetRevision: PAnsiChar; cdecl; external SDL_LibName;

Get the code revision of SDL that is linked against your program.

Returns an arbitrary string (a hash value) uniquely identifying the exact revision of the SDL library in use, and is only useful in comparing against other revisions. It is NOT an incrementing number.

function SDL_GetRevisionNumber: cint; cdecl; external SDL_LibName;

Get the revision number of SDL that is linked against your program.

Returns a number uniquely identifying the exact revision of the SDL library in use. It is an incrementing number based on commits to hg.libsdl.org.

procedure SDL_GetRGB(pixel: cuint32; const format: PSDL_PixelFormat; r: pcuint8; g: pcuint8; b: pcuint8); cdecl; external SDL_LibName;

Get RGB values from a pixel in the specified format.

This function uses the entire 8-bit [0..255] range when converting color components from pixel formats with less than 8-bits per RGB component (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, 0xff, 0xff] not [0xf8, 0xfc, 0xf8]).

\param pixel a pixel value \param format an SDL_PixelFormat structure describing the format of the pixel \param r a pointer filled in with the red component \param g a pointer filled in with the green component \param b a pointer filled in with the blue component

\since This function is available since SDL 2.0.0.

\sa SDL_GetRGBA \sa SDL_MapRGB \sa SDL_MapRGBA

procedure SDL_GetRGBA(pixel: cuint32; const format: PSDL_PixelFormat; r: pcuint8; g: pcuint8; b: pcuint8; a: pcuint8); cdecl; external SDL_LibName;

Get RGBA values from a pixel in the specified format.

This function uses the entire 8-bit [0..255] range when converting color components from pixel formats with less than 8-bits per RGB component (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, 0xff, 0xff] not [0xf8, 0xfc, 0xf8]).

If the surface has no alpha component, the alpha will be returned as 0xff (100% opaque).

\param pixel a pixel value \param format an SDL_PixelFormat structure describing the format of the pixel \param r a pointer filled in with the red component \param g a pointer filled in with the green component \param b a pointer filled in with the blue component \param a a pointer filled in with the alpha component

\since This function is available since SDL 2.0.0.

\sa SDL_GetRGB \sa SDL_MapRGB \sa SDL_MapRGBA

function SDL_GetScancodeFromKey(key: TSDL_Keycode): TSDL_Scancode; cdecl; external SDL_LibName;

Get the scancode corresponding to the given key code according to the current keyboard layout.

See SDL_Scancode for details.

\param key the desired SDL_Keycode to query \returns the SDL_Scancode that corresponds to the given SDL_Keycode.

\since This function is available since SDL 2.0.0.

\sa SDL_GetKeyFromScancode \sa SDL_GetScancodeName

function SDL_GetScancodeFromName(name: PAnsiChar): TSDL_Scancode; cdecl; external SDL_LibName;

Get a scancode from a human-readable name.

\param name the human-readable scancode name \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't recognized; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_GetKeyFromName \sa SDL_GetScancodeFromKey \sa SDL_GetScancodeName

function SDL_GetScancodeName(scancode: TSDL_Scancode): PAnsiChar; cdecl; external SDL_LibName;

Get a human-readable name for a scancode.

See SDL_Scancode for details.

**Warning**: The returned name is by design not stable across platforms, e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left Windows" under Microsoft Windows, and some scancodes like `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore unsuitable for creating a stable cross-platform two-way mapping between strings and scancodes.

\param scancode the desired SDL_Scancode to query \returns a pointer to the name for the scancode. If the scancode doesn't have a name this function returns an empty string ("").

\since This function is available since SDL 2.0.0.

\sa SDL_GetScancodeFromKey \sa SDL_GetScancodeFromName

function SDL_GetShapedWindowMode(window: PSDL_Window; shape_mode: PSDL_WindowShapeMode): cint; cdecl; external SDL_LibName;

Get the shape parameters of a shaped window.

\param window The shaped window whose parameters should be retrieved. \param shape_mode An empty shape-mode structure to fill, or NIL to check whether the window has a shape. \return 0 if the window has a shape and, provided shape_mode was not NIL, shape_mode has been filled with the mode data, SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped window, or SDL_WINDOW_LACKS_SHAPE if the SDL_Window given is a shapeable window currently lacking a shape.

\since This function is available since SDL 2.0.0.

\sa SDL_WindowShapeMode \sa SDL_SetWindowShape

function SDL_GetSurfaceAlphaMod(surface: PSDL_Surface; alpha: pcuint8): cint; cdecl; external SDL_LibName;

Get the additional alpha value used in blit operations.

surface The surface to query. alpha A pointer filled in with the current alpha value.

0 on success, or -1 if the surface is not valid.

SDL_SetSurfaceAlphaMod()

function SDL_GetSurfaceBlendMode(surface: PSDL_Surface; blendMode: PSDL_BlendMode): cint; cdecl; external SDL_LibName;

Get the blend mode used for blit operations.

surface The surface to query. blendMode A pointer filled in with the current blend mode.

0 on success, or -1 if the surface is not valid.

SDL_SetSurfaceBlendMode()

function SDL_GetSurfaceColorMod(surface: PSDL_Surface; r: pcuint8; g: pcuint8; b: pcuint8): cint; cdecl; external SDL_LibName;

Get the additional color value used in blit operations.

surface The surface to query. r A pointer filled in with the current red color value. g A pointer filled in with the current green color value. b A pointer filled in with the current blue color value.

0 on success, or -1 if the surface is not valid.

SDL_SetSurfaceColorMod()

function SDL_GetSystemRAM(): cint; cdecl; external SDL_LibName;

This function returns the amount of RAM configured in the system, in MB.

function SDL_GetTextureAlphaMod(texture: PSDL_Texture; alpha: pcuint8): cint32 cdecl; external SDL_LibName;

Get the additional alpha value used in render copy operations.

texture The texture to query. alpha A pointer filled in with the current alpha value.

0 on success, or -1 if the texture is not valid.

SDL_SetTextureAlphaMod()

function SDL_GetTextureBlendMode(texture: PSDL_Texture; blendMode: PSDL_BlendMode): cint32 cdecl; external SDL_LibName;

Get the blend mode used for texture copy operations.

texture The texture to query. blendMode A pointer filled in with the current blend mode.

0 on success, or -1 if the texture is not valid.

SDL_SetTextureBlendMode()

function SDL_GetTextureColorMod(texture: PSDL_Texture; r: pcuint8; g: pcuint8; b: pcuint8): cint32 cdecl; external SDL_LibName;

Get the additional color value used in render copy operations.

texture The texture to query. r A pointer filled in with the current red color value. g A pointer filled in with the current green color value. b A pointer filled in with the current blue color value.

0 on success, or -1 if the texture is not valid.

SDL_SetTextureColorMod()

function SDL_GetTextureScaleMode(texture: PSDL_Texture; scaleMode: PSDL_ScaleMode): cint; cdecl; external SDL_LibName;

Get the scale mode used for texture scale operations.

function SDL_GetTextureUserData(texture: PSDL_Texture): Pointer; cdecl; external SDL_LibName;

Get the user-specified pointer associated with a texture.

function SDL_GetThreadID(thread: PSDL_Thread): TSDL_ThreadID; cdecl; external SDL_LibName;

Get the thread identifier for the specified thread.

This thread identifier is as reported by the underlying operating system. If SDL is running on a platform that does not support threads the return value will always be zero.

\param thread the thread to query \returns the ID of the specified thread, or the ID of the current thread if `thread` is NULL.

\since This function is available since SDL 2.0.0.

\sa SDL_ThreadID

function SDL_GetThreadName(thread: PSDL_Thread): PAnsiChar; cdecl; external SDL_LibName;

Get the thread name as it was specified in SDL_CreateThread().

This is internal memory, not to be freed by the caller, and remains valid until the specified thread is cleaned up by SDL_WaitThread().

\param thread the thread to query \returns a pointer to a UTF-8 string that names the specified thread, or NULL if it doesn't have a name.

\since This function is available since SDL 2.0.0.

\sa SDL_CreateThread

function SDL_GetTicks: cuint32; cdecl; external SDL_LibName;

Get the number of milliseconds since the SDL library initialization.

This value wraps if the program runs for more than ˜49 days.

function SDL_GetTicks64: cuint64; cdecl; external SDL_LibName;

Get the number of milliseconds since SDL library initialization.

Note that you should not use the SDL_TICKS_PASSED macro with values returned by this function, as that macro does clever math to compensate for the 32-bit overflow every ˜49 days that SDL_GetTicks() suffers from. 64-bit values from this function can be safely compared directly.

function SDL_GetTouchDevice(index: cint): TSDL_TouchID; cdecl; external SDL_LibName;

Get the touch ID with the given index, or 0 if the index is invalid.

function SDL_GetTouchDeviceType(touchID: TSDL_TouchID): TSDL_TouchDeviceType; cdecl; external SDL_LibName;

Get the type of the given touch device.

\since This function is available since SDL 2.0.10.

function SDL_GetTouchFinger(touchID: TSDL_TouchID; index: cint): PSDL_Finger; cdecl; external SDL_LibName;

Get the finger object of the given touch, with the given index.

function SDL_GetTouchName(index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the touch device name as reported from the driver, or NIL if the index is invalid.

\since This function is available since SDL 2.0.22.

procedure SDL_GetVersion(ver: PSDL_Version); cdecl; external SDL_LibName;

Get the version of SDL that is linked against your program.

If you are linking to SDL dynamically, then it is possible that the current version will be different than the version you compiled against. This function returns the current version, while SDL_VERSION() is a macro that tells you what version you compiled with.

compiled: TSDL_Version; linked: TSDL_Version;

SDL_VERSION(@compiled); SDL_GetVersion(@linked); WriteLn('We compiled against SDL version: ' + IntToStr(compiled.major) + IntToStr(compiled.minor) + IntToStr(compiled.patch)); WriteLn('But we linked against SDL version:' + IntToStr(compiled.major) + IntToStr(compiled.minor) + IntToStr(compiled.patch));

This function may be called safely at any time, even before SDL_Init().

SDL_VERSION

function SDL_GetVideoDriver(index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the name of a built in video driver.

The video drivers are presented in the order in which they are normally checked during initialization.

SDL_GetNumVideoDrivers()

function SDL_GetWindowBordersSize(window: PSDL_Window; top, left, bottom, right: pcint): cint; cdecl; external SDL_LibName;

\brief Get the size of a window's borders (decorations) around the client area.

\param window The window to query. \param top Pointer to variable for storing the size of the top border. NULL is permitted. \param left Pointer to variable for storing the size of the left border. NULL is permitted. \param bottom Pointer to variable for storing the size of the bottom border. NULL is permitted. \param right Pointer to variable for storing the size of the right border. NULL is permitted.

\return 0 on success, or -1 if getting this information is not supported.

\note if this function fails (returns -1), the size values will be initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the window in question was borderless.

function SDL_GetWindowBrightness(window: PSDL_Window): cfloat; cdecl; external SDL_LibName;

Get the brightness (gamma correction) for a window.

The last brightness value passed to SDL_SetWindowBrightness()

SDL_SetWindowBrightness()

function SDL_GetWindowData(window: PSDL_Window; const name: PAnsiChar): Pointer; cdecl; external SDL_LibName;

Retrieve the data pointer associated with a window.

window The window to query. name The name of the pointer.

The value associated with 'name'

SDL_SetWindowData()

function SDL_GetWindowDisplayIndex(window: PSDL_Window): cint; cdecl; external SDL_LibName;

Get the display index associated with a window.

the display index of the display containing the center of the window, or -1 on error.

function SDL_GetWindowDisplayMode(window: PSDL_Window; mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;

Fill in information about the display mode used when a fullscreen window is visible.

SDL_SetWindowDisplayMode() SDL_SetWindowFullscreen()

function SDL_GetWindowFlags(window: PSDL_Window): TSDL_WindowFlags; cdecl; external SDL_LibName;

Get the window flags.

function SDL_GetWindowFromID(id: cuint32): PSDL_Window; cdecl; external SDL_LibName;

Get a window from a stored ID, or nil if it doesn't exist.

function SDL_GetWindowGammaRamp(window: PSDL_Window; red: pcuint16; green: pcuint16; blue: pcuint16): cint; cdecl; external SDL_LibName;

Get the gamma ramp for a window.

red A pointer to a 256 element array of 16-bit quantities to hold the translation table for the red channel, or nil. green A pointer to a 256 element array of 16-bit quantities to hold the translation table for the green channel, or nil. blue A pointer to a 256 element array of 16-bit quantities to hold the translation table for the blue channel, or nil.

0 on success, or -1 if gamma ramps are unsupported.

SDL_SetWindowGammaRamp()

function SDL_GetWindowGrab(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;

Get a window's input grab mode.

This returns SDL_TRUE if input is grabbed, and SDL_FALSE otherwise.

SDL_SetWindowGrab()

function SDL_GetWindowICCProfile(window: PSDL_Window; size: pcsize_t): Pointer; cdecl; external SDL_LibName;

Get the raw ICC profile data for the screen the window is currently on.

Data returned should be freed with SDL_free().

\param window the window to query \param size the size of the ICC profile \returns the raw ICC profile data on success or NIL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.18.

function SDL_GetWindowID(window: PSDL_Window): cuint32; cdecl; external SDL_LibName;

Get the numeric ID of a window, for logging purposes.

function SDL_GetWindowKeyboardGrab(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;

Get a window's keyboard grab mode.

Returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise.

SDL_SetWindowKeyboardGrab()

procedure SDL_GetWindowMaximumSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;

Get the maximum size of a window's client area.

w Pointer to variable for storing the maximum width, may be nil h Pointer to variable for storing the maximum height, may be nil

SDL_GetWindowMinimumSize() SDL_SetWindowMaximumSize()

procedure SDL_GetWindowMinimumSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;

Get the minimum size of a window's client area.

w Pointer to variable for storing the minimum width, may be nil h Pointer to variable for storing the minimum height, may be nil

SDL_GetWindowMaximumSize() SDL_SetWindowMinimumSize()

function SDL_GetWindowMouseGrab(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;

Get a window's mouse grab mode.

Returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise.

SDL_SetWindowMouseGrab()

function SDL_GetWindowMouseRect(window: PSDL_Window): PSDL_Rect; cdecl; external SDL_LibName;

Get the mouse confinement rectangle of a window.

Returns A pointer to the mouse confinement rectangle of a window, or NULL if there isn't one.

SDL_SetWindowMouseRect()

function SDL_GetWindowOpacity(window: PSDL_Window; out_opacity: pcfloat): cint; cdecl; external SDL_LibName;

\brief Get the opacity of a window.

If transparency isn't supported on this platform, opacity will be reported as 1.0f without error.

\param window The window in question. \param out_opacity Opacity (0.0f - transparent, 1.0f - opaque)

\return 0 on success, or -1 on error (invalid window, etc).

\sa SDL_SetWindowOpacity()

function SDL_GetWindowPixelFormat(window: PSDL_Window): cuint32; cdecl; external SDL_LibName;

Get the pixel format associated with the window.

procedure SDL_GetWindowPosition(window: PSDL_Window; x: pcint; y: pcint); cdecl; external SDL_LibName;

Get the position of a window.

x Pointer to variable for storing the x position, may be nil y Pointer to variable for storing the y position, may be nil

SDL_SetWindowPosition()

procedure SDL_GetWindowSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;

Get the size of a window's client area.

w Pointer to variable for storing the width, may be nil h Pointer to variable for storing the height, may be nil

SDL_SetWindowSize()

procedure SDL_GetWindowSizeInPixels(window: PSDL_Window; w, h: pcuint); cdecl; external SDL_LibName;

Get the size of a window in pixels.

This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform with high-DPI support (Apple calls this "Retina"), and not disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.

\param window the window from which the drawable size should be queried \param w a pointer to variable for storing the width in pixels, may be NIL \param h a pointer to variable for storing the height in pixels, may be NIL

\since This function is available since SDL 2.26.0.

\sa SDL_CreateWindow \sa SDL_GetWindowSize

function SDL_GetWindowSurface(window: PSDL_Window): PSDL_Surface; cdecl; external SDL_LibName;

Get the SDL surface associated with the window.

The window's framebuffer surface, or nil on error.

A new surface will be created with the optimal format for the window, if necessary. This surface will be freed when the window is destroyed.

You may not combine this with 3D or the rendering API on this window.

SDL_UpdateWindowSurface() SDL_UpdateWindowSurfaceRects()

function SDL_GetWindowTitle(window: PSDL_Window): PAnsiChar; cdecl; external SDL_LibName;

Get the title of a window, in UTF-8 format.

SDL_SetWindowTitle()

function SDL_GetWindowWMInfo(window: PSDL_Window; info: PSDL_SysWMinfo): TSDL_bool; cdecl; external SDL_LibName;

Get driver-specific information about a window.

You must include SDL_syswm.h for the declaration of SDL_SysWMinfo.

The caller must initialize the `info` structure's version by using `SDL_VERSION(&info.version)`, and then this function will fill in the rest of the structure with information about the given window.

\param window the window about which information is being requested \param info an SDL_SysWMinfo structure filled in with window information \returns SDL_TRUE if the function is implemented and the `version` member of the `info` struct is valid, or SDL_FALSE if the information could not be retrieved; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_GetYUVConversionMode: TSDL_YUV_CONVERSION_MODE; cdecl; external SDL_LibName;

\brief Get the YUV conversion mode

function SDL_GetYUVConversionModeForResolution(width: cint; height: cint): TSDL_YUV_CONVERSION_MODE; cdecl; external SDL_LibName;

\brief Get the YUV conversion mode, returning the correct mode for the resolution when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC

function SDL_GL_BindTexture(texture: PSDL_Texture; texw: pcfloat; texh: pcfloat): cint32 cdecl; external SDL_LibName;

Bind the texture to the current OpenGL/ES/ES2 context for use with OpenGL instructions.

texture The SDL texture to bind texw A pointer to a float that will be filled with the texture width texh A pointer to a float that will be filled with the texture height

0 on success, or -1 if the operation is not supported

function SDL_GL_CreateContext(window: PSDL_Window): TSDL_GLContext; cdecl; external SDL_LibName;

Create an OpenGL context for use with an OpenGL window, and make it current.

SDL_GL_DeleteContext()

procedure SDL_GL_DeleteContext(context: TSDL_GLContext); cdecl; external SDL_LibName;

Delete an OpenGL context.

SDL_GL_CreateContext()

function SDL_GL_ExtensionSupported(const extension: PAnsiChar): TSDL_Bool; cdecl; external SDL_LibName;

Return true if an OpenGL extension is supported for the current context.

function SDL_GL_GetAttribute(attr: TSDL_GLattr; value: pcint): cint; cdecl; external SDL_LibName;

Get the actual value for an attribute from the current context.

function SDL_GL_GetCurrentContext: TSDL_GLContext; cdecl; external SDL_LibName;

Get the currently active OpenGL context.

function SDL_GL_GetCurrentWindow: PSDL_Window; cdecl; external SDL_LibName;

Get the currently active OpenGL window.

procedure SDL_GL_GetDrawableSize(window: PSDL_Window; w: pcint; h: pcint); cdecl; external SDL_LibName;

Get the size of a window's underlying drawable in pixels (for use with glViewport).

window Window from which the drawable size should be queried w Pointer to variable for storing the width in pixels, may be NULL h Pointer to variable for storing the height in pixels, may be NULL

This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI drawable, i.e. the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with high-DPI support (Apple calls this "Retina"), and not disabled by the SDL_HINT_VIDEO_HIGHDPI_DISABLED hint.

SDL_GetWindowSize() SDL_CreateWindow()

function SDL_GL_GetProcAddress(const proc: PAnsiChar): Pointer; cdecl; external SDL_LibName;

Get the address of an OpenGL function.

function SDL_GL_GetSwapInterval: cint; cdecl; external SDL_LibName;

Get the swap interval for the current OpenGL context.

0 if there is no vertical retrace synchronization, 1 if the buffer swap is synchronized with the vertical retrace, and -1 if late swaps happen immediately instead of waiting for the next retrace. If the system can't determine the swap interval, or there isn't a valid current context, this will return 0 as a safe default.

SDL_GL_SetSwapInterval()

function SDL_GL_LoadLibrary(const path: PAnsiChar): cint; cdecl; external SDL_LibName;

Dynamically load an OpenGL library.

path The platform dependent OpenGL library name, or nil to open the default OpenGL library.

0 on success, or -1 if the library couldn't be loaded.

This should be done after initializing the video driver, but before creating any OpenGL windows. If no OpenGL library is loaded, the default library will be loaded upon creation of the first OpenGL window.

If you do this, you need to retrieve all of the GL functions used in your program from the dynamic library using SDL_GL_GetProcAddress().

SDL_GL_GetProcAddress() SDL_GL_UnloadLibrary()

function SDL_GL_MakeCurrent(window: PSDL_Window; context: TSDL_GLContext): cint; cdecl; external SDL_LibName;

Set up an OpenGL context for rendering into an OpenGL window.

The context must have been created with a compatible window.

procedure SDL_GL_ResetAttributes(); cdecl; external SDL_LibName;

Reset all previously set OpenGL context attributes to their default values

function SDL_GL_SetAttribute(attr: TSDL_GLattr; value: cint): cint; cdecl; external SDL_LibName;

Set an OpenGL window attribute before window creation.

function SDL_GL_SetSwapInterval(interval: cint): cint; cdecl; external SDL_LibName;

Set the swap interval for the current OpenGL context.

interval 0 for immediate updates, 1 for updates synchronized with the vertical retrace. If the system supports it, you may specify -1 to allow late swaps to happen immediately instead of waiting for the next retrace.

0 on success, or -1 if setting the swap interval is not supported.

SDL_GL_GetSwapInterval()

procedure SDL_GL_SwapWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Swap the OpenGL buffers for a window, if double-buffering is supported.

function SDL_GL_UnbindTexture(texture: PSDL_Texture): cint32 cdecl; external SDL_LibName;

Unbind a texture from the current OpenGL/ES/ES2 context.

texture The SDL texture to unbind

0 on success, or -1 if the operation is not supported

procedure SDL_GL_UnloadLibrary; cdecl; external SDL_LibName;

Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().

SDL_GL_LoadLibrary()

function SDL_GUIDFromString(const pchGUID: PAnsiChar): TSDL_GUID; cdecl; external SDL_LibName;

Convert a GUID string into a ::SDL_GUID structure.

Performs no error checking. If this function is given a string containing an invalid GUID, the function will silently succeed, but the GUID generated will not be useful.

\param pchGUID string containing an ASCII representation of a GUID \returns a ::SDL_GUID structure.

\since This function is available since SDL 2.24.0.

\sa SDL_GUIDToString

procedure SDL_GUIDToString(guid: TSDL_GUID; pszGUID: PAnsiChar; cbGUID: cint); cdecl; external SDL_LibName;

Get an ASCII string representation for a given ::SDL_GUID.

You should supply at least 33 bytes for pszGUID.

\param guid the ::SDL_GUID you wish to convert to string \param pszGUID buffer in which to write the ASCII string \param cbGUID the size of pszGUID

\since This function is available since SDL 2.24.0.

\sa SDL_GUIDFromString

procedure SDL_HapticClose(haptic: PSDL_Haptic); cdecl; external SDL_LibName;

Close a haptic device previously opened with SDL_HapticOpen().

\param haptic the SDL_Haptic device to close

\since This function is available since SDL 2.0.0.

\sa SDL_HapticOpen

procedure SDL_HapticDestroyEffect(haptic: PSDL_Haptic; effect: cint); cdecl; external SDL_LibName;

Destroy a haptic effect on the device.

This will stop the effect if it's running. Effects are automatically destroyed when the device is closed.

\param haptic the SDL_Haptic device to destroy the effect on \param effect the ID of the haptic effect to destroy

\since This function is available since SDL 2.0.0.

\sa SDL_HapticNewEffect

function SDL_HapticEffectSupported(haptic: PSDL_Haptic; effect: PSDL_HapticEffect): cint; cdecl; external SDL_LibName;

Check to see if an effect is supported by a haptic device.

\param haptic the SDL_Haptic device to query \param effect the desired effect to query \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticNewEffect \sa SDL_HapticQuery

function SDL_HapticGetEffectStatus(haptic: PSDL_Haptic; effect: cint): cint; cdecl; external SDL_LibName;

Get the status of the current effect on the specified haptic device.

Device must support the SDL_HAPTIC_STATUS feature.

\param haptic the SDL_Haptic device to query for the effect status on \param effect the ID of the haptic effect to query its status \returns 0 if it isn't playing, 1 if it is playing, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticRunEffect \sa SDL_HapticStopEffect

function SDL_HapticIndex(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Get the index of a haptic device.

\param haptic the SDL_Haptic device to query \returns the index of the specified haptic device or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticOpen \sa SDL_HapticOpened

function SDL_HapticName(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent name of a haptic device.

This can be called before any joysticks are opened. If no name can be found, this function returns NULL.

\param device_index index of the device to query. \returns the name of the device or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_NumHaptics

function SDL_HapticNewEffect(haptic: PSDL_Haptic; effect: PSDL_HapticEffect): cint; cdecl; external SDL_LibName;

Create a new haptic effect on a specified device.

\param haptic an SDL_Haptic device to create the effect on \param effect an SDL_HapticEffect structure containing the properties of the effect to create \returns the ID of the effect on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticDestroyEffect \sa SDL_HapticRunEffect \sa SDL_HapticUpdateEffect

function SDL_HapticNumAxes(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Get the number of haptic axes the device has.

The number of haptic axes might be useful if working with the SDL_HapticDirection effect.

\param haptic the SDL_Haptic device to query \returns the number of axes on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_HapticNumEffects(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Get the number of effects a haptic device can store.

On some platforms this isn't fully supported, and therefore is an approximation. Always check to see if your created effect was actually created and do not rely solely on SDL_HapticNumEffects().

\param haptic the SDL_Haptic device to query \returns the number of effects the haptic device can store or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticNumEffectsPlaying \sa SDL_HapticQuery

function SDL_HapticNumEffectsPlaying(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Get the number of effects a haptic device can play at the same time.

This is not supported on all platforms, but will always return a value.

\param haptic the SDL_Haptic device to query maximum playing effects \returns the number of effects the haptic device can play at the same time or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticNumEffects \sa SDL_HapticQuery

function SDL_HapticOpen(device_index: cint): PSDL_Haptic; cdecl; external SDL_LibName;

Open a haptic device for use.

The index passed as an argument refers to the N'th haptic device on this system.

When opening a haptic device, its gain will be set to maximum and autocenter will be disabled. To modify these values use SDL_HapticSetGain() and SDL_HapticSetAutocenter().

\param device_index index of the device to open \returns the device identifier or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticClose \sa SDL_HapticIndex \sa SDL_HapticOpenFromJoystick \sa SDL_HapticOpenFromMouse \sa SDL_HapticPause \sa SDL_HapticSetAutocenter \sa SDL_HapticSetGain \sa SDL_HapticStopAll

function SDL_HapticOpened(device_index: cint): cint; cdecl; external SDL_LibName;

Check if the haptic device at the designated index has been opened.

\param device_index the index of the device to query \returns 1 if it has been opened, 0 if it hasn't or on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticIndex \sa SDL_HapticOpen

function SDL_HapticOpenFromJoystick(joystick: PSDL_Joystick): PSDL_Haptic; cdecl; external SDL_LibName;

Open a haptic device for use from a joystick device.

You must still close the haptic device separately. It will not be closed with the joystick.

When opened from a joystick you should first close the haptic device before closing the joystick device. If not, on some implementations the haptic device will also get unallocated and you'll be unable to use force feedback on that device.

\param joystick the SDL_Joystick to create a haptic device from \returns a valid haptic device identifier on success or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticClose \sa SDL_HapticOpen \sa SDL_JoystickIsHaptic

function SDL_HapticOpenFromMouse: PSDL_Haptic; cdecl; external SDL_LibName;

Try to open a haptic device from the current mouse.

\returns the haptic device identifier or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticOpen \sa SDL_MouseIsHaptic

function SDL_HapticPause(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Pause a haptic device.

Device must support the `SDL_HAPTIC_PAUSE` feature. Call SDL_HapticUnpause() to resume playback.

Do not modify the effects nor add new ones while the device is paused. That can cause all sorts of weird errors.

\param haptic the SDL_Haptic device to pause \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticUnpause

function SDL_HapticQuery(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Get the haptic device's supported features in bitwise manner.

\param haptic the SDL_Haptic device to query \returns a list of supported haptic features in bitwise manner (OR'd), or 0 on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticEffectSupported \sa SDL_HapticNumEffects

function SDL_HapticRumbleInit(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Initialize a haptic device for simple rumble playback.

\param haptic the haptic device to initialize for simple rumble playback \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticOpen \sa SDL_HapticRumblePlay \sa SDL_HapticRumbleStop \sa SDL_HapticRumbleSupported

function SDL_HapticRumblePlay(haptic: PSDL_Haptic; strength: cfloat; length: cuint32): cint; cdecl; external SDL_LibName;

Run a simple rumble effect on a haptic device.

\param haptic the haptic device to play the rumble effect on \param strength strength of the rumble to play as a 0-1 float value \param length length of the rumble to play in milliseconds \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticRumbleInit \sa SDL_HapticRumbleStop \sa SDL_HapticRumbleSupported

function SDL_HapticRumbleStop(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Stop the simple rumble on a haptic device.

\param haptic the haptic device to stop the rumble effect on \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticRumbleInit \sa SDL_HapticRumblePlay \sa SDL_HapticRumbleSupported

function SDL_HapticRumbleSupported(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Check whether rumble is supported on a haptic device.

\param haptic haptic device to check for rumble support \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticRumbleInit \sa SDL_HapticRumblePlay \sa SDL_HapticRumbleStop

function SDL_HapticRunEffect(haptic: PSDL_Haptic; effect: cint; iterations: cuint32): cint; cdecl; external SDL_LibName;

Run the haptic effect on its associated haptic device.

To repeat the effect over and over indefinitely, set `iterations` to `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make one instance of the effect last indefinitely (so the effect does not fade), set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` instead.

\param haptic the SDL_Haptic device to run the effect on \param effect the ID of the haptic effect to run \param iterations the number of iterations to run the effect; use `SDL_HAPTIC_INFINITY` to repeat forever \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticDestroyEffect \sa SDL_HapticGetEffectStatus \sa SDL_HapticStopEffect

function SDL_HapticSetAutocenter(haptic: PSDL_Haptic; autocenter: cint): cint; cdecl; external SDL_LibName;

Set the global autocenter of the device.

Autocenter should be between 0 and 100. Setting it to 0 will disable autocentering.

Device must support the SDL_HAPTIC_AUTOCENTER feature.

\param haptic the SDL_Haptic device to set autocentering on \param autocenter value to set autocenter to (0-100) \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticQuery

function SDL_HapticSetGain(haptic: PSDL_Haptic; gain: cint): cint; cdecl; external SDL_LibName;

Set the global gain of the specified haptic device.

Device must support the SDL_HAPTIC_GAIN feature.

The user may specify the maximum gain by setting the environment variable `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the maximum.

\param haptic the SDL_Haptic device to set the gain on \param gain value to set the gain to, should be between 0 and 100 (0 - 100) \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticQuery

function SDL_HapticStopAll(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Stop all the currently playing effects on a haptic device.

\param haptic the SDL_Haptic device to stop \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_HapticStopEffect(haptic: PSDL_Haptic; effect: cint): cint; cdecl; external SDL_LibName;

Stop the haptic effect on its associated haptic device.

*

\param haptic the SDL_Haptic device to stop the effect on \param effect the ID of the haptic effect to stop \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticDestroyEffect \sa SDL_HapticRunEffect

function SDL_HapticUnpause(haptic: PSDL_Haptic): cint; cdecl; external SDL_LibName;

Unpause a haptic device.

Call to unpause after SDL_HapticPause().

\param haptic the SDL_Haptic device to unpause \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticPause

function SDL_HapticUpdateEffect(haptic: PSDL_Haptic; effect: cint; data: PSDL_HapticEffect): cint; cdecl; external SDL_LibName;

Update the properties of an effect.

Can be used dynamically, although behavior when dynamically changing direction may be strange. Specifically the effect may re-upload itself and start playing from the start. You also cannot change the type either when running SDL_HapticUpdateEffect().

\param haptic the SDL_Haptic device that has the effect \param effect the identifier of the effect to update \param data an SDL_HapticEffect structure containing the new effect properties to use \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticDestroyEffect \sa SDL_HapticNewEffect \sa SDL_HapticRunEffect

function SDL_Has3DNow(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has 3DNow! features.

This always returns false on CPUs that aren't using AMD instruction sets.

function SDL_HasAltiVec(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has AltiVec features.

This always returns false on CPUs that aren't using PowerPC instruction sets.

function SDL_HasARMSIMD(): TSDL_Bool; cdecl; external SDL_LibName;

Determine whether the CPU has ARM SIMD (ARMv6) features. This is different from ARM NEON, which is a different instruction set.

This always returns false on CPUs that aren't using ARM instruction sets.

function SDL_HasAVX(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has AVX features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasAVX2(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has AVX2 features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasAVX512F(): TSDL_Bool; cdecl; external SDL_LibName;

Determine whether the CPU has AVX-512F (foundation) features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasClipboardText(): TSDL_bool; cdecl; external SDL_LibName;

Query whether the clipboard exists and contains a non-empty text string.

\returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not.

\since This function is available since SDL 2.0.0.

\sa SDL_GetClipboardText \sa SDL_SetClipboardText

function SDL_HasColorKey(surface: PSDL_Surface): TSDL_Bool; cdecl; external SDL_LibName;

\brief Returns whether the surface has a color key

\return SDL_TRUE if the surface has a color key, or SDL_FALSE if the surface is NULL or has no color key

function SDL_HasEvent(type_: TSDL_EventType): TSDL_Bool cdecl; external SDL_LibName;

Checks to see if certain event types are in the event queue.

function SDL_HasEvents(minType, maxType: TSDL_EventType): TSDL_Bool cdecl; external SDL_LibName;
 
function SDL_HasIntersection(const a, b: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;

Determine whether two rectangles intersect.

SDL_TRUE if there is an intersection, SDL_FALSE otherwise.

function SDL_HasIntersectionF(const a, b: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;

Determine whether two rectangles intersect with float precision.

If either pointer is NIL the function will return SDL_FALSE.

\param A an SDL_FRect structure representing the first rectangle \param B an SDL_FRect structure representing the second rectangle \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.22.

\sa SDL_IntersectRect

function SDL_HasMMX(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has MMX features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasNEON(): TSDL_Bool; cdecl; external SDL_LibName;

Determine whether the CPU has NEON (ARM SIMD) features.

This always returns false on CPUs that aren't using ARM instruction sets.

function SDL_HasPrimarySelectionText(): TSDL_bool; cdecl; external SDL_LibName;

Query whether the primary selection exists and contains a non-empty text string.

\returns SDL_TRUE if the primary selection has text, or SDL_FALSE if it does not.

\since This function is available since SDL 2.26.1.

\sa SDL_GetPrimarySelectionText \sa SDL_SetPrimarySelectionText

function SDL_HasRDTSC(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has the RDTSC instruction.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasScreenKeyboardSupport: TSDL_bool; cdecl; external SDL_LibName;

Check whether the platform has screen keyboard support.

\returns SDL_TRUE if the platform has some screen keyboard support or SDL_FALSE if not.

\since This function is available since SDL 2.0.0.

\sa SDL_StartTextInput \sa SDL_IsScreenKeyboardShown

function SDL_HasSSE(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has SSE features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasSSE2(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has SSE2 features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasSSE3(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has SSE3 features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasSSE41(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has SSE4.1 features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasSSE42(): TSDL_Bool; cdecl; external SDL_LibName;

This function returns true if the CPU has SSE4.2 features.

This always returns false on CPUs that aren't using Intel instruction sets.

function SDL_HasSurfaceRLE(surface: PSDL_Surface): TSDL_Bool; cdecl; external SDL_LibName;

\brief Returns whether the surface is RLE enabled

\return SDL_TRUE if the surface is RLE enabled, or SDL_FALSE if the surface is NULL or not RLE enabled

function SDL_HasWindowSurface(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;

Return whether the window has a surface associated with it.

\returns SDL_TRUE if there is a surface associated with the window, or SDL_FALSE otherwise.

\since This function is available since SDL 2.28.0.

\sa SDL_GetWindowSurface

procedure SDL_HideWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Hide a window.

SDL_ShowWindow()

procedure SDL_hid_ble_scan(active: TSDL_bool); cdecl; external SDL_LibName;

Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers

\param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan

\since This function is available since SDL 2.0.18.

procedure SDL_hid_close(dev: PSDL_hid_device); cdecl; external SDL_LibName;

Close a HID device.

\param dev A device handle returned from SDL_hid_open().

\since This function is available since SDL 2.0.18.

function SDL_hid_device_change_count(): cUint32; cdecl; external SDL_LibName;

Check to see if devices may have been added or removed.

Enumerating the HID devices is an expensive operation, so you can call this to see if there have been any system device changes since the last call to this function. A change in the counter returned doesn't necessarily mean that anything has changed, but you can call SDL_hid_enumerate() to get an updated device list.

Calling this function for the first time may cause a thread or other system resource to be allocated to track device change notifications.

\returns a change counter that is incremented with each potential device change, or 0 if device change detection isn't available.

\since This function is available since SDL 2.0.18.

\sa SDL_hid_enumerate

function SDL_hid_enumerate(vendor_id, product_id: cushort): PSDL_hid_device_info; cdecl; external SDL_LibName;

Enumerate the HID Devices.

This function returns a linked list of all the HID devices attached to the system which match vendor_id and product_id. If `vendor_id` is set to 0 then any vendor matches. If `product_id` is set to 0 then any product matches. If `vendor_id` and `product_id` are both set to 0, then all HID devices will be returned.

\param vendor_id The Vendor ID (VID) of the types of device to open. \param product_id The Product ID (PID) of the types of device to open. \returns a pointer to a linked list of type SDL_hid_device_info, containing information about the HID devices attached to the system, or NIL in the case of failure. Free this linked list by calling SDL_hid_free_enumeration().

\since This function is available since SDL 2.0.18.

\sa SDL_hid_device_change_count

function SDL_hid_exit(): cint; cdecl; external SDL_LibName;

Finalize the HIDAPI library.

This function frees all of the static data associated with HIDAPI. It should be called at the end of execution to avoid memory leaks.

\returns 0 on success and -1 on error.

\since This function is available since SDL 2.0.18.

\sa SDL_hid_init

procedure SDL_hid_free_enumeration(devs: PSDL_hid_device_info); cdecl; external SDL_LibName;

Free an enumeration Linked List

This function frees a linked list created by SDL_hid_enumerate().

\param devs Pointer to a list of struct_device returned from SDL_hid_enumerate().

\since This function is available since SDL 2.0.18.

function SDL_hid_get_feature_report(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;

Get a feature report from a HID device.

Set the first byte of `data` to the Report ID of the report to be read. Make sure to allow space for this extra byte in `data`. Upon return, the first byte will still contain the Report ID, and the report data will start in data[1].

\param dev A device handle returned from SDL_hid_open(). \param data A buffer to put the read data into, including the Report ID. Set the first byte of `data` to the Report ID of the report to be read, or set it to zero if your device does not use numbered reports. \param length The number of bytes to read, including an extra byte for the report ID. The buffer can be longer than the actual report. \returns the number of bytes read plus one for the report ID (which is still in the first byte), or -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_hid_get_indexed_string(dev: PSDL_hid_device; string_index: cint; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;

Get a string from a HID device, based on its string index.

\param dev A device handle returned from SDL_hid_open(). \param string_index The index of the string to get. \param string A wide string buffer to put the data into. \param maxlen The length of the buffer in multiples of wchar_t. \returns 0 on success and -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_hid_get_manufacturer_string(dev: PSDL_hid_device; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;

Get The Manufacturer String from a HID device.

\param dev A device handle returned from SDL_hid_open(). \param string A wide string buffer to put the data into. \param maxlen The length of the buffer in multiples of wchar_t. \returns 0 on success and -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_hid_get_product_string(dev: PSDL_hid_device; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;

Get The Product String from a HID device.

\param dev A device handle returned from SDL_hid_open(). \param string A wide string buffer to put the data into. \param maxlen The length of the buffer in multiples of wchar_t. \returns 0 on success and -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_hid_get_serial_number_string(dev: PSDL_hid_device; str: pcwchar_t; maxlen: csize_t): cint; cdecl; external SDL_LibName;

Get The Serial Number String from a HID device.

\param dev A device handle returned from SDL_hid_open(). \param string A wide string buffer to put the data into. \param maxlen The length of the buffer in multiples of wchar_t. \returns 0 on success and -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_hid_init(): cint; cdecl; external SDL_LibName;

Initialize the HIDAPI library.

This function initializes the HIDAPI library. Calling it is not strictly necessary, as it will be called automatically by SDL_hid_enumerate() and any of the SDL_hid_open_*() functions if it is needed. This function should be called at the beginning of execution however, if there is a chance of HIDAPI handles being opened by different threads simultaneously.

Each call to this function should have a matching call to SDL_hid_exit()

\returns 0 on success and -1 on error.

\since This function is available since SDL 2.0.18.

\sa SDL_hid_exit

function SDL_hid_open(vendor_id, product_id: cushort; serial_number: pcwchar_t): PSDL_hid_device; cdecl; external SDL_LibName;

Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally a serial number.

If `serial_number` is NULL, the first device with the specified VID and PID is opened.

\param vendor_id The Vendor ID (VID) of the device to open. \param product_id The Product ID (PID) of the device to open. \param serial_number The Serial Number of the device to open (optionally NIL). \returns a pointer to a SDL_hid_device object on success or NIL on failure.

\since This function is available since SDL 2.0.18.

function SDL_hid_open_path(path: PAnsiChar; bExclusive: cuint): PSDL_hid_device; cdecl; external SDL_LibName;

Open a HID device by its path name.

The path name be determined by calling SDL_hid_enumerate(), or a platform-specific path name can be used (eg: /dev/hidraw0 on Linux).

\param path The path name of the device to open \returns a pointer to a SDL_hid_device object on success or NIL on failure.

\since This function is available since SDL 2.0.18.

function SDL_hid_read(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;

Read an Input report from a HID device.

Input reports are returned to the host through the INTERRUPT IN endpoint. The first byte will contain the Report number if the device uses numbered reports.

\param dev A device handle returned from SDL_hid_open(). \param data A buffer to put the read data into. \param length The number of bytes to read. For devices with multiple reports, make sure to read an extra byte for the report number. \returns the actual number of bytes read and -1 on error. If no packet was available to be read and the handle is in non-blocking mode, this function returns 0.

\since This function is available since SDL 2.0.18.

function SDL_hid_read_timeout(dev: PSDL_hid_device; data: pcUint8; length: csize_t; milliseconds: cint): cint; cdecl; external SDL_LibName;

Read an Input report from a HID device with timeout.

Input reports are returned to the host through the INTERRUPT IN endpoint. The first byte will contain the Report number if the device uses numbered reports.

\param dev A device handle returned from SDL_hid_open(). \param data A buffer to put the read data into. \param length The number of bytes to read. For devices with multiple reports, make sure to read an extra byte for the report number. \param milliseconds timeout in milliseconds or -1 for blocking wait. \returns the actual number of bytes read and -1 on error. If no packet was available to be read within the timeout period, this function returns 0.

\since This function is available since SDL 2.0.18.

function SDL_hid_send_feature_report(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;

Send a Feature report to the device.

Feature reports are sent over the Control endpoint as a Set_Report transfer. The first byte of `data` must contain the Report ID. For devices which only support a single report, this must be set to 0x0. The remaining bytes contain the report data. Since the Report ID is mandatory, calls to SDL_hid_send_feature_report() will always contain one more byte than the report contains. For example, if a hid report is 16 bytes long, 17 bytes must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for devices which do not use numbered reports), followed by the report data (16 bytes). In this example, the length passed in would be 17.

\param dev A device handle returned from SDL_hid_open(). \param data The data to send, including the report number as the first byte. \param length The length in bytes of the data to send, including the report number. \returns the actual number of bytes written and -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_hid_set_nonblocking(dev: PSDL_hid_device; nonblock: cint): cint; cdecl; external SDL_LibName;

Set the device handle to be non-blocking.

In non-blocking mode calls to SDL_hid_read() will return immediately with a value of 0 if there is no data to be read. In blocking mode, SDL_hid_read() will wait (block) until there is data to read before returning.

Nonblocking can be turned on and off at any time.

\param dev A device handle returned from SDL_hid_open(). \param nonblock enable or not the nonblocking reads - 1 to enable nonblocking - 0 to disable nonblocking. \returns 0 on success and -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_hid_write(dev: PSDL_hid_device; data: pcUint8; length: csize_t): cint; cdecl; external SDL_LibName;

Write an Output report to a HID device.

The first byte of `data` must contain the Report ID. For devices which only support a single report, this must be set to 0x0. The remaining bytes contain the report data. Since the Report ID is mandatory, calls to SDL_hid_write() will always contain one more byte than the report contains. For example, if a hid report is 16 bytes long, 17 bytes must be passed to SDL_hid_write(), the Report ID (or 0x0, for devices with a single report), followed by the report data (16 bytes). In this example, the length passed in would be 17.

SDL_hid_write() will send the data on the first OUT endpoint, if one exists. If it does not, it will send the data through the Control Endpoint (Endpoint 0).

\param dev A device handle returned from SDL_hid_open(). \param data The data to send, including the report number as the first byte. \param length The length in bytes of the data to send. \returns the actual number of bytes written and -1 on error.

\since This function is available since SDL 2.0.18.

function SDL_iconv(cd: PSDL_iconv; Const inbuf: PPAnsiChar; inbytesleft: pcsize_t; outbuf: PPAnsiChar; outbytesleft: pcsize_t): csize_t; cdecl; external SDL_LibName;
 
function SDL_iconv_close(cd: PSDL_iconv): cint; cdecl; external SDL_LibName;
 
function SDL_iconv_open(Const tocode, fromcode: PAnsiChar): PSDL_iconv; cdecl; external SDL_LibName;
 
function SDL_iconv_string(Const tocode, fromcode, inbuf: PAnsiChar; inbytesleft: csize_t): PAnsiChar; cdecl; external SDL_LibName;

This function converts a string between encodings in one pass, returning a string that must be freed with SDL_free(), or NIL on error.

\since This function is available since SDL 2.0.0.

function SDL_iconv_utf8_locale(Const str: PAnsiChar): PAnsiChar; cdecl;

These are macros in the original C headers, we will reimplement them as simple Pascal functions.

function SDL_iconv_utf8_ucs2(Const str: PAnsiChar): pcUint16; cdecl;
 
function SDL_iconv_utf8_ucs4(Const str: PAnsiChar): pcUint32; cdecl;
 
function SDL_Init(flags: TSDL_Init): cint; cdecl; external SDL_LibName;

This function initializes the subsystems specified by flags Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup signal handlers for some commonly ignored fatal signals (like SIGSEGV).

function SDL_InitSubSystem(flags: TSDL_Init): cint; cdecl; external SDL_LibName;

This function initializes specific SDL subsystems

function SDL_IntersectFRect(const a, b: PSDL_FRect; result: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;

Calculate the intersection of two rectangles with float precision.

If `result` is NIL then this function will return SDL_FALSE.

\param A an SDL_FRect structure representing the first rectangle \param B an SDL_FRect structure representing the second rectangle \param result an SDL_FRect structure filled in with the intersection of rectangles `A` and `B` \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.22.

\sa SDL_HasIntersectionF

function SDL_IntersectFRectAndLine(const rect: PSDL_FRect; X1, Y1, X2, Y2: pcfloat): TSDL_Bool; cdecl; external SDL_LibName;

Calculate the intersection of a rectangle and line segment with float precision.

This function is used to clip a line segment to a rectangle. A line segment contained entirely within the rectangle or that does not intersect will remain unchanged. A line segment that crosses the rectangle at either or both ends will be clipped to the boundary of the rectangle and the new coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary.

\param rect an SDL_FRect structure representing the rectangle to intersect \param X1 a pointer to the starting X-coordinate of the line \param Y1 a pointer to the starting Y-coordinate of the line \param X2 a pointer to the ending X-coordinate of the line \param Y2 a pointer to the ending Y-coordinate of the line \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.22.

function SDL_IntersectRect(const A, B: PSDL_Rect; result: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;

Calculate the intersection of two rectangles.

SDL_TRUE if there is an intersection, SDL_FALSE otherwise.

function SDL_IntersectRectAndLine(const rect: PSDL_Rect; X1, Y1, X2, Y2: pcint): TSDL_Bool; cdecl; external SDL_LibName;

Calculate the intersection of a rectangle and line segment.

SDL_TRUE if there is an intersection, SDL_FALSE otherwise.

function SDL_isalnum(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is an alphanumeric character.

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_isalpha(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is an alphabetic character (a letter).

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_isblank(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a blank character (a space or a tab).

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_iscntrl(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a control character.

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_isdigit(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a decimal digit.

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.4.

function SDL_IsGameController(joystick_index: cint): TSDL_Bool cdecl; external SDL_LibName;

Is the joystick on this index supported by the game controller interface?

function SDL_isgraph(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a printable character (excluding space).

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_islower(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a lowercase letter.

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.12.

function SDL_ISPIXELFORMAT_FOURCC(format: Variant): Boolean;

The flag is set to 1 because 0x1? is not in the printable ASCII range *

function SDL_isprint(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a printable character (including space).

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_ispunct(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is any printable character which is not a space or an alphanumeric character.

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_IsScreenKeyboardShown(window: PSDL_Window): TSDL_bool; cdecl; external SDL_LibName;

Check whether the screen keyboard is shown for given window.

\param window the window for which screen keyboard should be queried \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not.

\since This function is available since SDL 2.0.0.

\sa SDL_HasScreenKeyboardSupport

function SDL_IsScreenSaverEnabled: TSDL_Bool; cdecl; external SDL_LibName;

Returns whether the screensaver is currently enabled (default on).

SDL_EnableScreenSaver() SDL_DisableScreenSaver()

function SDL_IsShapedWindow(window: PSDL_Window): TSDL_Bool; cdecl; external SDL_LibName;

Return whether the given window is a shaped window.

\param window The window to query for being shaped. \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if the window is unshaped or NIL.

\since This function is available since SDL 2.0.0.

\sa SDL_CreateShapedWindow

function SDL_isspace(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a whitespace character. This set includes the following characters: space, form feed (FF), newline/line feed (LF), carriage return (CR), horizontal tab (HT), vertical tab (VT).

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.4.

function SDL_IsTablet(): TSDL_Bool; cdecl; external SDL_LibName;

Query if the current device is a tablet.

If SDL can't determine this, it will return SDL_FALSE.

\returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.9.

function SDL_IsTextInputActive: TSDL_bool; cdecl; external SDL_LibName;

Check whether or not Unicode text input events are enabled.

\returns SDL_TRUE if text input events are enabled else SDL_FALSE.

\since This function is available since SDL 2.0.0.

\sa SDL_StartTextInput

function SDL_IsTextInputShown: TSDL_bool; cdecl; external SDL_LibName;

Returns if an IME Composite or Candidate window is currently shown.

\since This function is available since SDL 2.0.22.

function SDL_isupper(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is an uppercase letter.

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.12.

function SDL_isxdigit(x: cint):cint; cdecl; external SDL_LibName;

Check if the provided ASCII character is a hexadecimal digit.

\returns 1 if the check passes, 0 otherwise.

\since This function is available since SDL 2.0.16.

function SDL_JoystickAttachVirtual(type_: TSDL_JoystickType; naxes: cint; nbuttons: cint; nhats: cint): cint; cdecl; external SDL_LibName;

Attach a new virtual joystick.

\returns the joystick's device index, or -1 if an error occurred.

\since This function is available since SDL 2.0.14.

function SDL_JoystickAttachVirtualEx(const desc: PSDL_VirtualJoystickDesc): cint; cdecl; external SDL_LibName;

/** Attach a new virtual joystick with extended properties.

\returns the joystick's device index, or -1 if an error occurred.

\since This function is available since SDL 2.24.0. /

procedure SDL_JoystickClose(joystick: PSDL_Joystick); cdecl; external SDL_LibName;

Close a joystick previously opened with SDL_JoystickOpen().

\param joystick The joystick device to close

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickOpen

function SDL_JoystickCurrentPowerLevel(joystick: PSDL_Joystick): TSDL_JoystickPowerLevel; cdecl; external SDL_LibName;

Get the battery level of a joystick as SDL_JoystickPowerLevel.

\param joystick the SDL_Joystick to query \returns the current battery level as SDL_JoystickPowerLevel on success or `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown

\since This function is available since SDL 2.0.4.

function SDL_JoystickDetachVirtual(device_index: cint): cint; cdecl; external SDL_LibName;

Detach a virtual joystick.

\param device_index a value previously returned from SDL_JoystickAttachVirtual() \returns 0 on success, or -1 if an error occurred.

\since This function is available since SDL 2.0.14.

function SDL_JoystickEventState(state: cint): cint; cdecl; external SDL_LibName;

Enable/disable joystick event polling.

If joystick events are disabled, you must call SDL_JoystickUpdate() yourself and manually check the state of the joystick when you want joystick information.

It is recommended that you leave joystick event handling enabled.

**WARNING**: Calling this function may delete all events currently in SDL's event queue.

\param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` \returns 1 if enabled, 0 if disabled, or a negative error code on failure; call SDL_GetError() for more information.

If `state` is `SDL_QUERY` then the current state is returned, otherwise the new processing state is returned.

\since This function is available since SDL 2.0.0.

\sa SDL_GameControllerEventState

function SDL_JoystickFromInstanceID(instance_id: TSDL_JoystickID): PSDL_Joystick; cdecl; external SDL_LibName;

Get the SDL_Joystick associated with an instance id.

\param instance_id the instance id to get the SDL_Joystick for \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.4.

function SDL_JoystickFromPlayerIndex(player_index: cint): PSDL_Joystick; cdecl; external SDL_LibName;

Get the SDL_Joystick associated with a player index.

\param player_index the player index to get the SDL_Joystick for \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.12.

function SDL_JoystickGetAttached(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;

Get the status of a specified joystick.

\param joystick the joystick to query \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickClose \sa SDL_JoystickOpen

function SDL_JoystickGetAxis(joystick: PSDL_Joystick; axis: cint): cint16; cdecl; external SDL_LibName;

Get the current state of an axis control on a joystick.

SDL makes no promises about what part of the joystick any given axis refers to. Your game should have some sort of configuration UI to let users specify what each axis should be bound to. Alternately, SDL's higher-level Game Controller API makes a great effort to apply order to this lower-level interface, so you know that a specific axis is the "left thumb stick," etc.

The value returned by SDL_JoystickGetAxis() is a signed integer (-32768 to 32767) representing the current position of the axis. It may be necessary to impose certain tolerances on these values to account for jitter.

\param joystick an SDL_Joystick structure containing joystick information \param axis the axis to query; the axis indices start at index 0 \returns a 16-bit signed integer representing the current position of the axis or 0 on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickNumAxes

function SDL_JoystickGetAxisInitialState(joystick: PSDL_Joystick; axis: cint; state: pcint16): TSDL_Bool; cdecl; external SDL_LibName;

Get the initial state of an axis control on a joystick.

The state is a value ranging from -32768 to 32767.

The axis indices start at index 0.

\param joystick an SDL_Joystick structure containing joystick information \param axis the axis to query; the axis indices start at index 0 \param state Upon return, the initial value is supplied here. \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not.

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetBall(joystick: PSDL_Joystick; ball: cint; dx: pcint; dy: pcint): cint; cdecl; external SDL_LibName;

Get the ball axis change since the last poll.

Trackballs can only return relative motion since the last call to SDL_JoystickGetBall(), these motion deltas are placed into `dx` and `dy`.

Most joysticks do not have trackballs.

\param joystick the SDL_Joystick to query \param ball the ball index to query; ball indices start at index 0 \param dx stores the difference in the x axis position since the last poll \param dy stores the difference in the y axis position since the last poll \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickNumBalls

function SDL_JoystickGetButton(joystick: PSDL_Joystick; button: cint): cuint8; cdecl; external SDL_LibName;

Get the current state of a button on a joystick.

\param joystick an SDL_Joystick structure containing joystick information \param button the button index to get the state from; indices start at index 0 \returns 1 if the specified button is pressed, 0 otherwise.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickNumButtons

function SDL_JoystickGetDeviceGUID(device_index: cint): TSDL_JoystickGUID; cdecl; external SDL_LibName;

Return the GUID for the joystick at this index This can be called before any joysticks are opened.

function SDL_JoystickGetDeviceInstanceID(device_index: cint): TSDL_JoystickID; cdecl; external SDL_LibName;

Get the instance ID of a joystick.

This can be called before any joysticks are opened. If the index is out of range, this function will return -1.

\param device_index the index of the joystick to query (the N'th joystick on the system \returns the instance id of the selected joystick. If called on an invalid index, this function returns zero

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetDevicePlayerIndex(device_index: cint): cint; cdecl; external SDL_LibName;

Get the player index of a joystick, or -1 if it's not available This can be called before any joysticks are opened.

\since This function is available since SDL 2.0.9.

function SDL_JoystickGetDeviceProduct(device_index: cint): cuint16; cdecl; external SDL_LibName;

Get the USB product ID of a joystick, if available.

This can be called before any joysticks are opened. If the product ID isn't available this function returns 0.

\param device_index the index of the joystick to query (the N'th joystick on the system \returns the USB product ID of the selected joystick. If called on an invalid index, this function returns zero

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetDeviceProductVersion(device_index: cint): cuint16; cdecl; external SDL_LibName;

Get the product version of a joystick, if available.

This can be called before any joysticks are opened. If the product version isn't available this function returns 0.

\param device_index the index of the joystick to query (the N'th joystick on the system \returns the product version of the selected joystick. If called on an invalid index, this function returns zero

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetDeviceType(device_index: cint): TSDL_JoystickType; cdecl; external SDL_LibName;

Get the type of a joystick, if available.

This can be called before any joysticks are opened.

\param device_index the index of the joystick to query (the N'th joystick on the system \returns the SDL_JoystickType of the selected joystick. If called on an invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetDeviceVendor(device_index: cint): cuint16; cdecl; external SDL_LibName;

Get the USB vendor ID of a joystick, if available.

This can be called before any joysticks are opened. If the vendor ID isn't available this function returns 0.

\param device_index the index of the joystick to query (the N'th joystick on the system \returns the USB vendor ID of the selected joystick. If called on an invalid index, this function returns zero

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetFirmwareVersion(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;

Get the firmware version of an opened joystick, if available.

If the firmware version isn't available this function returns 0.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the firmware version of the selected joystick, or 0 if unavailable.

\since This function is available since SDL 2.24.0.

function SDL_JoystickGetGUID(joystick: PSDL_Joystick): TSDL_JoystickGUID; cdecl; external SDL_LibName;

Get the implementation-dependent GUID for the joystick.

This function requires an open joystick.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the GUID of the given joystick. If called on an invalid index, this function returns a zero GUID; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickGetDeviceGUID \sa SDL_JoystickGetGUIDString

function SDL_JoystickGetGUIDFromString(const pchGUID: PAnsiChar): TSDL_JoystickGUID; cdecl; external SDL_LibName;

Convert a GUID string into a SDL_JoystickGUID structure.

Performs no error checking. If this function is given a string containing an invalid GUID, the function will silently succeed, but the GUID generated will not be useful.

\param pchGUID string containing an ASCII representation of a GUID \returns a SDL_JoystickGUID structure.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickGetGUIDString

procedure SDL_JoystickGetGUIDString(guid: TSDL_JoystickGUID; pszGUID: PAnsiChar; cbGUID: cint); cdecl; external SDL_LibName;

Get an ASCII string representation for a given SDL_JoystickGUID.

You should supply at least 33 bytes for pszGUID.

\param guid the SDL_JoystickGUID you wish to convert to string \param pszGUID buffer in which to write the ASCII string \param cbGUID the size of pszGUID

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickGetDeviceGUID \sa SDL_JoystickGetGUID \sa SDL_JoystickGetGUIDFromString

function SDL_JoystickGetHat(joystick: PSDL_Joystick; hat: cint): cuint8; cdecl; external SDL_LibName;

Get the current state of a POV hat on a joystick.

The returned value will be one of the following positions:

- `SDL_HAT_CENTERED` - `SDL_HAT_UP` - `SDL_HAT_RIGHT` - `SDL_HAT_DOWN` - `SDL_HAT_LEFT` - `SDL_HAT_RIGHTUP` - `SDL_HAT_RIGHTDOWN` - `SDL_HAT_LEFTUP` - `SDL_HAT_LEFTDOWN`

\param joystick an SDL_Joystick structure containing joystick information \param hat the hat index to get the state from; indices start at index 0 \returns the current hat position.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickNumHats

function SDL_JoystickGetPlayerIndex(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;

Get the player index of an opened joystick.

For XInput controllers this returns the XInput user index. Many joysticks will not be able to supply this information.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the player index, or -1 if it's not available.

\since This function is available since SDL 2.0.9.

function SDL_JoystickGetProduct(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;

Get the USB product ID of an opened joystick, if available.

If the product ID isn't available this function returns 0.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the USB product ID of the selected joystick, or 0 if unavailable.

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetProductVersion(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;

Get the product version of an opened joystick, if available.

If the product version isn't available this function returns 0.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the product version of the selected joystick, or 0 if unavailable.

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetSerial(joystick: PSDL_Joystick): PAnsiChar; cdecl; external SDL_LibName;

Get the serial number of an opened joystick, if available.

Returns the serial number of the joystick, or NULL if it is not available.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the serial number of the selected joystick, or NULL if unavailable.

\since This function is available since SDL 2.0.14.

function SDL_JoystickGetType(joystick: PSDL_Joystick): TSDL_JoystickType; cdecl; external SDL_LibName;

Get the type of an opened joystick.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the SDL_JoystickType of the selected joystick.

\since This function is available since SDL 2.0.6.

function SDL_JoystickGetVendor(joystick: PSDL_Joystick): cuint16; cdecl; external SDL_LibName;

Get the USB vendor ID of an opened joystick, if available.

If the vendor ID isn't available this function returns 0.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the USB vendor ID of the selected joystick, or 0 if unavailable.

\since This function is available since SDL 2.0.6.

function SDL_JoystickHasLED(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a joystick has an LED.

An example of a joystick LED is the light on the back of a PlayStation 4's DualShock 4 controller.

\param joystick The joystick to query \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.14.

function SDL_JoystickHasRumble(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a joystick has rumble support.

\param joystick The joystick to query \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.18.

\sa SDL_JoystickRumble

function SDL_JoystickHasRumbleTriggers(joystick: PSDL_Joystick): TSDL_Bool; cdecl; external SDL_LibName;

Query whether a joystick has rumble support on triggers.

\param joystick The joystick to query \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.18.

\sa SDL_JoystickRumbleTriggers

function SDL_JoystickInstanceID(joystick: PSDL_Joystick): TSDL_JoystickID; cdecl; external SDL_LibName;

Get the instance ID of an opened joystick.

\param joystick an SDL_Joystick structure containing joystick information \returns the instance ID of the specified joystick on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickOpen

function SDL_JoystickIsHaptic(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;

Query if a joystick has haptic features.

\param joystick the SDL_Joystick to test for haptic capabilities \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticOpenFromJoystick

function SDL_JoystickIsVirtual(device_index: cint): TSDL_Bool; cdecl; external SDL_LibName;

Query whether or not the joystick at a given device index is virtual.

\param device_index a joystick device index. \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise.

\since This function is available since SDL 2.0.14.

function SDL_JoystickName(joystick: PSDL_Joystick): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent name of a joystick.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the name of the selected joystick. If no name can be found, this function returns NULL; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickNameForIndex \sa SDL_JoystickOpen

function SDL_JoystickNameForIndex(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent name of a joystick.

This can be called before any joysticks are opened.

\param device_index the index of the joystick to query (the N'th joystick on the system) \returns the name of the selected joystick. If no name can be found, this function returns NULL; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickName \sa SDL_JoystickOpen

function SDL_JoystickNumAxes(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;

Get the number of general axis controls on a joystick.

Often, the directional pad on a game controller will either look like 4 separate buttons or a POV hat, and not axes, but all of this is up to the device and platform.

\param joystick an SDL_Joystick structure containing joystick information \returns the number of axis controls/number of axes on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickGetAxis \sa SDL_JoystickOpen

function SDL_JoystickNumBalls(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;

Get the number of trackballs on a joystick.

Joystick trackballs have only relative motion events associated with them and their state cannot be polled.

Most joysticks do not have trackballs.

\param joystick an SDL_Joystick structure containing joystick information \returns the number of trackballs on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickGetBall

function SDL_JoystickNumButtons(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;

Get the number of buttons on a joystick.

\param joystick an SDL_Joystick structure containing joystick information \returns the number of buttons on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickGetButton \sa SDL_JoystickOpen

function SDL_JoystickNumHats(joystick: PSDL_Joystick): cint; cdecl; external SDL_LibName;

Get the number of POV hats on a joystick.

\param joystick an SDL_Joystick structure containing joystick information \returns the number of POV hats on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickGetHat \sa SDL_JoystickOpen

function SDL_JoystickOpen(device_index: cint): PSDL_Joystick; cdecl; external SDL_LibName;

Open a joystick for use.

The `device_index` argument refers to the N'th joystick presently recognized by SDL on the system. It is **NOT** the same as the instance ID used to identify the joystick in future events. See SDL_JoystickInstanceID() for more details about instance IDs.

The joystick subsystem must be initialized before a joystick can be opened for use.

\param device_index the index of the joystick to query \returns a joystick identifier or NULL if an error occurred; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickClose \sa SDL_JoystickInstanceID

function SDL_JoystickPath(joystick: PSDL_Joystick): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent path of a joystick.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \returns the path of the selected joystick. If no path can be found, this function returns NULL; call SDL_GetError() for more information.

\since This function is available since SDL 2.24.0.

\sa SDL_JoystickPathForIndex

function SDL_JoystickPathForIndex(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent path of a joystick.

This can be called before any joysticks are opened.

\param device_index the index of the joystick to query (the N'th joystick on the system) \returns the path of the selected joystick. If no path can be found, this function returns NULL; call SDL_GetError() for more information.

\since This function is available since SDL 2.24.0.

\sa SDL_JoystickPath \sa SDL_JoystickOpen

function SDL_JoystickRumble(joystick: PSDL_Joystick; low_frequency_rumble: cuint16; high_frequency_rumble: cuint16; duration_ms: cuint32): cint; cdecl; external SDL_LibName;

Start a rumble effect.

Each call to this function cancels any previous rumble effect, and calling it with 0 intensity stops any rumbling.

\param joystick The joystick to vibrate \param low_frequency_rumble The intensity of the low frequency (left) rumble motor, from 0 to 0xFFFF \param high_frequency_rumble The intensity of the high frequency (right) rumble motor, from 0 to 0xFFFF \param duration_ms The duration of the rumble effect, in milliseconds \returns 0, or -1 if rumble isn't supported on this joystick

\since This function is available since SDL 2.0.9.

\sa SDL_JoystickHasRumble

function SDL_JoystickRumbleTriggers(joystick: PSDL_Joystick; left_rumble: cuint16; right_rumble: cuint16; duration_ms: cuint32): cint; cdecl; external SDL_LibName;

Start a rumble effect in the joystick's triggers

Each call to this function cancels any previous trigger rumble effect, and calling it with 0 intensity stops any rumbling.

Note that this is rumbling of the _triggers_ and not the game controller as a whole. This is currently only supported on Xbox One controllers. If you want the (more common) whole-controller rumble, use SDL_JoystickRumble() instead.

\param joystick The joystick to vibrate \param left_rumble The intensity of the left trigger rumble motor, from 0 to 0xFFFF \param right_rumble The intensity of the right trigger rumble motor, from 0 to 0xFFFF \param duration_ms The duration of the rumble effect, in milliseconds \returns 0, or -1 if trigger rumble isn't supported on this joystick

\since This function is available since SDL 2.0.14.

\sa SDL_JoystickHasRumbleTriggers

function SDL_JoystickSendEffect(joystick: PSDL_Joystick; const data: Pointer; size: cint): cint; cdecl; external SDL_LibName;

Send a joystick specific effect packet

\param joystick The joystick to affect \param data The data to send to the joystick \param size The size of the data to send to the joystick \returns 0, or -1 if this joystick or driver doesn't support effect packets

\since This function is available since SDL 2.0.16.

function SDL_JoystickSetLED(joystick: PSDL_Joystick; red: cuint8; green: cuint8; blue: cuint8): cint; cdecl; external SDL_LibName;

Update a joystick's LED color.

An example of a joystick LED is the light on the back of a PlayStation 4's DualShock 4 controller.

\param joystick The joystick to update \param red The intensity of the red LED \param green The intensity of the green LED \param blue The intensity of the blue LED \returns 0 on success, -1 if this joystick does not have a modifiable LED

\since This function is available since SDL 2.0.14.

procedure SDL_JoystickSetPlayerIndex(joystick: PSDL_Joystick; player_index: cint); cdecl; external SDL_LibName;

Set the player index of an opened joystick.

\param joystick the SDL_Joystick obtained from SDL_JoystickOpen() \param player_index Player index to assign to this joystick, or -1 to clear the player index and turn off player LEDs.

\since This function is available since SDL 2.0.12.

function SDL_JoystickSetVirtualAxis(joystick: PSDL_Joystick; axis: cint; value: cint16): cint; cdecl; external SDL_LibName;

Set values on an opened, virtual-joystick's axis.

Please note that values set here will not be applied until the next call to SDL_JoystickUpdate, which can either be called directly, or can be called indirectly through various other SDL APIs, including, but not limited to the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, SDL_WaitEvent.

Note that when sending trigger axes, you should scale the value to the full range of Sint16. For example, a trigger at rest would have the value of `SDL_JOYSTICK_AXIS_MIN`.

\param joystick the virtual joystick on which to set state. \param axis the specific axis on the virtual joystick to set. \param value the new value for the specified axis. \returns 0 on success, -1 on error.

\since This function is available since SDL 2.0.14.

function SDL_JoystickSetVirtualButton(joystick: PSDL_Joystick; button: cint; value: cuint8): cint; cdecl; external SDL_LibName;

Set values on an opened, virtual-joystick's button.

Please note that values set here will not be applied until the next call to SDL_JoystickUpdate, which can either be called directly, or can be called indirectly through various other SDL APIs, including, but not limited to the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, SDL_WaitEvent.

\param joystick the virtual joystick on which to set state. \param button the specific button on the virtual joystick to set. \param value the new value for the specified button. \returns 0 on success, -1 on error.

\since This function is available since SDL 2.0.14.

function SDL_JoystickSetVirtualHat(joystick: PSDL_Joystick; hat: cint; value: cuint8): cint; cdecl; external SDL_LibName;

Set values on an opened, virtual-joystick's hat.

Please note that values set here will not be applied until the next call to SDL_JoystickUpdate, which can either be called directly, or can be called indirectly through various other SDL APIs, including, but not limited to the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, SDL_WaitEvent.

\param joystick the virtual joystick on which to set state. \param hat the specific hat on the virtual joystick to set. \param value the new value for the specified hat. \returns 0 on success, -1 on error.

\since This function is available since SDL 2.0.14.

procedure SDL_JoystickUpdate(); cdecl; external SDL_LibName;

Update the current state of the open joysticks.

This is called automatically by the event loop if any joystick events are enabled.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickEventState

function SDL_LoadBMP(_file: PAnsiChar): PSDL_Surface;

Load a surface from a file.

Convenience macro.

function SDL_LoadBMP_RW(src: PSDL_RWops; freesrc: cint): PSDL_Surface; cdecl; external SDL_LibName;

Load a surface from a seekable SDL data stream (memory or file).

If freesrc is non-zero, the stream will be closed after being read.

The new surface should be freed with SDL_FreeSurface().

the new surface, or NULL if there was an error.

function SDL_LoadDollarTemplates(touchId: TSDL_TouchID; src: PSDL_RWops): cint; cdecl; external SDL_LibName;

Load Dollar Gesture templates from a file.

\param touchId a touch id \param src a SDL_RWops to load from \returns the number of loaded templates on success or a negative error code (or 0) on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_SaveAllDollarTemplates \sa SDL_SaveDollarTemplate

function SDL_LoadFile(file_: PAnsiChar; datasize: pcsize_t): Pointer; cdecl; external SDL_LibName;

Load an entire file.

The data is allocated with a zero byte at the end (null terminated)

If \c datasize is not NULL, it is filled with the size of the data read.

If \c freesrc is non-zero, the stream will be closed after being read.

The data should be freed with SDL_free().

\return the data, or NULL if there was an error.

function SDL_LoadFile_RW(src: PSDL_RWops; datasize: pcsize_t; freesrc: cint): Pointer; cdecl; external SDL_LibName;

Load all the data from an SDL data stream.

The data is allocated with a zero byte at the end (null terminated)

If \c datasize is not NULL, it is filled with the size of the data read.

If \c freesrc is non-zero, the stream will be closed after being read.

The data should be freed with SDL_free().

\return the data, or NULL if there was an error.

function SDL_LoadFunction(handle: Pointer; name: PAnsiChar): Pointer; cdecl; external SDL_LibName;

Look up the address of the named function in a shared object.

This function pointer is no longer valid after calling SDL_UnloadObject().

This function can only look up C function names. Other languages may have name mangling and intrinsic language support that varies from compiler to compiler.

Make sure you declare your function pointers with the same calling convention as the actual library function. Your code will crash mysteriously if you do not do this.

If the requested function doesn't exist, nil is returned.

\param handle a valid shared object handle returned by SDL_LoadObject() \param name the name of the function to look up \returns a pointer to the function or nil if there was an error; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_LoadObject \sa SDL_UnloadObject

function SDL_LoadObject(sofile: PAnsiChar): Pointer; cdecl; external SDL_LibName;

Dynamically load a shared object.

\param sofile a system-dependent name of the object file \returns an opaque pointer to the object handle or nil if there was an error; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_LoadFunction \sa SDL_UnloadObject

function SDL_LoadWAV(file_: PAnsiChar; spec: PSDL_AudioSpec; audio_buf: ppcuint8; audio_len: pcuint32): PSDL_AudioSpec;

Loads a WAV from a file. Compatibility convenience function.

function SDL_LoadWAV_RW(src: PSDL_RWops; freesrc: cint; spec: PSDL_AudioSpec; audio_buf: ppcuint8; audio_len: pcuint32): PSDL_AudioSpec; cdecl; external SDL_LibName;

Load the audio data of a WAVE file into memory.

Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to be valid pointers. The entire data portion of the file is then loaded into memory and decoded if necessary.

If `freesrc` is non-zero, the data source gets automatically closed and freed before the function returns.

Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and A-law and mu-law (8 bits). Other formats are currently unsupported and cause an error.

If this function succeeds, the pointer returned by it is equal to `spec` and the pointer to the audio data allocated by the function is written to `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec members `freq`, `channels`, and `format` are set to the values of the audio data in the buffer. The `samples` member is set to a sane default and all others are set to zero.

It's necessary to use SDL_FreeWAV() to free the audio data returned in `audio_buf` when it is no longer used.

Because of the underspecification of the .WAV format, there are many problematic files in the wild that cause issues with strict decoders. To provide compatibility with these files, this decoder is lenient in regards to the truncation of the file, the fact chunk, and the size of the RIFF chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`, `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to tune the behavior of the loading process.

Any file that is invalid (due to truncation, corruption, or wrong values in the headers), too big, or unsupported causes an error. Additionally, any critical I/O error from the data source will terminate the loading process with an error. The function returns NULL on error and in all cases (with the exception of `src` being NULL), an appropriate error message will be set.

It is required that the data source supports seeking.

Example:

```c SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len); ```

Note that the SDL_LoadWAV macro does this same thing for you, but in a less messy way:

```c SDL_LoadWAV("sample.wav", &spec, &buf, &len); ```

\param src The data source for the WAVE data \param freesrc If non-zero, SDL will _always_ free the data source \param spec An SDL_AudioSpec that will be filled in with the wave file's format details \param audio_buf A pointer filled with the audio data, allocated by the function. \param audio_len A pointer filled with the length of the audio data buffer in bytes \returns This function, if successfully called, returns `spec`, which will be filled with the audio data format of the wave source data. `audio_buf` will be filled with a pointer to an allocated buffer containing the audio data, and `audio_len` is filled with the length of that audio buffer in bytes.

This function returns NULL if the .WAV file cannot be opened, uses an unknown data format, or is corrupt; call SDL_GetError() for more information.

When the application is done with the data returned in `audio_buf`, it should call SDL_FreeWAV() to dispose of it.

\since This function is available since SDL 2.0.0.

\sa SDL_FreeWAV \sa SDL_LoadWAV

procedure SDL_LockAudio; cdecl; external SDL_LibName;

This function is a legacy means of locking the audio device.

New programs might want to use SDL_LockAudioDevice() instead. This function is equivalent to calling...

```c SDL_LockAudioDevice(1); ```

...and is only useful if you used the legacy SDL_OpenAudio() function.

\since This function is available since SDL 2.0.0.

\sa SDL_LockAudioDevice \sa SDL_UnlockAudio \sa SDL_UnlockAudioDevice

procedure SDL_LockAudioDevice(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;

Use this function to lock out the audio callback function for a specified device.

The lock manipulated by these functions protects the audio callback function specified in SDL_OpenAudioDevice(). During a SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed that the callback function for that device is not running, even if the device is not paused. While a device is locked, any other unpaused, unlocked devices may still run their callbacks.

Calling this function from inside your audio callback is unnecessary. SDL obtains this lock before calling your function, and releases it when the function returns.

You should not hold the lock longer than absolutely necessary. If you hold it too long, you'll experience dropouts in your audio playback. Ideally, your application locks the device, sets a few variables and unlocks again. Do not do heavy work while holding the lock for a device.

It is safe to lock the audio device multiple times, as long as you unlock it an equivalent number of times. The callback will not run until the device has been unlocked completely in this way. If your application fails to unlock the device appropriately, your callback will never run, you might hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably deadlock.

Internally, the audio device lock is a mutex; if you lock from two threads at once, not only will you block the audio callback, you'll block the other thread.

\param dev the ID of the device to be locked

\since This function is available since SDL 2.0.0.

\sa SDL_UnlockAudioDevice

procedure SDL_LockJoysticks(); cdecl; external SDL_LibName;

Locking for multi-threaded access to the joystick API

If you are using the joystick API or handling events from multiple threads you should use these locking functions to protect access to the joysticks.

In particular, you are guaranteed that the joystick list won't change, so the API functions that take a joystick index will be valid, and joystick and game controller events will not be delivered.

As of SDL 2.26.0, you can take the joystick lock around reinitializing the joystick subsystem, to prevent other threads from seeing joysticks in an uninitialized state. However, all open joysticks will be closed and SDL functions called with them will fail.

\since This function is available since SDL 2.0.7.

function SDL_LockMutex(mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;

Lock the mutex.

This will block until the mutex is available, which is to say it is in the unlocked state and the OS has chosen the caller as the next thread to lock it. Of all threads waiting to lock the mutex, only one may do so at a time.

It is legal for the owning thread to lock an already-locked mutex. It must unlock it the same number of times before it is actually made available for other threads in the system (this is known as a "recursive mutex").

\param mutex the mutex to lock \return 0, or -1 on error.

\since This function is available since SDL 2.0.0.

procedure SDL_LockSensors(); cdecl; external SDL_LibName;

Locking for multi-threaded access to the sensor API

If you are using the sensor API or handling events from multiple threads you should use these locking functions to protect access to the sensors.

In particular, you are guaranteed that the sensor list won't change, so the API functions that take a sensor index will be valid, and sensor events will not be delivered.

\since This function is available since SDL 2.0.14.

function SDL_LockSurface(surface: PSDL_Surface): cint; cdecl; external SDL_LibName;

Sets up a surface for directly accessing the pixels.

Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to and read from surface.pixels, using the pixel format stored in surface.format. Once you are done accessing the surface, you should use SDL_UnlockSurface() to release it.

Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates to 0, then you can read and write to the surface at any time, and the pixel format of the surface will not change.

No operating system or library calls should be made between lock/unlock pairs, as critical system locks may be held during this time.

SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked.

SDL_UnlockSurface()

function SDL_LockTexture(texture: PSDL_Texture; const rect: PSDL_Rect; pixels: PPointer; pitch: pcint): cint; cdecl; external SDL_LibName;

Lock a portion of the texture for write-only pixel access.

texture The texture to lock for access, which was created with SDL_TEXTUREACCESS_STREAMING. rect A pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked. pixels This is filled in with a pointer to the locked pixels, appropriately offset by the locked area. pitch This is filled in with the pitch of the locked pixels.

0 on success, or -1 if the texture is not valid or was not created with ::SDL_TEXTUREACCESS_STREAMING.

SDL_UnlockTexture()

function SDL_LockTextureToSurface(texture: PSDL_Texture; const rect: PSDL_Rect; surface: PPSDL_Surface): cint; cdecl; external SDL_LibName;

\brief Lock a portion of the texture for write-only pixel access. Expose it as a SDL surface.

\param texture The texture to lock for access, which was created with ::SDL_TEXTUREACCESS_STREAMING. \param rect A pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked. \param surface This is filled in with a SDL surface representing the locked area Surface is freed internally after calling SDL_UnlockTexture or SDL_DestroyTexture.

\return 0 on success, or -1 if the texture is not valid or was not created with ::SDL_TEXTUREACCESS_STREAMING.

\sa SDL_UnlockTexture()

procedure SDL_Log(const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO

function SDL_log10(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the base 10 logarithm of x.

\since This function is available since SDL 2.0.8.

function SDL_log10f(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the base 10 logarithm of x.

\since This function is available since SDL 2.0.8.

procedure SDL_LogCritical(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with SDL_LOG_PRIORITY_CRITICAL

procedure SDL_LogDebug(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with SDL_LOG_PRIORITY_DEBUG

procedure SDL_LogError(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with SDL_LOG_PRIORITY_ERROR

procedure SDL_LogGetOutputFunction(callback: PSDL_LogOutputFunction; userdata: PPointer); cdecl; external SDL_LibName;

\brief Get the current log output function.

function SDL_LogGetPriority(category: TSDL_LogCategory): TSDL_LogPriority; cdecl; external SDL_LibName;

\brief Get the priority of a particular log category

procedure SDL_LogInfo(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with SDL_LOG_PRIORITY_INFO

procedure SDL_LogMessage(category: TSDL_LogCategory; priority: TSDL_LogPriority; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with the specified category and priority.

procedure SDL_LogMessageV(category: TSDL_LogCategory; priority: TSDL_LogPriority; const fmt: PAnsiChar; ap: array of const); cdecl; external SDL_LibName;

\brief Log a message with the specified category and priority.

procedure SDL_LogResetPriorities(); cdecl; external SDL_LibName;

\brief Reset all priorities to default.

\note This is called in SDL_Quit().

procedure SDL_LogSetAllPriority(priority: TSDL_LogPriority); cdecl; external SDL_LibName;

\brief Set the priority of all log categories

procedure SDL_LogSetOutputFunction(callback: TSDL_LogOutputFunction; userdata: Pointer); cdecl; external SDL_LibName;

\brief This function allows you to replace the default log output function with one of your own.

procedure SDL_LogSetPriority(category: TSDL_LogCategory; priority: TSDL_LogPriority); cdecl; external SDL_LibName;

\brief Set the priority of a particular log category

procedure SDL_LogVerbose(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with SDL_LOG_PRIORITY_VERBOSE

procedure SDL_LogWarn(category: TSDL_LogCategory; const fmt: PAnsiChar; pars: array of const); cdecl; external SDL_LibName;

\brief Log a message with SDL_LOG_PRIORITY_WARN

function SDL_LowerBlit(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;

This is a semi-private blit function and it performs low-level surface blitting only.

function SDL_LowerBlitScaled(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;

This is a semi-private blit function and it performs low-level surface scaled blitting only.

function SDL_lround(x: cdouble): clong; cdecl; external SDL_LibName;

Round to nearest integer, away from zero.

\since This function is available since SDL 2.0.16.

function SDL_lroundf(x: cfloat): clong; cdecl; external SDL_LibName;

Round to nearest integer, away from zero.

\since This function is available since SDL 2.0.16.

function SDL_malloc(size: csize_t): Pointer; cdecl; external SDL_LibName;

Allocate a block of memory. The memory is *not* initialized.

function SDL_MapRGB(const format: PSDL_PixelFormat; r: cuint8; g: cuint8; b: cuint8): cuint32; cdecl; external SDL_LibName;

Map an RGB triple to an opaque pixel value for a given pixel format.

This function maps the RGB color value to the specified pixel format and returns the pixel value best approximating the given RGB color value for the given pixel format.

If the format has a palette (8-bit) the index of the closest matching color in the palette will be returned.

If the specified pixel format has an alpha component it will be returned as all 1 bits (fully opaque).

If the pixel format bpp (color depth) is less than 32-bpp then the unused upper bits of the return value can safely be ignored (e.g., with a 16-bpp format the return value can be assigned to a Uint16, and similarly a Uint8 for an 8-bpp format).

\param format an SDL_PixelFormat structure describing the pixel format \param r the red component of the pixel in the range 0-255 \param g the green component of the pixel in the range 0-255 \param b the blue component of the pixel in the range 0-255 \returns a pixel value

\since This function is available since SDL 2.0.0.

\sa SDL_GetRGB \sa SDL_GetRGBA \sa SDL_MapRGBA

function SDL_MapRGBA(const format: PSDL_PixelFormat; r: cuint8; g: cuint8; b: cuint8; a: cuint8): cuint32; cdecl; external SDL_LibName;

Map an RGBA quadruple to a pixel value for a given pixel format.

This function maps the RGBA color value to the specified pixel format and returns the pixel value best approximating the given RGBA color value for the given pixel format.

If the specified pixel format has no alpha component the alpha value will be ignored (as it will be in formats with a palette).

If the format has a palette (8-bit) the index of the closest matching color in the palette will be returned.

If the pixel format bpp (color depth) is less than 32-bpp then the unused upper bits of the return value can safely be ignored (e.g., with a 16-bpp format the return value can be assigned to a Uint16, and similarly a Uint8 for an 8-bpp format).

\param format an SDL_PixelFormat structure describing the format of the pixel \param r the red component of the pixel in the range 0-255 \param g the green component of the pixel in the range 0-255 \param b the blue component of the pixel in the range 0-255 \param a the alpha component of the pixel in the range 0-255 \returns a pixel value

\since This function is available since SDL 2.0.0.

\sa SDL_GetRGB \sa SDL_GetRGBA \sa SDL_MapRGB

function SDL_MasksToPixelFormatEnum(bpp: cint; Rmask: cuint32; Gmask: cuint32; Bmask: cuint32; Amask: cuint32): cuint32; cdecl; external SDL_LibName;

Convert a bpp value and RGBA masks to an enumerated pixel format.

This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't possible.

\param bpp a bits per pixel value; usually 15, 16, or 32 \param Rmask the red mask for the format \param Gmask the green mask for the format \param Bmask the blue mask for the format \param Amask the alpha mask for the format \returns one of the SDL_PixelFormatEnum values

\since This function is available since SDL 2.0.0.

\sa SDL_PixelFormatEnumToMasks

procedure SDL_MaximizeWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Make a window as large as possible.

SDL_RestoreWindow()

procedure SDL_MinimizeWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Minimize a window to an iconic representation.

SDL_RestoreWindow()

procedure SDL_MixAudio(dst: pcuint8; src: pcuint8; len: cuint32; volume: cint); cdecl; external SDL_LibName;

This function is a legacy means of mixing audio.

This function is equivalent to calling...

```c SDL_MixAudioFormat(dst, src, format, len, volume); ```

...where `format` is the obtained format of the audio device from the legacy SDL_OpenAudio() function.

\param dst the destination for the mixed audio \param src the source audio buffer to be mixed \param len the length of the audio buffer in bytes \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME for full audio volume

\since This function is available since SDL 2.0.0.

\sa SDL_MixAudioFormat

procedure SDL_MixAudioFormat(dst: pcuint8; src: pcuint8; format: TSDL_AudioFormat; len: cuint32; volume: cint); cdecl; external SDL_LibName;

Mix audio data in a specified format.

This takes an audio buffer `src` of `len` bytes of `format` data and mixes it into `dst`, performing addition, volume adjustment, and overflow clipping. The buffer pointed to by `dst` must also be `len` bytes of `format` data.

This is provided for convenience – you can mix your own audio data.

Do not use this function for mixing together more than two streams of sample data. The output from repeated application of this function may be distorted by clipping, because there is no accumulator with greater range than the input (not to mention this being an inefficient way of doing it).

It is a common misconception that this function is required to write audio data to an output stream in an audio callback. While you can do that, SDL_MixAudioFormat() is really only needed when you're mixing a single audio stream with a volume adjustment.

\param dst the destination for the mixed audio \param src the source audio buffer to be mixed \param format the SDL_AudioFormat structure representing the desired audio format \param len the length of the audio buffer in bytes \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME for full audio volume

\since This function is available since SDL 2.0.0.

function SDL_MouseIsHaptic: cint; cdecl; external SDL_LibName;

Query whether or not the current mouse has haptic capabilities.

\returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticOpenFromMouse

function SDL_MUSTLOCK(Const S:PSDL_Surface):Boolean;

Evaluates to true if the surface needs to be locked before access.

function SDL_NewAudioStream(src_format: TSDL_AudioFormat; src_channels: cuint8; src_rate: cint; dst_format: TSDL_AudioFormat; dst_channels: cuint8; dst_rate: cint): PSDL_AudioStream; cdecl; external SDL_LibName;

Create a new audio stream.

\param src_format The format of the source audio \param src_channels The number of channels of the source audio \param src_rate The sampling rate of the source audio \param dst_format The format of the desired audio output \param dst_channels The number of channels of the desired audio output \param dst_rate The sampling rate of the desired audio output \returns 0 on success, or -1 on error.

\since This function is available since SDL 2.0.7.

\sa SDL_AudioStreamPut \sa SDL_AudioStreamGet \sa SDL_AudioStreamAvailable \sa SDL_AudioStreamFlush \sa SDL_AudioStreamClear \sa SDL_FreeAudioStream

function SDL_nlog(x: cdouble): cdouble; cdecl; external SDL_LibName name '_SDL_log';

Calculate the natural logarithm of x.

\since This function is available since SDL 2.0.4.

SDL2-for-Pascal: ATTENTION: The original C name of this function is SDL_log, but since Pascal names are case-insensitive, it is in conflict with SDL_Log (logging function). Hence we decided to rename it.

function SDL_nlogf(x: cfloat): cfloat; cdecl; external SDL_LibName name '_SDL_logf';

Calculate the natural logarithm of x.

\since This function is available since SDL 2.0.8.

SDL2-for-Pascal: ATTENTION: The original C name of this function is SDL_logf, but to be consistent with the renamed SDL_log function (see comment of SDL_nlog for details), we decided to rename it.

function SDL_NumHaptics: cint; cdecl; external SDL_LibName;

Count the number of haptic devices attached to the system.

\returns the number of haptic devices detected on the system or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_HapticName

function SDL_NumJoysticks(): cint; cdecl; external SDL_LibName;

Count the number of joysticks attached to the system.

\returns the number of attached joysticks on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_JoystickName \sa SDL_JoystickPath \sa SDL_JoystickOpen

function SDL_NumSensors(): cint; cdecl; external SDL_LibName;

Count the number of sensors attached to the system right now.

\returns the number of sensors detected.

\since This function is available since SDL 2.0.9.

procedure SDL_OnApplicationDidBecomeActive(); cdecl; external SDL_LibName;
 
procedure SDL_OnApplicationDidEnterBackground(); cdecl; external SDL_LibName;
 
procedure SDL_OnApplicationDidReceiveMemoryWarning(); cdecl; external SDL_LibName;
 
procedure SDL_OnApplicationWillEnterForeground(); cdecl; external SDL_LibName;
 
procedure SDL_OnApplicationWillResignActive(); cdecl; external SDL_LibName;
 
procedure SDL_OnApplicationWillTerminate(); cdecl; external SDL_LibName;

Functions used by iOS application delegates to notify SDL about state changes

function SDL_OpenAudio(desired: PSDL_AudioSpec; obtained: PSDL_AudioSpec): cint; cdecl; external SDL_LibName;

This function is a legacy means of opening the audio device.

This function remains for compatibility with SDL 1.2, but also because it's slightly easier to use than the new functions in SDL 2.0. The new, more powerful, and preferred way to do this is SDL_OpenAudioDevice().

This function is roughly equivalent to:

```c SDL_OpenAudioDevice(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); ```

With two notable exceptions:

- If `obtained` is NULL, we use `desired` (and allow no changes), which means desired will be modified to have the correct values for silence, etc, and SDL will convert any differences between your app's specific request and the hardware behind the scenes. - The return value is always success or failure, and not a device ID, which means you can only have one device open at a time with this function.

\param desired an SDL_AudioSpec structure representing the desired output format. Please refer to the SDL_OpenAudioDevice documentation for details on how to prepare this structure. \param obtained an SDL_AudioSpec structure filled in with the actual parameters, or NULL. \returns 0 if successful, placing the actual hardware parameters in the structure pointed to by `obtained`.

If `obtained` is NULL, the audio data passed to the callback function will be guaranteed to be in the requested format, and will be automatically converted to the actual hardware audio format if necessary. If `obtained` is NULL, `desired` will have fields modified.

This function returns a negative error code on failure to open the audio device or failure to set up the audio thread; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_CloseAudio \sa SDL_LockAudio \sa SDL_PauseAudio \sa SDL_UnlockAudio

function SDL_OpenAudioDevice(device: PAnsiChar; iscapture: cint; desired: PSDL_AudioSpec; obtained: PSDL_AudioSpec; allowed_changes: cint): TSDL_AudioDeviceID; cdecl; external SDL_LibName;

Open a specific audio device.

SDL_OpenAudio(), unlike this function, always acts on device ID 1. As such, this function will never return a 1 so as not to conflict with the legacy function.

Please note that SDL 2.0 before 2.0.5 did not support recording; as such, this function would fail if `iscapture` was not zero. Starting with SDL 2.0.5, recording is implemented and this value can be non-zero.

Passing in a `device` name of NULL requests the most reasonable default (and is equivalent to what SDL_OpenAudio() does to choose a device). The `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but some drivers allow arbitrary and driver-specific strings, such as a hostname/IP address for a remote audio server, or a filename in the diskaudio driver.

An opened audio device starts out paused, and should be enabled for playing by calling SDL_PauseAudioDevice(devid, 0) when you are ready for your audio callback function to be called. Since the audio driver may modify the requested size of the audio buffer, you should allocate any local mixing buffers after you open the audio device.

The audio callback runs in a separate thread in most cases; you can prevent race conditions between your callback and other threads without fully pausing playback with SDL_LockAudioDevice(). For more information about the callback, see SDL_AudioSpec.

Managing the audio spec via 'desired' and 'obtained':

When filling in the desired audio spec structure:

- `desired->freq` should be the frequency in sample-frames-per-second (Hz). - `desired->format` should be the audio format (`AUDIO_S16SYS`, etc). - `desired->samples` is the desired size of the audio buffer, in _sample frames_ (with stereo output, two samples–left and right–would make a single sample frame). This number should be a power of two, and may be adjusted by the audio driver to a value more suitable for the hardware. Good values seem to range between 512 and 8096 inclusive, depending on the application and CPU speed. Smaller values reduce latency, but can lead to underflow if the application is doing heavy processing and cannot fill the audio buffer in time. Note that the number of sample frames is directly related to time by the following formula: `ms = (sampleframes*1000)/freq` - `desired->size` is the size in _bytes_ of the audio buffer, and is calculated by SDL_OpenAudioDevice(). You don't initialize this. - `desired->silence` is the value used to set the buffer to silence, and is calculated by SDL_OpenAudioDevice(). You don't initialize this. - `desired->callback` should be set to a function that will be called when the audio device is ready for more data. It is passed a pointer to the audio buffer, and the length in bytes of the audio buffer. This function usually runs in a separate thread, and so you should protect data structures that it accesses by calling SDL_LockAudioDevice() and SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL pointer here, and call SDL_QueueAudio() with some frequency, to queue more audio samples to be played (or for capture devices, call SDL_DequeueAudio() with some frequency, to obtain audio samples). - `desired->userdata` is passed as the first parameter to your callback function. If you passed a NULL callback, this value is ignored.

`allowed_changes` can have the following flags OR'd together:

- `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE` - `SDL_AUDIO_ALLOW_FORMAT_CHANGE` - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE` - `SDL_AUDIO_ALLOW_SAMPLES_CHANGE` - `SDL_AUDIO_ALLOW_ANY_CHANGE`

These flags specify how SDL should behave when a device cannot offer a specific feature. If the application requests a feature that the hardware doesn't offer, SDL will always try to get the closest equivalent.

For example, if you ask for float32 audio format, but the sound card only supports int16, SDL will set the hardware to int16. If you had set SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained` structure. If that flag was *not* set, SDL will prepare to convert your callback's float32 audio to int16 before feeding it to the hardware and will keep the originally requested format in the `obtained` structure.

The resulting audio specs, varying depending on hardware and on what changes were allowed, will then be written back to `obtained`.

If your application can only handle one specific data format, pass a zero for `allowed_changes` and let SDL transparently handle any differences.

\param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a driver-specific name as appropriate. NULL requests the most reasonable default device. \param iscapture non-zero to specify a device should be opened for recording, not playback \param desired an SDL_AudioSpec structure representing the desired output format; see SDL_OpenAudio() for more information \param obtained an SDL_AudioSpec structure filled in with the actual output format; see SDL_OpenAudio() for more information \param allowed_changes 0, or one or more flags OR'd together \returns a valid device ID that is > 0 on success or 0 on failure; call SDL_GetError() for more information.

For compatibility with SDL 1.2, this will never return 1, since SDL reserves that ID for the legacy SDL_OpenAudio() function.

\since This function is available since SDL 2.0.0.

\sa SDL_CloseAudioDevice \sa SDL_GetAudioDeviceName \sa SDL_LockAudioDevice \sa SDL_OpenAudio \sa SDL_PauseAudioDevice \sa SDL_UnlockAudioDevice

function SDL_OpenURL(const url: PAnsiChar): cint; cdecl; external SDL_LibName;

\brief Open an URL / URI in the browser or other

Open a URL in a separate, system-provided application. How this works will vary wildly depending on the platform. This will likely launch what makes sense to handle a specific URL's protocol (a web browser for http://, etc), but it might also be able to launch file managers for directories and other things.

What happens when you open a URL varies wildly as well: your game window may lose focus (and may or may not lose focus if your game was fullscreen or grabbing input at the time). On mobile devices, your app will likely move to the background or your process might be paused. Any given platform may or may not handle a given URL.

If this is unimplemented (or simply unavailable) for a platform, this will fail with an error. A successful result does not mean the URL loaded, just that we launched something to handle it (or at least believe we did).

All this to say: this function can be useful, but you should definitely test it on every platform you target.

\param url A valid URL to open. \return 0 on success, or -1 on error.

procedure SDL_PauseAudio(pause_on: cint); cdecl; external SDL_LibName;

This function is a legacy means of pausing the audio device.

New programs might want to use SDL_PauseAudioDevice() instead. This function is equivalent to calling...

```c SDL_PauseAudioDevice(1, pause_on); ```

...and is only useful if you used the legacy SDL_OpenAudio() function.

\param pause_on non-zero to pause, 0 to unpause

\since This function is available since SDL 2.0.0.

\sa SDL_GetAudioStatus \sa SDL_PauseAudioDevice

procedure SDL_PauseAudioDevice(dev: TSDL_AudioDeviceID; pause_on: cint); cdecl; external SDL_LibName;

Use this function to pause and unpause audio playback on a specified device.

This function pauses and unpauses the audio callback processing for a given device. Newly-opened audio devices start in the paused state, so you must call this function with **pause_on**=0 after opening the specified audio device to start playing sound. This allows you to safely initialize data for your callback function after opening the audio device. Silence will be written to the audio device while paused, and the audio callback is guaranteed to not be called. Pausing one device does not prevent other unpaused devices from running their callbacks.

Pausing state does not stack; even if you pause a device several times, a single unpause will start the device playing again, and vice versa. This is different from how SDL_LockAudioDevice() works.

If you just need to protect a few variables from race conditions vs your callback, you shouldn't pause the audio device, as it will lead to dropouts in the audio playback. Instead, you should use SDL_LockAudioDevice().

\param dev a device opened by SDL_OpenAudioDevice() \param pause_on non-zero to pause, 0 to unpause

\since This function is available since SDL 2.0.0.

\sa SDL_LockAudioDevice

function SDL_PeepEvents(events: PSDL_Event; numevents: cint32; action: TSDL_EventAction; minType, maxType: TSDL_EventType): cint32 cdecl; external SDL_LibName;

Checks the event queue for messages and optionally returns them.

If action is SDL_ADDEVENT, up to numevents events will be added to the back of the event queue.

If action is SDL_PEEKEVENT, up to numevents events at the front of the event queue, within the specified minimum and maximum type, will be returned and will not be removed from the queue.

If action is SDL_GETEVENT, up to numevents events at the front of the event queue, within the specified minimum and maximum type, will be returned and will be removed from the queue.

Result: The number of events actually stored, or -1 if there was an error.

This function is thread-safe.

function SDL_PIXELFLAG(X: cuint32): cuint32;

SDL2-for-Pascal: The SDL_DEFINE_PIXELFORMAT macro returns the underlying pixel format based on five arguments.

The original C macro: #define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ ((bits) << 8) | ((bytes) << 0))

This C implementation could be replaced by a Pascal function, but from a performance stand point this will be slower. Therefore we decided to keep it as it has been implemented before by the original binding authors and translate every pixel format constant by the very same expression:

SDL_PIXELFORMAT_[...] = (1 shl 28) or (SDL_PIXELTYPE_[...] shl 24) or (SDL_BITMAPORDER_[...] shl 20) or ([...] shl 16) or ([...] shl 8) or ([...] shl 0);

In the future it may be desirable to have a Pascal function. The prototype could look like this: function SDL_DEFINE_PIXELFORMAT(type, order, layour, bit, bytes: cuint32): Result;

function SDL_PixelFormatEnumToMasks(format: cuint32; bpp: pcint; Rmask: pcuint32; Gmask: pcuint32; Bmask: pcuint32; Amask: pcuint32): TSDL_Bool; cdecl; external SDL_LibName;

Convert one of the enumerated pixel formats to a bpp value and RGBA masks.

\param format one of the SDL_PixelFormatEnum values \param bpp a bits per pixel value; usually 15, 16, or 32 \param Rmask a pointer filled in with the red mask for the format \param Gmask a pointer filled in with the green mask for the format \param Bmask a pointer filled in with the blue mask for the format \param Amask a pointer filled in with the alpha mask for the format \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't possible; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_MasksToPixelFormatEnum

function SDL_PIXELLAYOUT(X: cuint32): cuint32;
 
function SDL_PIXELORDER(X: cuint32): cuint32;
 
function SDL_PIXELTYPE(X: cuint32): cuint32;
 
function SDL_PointInFRect(const p: PSDL_FPoint; const r: PSDL_FRect): Boolean; Inline;

Returns true if point resides inside a rectangle.

function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inline;

Returns true if point resides inside a rectangle.

function SDL_PollEvent(event: PSDL_Event): cint32 cdecl; external SDL_LibName;

Polls for currently pending events.

1 if there are any pending events, or 0 if there are none available.

event - If not nil, the next event is removed from the queue and stored in that area.

function SDL_pow(x, y: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the value of x raised to the power of y.

\since This function is available since SDL 2.0.4.

function SDL_powf(x, y: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the value of x raised to the power of y.

\since This function is available since SDL 2.0.8.

procedure SDL_PumpEventscdecl; external SDL_LibName;

Pumps the event loop, gathering events from the input devices.

This function updates the event queue and internal input device state.

This should only be run in the thread that sets the video mode.

function SDL_PushEvent(event: PSDL_Event): cint32 cdecl; external SDL_LibName;

Add an event to the event queue.

1 on success, 0 if the event was filtered, or -1 if the event queue was full or there was some other error.

function SDL_QueryTexture(texture: PSDL_Texture; format: pcuint32; access: pcint; w: pcint; h: pcint): cint32 cdecl; external SDL_LibName;

Query the attributes of a texture

texture A texture to be queried. format A pointer filled in with the raw format of the texture. The actual format may differ, but pixel transfers will use this format. access A pointer filled in with the actual access to the texture. w A pointer filled in with the width of the texture in pixels. h A pointer filled in with the height of the texture in pixels.

0 on success, or -1 if the texture is not valid.

function SDL_QueueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len: cuint32): cint; cdecl; external SDL_LibName;

Queue more audio on non-callback devices.

If you are looking to retrieve queued audio from a non-callback capture device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return -1 to signify an error if you use it with capture devices.

SDL offers two ways to feed audio to the device: you can either supply a callback that SDL triggers with some frequency to obtain more audio (pull method), or you can supply no callback, and then SDL will expect you to supply data at regular intervals (push method) with this function.

There are no limits on the amount of data you can queue, short of exhaustion of address space. Queued data will drain to the device as necessary without further intervention from you. If the device needs audio but there is not enough queued, it will play silence to make up the difference. This means you will have skips in your audio playback if you aren't routinely queueing sufficient data.

This function copies the supplied data, so you are safe to free it when the function returns. This function is thread-safe, but queueing to the same device from two threads at once does not promise which buffer will be queued first.

You may not queue audio on a device that is using an application-supplied callback; doing so returns an error. You have to use the audio callback or queue audio with this function, but not both.

You should not call SDL_LockAudio() on the device before queueing; SDL handles locking internally for this function.

Note that SDL2 does not support planar audio. You will need to resample from planar audio formats into a non-planar one (see SDL_AudioFormat) before queuing audio.

\param dev the device ID to which we will queue audio \param data the data to queue to the device for later playback \param len the number of bytes (not samples!) to which `data` points \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.4.

\sa SDL_ClearQueuedAudio \sa SDL_GetQueuedAudioSize

procedure SDL_Quit(); cdecl; external SDL_LibName;

This function cleans up all initialized subsystems. You should call it upon all exit conditions.

procedure SDL_QuitSubSystem(flags: TSDL_Init); cdecl; external SDL_LibName;

This function cleans up specific SDL subsystems

procedure SDL_RaiseWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Raise a window above other windows and set the input focus.

function SDL_ReadBE16(src: PSDL_RWops): cuint16; cdecl; external SDL_LibName;
 
function SDL_ReadBE32(src: PSDL_RWops): cuint32; cdecl; external SDL_LibName;
 
function SDL_ReadBE64(src: PSDL_RWops): cuint64; cdecl; external SDL_LibName;
 
function SDL_ReadLE16(src: PSDL_RWops): cuint16; cdecl; external SDL_LibName;
 
function SDL_ReadLE32(src: PSDL_RWops): cuint32; cdecl; external SDL_LibName;
 
function SDL_ReadLE64(src: PSDL_RWops): cuint64; cdecl; external SDL_LibName;
 
function SDL_ReadU8(src: PSDL_RWops): cuint8; cdecl; external SDL_LibName;

Read endian functions

Read an item of the specified endianness and return in native format.

function SDL_realloc(mem: Pointer; size: csize_t): Pointer; cdecl; external SDL_LibName;

Resize a block of memory allocated previously with SDL_malloc() or SDL_calloc().

The returned pointer may or may not be the same as the original pointer. If the new size is larger than the old size, any new memory will *not* be initialized.

function SDL_RecordGesture(touchId: TSDL_TouchID): cint; cdecl; external SDL_LibName;

/** Begin recording a gesture on a specified touch device or all touch devices.

If the parameter `touchId` is -1 (i.e., all devices), this function will always return 1, regardless of whether there actually are any devices.

\param touchId the touch device id, or -1 for all touch devices \returns 1 on success or 0 if the specified device could not be found.

\since This function is available since SDL 2.0.0.

\sa SDL_GetTouchDevice

function SDL_RectEmpty(const r: PSDL_Rect): Boolean; inline;

Returns true if the rectangle has no area.

function SDL_RectEquals(const a, b: PSDL_Rect): Boolean; inline;

Returns true if the two rectangles are equal.

function SDL_RegisterEvents(numevents: cint32): cuint32 cdecl; external SDL_LibName;

This function allocates a set of user-defined events, and returns the beginning event number for that set of events.

If there aren't enough user-defined events left, this function returns (Uint32)-1

function SDL_RemoveTimer(id: TSDL_TimerID): Boolean; cdecl; external SDL_LibName;

Remove a timer knowing its ID.

A boolean value indicating success or failure.

It is not safe to remove a timer multiple times.

function SDL_RenderClear(renderer: PSDL_Renderer): cint32 cdecl; external SDL_LibName;

Clear the current rendering target with the drawing color

This function clears the entire rendering target, ignoring the viewport.

0 on success, or -1 on error

function SDL_RenderCopy(renderer: PSDL_Renderer; texture: PSDL_Texture; srcrect: PSDL_Rect; dstrect: PSDL_Rect): cint32 cdecl; external SDL_LibName;

Copy a portion of the texture to the current rendering target.

renderer The renderer which should copy parts of a texture. texture The source texture. srcrect A pointer to the source rectangle, or NULL for the entire texture. dstrect A pointer to the destination rectangle, or NULL for the entire rendering target.

0 on success, or -1 on error

function SDL_RenderCopyEx(renderer: PSDL_Renderer; texture: PSDL_Texture; const srcrect: PSDL_Rect; dstrect: PSDL_Rect; angle: cdouble; center: PSDL_Point; flip: TSDL_RenderFlip): cint32 cdecl; external SDL_LibName;

Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center

renderer The renderer which should copy parts of a texture. texture The source texture. srcrect A pointer to the source rectangle, or NULL for the entire texture. dstrect A pointer to the destination rectangle, or NULL for the entire rendering target. angle An angle in degrees that indicates the rotation that will be applied to dstrect center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2) flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture

0 on success, or -1 on error

function SDL_RenderCopyExF(renderer: PSDL_Renderer; texture: PSDL_Texture; const srcrect: PSDL_Rect; dstrect: PSDL_FRect; angle: cdouble; center: PSDL_FPoint; flip: TSDL_RenderFlip): cint32 cdecl; external SDL_LibName;

Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center

renderer The renderer which should copy parts of a texture. texture The source texture. srcrect A pointer to the source rectangle, or NIL for the entire texture. dstrect A pointer to the destination rectangle, or NIL for the entire rendering target. angle An angle in degrees that indicates the rotation that will be applied to dstrect, rotating it in a clockwise direction center A pointer to a point indicating the point around which dstrect will be rotated (if NIL, rotation will be done around dstrect.w/2, dstrect.h/2). flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture

0 on success, or -1 on error

function SDL_RenderCopyF(renderer: PSDL_Renderer; texture: PSDL_Texture; srcrect: PSDL_Rect; dstrect: PSDL_FRect): cint32 cdecl; external SDL_LibName;

Copy a portion of the texture to the current rendering target.

renderer The renderer which should copy parts of a texture. texture The source texture. srcrect A pointer to the source rectangle, or NIL for the entire texture. dstrect A pointer to the destination rectangle, or NIL for the entire rendering target.

0 on success, or -1 on error

function SDL_RenderDrawLine(renderer: PSDL_Renderer; x1: cint32; y1: cint32; x2: cint32; y2: cint32): cint32 cdecl; external SDL_LibName;

Draw a line on the current rendering target.

renderer The renderer which should draw a line. x1 The x coordinate of the start point. y1 The y coordinate of the start point. x2 The x coordinate of the end point. y2 The y coordinate of the end point.

0 on success, or -1 on error

function SDL_RenderDrawLineF(renderer: PSDL_Renderer; x1, y1, x2, y2: single): cint32 cdecl; external SDL_LibName;

Draw a line on the current rendering target.

renderer The renderer which should draw a line. x1 The x coordinate of the start point. y1 The y coordinate of the start point. x2 The x coordinate of the end point. y2 The y coordinate of the end point.

0 on success, or -1 on error

function SDL_RenderDrawLines(renderer: PSDL_Renderer; points: PSDL_Point; count: cint32): cint32 cdecl; external SDL_LibName;

\brief Draw a series of connected lines on the current rendering target.

\param renderer The renderer which should draw multiple lines. \param points The points along the lines \param count The number of points, drawing count-1 lines

\return 0 on success, or -1 on error

function SDL_RenderDrawLinesF(renderer: PSDL_Renderer; points: PSDL_FPoint; count: cint32): cint32 cdecl; external SDL_LibName;

Draw a series of connected lines on the current rendering target.

renderer The renderer which should draw multiple lines. points The points along the lines count The number of points, drawing count-1 lines

0 on success, or -1 on error

function SDL_RenderDrawPoint(renderer: PSDL_Renderer; x: cint32; y: cint32): cint32 cdecl; external SDL_LibName;

Draw a point on the current rendering target.

renderer The renderer which should draw a point. x The x coordinate of the point. y The y coordinate of the point.

0 on success, or -1 on error

function SDL_RenderDrawPointF(renderer: PSDL_Renderer; x, y: single): cint32 cdecl; external SDL_LibName;

Draw a point on the current rendering target.

renderer The renderer which should draw a point. x The x coordinate of the point. y The y coordinate of the point.

0 on success, or -1 on error

function SDL_RenderDrawPoints(renderer: PSDL_Renderer; points: PSDL_Point; count: cint32): cint32 cdecl; external SDL_LibName;

Draw multiple points on the current rendering target.

renderer The renderer which should draw multiple points. points The points to draw count The number of points to draw

0 on success, or -1 on error

function SDL_RenderDrawPointsF(renderer: PSDL_Renderer; points: PSDL_FPoint; count: cint32): cint32 cdecl; external SDL_LibName;

Draw multiple points on the current rendering target.

renderer The renderer which should draw multiple points. points The points to draw count The number of points to draw

0 on success, or -1 on error

function SDL_RenderDrawRect(renderer: PSDL_Renderer; rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;

Draw a rectangle on the current rendering target.

renderer The renderer which should draw a rectangle. rect A pointer to the destination rectangle, or NULL to outline the entire rendering target.

0 on success, or -1 on error

function SDL_RenderDrawRectF(renderer: PSDL_Renderer; rect: PSDL_FRect): cint32 cdecl; external SDL_LibName;

Draw a rectangle on the current rendering target.

renderer The renderer which should draw a rectangle. rect A pointer to the destination rectangle, or NULL to outline the entire rendering target.

0 on success, or -1 on error

function SDL_RenderDrawRects(renderer: PSDL_Renderer; rects: PSDL_Rect; count: cint32): cint32 cdecl; external SDL_LibName;

Draw some number of rectangles on the current rendering target.

renderer The renderer which should draw multiple rectangles. rects A pointer to an array of destination rectangles. count The number of rectangles.

0 on success, or -1 on error

function SDL_RenderDrawRectsF(renderer: PSDL_Renderer; rects: PSDL_FRect; count: cint32): cint32 cdecl; external SDL_LibName;

Draw some number of rectangles on the current rendering target.

renderer The renderer which should draw multiple rectangles. rects A pointer to an array of destination rectangles. count The number of rectangles.

0 on success, or -1 on error

function SDL_RenderFillRect(renderer: PSDL_Renderer; rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;

Fill a rectangle on the current rendering target with the drawing color.

renderer The renderer which should fill a rectangle. rect A pointer to the destination rectangle, or NULL for the entire rendering target.

0 on success, or -1 on error

function SDL_RenderFillRectF(renderer: PSDL_Renderer; rect: PSDL_FRect): cint32 cdecl; external SDL_LibName;

Fill a rectangle on the current rendering target with the drawing color.

renderer The renderer which should fill a rectangle. rect A pointer to the destination rectangle, or NULL for the entire rendering target.

0 on success, or -1 on error

function SDL_RenderFillRects(renderer: PSDL_Renderer; rects: PSDL_Rect; count: cint32): cint32 cdecl; external SDL_LibName;

Fill some number of rectangles on the current rendering target with the drawing color.

renderer The renderer which should fill multiple rectangles. rects A pointer to an array of destination rectangles. count The number of rectangles.

0 on success, or -1 on error

function SDL_RenderFillRectsF(renderer: PSDL_Renderer; rects: PSDL_FRect; count: cint32): cint32 cdecl; external SDL_LibName;

Fill some number of rectangles on the current rendering target with the drawing color.

renderer The renderer which should fill multiple rectangles. rects A pointer to an array of destination rectangles. count The number of rectangles.

0 on success, or -1 on error

function SDL_RenderFlush(renderer: PSDL_Renderer): cint; cdecl; external SDL_LibName;

Force the rendering context to flush any pending commands to the underlying rendering API.

You do not need to (and in fact, shouldn't) call this function unless you are planning to call into OpenGL/Direct3D/Metal/whatever directly in addition to using an SDL_Renderer.

This is for a very-specific case: if you are using SDL's render API, you asked for a specific renderer backend (OpenGL, Direct3D, etc), you set SDL_HINT_RENDER_BATCHING to "1", and you plan to make OpenGL/D3D/whatever calls in addition to SDL render API calls. If all of this applies, you should call SDL_RenderFlush() between calls to SDL's render API and the low-level API you're using in cooperation.

In all other cases, you can ignore this function. This is only here to get maximum performance out of a specific situation. In all other cases, SDL will do the right thing, perhaps at a performance loss.

This function is first available in SDL 2.0.10, and is not needed in 2.0.9 and earlier, as earlier versions did not queue rendering commands at all, instead flushing them to the OS immediately.

function SDL_RenderGeometry( renderer: PSDL_Renderer; texture: PSDL_Texture; Const vertices: PSDL_Vertex; num_vertices: cint; Const indices: Pcint; num_indices: cint ): cint; cdecl; external SDL_LibName;

Render a list of triangles, optionally using a texture and indices into the vertex array. Color and alpha modulation is done per vertex. SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored.

function SDL_RenderGeometryRaw( renderer: PSDL_Renderer; texture: PSDL_Texture; Const xy: PSingle; xy_stride: cint; Const color: PSDL_Color; color_stride: cint; Const uv: PSingle; uv_stride: cint; num_vertices: cint; Const indices: Pointer; num_indices, size_indices: cint ): cint; cdecl; external SDL_LibName;

Render a list of triangles, optionally using a texture and indices into the vertex arrays. Color and alpha modulation is done per vertex. SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored.

procedure SDL_RenderGetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect) cdecl; external SDL_LibName;

Get the clip rectangle for the current target.

renderer The renderer from which clip rectangle should be queried. rect A pointer filled in with the current clip rectangle, or an empty rectangle if clipping is disabled.

SDL_RenderSetClipRect()

function SDL_RenderGetIntegerScale(renderer: PSDL_Renderer): TSDL_bool cdecl; external SDL_LibName;

\brief Get whether integer scales are forced for resolution-independent rendering

\param renderer The renderer from which integer scaling should be queried.

\sa SDL_RenderSetIntegerScale()

procedure SDL_RenderGetLogicalSize(renderer: PSDL_Renderer; w: pcint; h: pcint) cdecl; external SDL_LibName;

Get device independent resolution for rendering

renderer The renderer from which resolution should be queried. w A pointer filled with the width of the logical resolution h A pointer filled with the height of the logical resolution

SDL_RenderSetLogicalSize()

function SDL_RenderGetMetalCommandEncoder(renderer: PSDL_Renderer): Pointer; cdecl; external SDL_LibName;

Get the Metal command encoder for the current frame

This function returns a raw Pointer, so SDL doesn't have to include Metal's headers, but it can be safely cast to an `id<MTLRenderCommandEncoder>`.

Note that as of SDL 2.0.18, this will return NULL if Metal refuses to give SDL a drawable to render to, which might happen if the window is hidden/minimized/offscreen. This doesn't apply to command encoders for render targets, just the window's backbacker. Check your return values!

function SDL_RenderGetMetalLayer(renderer: PSDL_Renderer): Pointer; cdecl; external SDL_LibName;

Get the CAMetalLayer associated with the given Metal renderer.

This function returns a raw Pointer, so SDL doesn't have to include Metal's headers, but it can be safely cast to a pointer to `CAMetalLayer`.

procedure SDL_RenderGetScale(renderer: PSDL_Renderer; scaleX: pcfloat; scaleY: pcfloat) cdecl; external SDL_LibName;

Get the drawing scale for the current target.

renderer The renderer from which drawing scale should be queried. scaleX A pointer filled in with the horizontal scaling factor scaleY A pointer filled in with the vertical scaling factor

SDL_RenderSetScale()

procedure SDL_RenderGetViewport(renderer: PSDL_Renderer; rect: PSDL_Rect) cdecl; external SDL_LibName;

Get the drawing area for the current target.

SDL_RenderSetViewport()

function SDL_RenderGetWindow(renderer: PSDL_Renderer): PSDL_Window; cdecl; external SDL_LibName;

Get the window associated with a renderer.

function SDL_RenderIsClipEnabled(renderer: PSDL_Renderer): TSDL_Bool; cdecl; external SDL_LibName;

\brief Get whether clipping is enabled on the given renderer.

\param renderer The renderer from which clip state should be queried.

\sa SDL_RenderGetClipRect()

procedure SDL_RenderLogicalToWindow(renderer: PSDL_Renderer; logicalX, logicalY: Single; windowX, windowY: Pcint); cdecl; external SDL_LibName;

Get real coordinates of point in window when given logical coordinates of point in renderer. Logical coordinates will differ from real coordinate when render is scaled and logical renderer size set.

procedure SDL_RenderPresent(renderer: PSDL_Renderer) cdecl; external SDL_LibName;

Update the screen with rendering performed.

function SDL_RenderReadPixels(renderer: PSDL_Renderer; rect: PSDL_Rect; format: cuint32; pixels: Pointer; pitch: cint32): cint32 cdecl; external SDL_LibName;

Read pixels from the current rendering target.

renderer The renderer from which pixels should be read. rect A pointer to the rectangle to read, or NULL for the entire render target. format The desired format of the pixel data, or 0 to use the format of the rendering target pixels A pointer to be filled in with the pixel data pitch The pitch of the pixels parameter.

0 on success, or -1 if pixel reading is not supported.

This is a very slow operation, and should not be used frequently.

function SDL_RenderSetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;

Set the clip rectangle for the current target.

renderer The renderer for which clip rectangle should be set. rect A pointer to the rectangle to set as the clip rectangle, or NULL to disable clipping.

0 on success, or -1 on error

SDL_RenderGetClipRect()

function SDL_RenderSetIntegerScale(renderer: PSDL_Renderer; enable : TSDL_bool): cint32 cdecl; external SDL_LibName;

\brief Set whether to force integer scales for resolution-independent rendering

\param renderer The renderer for which integer scaling should be set. \param enable Enable or disable integer scaling

This function restricts the logical viewport to integer values - that is, when a resolution is between two multiples of a logical size, the viewport size is rounded down to the lower multiple.

\sa SDL_RenderSetLogicalSize()

function SDL_RenderSetLogicalSize(renderer: PSDL_Renderer; w: cint32; h: cint32): cint32 cdecl; external SDL_LibName;

Set device independent resolution for rendering

renderer The renderer for which resolution should be set. w The width of the logical resolution h The height of the logical resolution

This function uses the viewport and scaling functionality to allow a fixed logical resolution for rendering, regardless of the actual output resolution. If the actual output resolution doesn't have the same aspect ratio the output rendering will be centered within the output display.

If the output display is a window, mouse events in the window will be filtered and scaled so they seem to arrive within the logical resolution.

If this function results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints.

SDL_RenderGetLogicalSize() SDL_RenderSetScale() SDL_RenderSetViewport()

function SDL_RenderSetScale(renderer: PSDL_Renderer; scaleX: cfloat; scaleY: cfloat): cint32 cdecl; external SDL_LibName;

Set the drawing scale for rendering on the current target.

renderer The renderer for which the drawing scale should be set. scaleX The horizontal scaling factor scaleY The vertical scaling factor

The drawing coordinates are scaled by the x/y scaling factors before they are used by the renderer. This allows resolution independent drawing with a single coordinate system.

If this results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints. For best results use integer scaling factors.

SDL_RenderGetScale() SDL_RenderSetLogicalSize()

function SDL_RenderSetViewport(renderer: PSDL_Renderer; const rect: PSDL_Rect): cint32 cdecl; external SDL_LibName;

Set the drawing area for rendering on the current target.

renderer The renderer for which the drawing area should be set. rect The rectangle representing the drawing area, or NULL to set the viewport to the entire target.

The x,y of the viewport rect represents the origin for rendering.

0 on success, or -1 on error

If the window associated with the renderer is resized, the viewport is automatically reset.

SDL_RenderGetViewport() SDL_RenderSetLogicalSize()

function SDL_RenderSetVSync(renderer: PSDL_Renderer; vsync: cint): cint; cdecl; external SDL_LibName;

Toggle VSync of the given renderer.

function SDL_RenderTargetSupported(renderer: PSDL_Renderer): Boolean cdecl; external SDL_LibName;

Determines whether a window supports the use of render targets

renderer The renderer that will be checked

SDL_TRUE if supported, SDL_FALSE if not.

procedure SDL_RenderWindowToLogical(renderer: PSDL_Renderer; windowX, windowY: cint; logicalX, logicalY: PSingle); cdecl; external SDL_LibName;

Get logical coordinates of point in renderer when given real coordinates of point in window. Logical coordinates will differ from real coordinates when render is scaled and logical renderer size set.

function SDL_ResetHint(const name: PAnsiChar): TSDL_Bool; cdecl; external SDL_LibName;

Reset a hint to the default value.

This will reset a hint to the value of the environment variable, or NIL if the environment isn't set. Callbacks will be called normally with this change.

\param name the hint to set \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.

\since This function is available since SDL 2.24.0.

procedure SDL_ResetHints(); cdecl; external SDL_LibName;

Reset all hints to the default values.

This will reset all hints to the value of the associated environment variable, or NIL if the environment isn't set. Callbacks will be called normally with this change.

\since This function is available since SDL 2.26.0.

\sa SDL_GetHint \sa SDL_SetHint \sa SDL_ResetHint

procedure SDL_ResetKeyboard; cdecl; external SDL_LibName;

Clear the state of the keyboard

This function will generate key up events for all pressed keys.

\since This function is available since SDL 2.24.0.

\sa SDL_GetKeyboardState

procedure SDL_RestoreWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Restore the size and position of a minimized or maximized window.

SDL_MaximizeWindow() SDL_MinimizeWindow()

function SDL_round(x: cdouble): cdouble; cdecl; external SDL_LibName;

Round to nearest integral value, away from zero.

\since This function is available since SDL 2.0.16.

function SDL_roundf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Round to nearest integral value, away from zero.

\since This function is available since SDL 2.0.16.

function SDL_RWclose(context: PSDL_RWops): cint; cdecl; external SDL_LibName;

Close and free an allocated SDL_RWops structure.

\return 0 if successful or -1 on write error when flushing data.

function SDL_RWFromConstMem(const mem: Pointer; size: cint): PSDL_RWops; cdecl; external SDL_LibName;
 
function SDL_RWFromFile(const _file: PAnsiChar; const mode: PAnsiChar): PSDL_RWops; cdecl; external SDL_LibName;

RWFrom functions

Functions to create SDL_RWops structures from various data streams.

function SDL_RWFromFP(fp: Pointer; autoclose: TSDL_Bool): PSDL_RWops; cdecl; external SDL_LibName;

don't know if this works

function SDL_RWFromMem(mem: Pointer; size: cint): PSDL_RWops; cdecl; external SDL_LibName;
 
function SDL_RWread(context: PSDL_RWops; ptr: Pointer; size: csize_t; n: csize_t): csize_t; cdecl; external SDL_LibName;

Read up to \c maxnum objects each of size \c size from the data stream to the area pointed at by \c ptr.

\return the number of objects read, or 0 at error or end of file.

function SDL_RWseek(context: PSDL_RWops; offset: cint64; whence: cint): cint64; cdecl; external SDL_LibName;

Seek to \c offset relative to \c whence, one of stdio's whence values: RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END

\return the final offset in the data stream, or -1 on error.

function SDL_RWsize(context: PSDL_RWops): cint64; cdecl; external SDL_LibName;

Return the size of the file in this rwops, or -1 if unknown

function SDL_RWtell(context: PSDL_RWops): cint64; cdecl; external SDL_LibName;

Return the current offset in the data stream, or -1 on error.

function SDL_RWwrite(context: PSDL_RWops; ptr: Pointer; size: csize_t; n: csize_t): csize_t; cdecl; external SDL_LibName;

Write exactly \c num objects each of size \c size from the area pointed at by \c ptr to data stream.

\return the number of objects written, or 0 at error or end of file.

function SDL_SaveAllDollarTemplates(dst: PSDL_RWops): cint; cdecl; external SDL_LibName;

Save all currently loaded Dollar Gesture templates.

\param dst a SDL_RWops to save to \returns the number of saved templates on success or 0 on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_LoadDollarTemplates \sa SDL_SaveDollarTemplate

function SDL_SaveBMP(const surface: PSDL_Surface; const filename:AnsiString): cint;

TODO : Check: Why AnsiString instead of PAnsiChar used here? Compare SDL_LoadBMP macro.

function SDL_SaveBMP_RW(surface: PSDL_Surface; dst: PSDL_RWops; freedst: cint): cint; cdecl; external SDL_LibName;

Save a surface to a seekable SDL data stream (memory or file).

Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the BMP directly. Other RGB formats with 8-bit or higher get converted to a 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit surface before they are saved. YUV and paletted 1-bit and 4-bit formats are not supported.

If \c freedst is non-zero, the stream will be closed after being written.

\return 0 if successful or -1 if there was an error.

function SDL_SaveDollarTemplate(gestureId: TSDL_GestureID; dst: PSDL_RWops): cint; cdecl; external SDL_LibName;

Save a currently loaded Dollar Gesture template.

\param gestureId a gesture id \param dst a SDL_RWops to save to \returns 1 on success or 0 on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_LoadDollarTemplates \sa SDL_SaveAllDollarTemplates

function SDL_scalbn(x: cdouble; n: cint): cdouble; cdecl; external SDL_LibName;

Calculate x multiplied by the floating-point radix to the power of n. On most systems, the radix is 2, making this equivalent to x*(2**n).

\since This function is available since SDL 2.0.4.

function SDL_scalbnf(x: cfloat; n: cint): cfloat; cdecl; external SDL_LibName;

Calculate x multiplied by the floating-point radix to the power of n. On most systems, the radix is 2, making this equivalent to x*(2**n).

\since This function is available since SDL 2.0.8.

function SDL_SemPost(sem: PSDL_Sem): cint; cdecl; external SDL_LibName;

Atomically increment a semaphore's value and wake waiting threads.

\param sem the semaphore to increment \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_SemTryWait(sem: PSDL_Sem): cint; cdecl; external SDL_LibName;

See if a semaphore has a positive value and decrement it if it does.

This function checks to see if the semaphore pointed to by `sem` has a positive value and atomically decrements the semaphore value if it does. If the semaphore doesn't have a positive value, the function immediately returns SDL_MUTEX_TIMEDOUT.

\param sem the semaphore to wait on \returns 0 if the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait would block, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_SemValue(sem: PSDL_Sem): cuint32; cdecl; external SDL_LibName;

Get the current value of a semaphore.

\param sem the semaphore to query \returns the current value of the semaphore.

\since This function is available since SDL 2.0.0.

function SDL_SemWait(sem: PSDL_Sem): cint; cdecl; external SDL_LibName;

Wait until a semaphore has a positive value and then decrements it.

This function suspends the calling thread until either the semaphore pointed to by `sem` has a positive value or the call is interrupted by a signal or error. If the call is successful it will atomically decrement the semaphore value.

This function is the equivalent of calling SDL_SemWaitTimeout() with a time length of SDL_MUTEX_MAXWAIT.

\param sem the semaphore wait on \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_SemWaitTimeout(sem: PSDL_Sem; ms: cuint32): cint; cdecl; external SDL_LibName;

Wait until a semaphore has a positive value and then decrements it.

This function suspends the calling thread until either the semaphore pointed to by `sem` has a positive value, the call is interrupted by a signal or error, or the specified time has elapsed. If the call is successful it will atomically decrement the semaphore value.

\param sem the semaphore to wait on \param ms the length of the timeout, in milliseconds \returns 0 if the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in the allotted time, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

procedure SDL_SensorClose(sensor: PSDL_Sensor); cdecl; external SDL_LibName;

Close a sensor previously opened with SDL_SensorOpen().

\param sensor The SDL_Sensor object to close

\since This function is available since SDL 2.0.9.

function SDL_SensorFromInstanceID(instance_id: TSDL_SensorID): PSDL_Sensor; cdecl; external SDL_LibName;

Return the SDL_Sensor associated with an instance id.

\param instance_id The sensor from instance id \returns an SDL_Sensor object.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetData(sensor: PSDL_Sensor; data: pcfloat; num_values: cint): cint; cdecl; external SDL_LibName;

Get the current state of an opened sensor.

The number of values and interpretation of the data is sensor dependent.

\param sensor The SDL_Sensor object to query \param data A pointer filled with the current sensor state \param num_values The number of values to write to data \returns 0 or -1 if an error occurred.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetDataWithTimestamp(sensor: PSDL_Sensor; timestamp: pcuint64; data: pcfloat; num_values: cint): cint; cdecl; external SDL_LibName;

Get the current state of an opened sensor with the timestamp of the last update.

The number of values and interpretation of the data is sensor dependent.

\param sensor The SDL_Sensor object to query \param timestamp A pointer filled with the timestamp in microseconds of the current sensor reading if available, or 0 if not \param data A pointer filled with the current sensor state \param num_values The number of values to write to data \returns 0 or -1 if an error occurred.

\since This function is available since SDL 2.26.0.

function SDL_SensorGetDeviceInstanceID(device_index: cint): TSDL_SensorID; cdecl; external SDL_LibName;

Get the instance ID of a sensor.

\param device_index The sensor to get instance id from \returns the sensor instance ID, or -1 if `device_index` is out of range.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetDeviceName(device_index: cint): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent name of a sensor.

\param device_index The sensor to obtain name from \returns the sensor name, or NIL if `device_index` is out of range.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetDeviceNonPortableType(device_index: cint): cint; cdecl; external SDL_LibName;

Get the platform dependent type of a sensor.

\param device_index The sensor to check \returns the sensor platform dependent type, or -1 if `device_index` is out of range.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetDeviceType(device_index: cint): TSDL_SensorType; cdecl; external SDL_LibName;

Get the type of a sensor.

\param device_index The sensor to get the type from \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is out of range.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetInstanceID(sensor: PSDL_Sensor): TSDL_SensorID; cdecl; external SDL_LibName;

Get the instance ID of a sensor.

\param sensor The SDL_Sensor object to inspect \returns the sensor instance ID, or -1 if `sensor` is NIL.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetName(sensor: PSDL_Sensor): PAnsiChar; cdecl; external SDL_LibName;

Get the implementation dependent name of a sensor

\param sensor The SDL_Sensor object \returns the sensor name, or NIL if `sensor` is NIL.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetNonPortableType(sensor: PSDL_Sensor): cint; cdecl; external SDL_LibName;

Get the platform dependent type of a sensor.

\param sensor The SDL_Sensor object to inspect \returns the sensor platform dependent type, or -1 if `sensor` is NIL.

\since This function is available since SDL 2.0.9.

function SDL_SensorGetType(sensor: PSDL_Sensor): TSDL_SensorType; cdecl; external SDL_LibName;

Get the type of a sensor.

\param sensor The SDL_Sensor object to inspect \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is NIL.

\since This function is available since SDL 2.0.9.

function SDL_SensorOpen(device_index: cint): PSDL_Sensor; cdecl; external SDL_LibName;

Open a sensor for use.

\param device_index The sensor to open \returns an SDL_Sensor sensor object, or NIL if an error occurred.

\since This function is available since SDL 2.0.9.

procedure SDL_SensorUpdate(); cdecl; external SDL_LibName;

Update the current state of the open sensors.

This is called automatically by the event loop if sensor events are enabled.

This needs to be called from the thread that initialized the sensor subsystem.

\since This function is available since SDL 2.0.9.

function SDL_SetClipboardText(text: PAnsiChar): cint; cdecl; external SDL_LibName;

Put UTF-8 text into the clipboard.

\param text the text to store in the clipboard \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_GetClipboardText \sa SDL_HasClipboardText

function SDL_SetClipRect(surface: PSDL_Surface; const rect: PSDL_Rect): TSDL_Bool; cdecl; external SDL_LibName;

Sets the clipping rectangle for the destination surface in a blit.

If the clip rectangle is NULL, clipping will be disabled.

If the clip rectangle doesn't intersect the surface, the function will return SDL_FALSE and blits will be completely clipped. Otherwise the function returns SDL_TRUE and blits to the surface will be clipped to the intersection of the surface area and the clipping rectangle.

Note that blits are automatically clipped to the edges of the source and destination surfaces.

function SDL_SetColorKey(surface: PSDL_Surface; flag: cint; key: cuint32): cint; cdecl; external SDL_LibName;

Sets the color key (transparent pixel) in a blittable surface.

surface The surface to update flag Non-zero to enable colorkey and 0 to disable colorkey key The transparent pixel in the native surface format

0 on success, or -1 if the surface is not valid

You can pass SDL_RLEACCEL to enable RLE accelerated blits.

procedure SDL_SetCursor(cursor: PSDL_Cursor); cdecl; external SDL_LibName;

Set the active cursor.

This function sets the currently active cursor to the specified one. If the cursor is currently visible, the change will be immediately represented on the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if this is desired for any reason.

\param cursor a cursor to make active

\since This function is available since SDL 2.0.0.

\sa SDL_CreateCursor \sa SDL_GetCursor \sa SDL_ShowCursor

function SDL_SetError(const fmt: PAnsiChar; args: array of const): cint; cdecl; external SDL_LibName;

\brief Set the error message for the current thread

\return -1, there is no error handling for this function

procedure SDL_SetEventFilter(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName;

Sets up a filter to process all events before they change internal state and are posted to the internal event queue.

If the filter returns 1, then the event will be added to the internal queue. If it returns 0, then the event will be dropped from the queue, but the internal state will still be updated. This allows selective filtering of dynamically arriving events.

Be very careful of what you do in the event filter function, as it may run in a different thread!

There is one caveat when dealing with the SDL_QUITEVENT event type. The event filter is only called when the window manager desires to close the application window. If the event filter returns 1, then the window will be closed, otherwise the window will remain open if possible.

If the quit event is generated by an interrupt signal, it will bypass the internal queue and be delivered to the application at the next event poll.

function SDL_SetHint(const name: PAnsiChar; const value: PAnsiChar): TSDL_Bool; cdecl; external SDL_LibName;

/** \brief Set a hint with normal priority

\return SDL_TRUE if the hint was set, SDL_FALSE otherwise /

function SDL_SetHintWithPriority(const name: PAnsiChar; const value: PAnsiChar; priority: TSDL_HintPriority): TSDL_Bool; cdecl; external SDL_LibName;

/** \brief Set a hint with a specific priority

The priority controls the behavior when setting a hint that already has a value. Hints will replace existing hints of their priority and lower. Environment variables are considered to have override priority.

\return SDL_TRUE if the hint was set, SDL_FALSE otherwise /

function SDL_SetMemoryFunctions( malloc_func: TSDL_malloc_func; calloc_func: TSDL_calloc_func; realloc_func: TSDL_realloc_func; free_func: TSDL_free_func ): cint; cdecl; external SDL_LibName;

Replace SDL's memory allocation functions with a custom set

\since This function is available since SDL 2.0.7.

procedure SDL_SetModState(modstate: TSDL_Keymod); cdecl; external SDL_LibName;

Set the current key modifier state for the keyboard.

The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose modifier key states on your application. Simply pass your desired modifier states into `modstate`. This value may be a bitwise, OR'd combination of SDL_Keymod values.

This does not change the keyboard state, only the key modifier flags that SDL reports.

\param modstate the desired SDL_Keymod for the keyboard

\since This function is available since SDL 2.0.0.

\sa SDL_GetModState

function SDL_SetPaletteColors(palette: PSDL_Palette; const colors: PSDL_Color; firstcolor: cint; ncolors: cint): cint; cdecl; external SDL_LibName;

Set a range of colors in a palette.

\param palette the SDL_Palette structure to modify \param colors an array of SDL_Color structures to copy into the palette \param firstcolor the index of the first palette entry to modify \param ncolors the number of entries to modify \returns 0 on success or a negative error code if not all of the colors could be set; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_AllocPalette \sa SDL_CreateRGBSurface

function SDL_SetPixelFormatPalette(format: PSDL_PixelFormat; palette: PSDL_Palette): cint; cdecl; external SDL_LibName;

Set the palette for a pixel format structure.

\param format the SDL_PixelFormat structure that will use the palette \param palette the SDL_Palette structure that will be used \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_AllocPalette \sa SDL_FreePalette

function SDL_SetPrimarySelectionText(text: PAnsiChar): cint; cdecl; external SDL_LibName;

Put UTF-8 text into the primary selection.

\param text the text to store in the primary selection \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.26.1.

\sa SDL_GetPrimarySelectionText \sa SDL_HasPrimarySelectionText

function SDL_SetRelativeMouseMode(enabled: TSDL_Bool): cint; cdecl; external SDL_LibName;

Set relative mouse mode.

While the mouse is in relative mode, the cursor is hidden, and the driver will try to report continuous motion in the current window. Only relative motion events will be delivered, the mouse position will not change.

Note that this function will not be able to provide continuous relative motion when used over Microsoft Remote Desktop, instead motion is limited to the bounds of the screen.

This function will flush any pending mouse motion.

\param enabled SDL_TRUE to enable relative mode, SDL_FALSE to disable. \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

If relative mode is not supported, this returns -1.

\since This function is available since SDL 2.0.0.

\sa SDL_GetRelativeMouseMode

function SDL_SetRenderDrawBlendMode(renderer: PSDL_Renderer; blendMode: TSDL_BlendMode): cint32 cdecl; external SDL_LibName;

Set the blend mode used for drawing operations (Fill and Line).

renderer The renderer for which blend mode should be set. blendMode SDL_BlendMode to use for blending.

0 on success, or -1 on error

If the blend mode is not supported, the closest supported mode is chosen.

SDL_GetRenderDrawBlendMode()

function SDL_SetRenderDrawColor(renderer: PSDL_Renderer; r: cuint8; g: cuint8; b: cuint8; a: cuint8): cint32 cdecl; external SDL_LibName;

Set the color used for drawing operations (Rect, Line and Clear).

renderer The renderer for which drawing color should be set. r The red value used to draw on the rendering target. g The green value used to draw on the rendering target. b The blue value used to draw on the rendering target. a The alpha value used to draw on the rendering target, usually SDL_ALPHA_OPAQUE (255).

0 on success, or -1 on error

function SDL_SetRenderTarget(renderer: PSDL_Renderer; texture: PSDL_Texture): cint32 cdecl; external SDL_LibName;

Set a texture as the current rendering target.

renderer The renderer. texture The targeted texture, which must be created with the SDL_TEXTUREACCESS_TARGET flag, or NULL for the default render target

0 on success, or -1 on error

SDL_GetRenderTarget()

function SDL_SetSurfaceAlphaMod(surface: PSDL_Surface; alpha: cuint8): cint; cdecl; external SDL_LibName;

Set an additional alpha value used in blit operations.

surface The surface to update. alpha The alpha value multiplied into blit operations.

0 on success, or -1 if the surface is not valid.

SDL_GetSurfaceAlphaMod()

function SDL_SetSurfaceBlendMode(surface: PSDL_Surface; blendMode: TSDL_BlendMode): cint; cdecl; external SDL_LibName;

Set the blend mode used for blit operations.

surface The surface to update. blendMode ::SDL_BlendMode to use for blit blending.

0 on success, or -1 if the parameters are not valid.

SDL_GetSurfaceBlendMode()

function SDL_SetSurfaceColorMod(surface: PSDL_Surface; r: cuint8; g: cuint8; b: cuint8): cint; cdecl; external SDL_LibName;

Set an additional color value used in blit operations.

surface The surface to update. r The red color value multiplied into blit operations. g The green color value multiplied into blit operations. b The blue color value multiplied into blit operations.

0 on success, or -1 if the surface is not valid.

SDL_GetSurfaceColorMod()

function SDL_SetSurfacePalette(surface: PSDL_Surface; palette: PSDL_Palette): cint; cdecl; external SDL_LibName;

Set the palette used by a surface.

0, or -1 if the surface format doesn't use a palette.

A single palette can be shared with many surfaces.

function SDL_SetSurfaceRLE(surface: PSDL_Surface; flag: cint): cint; cdecl; external SDL_LibName;

Sets the RLE acceleration hint for a surface.

0 on success, or -1 if the surface is not valid

If RLE is enabled, colorkey and alpha blending blits are much faster, but the surface must be locked before directly accessing the pixels.

procedure SDL_SetTextInputRect(rect: PSDL_Rect); cdecl; external SDL_LibName;

Set the rectangle used to type Unicode text inputs.

To start text input in a given location, this function is intended to be called before SDL_StartTextInput, although some platforms support moving the rectangle even while text input (and a composition) is active.

Note: If you want to use the system native IME window, try setting hint **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you any feedback.

\param rect the SDL_Rect structure representing the rectangle to receive text (ignored if nil)

\since This function is available since SDL 2.0.0.

\sa SDL_StartTextInput

function SDL_SetTextureAlphaMod(texture: PSDL_Texture; alpha: cuint8): cint32 cdecl; external SDL_LibName;

Set an additional alpha value used in render copy operations.

texture The texture to update. alpha The alpha value multiplied into copy operations.

0 on success, or -1 if the texture is not valid or alpha modulation is not supported.

SDL_GetTextureAlphaMod()

function SDL_SetTextureBlendMode(texture: PSDL_Texture; blendMode: TSDL_BlendMode): cint32 cdecl; external SDL_LibName;

Set the blend mode used for texture copy operations.

texture The texture to update. blendMode ::SDL_BlendMode to use for texture blending.

0 on success, or -1 if the texture is not valid or the blend mode is not supported.

If the blend mode is not supported, the closest supported mode is chosen.

SDL_GetTextureBlendMode()

function SDL_SetTextureColorMod(texture: PSDL_Texture; r: cuint8; g: cuint8; b: cuint8): cint32 cdecl; external SDL_LibName;

Set an additional color value used in render copy operations.

texture The texture to update. r The red color value multiplied into copy operations. g The green color value multiplied into copy operations. b The blue color value multiplied into copy operations.

0 on success, or -1 if the texture is not valid or color modulation is not supported.

SDL_GetTextureColorMod()

function SDL_SetTextureScaleMode(texture: PSDL_Texture; scaleMode: TSDL_ScaleMode): cint; cdecl; external SDL_LibName;

Set the scale mode used for texture scale operations. If the scale mode is not supported, the closest supported mode is chosen.

function SDL_SetTextureUserData(texture: PSDL_Texture; userdata: Pointer): cint; cdecl; external SDL_LibName;

Associate a user-specified pointer with a texture.

function SDL_SetThreadPriority(priority: TSDL_ThreadPriority): cint; cdecl; external SDL_LibName;

Set the priority for the current thread.

Note that some platforms will not let you alter the priority (or at least, promote the thread to a higher priority) at all, and some require you to be an administrator account. Be prepared for this to fail.

\param priority the SDL_ThreadPriority to set \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

procedure SDL_SetWindowAlwaysOnTop(window: PSDL_Window; on_top: TSDL_Bool); cdecl; external SDL_LibName;

Set the window to always be above the others.

This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This will bring the window to the front and keep the window above the rest.

\param window The window of which to change the always on top state \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to disable

\since This function is available since SDL 2.0.16.

\sa SDL_GetWindowFlags

procedure SDL_SetWindowBordered(window: PSDL_Window; bordered: TSDL_Bool); cdecl; external SDL_LibName;

Set the border state of a window.

This will add or remove the window's SDL_WINDOW_BORDERLESS flag and add or remove the border from the actual window. This is a no-op if the window's border already matches the requested state.

window The window of which to change the border state. bordered SDL_FALSE to remove border, SDL_TRUE to add border.

You can't change the border state of a fullscreen window.

SDL_GetWindowFlags()

function SDL_SetWindowBrightness(window: PSDL_Window; brightness: cfloat): cint; cdecl; external SDL_LibName;

Set the brightness (gamma correction) for a window.

0 on success, or -1 if setting the brightness isn't supported.

SDL_GetWindowBrightness() SDL_SetWindowGammaRamp()

function SDL_SetWindowData(window: PSDL_Window; const name: PAnsiChar; userdata: Pointer): Pointer; cdecl; external SDL_LibName;

Associate an arbitrary named pointer with a window.

window The window to associate with the pointer. name The name of the pointer. userdata The associated pointer.

The previous value associated with 'name'

The name is case-sensitive.

SDL_GetWindowData()

function SDL_SetWindowDisplayMode(window: PSDL_Window; const mode: PSDL_DisplayMode): cint; cdecl; external SDL_LibName;

Set the display mode used when a fullscreen window is visible.

By default the window's dimensions and the desktop format and refresh rate are used.

mode The mode to use, or nil for the default mode.

0 on success, or -1 if setting the display mode failed.

SDL_GetWindowDisplayMode() SDL_SetWindowFullscreen()

function SDL_SetWindowFullscreen(window: PSDL_Window; flags: TSDL_WindowFlags): cint; cdecl; external SDL_LibName;

Set a window's fullscreen state.

0 on success, or -1 if setting the display mode failed.

SDL_SetWindowDisplayMode() SDL_GetWindowDisplayMode()

function SDL_SetWindowGammaRamp(window: PSDL_Window; const red: pcuint16; const green: pcuint16; const blue: pcuint16): cint; cdecl; external SDL_LibName;

Set the gamma ramp for a window.

red The translation table for the red channel, or nil. green The translation table for the green channel, or nil. blue The translation table for the blue channel, or nil.

0 on success, or -1 if gamma ramps are unsupported.

Set the gamma translation table for the red, green, and blue channels of the video hardware. Each table is an array of 256 16-bit quantities, representing a mapping between the input and output for that channel. The input is the index into the array, and the output is the 16-bit gamma value at that index, scaled to the output color precision.

SDL_GetWindowGammaRamp()

procedure SDL_SetWindowGrab(window: PSDL_Window; grabbed: TSDL_Bool); cdecl; external SDL_LibName;

Set a window's input grab mode.

grabbed This is SDL_TRUE to grab input, and SDL_FALSE to release input.

SDL_GetWindowGrab()

function SDL_SetWindowHitTest(window: PSDL_Window; callback: TSDL_HitTest; callback_data: Pointer): cint; cdecl; external SDL_LibName;

\brief Provide a callback that decides if a window region has special properties.

Normally windows are dragged and resized by decorations provided by the system window manager (a title bar, borders, etc), but for some apps, it makes sense to drag them from somewhere else inside the window itself; for example, one might have a borderless window that wants to be draggable from any part, or simulate its own title bar, etc.

This function lets the app provide a callback that designates pieces of a given window as special. This callback is run during event processing if we need to tell the OS to treat a region of the window specially; the use of this callback is known as "hit testing."

Mouse input may not be delivered to your application if it is within a special area; the OS will often apply that input to moving the window or resizing the window and not deliver it to the application.

Specifying NULL for a callback disables hit-testing. Hit-testing is disabled by default.

Platforms that don't support this functionality will return -1 unconditionally, even if you're attempting to disable hit-testing.

Your callback may fire at any time, and its firing does not indicate any specific behavior (for example, on Windows, this certainly might fire when the OS is deciding whether to drag your window, but it fires for lots of other reasons, too, some unrelated to anything you probably care about _and when the mouse isn't actually at the location it is testing_). Since this can fire at any time, you should try to keep your callback efficient, devoid of allocations, etc.

\param window The window to set hit-testing on. \param callback The callback to call when doing a hit-test. \param callback_data An app-defined void pointer passed to the callback. \return 0 on success, -1 on error (including unsupported).

procedure SDL_SetWindowIcon(window: PSDL_Window; icon: PSDL_Surface); cdecl; external SDL_LibName;

Set the icon for a window.

icon The icon for the window.

function SDL_SetWindowInputFocus(window: PSDL_Window): cint; cdecl; external SDL_LibName;

\brief Explicitly sets input focus to the window.

You almost certainly want SDL_RaiseWindow() instead of this function. Use this with caution, as you might give focus to a window that's completely obscured by other windows.

\param window The window that should get the input focus

\return 0 on success, or -1 otherwise. \sa SDL_RaiseWindow()

procedure SDL_SetWindowKeyboardGrab(window: PSDL_Window; grabbed: TSDL_Bool); cdecl; external SDL_LibName;

Set a window's keyboard grab mode.

Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or the Meta/Super key. Note that not all system keyboard shortcuts can be captured by applications (one example is Ctrl+Alt+Del on Windows).

This is primarily intended for specialized applications such as VNC clients or VM frontends. Normal games should not use keyboard grab.

When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the window is full-screen to ensure the user is not trapped in your application. If you have a custom keyboard shortcut to exit fullscreen mode, you may suppress this behavior with `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`.

If the caller enables a grab while another window is currently grabbed, the other window loses its grab in favor of the caller's window.

\param window The window for which the keyboard grab mode should be set. \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release.

\since This function is available since SDL 2.0.16.

\sa SDL_GetWindowKeyboardGrab \sa SDL_SetWindowMouseGrab \sa SDL_SetWindowGrab

procedure SDL_SetWindowMaximumSize(window: PSDL_Window; max_w: cint; max_h: cint); cdecl; external SDL_LibName;

Set the maximum size of a window's client area.

max_w The maximum width of the window, must be >0 max_h The maximum height of the window, must be >0

You can't change the maximum size of a fullscreen window, it automatically matches the size of the display mode.

SDL_GetWindowMaximumSize() SDL_SetWindowMinimumSize()

procedure SDL_SetWindowMinimumSize(window: PSDL_Window; min_w: cint; min_h: cint); cdecl; external SDL_LibName;

Set the minimum size of a window's client area.

min_w The minimum width of the window, must be >0 min_h The minimum height of the window, must be >0

You can't change the minimum size of a fullscreen window, it automatically matches the size of the display mode.

SDL_GetWindowMinimumSize() SDL_SetWindowMaximumSize()

function SDL_SetWindowModalFor(modal_window, parent_window: PSDL_Window): cint; cdecl; external SDL_LibName;

\brief Sets the window as a modal for another window

\param modal_window The window that should be modal \param parent_window The parent window

\return 0 on success, or -1 otherwise.

procedure SDL_SetWindowMouseGrab(window: PSDL_Window; grabbed: TSDL_Bool); cdecl; external SDL_LibName;

Set a window's mouse grab mode.

window The window for which the mouse grab mode should be set. grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release.

SDL_GetWindowMouseGrab()

procedure SDL_SetWindowMouseRect(window: PSDL_Window; rect: PSDL_Rect); cdecl; external SDL_LibName;

Confines the cursor to the specified area of a window.

window The window that will be associated with the barrier. rect A rectangle area in window-relative coordinates. If NULL the barrier for the specified window will be destroyed.

SDL_GetWindowMouseRect()

function SDL_SetWindowOpacity(window: PSDL_Window; opacity: cfloat): cint; cdecl; external SDL_LibName;

\brief Set the opacity for a window

\param window The window which will be made transparent or opaque \param opacity Opacity (0.0f - transparent, 1.0f - opaque) This will be clamped internally between 0.0f and 1.0f.

\return 0 on success, or -1 if setting the opacity isn't supported.

\sa SDL_GetWindowOpacity()

procedure SDL_SetWindowPosition(window: PSDL_Window; x: cint; y: cint); cdecl; external SDL_LibName;

Set the position of a window.

window The window to reposition. x The x coordinate of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED. y The y coordinate of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED.

The window coordinate origin is the upper left of the display.

SDL_GetWindowPosition()

procedure SDL_SetWindowResizable(window: PSDL_Window; resizable: TSDL_Bool); cdecl; external SDL_LibName;

\brief Set the user-resizable state of a window.

This will add or remove the window's SDL_WINDOW_RESIZABLE flag and allow/disallow user resizing of the window. This is a no-op if the window's resizable state already matches the requested state.

\param window The window of which to change the resizable state. \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow.

\note You can't change the resizable state of a fullscreen window.

\sa SDL_GetWindowFlags()

function SDL_SetWindowShape(window: PSDL_Window; shape: PSDL_Surface; shape_mode: PSDL_WindowShapeMode): cint; cdecl; external SDL_LibName;

Set the shape and parameters of a shaped window.

\param window The shaped window whose parameters should be set. \param shape A surface encoding the desired shape for the window. \param shape_mode The parameters to set for the shaped window. \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape argument, or SDL_NONSHAPEABLE_WINDOW if the SDL_Window given does not reference a valid shaped window.

\since This function is available since SDL 2.0.0.

\sa SDL_WindowShapeMode \sa SDL_GetShapedWindowMode

procedure SDL_SetWindowSize(window: PSDL_Window; w: cint; h: cint); cdecl; external SDL_LibName;

Set the size of a window's client area.

w The width of the window, must be >0 h The height of the window, must be >0

You can't change the size of a fullscreen window, it automatically matches the size of the display mode.

SDL_GetWindowSize()

procedure SDL_SetWindowTitle(window: PSDL_Window; const title: PAnsiChar); cdecl; external SDL_LibName;

Set the title of a window, in UTF-8 format.

SDL_GetWindowTitle()

procedure SDL_SetYUVConversionMode(mode: TSDL_YUV_CONVERSION_MODE); cdecl; external SDL_LibName;

\brief Set the YUV conversion mode

function SDL_SHAPEMODEALPHA(mode: TWindowShapeMode): Boolean;
 
function SDL_ShowCursor(toggle: cint): cint; cdecl; external SDL_LibName;

Toggle whether or not the cursor is shown.

The cursor starts off displayed but can be turned off. Passing `SDL_ENABLE` displays the cursor and passing `SDL_DISABLE` hides it.

The current state of the mouse cursor can be queried by passing `SDL_QUERY`; either `SDL_DISABLE` or `SDL_ENABLE` will be returned.

\param toggle `SDL_ENABLE` to show the cursor, `SDL_DISABLE` to hide it, `SDL_QUERY` to query the current state without changing it. \returns `SDL_ENABLE` if the cursor is shown, or `SDL_DISABLE` if the cursor is hidden, or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_CreateCursor \sa SDL_SetCursor

function SDL_ShowMessageBox(messageboxdata: PSDL_MessageBoxData; buttonid: pcint): cint; cdecl; external SDL_LibName;

Create a modal message box.

messageboxdata The SDL_MessageBoxData structure with title, text, etc. buttonid The pointer to which user id of hit button should be copied.

-1 on error, otherwise 0 and buttonid contains user id of button hit or -1 if dialog was closed.

This function should be called on the thread that created the parent window, or on the main thread if the messagebox has no parent. It will block execution of that thread until the user clicks a button or closes the messagebox.

function SDL_ShowSimpleMessageBox(flags: TSDL_MessageBoxFlags; title: PAnsiChar; _message: PAnsiChar; window: PSDL_Window): cint; cdecl; external SDL_LibName;

Create a simple modal message box

flags SDL_MessageBoxFlags title UTF-8 title text message UTF-8 message text window The parent window, or NULL for no parent

0 on success, -1 on error

SDL_ShowMessageBox

procedure SDL_ShowWindow(window: PSDL_Window); cdecl; external SDL_LibName;

Show a window.

SDL_HideWindow()

function SDL_SIMDAlloc(const len: csize_t): Pointer; cdecl; external SDL_LibName;

Allocate memory in a SIMD-friendly way.

This will allocate a block of memory that is suitable for use with SIMD instructions. Specifically, it will be properly aligned and padded for the system's supported vector instructions.

The memory returned will be padded such that it is safe to read or write an incomplete vector at the end of the memory block. This can be useful so you don't have to drop back to a scalar fallback at the end of your SIMD processing loop to deal with the final elements without overflowing the allocated buffer.

You must free this memory with SDL_FreeSIMD(), not free() or SDL_free().

Note that SDL will only deal with SIMD instruction sets it is aware of; for example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants 64. To be clear: if you can't decide to use an instruction set with an SDL_Has*() function, don't use that instruction set with memory allocated through here.

SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't out of memory, but you are not allowed to dereference it (because you only own zero bytes of that buffer).

procedure SDL_SIMDFree(mem: Pointer); cdecl; external SDL_LibName;

Deallocate memory obtained from SDL_SIMDAlloc.

It is not valid to use this function on a pointer from anything but SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from SDL_malloc, GetMem, etc.

However, SDL_SIMDFree(NIL) is a legal no-op.

The memory pointed to by `mem` is no longer valid for access upon return, and may be returned to the system or reused by a future allocation. The pointer passed to this function is no longer safe to dereference once this function returns, and should be discarded.

function SDL_SIMDGetAlignment(): csize_t; cdecl; external SDL_LibName;

Report the alignment this system needs for SIMD allocations.

This will return the minimum number of bytes to which a pointer must be aligned to be compatible with SIMD instructions on the current machine. For example, if the machine supports SSE only, it will return 16, but if it supports AVX-512F, it'll return 64 (etc). This only reports values for instruction sets SDL knows about, so if your SDL build doesn't have SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and not 64 for the AVX-512 instructions that exist but SDL doesn't know about. Plan accordingly.

function SDL_SIMDRealloc(mem: Pointer; const len: csize_t): Pointer; cdecl; external SDL_LibName;

Reallocate memory obtained from SDL_SIMDAlloc.

It is not valid to use this function on a pointer from anything but SDL_SIMDAlloc(). It can't be used on pointers from SDL_malloc, GetMem, etc.

function SDL_sin(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the sine of x, where x is given in radians.

\since This function is available since SDL 2.0.4.

function SDL_sinf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the sine of x, where x is given in radians.

\since This function is available since SDL 2.0.4.

function SDL_SoftStretch(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; const dstrect: PSDL_Surface): cint; cdecl; external SDL_LibName;

Perform a fast, low quality, stretch blit between two surfaces of the same pixel format.

This function uses a static buffer, and is not thread-safe.

function SDL_sqrt(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the non-negative square root of x.

\since This function is available since SDL 2.0.4.

function SDL_sqrtf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the non-negative square root of x.

\since This function is available since SDL 2.0.4.

procedure SDL_StartTextInput; cdecl; external SDL_LibName;

Start accepting Unicode text input events.

This function will start accepting Unicode text input events in the focused SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in pair with SDL_StopTextInput().

On some platforms using this function activates the screen keyboard.

\since This function is available since SDL 2.0.0.

\sa SDL_SetTextInputRect \sa SDL_StopTextInput

procedure SDL_StopTextInput; cdecl; external SDL_LibName;

Stop receiving any text input events.

\since This function is available since SDL 2.0.0.

\sa SDL_StartTextInput

function SDL_tan(x: cdouble): cdouble; cdecl; external SDL_LibName;

Calculate the tangent of x, where x is given in radians.

\since This function is available since SDL 2.0.4.

function SDL_tanf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Calculate the tangent of x, where x is given in radians.

\since This function is available since SDL 2.0.4.

function SDL_ThreadID: TSDL_ThreadID; cdecl; external SDL_LibName;

Get the thread identifier for the current thread.

This thread identifier is as reported by the underlying operating system. If SDL is running on a platform that does not support threads the return value will always be zero.

This function also returns a valid thread ID when called from the main thread.

\returns the ID of the current thread.

\since This function is available since SDL 2.0.0.

\sa SDL_GetThreadID

function SDL_TICKS_PASSED(const A, B: cint32): Boolean;

Type conversion unnecessary bc. types are declared in func. param. list!

procedure SDL_TLSCleanup; cdecl; external SDL_LibName;

Cleanup all TLS data for this thread.

\since This function is available since SDL 2.0.16.

function SDL_TLSCreate: TSDL_TLSID; cdecl; external SDL_LibName;

Create a piece of thread-local storage.

This creates an identifier that is globally visible to all threads but refers to data that is thread-specific.

\returns the newly created thread local storage identifier or 0 on error.

\since This function is available since SDL 2.0.0.

\sa SDL_TLSGet \sa SDL_TLSSet

function SDL_TLSGet(id: TSDL_TLSID): Pointer; cdecl; external SDL_LibName;

Get the current thread's value associated with a thread local storage ID.

\param id the thread local storage ID \returns the value associated with the ID for the current thread or NULL if no value has been set; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_TLSCreate \sa SDL_TLSSet

function SDL_TLSSet(id: TSDL_TLSID; const value: Pointer; destructor_: TTLSDestructor): cint; cdecl; external SDL_LibName;

Set the current thread's value associated with a thread local storage ID.

The function prototype for `destructor` is:

```c void destructor(void *value) ```

where its parameter `value` is what was passed as `value` to SDL_TLSSet().

\param id the thread local storage ID \param value the value to associate with the ID for the current thread \param destructor a function called when the thread exits, to free the value \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

\sa SDL_TLSCreate \sa SDL_TLSGet

function SDL_tolower(x: cint):cint; cdecl; external SDL_LibName;

If the given ASCII character is an uppercase letter, converts it to lowercase. Otherwise returns the original value.

\since This function is available since SDL 2.0.4.

function SDL_toupper(x: cint):cint; cdecl; external SDL_LibName;

If the given ASCII character is a lowercase letter, converts it to uppercase. Otherwise returns the original value.

\since This function is available since SDL 2.0.4.

function SDL_trunc(x: cdouble): cdouble; cdecl; external SDL_LibName;

Round to nearest integral value, towards zero.

\since This function is available since SDL 2.0.14.

function SDL_truncf(x: cfloat): cfloat; cdecl; external SDL_LibName;

Round to nearest integral value, towards zero.

\since This function is available since SDL 2.0.14.

function SDL_TryLockMutex(mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;

Try to lock a mutex without blocking.

This works just like SDL_LockMutex(), but if the mutex is not available, this function returns SDL_MUTEX_TIMEDOUT immediately.

This technique is useful if you need exclusive access to a resource but don't want to wait for it, and will return to it to try again later.

\param mutex the mutex to try to lock \returns 0, SDL_MUTEX_TIMEDOUT, or -1 on error; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.0.

function SDL_UnionFRect(const a, b: PSDL_FRect; result: PSDL_FRect): TSDL_Bool; cdecl; external SDL_LibName;

Calculate the union of two rectangles with float precision.

\param A an SDL_FRect structure representing the first rectangle \param B an SDL_FRect structure representing the second rectangle \param result an SDL_FRect structure filled in with the union of rectangles `A` and `B`

\since This function is available since SDL 2.0.22.

procedure SDL_UnionRect(const A, B: PSDL_Rect; result: PSDL_Rect); cdecl; external SDL_LibName;

Calculate the union of two rectangles.

procedure SDL_UnloadObject(handle: Pointer); cdecl; external SDL_LibName;

Unload a shared object from memory.

\param handle a valid shared object handle returned by SDL_LoadObject()

\since This function is available since SDL 2.0.0.

\sa SDL_LoadFunction \sa SDL_LoadObject

procedure SDL_UnlockAudio; cdecl; external SDL_LibName;

This function is a legacy means of unlocking the audio device.

New programs might want to use SDL_UnlockAudioDevice() instead. This function is equivalent to calling...

```c SDL_UnlockAudioDevice(1); ```

...and is only useful if you used the legacy SDL_OpenAudio() function.

\since This function is available since SDL 2.0.0.

\sa SDL_LockAudio \sa SDL_UnlockAudioDevice

procedure SDL_UnlockAudioDevice(dev: TSDL_AudioDeviceID); cdecl; external SDL_LibName;

Use this function to unlock the audio callback function for a specified device.

This function should be paired with a previous SDL_LockAudioDevice() call.

\param dev the ID of the device to be unlocked

\since This function is available since SDL 2.0.0.

\sa SDL_LockAudioDevice

procedure SDL_UnlockJoysticks(); cdecl; external SDL_LibName;

Unlocking for multi-threaded access to the joystick API

If you are using the joystick API or handling events from multiple threads you should use these locking functions to protect access to the joysticks.

In particular, you are guaranteed that the joystick list won't change, so the API functions that take a joystick index will be valid, and joystick and game controller events will not be delivered.

\since This function is available since SDL 2.0.7.

function SDL_UnlockMutex(mutex: PSDL_Mutex): cint; cdecl; external SDL_LibName;

Unlock the mutex.

It is legal for the owning thread to lock an already-locked mutex. It must unlock it the same number of times before it is actually made available for other threads in the system (this is known as a "recursive mutex").

It is an error to unlock a mutex that has not been locked by the current thread, and doing so results in undefined behavior.

It is also an error to unlock a mutex that isn't locked at all.

\param mutex the mutex to unlock. \returns 0, or -1 on error.

\since This function is available since SDL 2.0.0.

procedure SDL_UnlockSensors(); cdecl; external SDL_LibName;
 
procedure SDL_UnlockSurface(surface: PSDL_Surface); cdecl; external SDL_LibName;

SDL_LockSurface() *

procedure SDL_UnlockTexture(texture: PSDL_Texture) cdecl; external SDL_LibName;

Unlock a texture, uploading the changes to video memory, if needed.

SDL_LockTexture()

function SDL_UpdateNVTexture( texture: PSDL_Texture; Const rect: PSDL_Rect; Const Yplane: Pcuint8; Ypitch: cint; Const UVplane: Pcuint8; UVpitch: cint ): cint; cdecl; external SDL_LibName;

Update a rectangle within a planar NV12 or NV21 texture with new pixels.

You can use SDL_UpdateTexture() as long as your pixel data is a contiguous block of NV12/21 planes in the proper order, but this function is available if your pixel data is not contiguous.

function SDL_UpdateTexture(texture: PSDL_Texture; rect: PSDL_Rect; pixels: Pointer; pitch: cint32): cint32 cdecl; external SDL_LibName;

Update the given texture rectangle with new pixel data.

texture The texture to update rect A pointer to the rectangle of pixels to update, or NULL to update the entire texture. pixels The raw pixel data. pitch The number of bytes between rows of pixel data.

0 on success, or -1 if the texture is not valid.

This is a fairly slow function.

function SDL_UpdateWindowSurface(window: PSDL_Window): cint; cdecl; external SDL_LibName;

Copy the window surface to the screen.

0 on success, or -1 on error.

SDL_GetWindowSurface() SDL_UpdateWindowSurfaceRects()

function SDL_UpdateWindowSurfaceRects(window: PSDL_Window; rects: PSDL_Rect; numrects: cint): cint; cdecl; external SDL_LibName;

Copy a number of rectangles on the window surface to the screen.

0 on success, or -1 on error.

SDL_GetWindowSurface() SDL_UpdateWindowSurfaceRect()

function SDL_UpdateYUVTexture(texture: PSDL_Texture; rect: PSDL_Rect; Yplane: pcuint8; Ypitch: cint32; Uplane: pcuint8; UPitch: cint32; Vplane: pcuint8; VPitch: cint32):cint32; cdecl; external SDL_LibName;

Update a rectangle within a planar YV12 or IYUV texture with new pixel data.

texture The texture to update rect A pointer to the rectangle of pixels to update, or NULL to update the entire texture. Yplane The raw pixel data for the Y plane. Ypitch The number of bytes between rows of pixel data for the Y plane. Uplane The raw pixel data for the U plane. Upitch The number of bytes between rows of pixel data for the U plane. Vplane The raw pixel data for the V plane. Vpitch The number of bytes between rows of pixel data for the V plane.

0 on success, or -1 if the texture is not valid.

You can use SDL_UpdateTexture() as long as your pixel data is a contiguous block of Y and U/V planes in the proper order, but this function is available if your pixel data is not contiguous.

function SDL_UpperBlit(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;

This is the public blit function, SDL_BlitSurface(), and it performs rectangle validation and clipping before passing it to SDL_LowerBlit()

function SDL_UpperBlitScaled(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint; cdecl; external SDL_LibName;

This is the public scaled blit function, SDL_BlitScaled(), and it performs rectangle validation and clipping before passing it to SDL_LowerBlitScaled()

procedure SDL_VERSION(out x: TSDL_Version);

Macro to determine SDL version program was compiled against.

This macro fills in a SDL_version structure with the version of the library you compiled against. This is determined by what header the compiler uses. Note that if you dynamically linked the library, you might have a slightly newer or older version at runtime. That version can be determined with SDL_GetVersion(), which, unlike SDL_VERSION(), is not a macro.

x An instance on TSDL_Version to fill with version data.

SDL_version SDL_GetVersion

function SDL_VERSIONNUM(X,Y,Z: cuint8): Cardinal;

This macro turns the version numbers into a numeric value:

(1,2,3) -> (1203)

This assumes that there will never be more than 100 patchlevels.

function SDL_VERSION_ATLEAST(X,Y,Z: cuint8): Boolean;

This macro will evaluate to true if compiled with SDL at least X.Y.Z.

function SDL_VideoInit(const driver_name: PAnsiChar): cint; cdecl; external SDL_LibName;

Initialize the video subsystem, optionally specifying a video driver.

driver_name Initialize a specific driver by name, or nil for the default video driver.

0 on success, -1 on error

This function initializes the video subsystem; setting up a connection to the window manager, etc, and determines the available display modes and pixel formats, but does not initialize a window or graphics mode.

SDL_VideoQuit()

procedure SDL_VideoQuit; cdecl; external SDL_LibName;

Shuts down the video subsystem.

function closes all windows, and restores the original video mode.

SDL_VideoInit()

function SDL_WaitEvent(event: PSDL_Event): cint32 cdecl; external SDL_LibName;

Waits indefinitely for the next available event.

1, or 0 if there was an error while waiting for events.

event - If not nil, the next event is removed from the queue and stored in that area.

function SDL_WaitEventTimeout(event: PSDL_Event; timeout: cint32): cint32 cdecl; external SDL_LibName;

Waits until the specified timeout (in milliseconds) for the next available event.

1, or 0 if there was an error while waiting for events.

event - If not nil, the next event is removed from the queue and stored in that area.

procedure SDL_WaitThread(thread: PSDL_Thread; status: pcint); cdecl; external SDL_LibName;

Wait for a thread to finish.

Threads that haven't been detached will remain (as a "zombie") until this function cleans them up. Not doing so is a resource leak.

Once a thread has been cleaned up through this function, the SDL_Thread that references it becomes invalid and should not be referenced again. As such, only one thread may call SDL_WaitThread() on another.

The return code for the thread function is placed in the area pointed to by `status`, if `status` is not NULL.

You may not wait on a thread that has been used in a call to SDL_DetachThread(). Use either that function or this one, but not both, or behavior is undefined.

It is safe to pass a NULL thread to this function; it is a no-op.

Note that the thread pointer is freed by this function and is not valid afterward.

\param thread the SDL_Thread pointer that was returned from the SDL_CreateThread() call that started this thread \param status pointer to an integer that will receive the value returned from the thread function by its 'return', or NULL to not receive such value back.

\since This function is available since SDL 2.0.0.

\sa SDL_CreateThread \sa SDL_DetachThread

function SDL_WarpMouseGlobal(x, y: cint): cint; cdecl; external SDL_LibName;

Move the mouse to the given position in global screen space.

This function generates a mouse motion event.

A failure of this function usually means that it is unsupported by a platform.

Note that this function will appear to succeed, but not actually move the mouse when used over Microsoft Remote Desktop.

\param x the x coordinate \param y the y coordinate \returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

\since This function is available since SDL 2.0.4.

\sa SDL_WarpMouseInWindow

procedure SDL_WarpMouseInWindow(window: PSDL_Window; x: cint; y: cint); cdecl; external SDL_LibName;

Move the mouse cursor to the given position within the window.

This function generates a mouse motion event if relative mode is not enabled. If relative mode is enabled, you can force mouse events for the warp by setting the SDL_HINT_MOUSE_RELATIVE_WARP_MOTION hint.

Note that this function will appear to succeed, but not actually move the mouse when used over Microsoft Remote Desktop.

\param window the window to move the mouse into, or NULL for the current mouse focus \param x the x coordinate within the window \param y the y coordinate within the window

\since This function is available since SDL 2.0.0.

\sa SDL_WarpMouseGlobal

function SDL_WasInit(flags: TSDL_Init): cuint32; cdecl; external SDL_LibName;

This function returns a mask of the specified subsystems which have previously been initialized.

If flags is 0, it returns a mask of all initialized subsystems.

function SDL_WINDOWPOS_CENTERED_DISPLAY(X: Variant): Variant;
 
function SDL_WINDOWPOS_ISCENTERED(X: Variant): Variant;
 
function SDL_WINDOWPOS_ISUNDEFINED(X: Variant): Variant;
 
function SDL_WINDOWPOS_UNDEFINED_DISPLAY(X: Variant): Variant;
 
function SDL_WriteBE16(dst: PSDL_RWops; value: cuint16): csize_t; cdecl; external SDL_LibName;
 
function SDL_WriteBE32(dst: PSDL_RWops; value: cuint32): csize_t; cdecl; external SDL_LibName;
 
function SDL_WriteBE64(dst: PSDL_RWops; value: cuint64): csize_t; cdecl; external SDL_LibName;
 
function SDL_WriteLE16(dst: PSDL_RWops; value: cuint16): csize_t; cdecl; external SDL_LibName;
 
function SDL_WriteLE32(dst: PSDL_RWops; value: cuint32): csize_t; cdecl; external SDL_LibName;
 
function SDL_WriteLE64(dst: PSDL_RWops; value: cuint64): csize_t; cdecl; external SDL_LibName;
 
function SDL_WriteU8(dst: PSDL_RWops; value: cuint8): csize_t; cdecl; external SDL_LibName;

Write endian functions

Write an item of native format to the specified endianness.

Types

cintptr_t = PtrInt;
 
cuintptr_t = PtrUInt;

"The following type designates an unsigned integer type [or signed respectivly] with the property that any valid pointer to void can be converted to this type, then converted back to a pointer to void, and the result will compare equal to the original pointer: uintptr_t" Source: https://pubs.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html

cwchar_t = UnixType.wchar_t;

wchar_t is the "wide character" type of the C language. The size of this type is platform- and compiler-dependent.

While FPC does have it's own "wide character" type, System.WideChar, that one is defined as always being 16-bits, so we can't re-use it here.

When using FPC on Unices, the UnixType unit provides a wchar_t definition.

On other systems/compiler combos, let's just go by what the CPP reference wiki claims, i.e: - wchar_t is 16-bits on Windows - wchar_t is 32-bits on Linux "and many other non-Windows systems"

See: https://en.cppreference.com/w/cpp/language/types#Character_types

pcwchar_t = ˆcwchar_t;
 
PKeyStateArr = ˆTKeyStateArr;
 
ppcuint8 = ˆpcuint8;
 
PPKeyStateArr = ˆPKeyStateArr;

SDL2-for-Pascal: - Is this type used/needed anywhere? - It doesn't seem to be part of sdl_keyboard.h - If not, should be commented out or deleted

PPSDL_ArrayOrder = ˆPSDL_ArrayOrder;

Array component order, low byte -> high byte. *

PPSDL_Atomic = ˆPSDL_Atomic;

A type representing an atomic integer value. It is a record so people don't accidentally use numeric operations on it.

PPSDL_AudioCallback = ˆPSDL_AudioCallback;

This function is called when the audio device needs more data.

\param userdata An application-specific parameter saved in the SDL_AudioSpec structure \param stream A pointer to the audio data buffer. \param len The length of that buffer in bytes.

Once the callback returns, the buffer will no longer be valid. Stereo samples are stored in a LRLRLR ordering.

You can choose to avoid callbacks and use SDL_QueueAudio() instead, if you like. Just open your audio device with a NULL callback.

PPSDL_AudioCVT = ˆPSDL_AudioCVT;
 
PPSDL_AudioDeviceEvent = ˆPSDL_AudioDeviceEvent;

Audio device event structure (event.adevice.*)

PPSDL_AudioDeviceID = ˆPSDL_AudioDeviceID;

SDL Audio Device IDs.

A successful call to SDL_OpenAudio() is always device id 1, and legacy SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls always returns devices >= 2 on success. The legacy calls are good both for backwards compatibility and when you don't care about multiple, specific, or capture devices.

PPSDL_AudioFormat = ˆPSDL_AudioFormat;

Audio format flags.

These are what the 16 bits in SDL_AudioFormat currently mean... (Unspecified bits are always zero).

++———————–sample is signed if set || || ++———–sample is bigendian if set || || || || ++—sample is float if set || || || || || || +—sample bit size—+ || || || | | 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00

There are macros in SDL 2.0 and later to query these bits.

PPSDL_AudioSpec = ˆPSDL_AudioSpec;

The calculated values in this structure are calculated by SDL_OpenAudio().

For multi-channel audio, the default SDL channel mapping is: 2: FL FR (stereo) 3: FL FR LFE (2.1 surround) 4: FL FR BL BR (quad) 5: FL FR LFE BL BR (4.1 surround) 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) 7: FL FR FC LFE BC SL SR (6.1 surround) 8: FL FR FC LFE BL BR SL SR (7.1 surround)

PPSDL_AudioStatus = ˆPSDL_AudioStatus;

Audio state

Get the current audio state.

PPSDL_BitmapOrder = ˆPSDL_BitmapOrder;

Bitmap pixel order, high bit -> low bit. *

PPSDL_BlendFactor = ˆPSDL_BlendFactor;

\brief The normalized factor used to multiply pixel components

PPSDL_BlendMode = ˆPSDL_BlendMode;

The blend mode used in SDL_RenderCopy() and drawing operations.

PPSDL_BlendOperation = ˆPSDL_BlendOperation;

\brief The blend operation used when combining source and destination pixel components

PPSDL_Blit = ˆPSDL_Blit;

The type of function used for surface blitting functions.

PPSDL_BlitMap = ˆPSDL_BlitMap;

A collection of pixels used in software blitting.

This structure should be treated as read-only, except for \c pixels, which, if not NULL, contains the raw pixel data for the surface.

PPSDL_Bool = ˆPSDL_Bool;

SDL-For-Pascal: A lot of the functions are missing. Some functions are useless if working with Pascal (e. g. memory management functions), others could be useful (e. g. math functions).

TODO: Investigate header file and translate potentially useful functions.

PPSDL_calloc_func = ˆPSDL_calloc_func;
 
PPSDL_Color = ˆPSDL_Color;

The bits of this structure can be directly reinterpreted as an integer-packed color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems).

PPSDL_Colour = ˆPSDL_Colour;
 
PPSDL_CommonEvent = ˆPSDL_CommonEvent;

Fields shared by every event

PPSDL_Cond = ˆPSDL_Cond;

The SDL condition variable structure, defined in SDL_cond.c

PPSDL_ControllerAxisEvent = ˆPSDL_ControllerAxisEvent;

Game controller axis motion event structure (event.caxis.*)

PPSDL_ControllerButtonEvent = ˆPSDL_ControllerButtonEvent;

Game controller button event structure (event.cbutton.*)

PPSDL_ControllerDeviceEvent = ˆPSDL_ControllerDeviceEvent;

Controller device event structure (event.cdevice.*)

PPSDL_ControllerSensorEvent = ˆPSDL_ControllerSensorEvent;

Game controller sensor event structure (event.csensor.*)

PPSDL_ControllerTouchpadEvent = ˆPSDL_ControllerTouchpadEvent;

Game controller touchpad event structure (event.ctouchpad.*)

PPSDL_Cursor = ˆPSDL_Cursor;

2.24.1 from "sdl_mouse.h"

PPSDL_DisplayEvent = ˆPSDL_DisplayEvent;

Display state change event data (event.display.*)

PPSDL_DisplayEventID = ˆPSDL_DisplayEventID;

\brief Event subtype for display events

PPSDL_DisplayMode = ˆPSDL_DisplayMode;

The structure that defines a display mode

SDL_GetNumDisplayModes() SDL_GetDisplayMode() SDL_GetDesktopDisplayMode() SDL_GetCurrentDisplayMode() SDL_GetClosestDisplayMode() SDL_SetWindowDisplayMode() SDL_GetWindowDisplayMode()

PPSDL_DisplayOrientation = ˆPSDL_DisplayOrientation;

< Display has been removed from the system *

PPSDL_DollarGestureEvent = ˆPSDL_DollarGestureEvent;

(event.dgesture.*) *

PPSDL_DropEvent = ˆPSDL_DropEvent;

An event used to request a file open by the system (event.drop.*) This event is disabled by default, you can enable it with SDL_EventState() If you enable this event, you must free the filename in the event.

PPSDL_ErrorCode = ˆPSDL_ErrorCode;

#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) #define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) #define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param))

PPSDL_Event = ˆPSDL_Event;

General event structure

PPSDL_EventAction = ˆPSDL_EventAction;
 
PPSDL_EventFilter = ˆPSDL_EventFilter;
 
PPSDL_EventType = ˆPSDL_EventType;

2.26.5 from "sdl_events.h"

PPSDL_Finger = ˆPSDL_Finger;

trackpad with relative device coordinates *

PPSDL_FingerID = ˆPSDL_FingerID;
 
PPSDL_FlashOperation = ˆPSDL_FlashOperation;

\brief Window flash operation

PPSDL_FPoint = ˆPSDL_FPoint;

\brief The structure that defines a point (floating point)

\sa SDL_EnclosePoints \sa SDL_PointInRect

PPSDL_FRect = ˆPSDL_FRect;

A rectangle, with the origin at the upper left. (floating point)

PPSDL_free_func = ˆPSDL_free_func;
 
PPSDL_GameController = ˆPSDL_GameController;

The gamecontroller structure used to identify an SDL game controller *

PPSDL_GameControllerAxis = ˆPSDL_GameControllerAxis;

The list of axes available from a controller

PPSDL_GameControllerBindType = ˆPSDL_GameControllerBindType;
 
PPSDL_GameControllerButton = ˆPSDL_GameControllerButton;

The list of buttons available from a controller

PPSDL_GameControllerButtonBind = ˆPSDL_GameControllerButtonBind;
 
PPSDL_GameControllerType = ˆPSDL_GameControllerType;
 
PPSDL_GestureID = ˆPSDL_GestureID;

2.24.0 from "sdl_gesture.h"

PPSDL_GLattr = ˆPSDL_GLattr;

OpenGL configuration attributes

PPSDL_GLContext = ˆPSDL_GLContext;

An opaque handle to an OpenGL context.

PPSDL_GLcontextFlag = ˆPSDL_GLcontextFlag;
 
PPSDL_GLcontextReleaseFlag = ˆPSDL_GLcontextReleaseFlag;
 
PPSDL_GLContextResetNotification = ˆPSDL_GLContextResetNotification;
 
PPSDL_GLprofile = ˆPSDL_GLprofile;
 
PPSDL_GUID = ˆPSDL_GUID;

An SDL_GUID is a 128-bit identifier for an input device that identifies that device across runs of SDL programs on the same platform. If the device is detached and then re-attached to a different port, or if the base system is rebooted, the device should still report the same GUID.

GUIDs are as precise as possible but are not guaranteed to distinguish physically distinct but equivalent devices. For example, two game controllers from the same vendor with the same product ID and revision may have the same GUID.

GUIDs may be platform-dependent (i.e., the same device may report different GUIDs on different operating systems).

PPSDL_Haptic = ˆPSDL_Haptic;

SDL_Haptic

The haptic structure used to identify an SDL haptic.

SDL_HapticOpen SDL_HapticOpenFromJoystick SDL_HapticClose

PPSDL_HapticCondition = ˆPSDL_HapticCondition;

A structure containing a template for a Condition effect.

The struct handles the following effects: - SDL_HAPTIC_SPRING: Effect based on axes position. - SDL_HAPTIC_DAMPER: Effect based on axes velocity. - SDL_HAPTIC_INERTIA: Effect based on axes acceleration. - SDL_HAPTIC_FRICTION: Effect based on axes movement.

Direction is handled by condition internals instead of a direction member. The condition effect specific members have three parameters. The first refers to the X axis, the second refers to the Y axis and the third refers to the Z axis. The right terms refer to the positive side of the axis and the left terms refer to the negative side of the axis. Please refer to the ::SDL_HapticDirection diagram for which side is positive and which is negative.

SDL_HapticDirection SDL_HAPTIC_SPRING SDL_HAPTIC_DAMPER SDL_HAPTIC_INERTIA SDL_HAPTIC_FRICTION SDL_HapticEffect

PPSDL_HapticConstant = ˆPSDL_HapticConstant;

A structure containing a template for a Constant effect.

The struct is exclusive to the ::SDL_HAPTIC_CONSTANT effect.

A constant effect applies a constant force in the specified direction to the joystick.

SDL_HAPTIC_CONSTANT SDL_HapticEffect

PPSDL_HapticCustom = ˆPSDL_HapticCustom;

A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect.

A custom force feedback effect is much like a periodic effect, where the application can define its exact shape. You will have to allocate the data yourself. Data should consist of channels * samples Uint16 samples.

If channels is one, the effect is rotated using the defined direction. Otherwise it uses the samples in data for the different axes.

SDL_HAPTIC_CUSTOM SDL_HapticEffect

PPSDL_HapticDirection = ˆPSDL_HapticDirection;

Structure that represents a haptic direction.

Directions can be specified by: - SDL_HAPTIC_POLAR : Specified by polar coordinates. - SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. - SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates.

Cardinal directions of the haptic device are relative to the positioning of the device. North is considered to be away from the user.

The following diagram represents the cardinal directions:

.–. |__| .——-. |=.| |.—–.| |–| || || | | |'—–'| |__|˜')_____(' [ COMPUTER ]

North (0,-1) ˆ | | (1,0) West <—-[ HAPTIC ]—-> East (-1,0) | | v South (0,1)

[ USER ] \|||/ (o o) —ooO-(_)-Ooo—

If type is SDL_HAPTIC_POLAR, direction is encoded by hundredths of a degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses the first dir parameter. The cardinal directions would be: - North: 0 (0 degrees) - East: 9000 (90 degrees) - South: 18000 (180 degrees) - West: 27000 (270 degrees)

If type is SDL_HAPTIC_CARTESIAN, direction is encoded by three positions (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses the first three dir parameters. The cardinal directions would be: - North: 0,-1, 0 - East: -1, 0, 0 - South: 0, 1, 0 - West: 1, 0, 0

The Z axis represents the height of the effect if supported, otherwise it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you can use any multiple you want, only the direction matters.

If type is SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. The first two dir parameters are used. The dir parameters are as follows (all values are in hundredths of degrees): - Degrees from (1, 0) rotated towards (0, 1). - Degrees towards (0, 0, 1) (device needs at least 3 axes).

Example of force coming from the south with all encodings (force coming from the south means the user will have to pull the stick to counteract):

SDL_HapticDirection direction;

// Cartesian directions direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. direction.dir[0] = 0; // X position direction.dir[1] = 1; // Y position // Assuming the device has 2 axes, we don't need to specify third parameter.

// Polar directions direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. direction.dir[0] = 18000; // Polar only uses first parameter

// Spherical coordinates direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters.

SDL_HAPTIC_POLAR SDL_HAPTIC_CARTESIAN SDL_HAPTIC_SPHERICAL SDL_HapticEffect SDL_HapticNumAxes

PPSDL_HapticEffect = ˆPSDL_HapticEffect;

The generic template for any haptic effect.

All values max at 32767 (0x7FFF). Signed values also can be negative. Time values unless specified otherwise are in milliseconds.

You can also pass SDL_HAPTIC_INFINITY to length instead of a 0-32767 value. Neither delay, interval, attack_length nor fade_length support SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends.

Additionally, the SDL_HAPTIC_RAMP effect does not support a duration of SDL_HAPTIC_INFINITY.

Button triggers may not be supported on all devices, it is advised to not use them if possible. Buttons start at index 1 instead of index 0 like the joystick.

If both attack_length and fade_level are 0, the envelope is not used, otherwise both values are used.

Common parts:

// Replay - All effects have this Uint32 length; // Duration of effect (ms). Uint16 delay; // Delay before starting effect.

// Trigger - All effects have this Uint16 button; // Button that triggers effect. Uint16 interval; // How soon before effect can be triggered again.

// Envelope - All effects except condition effects have this Uint16 attack_length; // Duration of the attack (ms). Uint16 attack_level; // Level at the start of the attack. Uint16 fade_length; // Duration of the fade out (ms). Uint16 fade_level; // Level at the end of the fade.

Here we have an example of a constant effect evolution in time:

Strength ˆ | | effect level –> _________________ | / \ | / \ | / \ | / \ | attack_level –> | \ | | | <— fade_level | +————————————————–> Time [–] [—] attack_length fade_length

[——————][———————–] delay length

Note either the attack_level or the fade_level may be above the actual effect level.

SDL_HapticConstant SDL_HapticPeriodic SDL_HapticCondition SDL_HapticRamp SDL_HapticCustom

PPSDL_HapticPeriodic = ˆPSDL_HapticPeriodic;

A structure containing a template for a Periodic effect.

The struct handles the following effects: - SDL_HAPTIC_SINE - SDL_HAPTIC_SQUARE - SDL_HAPTIC_TRIANGLE - SDL_HAPTIC_SAWTOOTHUP - SDL_HAPTIC_SAWTOOTHDOWN

A periodic effect consists in a wave-shaped effect that repeats itself over time. The type determines the shape of the wave and the parameters determine the dimensions of the wave.

Phase is given by hundredth of a cycle meaning that giving the phase a value of 9000 will displace it 25% of its period. Here are sample values: - 0: No phase displacement. - 9000: Displaced 25% of its period. - 18000: Displaced 50% of its period. - 27000: Displaced 75% of its period. - 36000: Displaced 100% of its period, same as 0, but 0 is preferred.

Examples:

SDL_HAPTIC_SINE __ __ __ __ / \ / \ / \ / / \__/ \__/ \__/

SDL_HAPTIC_SQUARE __ __ __ __ __ | | | | | | | | | | | |__| |__| |__| |__| |

SDL_HAPTIC_TRIANGLE /\ /\ /\ /\ /\ / \ / \ / \ / \ / / \/ \/ \/ \/

SDL_HAPTIC_SAWTOOTHUP /| /| /| /| /| /| /| / | / | / | / | / | / | / | / |/ |/ |/ |/ |/ |/ |

SDL_HAPTIC_SAWTOOTHDOWN \ |\ |\ |\ |\ |\ |\ | \ | \ | \ | \ | \ | \ | \ | \| \| \| \| \| \| \|

SDL_HAPTIC_SINE SDL_HAPTIC_SQUARE SDL_HAPTIC_TRIANGLE SDL_HAPTIC_SAWTOOTHUP SDL_HAPTIC_SAWTOOTHDOWN SDL_HapticEffect

PPSDL_HapticRamp = ˆPSDL_HapticRamp;

A structure containing a template for a Ramp effect.

This struct is exclusively for the ::SDL_HAPTIC_RAMP effect.

The ramp effect starts at start strength and ends at end strength. It augments in linear fashion. If you use attack and fade with a ramp the effects get added to the ramp effect making the effect become quadratic instead of linear.

SDL_HAPTIC_RAMP SDL_HapticEffect

PPSDL_HintCallback = ˆPSDL_HintCallback;

/** \brief Add a function to watch a particular hint

\param name The hint to watch \param callback The function to call when the hint value changes \param userdata A pointer to pass to the callback function /

PPSDL_HintPriority = ˆPSDL_HintPriority;

/** \brief An enumeration of hint priorities /

PPSDL_HitTest = ˆPSDL_HitTest;

\brief Callback used for hit-testing.

\sa SDL_SetWindowHitTest

PPSDL_HitTestResult = ˆPSDL_HitTestResult;

\brief Possible return values from the SDL_HitTest callback.

\sa SDL_HitTest

PPSDL_Init = ˆPSDL_Init;

2.24.0 based on "sdl.h"

PPSDL_JoyAxisEvent = ˆPSDL_JoyAxisEvent;

Joystick axis motion event structure (event.jaxis.*)

PPSDL_JoyBallEvent = ˆPSDL_JoyBallEvent;

Joystick trackball motion event structure (event.jball.*)

PPSDL_JoyBatteryEvent = ˆPSDL_JoyBatteryEvent;

Joysick battery level change event structure (event.jbattery.*)

PPSDL_JoyButtonEvent = ˆPSDL_JoyButtonEvent;

Joystick button event structure (event.jbutton.*)

PPSDL_JoyDeviceEvent = ˆPSDL_JoyDeviceEvent;

Joystick device event structure (event.jdevice.*)

PPSDL_JoyHatEvent = ˆPSDL_JoyHatEvent;

Joystick hat position change event structure (event.jhat.*)

PPSDL_Joystick = ˆPSDL_Joystick;

The joystick structure used to identify an SDL joystick *

PPSDL_JoystickGUID = ˆPSDL_JoystickGUID;

A structure that encodes the stable unique id for a joystick device *

PPSDL_JoystickID = ˆPSDL_JoystickID;

This is a unique ID for a joystick for the time it is connected to the system, and is never reused for the lifetime of the application. If the joystick is disconnected and reconnected, it will get a new ID.

The ID value starts at 0 and increments from there. The value -1 is an invalid ID.

PPSDL_JoystickPowerLevel = ˆPSDL_JoystickPowerLevel;
 
PPSDL_JoystickType = ˆPSDL_JoystickType;
 
PPSDL_KeyboardEvent = ˆPSDL_KeyboardEvent;

Keyboard button event structure (event.key.*)

PPSDL_KeyCode = ˆPSDL_KeyCode;

The SDL virtual key representation.

Values of this type are used to represent keyboard keys using the current layout of the keyboard. These values include Unicode values representing the unmodified character that would be generated by pressing the key, or an SDLK_* constant for those keys that do not generate characters.

A special exception is the number keys at the top of the keyboard which always map to SDLK_0...SDLK_9, regardless of layout.

PPSDL_KeyMod = ˆPSDL_KeyMod;

Enumeration of valid key mods (possibly OR'd together).

PPSDL_Keysym = ˆPSDL_Keysym;

\brief The SDL keysym structure, used in key events.

\note If you are looking for translated character input, see the:: SDL_TEXTINPUT event.

PPSDL_Locale = ˆPSDL_Locale;

2.24.0 based on SDL_locale.h

PPSDL_LogCategory = ˆPSDL_LogCategory;

\brief The predefined log categories

By default the application category is enabled at the INFO level, the assert category is enabled at the WARN level, test is enabled at the VERBOSE level and all other categories are enabled at the CRITICAL level.

PPSDL_LogOutputFunction = ˆPSDL_LogOutputFunction;

\brief The prototype for the log output function

PPSDL_LogPriority = ˆPSDL_LogPriority;

\brief The predefined log priorities

PPSDL_malloc_func = ˆPSDL_malloc_func;
 
PPSDL_MessageBoxButtonData = ˆPSDL_MessageBoxButtonData;

Individual button data.

PPSDL_MessageBoxButtonFlags = ˆPSDL_MessageBoxButtonFlags;

Flags for SDL_MessageBoxButtonData.

PPSDL_MessageBoxColor = ˆPSDL_MessageBoxColor;

RGB value used in a message box color scheme

PPSDL_MessageBoxColorScheme = ˆPSDL_MessageBoxColorScheme;

A set of colors to use for message box dialogs

PPSDL_MessageBoxColorType = ˆPSDL_MessageBoxColorType;
 
PPSDL_MessageBoxData = ˆPSDL_MessageBoxData;

MessageBox structure containing title, text, window, etc.

PPSDL_MessageBoxFlags = ˆPSDL_MessageBoxFlags;

SDL_MessageBox flags. If supported will display warning icon, etc.

PPSDL_MouseButtonEvent = ˆPSDL_MouseButtonEvent;

Mouse button event structure (event.button.*)

PPSDL_MouseMotionEvent = ˆPSDL_MouseMotionEvent;

Mouse motion event structure (event.motion.*)

PPSDL_MouseWheelDirection = ˆPSDL_MouseWheelDirection;
 
PPSDL_MouseWheelEvent = ˆPSDL_MouseWheelEvent;

Mouse wheel event structure (event.wheel.*)

PPSDL_MultiGestureEvent = ˆPSDL_MultiGestureEvent;

Multiple Finger Gesture Event (event.mgesture.*)

PPSDL_Mutex = ˆPSDL_Mutex;

The SDL mutex structure, defined in SDL_sysmutex.c

PPSDL_PackedLayout = ˆPSDL_PackedLayout;

Packed component layout. *

PPSDL_PackOrder = ˆPSDL_PackOrder;

Packed component order, high bit -> low bit. *

PPSDL_Palette = ˆPSDL_Palette;
 
PPSDL_PixelFormat = ˆPSDL_PixelFormat;

Everything in the pixel format structure is read-only.

PPSDL_PixelType = ˆPSDL_PixelType;

Pixel type. *

PPSDL_Point = ˆPSDL_Point;

\brief The structure that defines a point (integer)

\sa SDL_EnclosePoints \sa SDL_PointInRect

PPSDL_PowerState = ˆPSDL_PowerState;

The basic state for the system's power supply.

PPSDL_QuitEvent = ˆPSDL_QuitEvent;

The "quit requested" event

PPSDL_realloc_func = ˆPSDL_realloc_func;
 
PPSDL_Rect = ˆPSDL_Rect;

\brief A rectangle, with the origin at the upper left (integer).

\sa SDL_RectEmpty \sa SDL_RectEquals \sa SDL_HasIntersection \sa SDL_IntersectRect \sa SDL_UnionRect \sa SDL_EnclosePoints

PPSDL_Renderer = ˆPSDL_Renderer;

A structure representing rendering state

PPSDL_RendererFlags = ˆPSDL_RendererFlags;

< The renderer supports rendering to texture *

PPSDL_RendererInfo = ˆPSDL_RendererInfo;

Information on the capabilities of a render driver or context.

PPSDL_RenderFlip = ˆPSDL_RenderFlip;

Flip constants for SDL_RenderCopyEx

PPSDL_RWops = ˆPSDL_RWops;

Read-Only memory stream *

PPSDL_ScaleMode = ˆPSDL_ScaleMode;

The scaling mode for a texture.

PPSDL_ScanCode = ˆPSDL_ScanCode;

The SDL keyboard scancode representation.

Values of this type are used to represent keyboard keys, among other places in the SDL_Keysym.scancode key.keysym.scancode \endlink field of the SDL_Event structure.

The values in this enumeration are based on the USB usage page standard: https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf

PPSDL_Sem = ˆPSDL_Sem;

The SDL semaphore structure, defined in SDL_sem.c

PPSDL_Sensor = ˆPSDL_Sensor;

\brief SDL_sensor.h

In order to use these functions, SDL_Init() must have been called with the ::SDL_INIT_SENSOR flag. This causes SDL to scan the system for sensors, and load appropriate drivers.

PPSDL_SensorEvent = ˆPSDL_SensorEvent;

Sensor event structure (event.sensor.*)

PPSDL_SensorID = ˆPSDL_SensorID;

This is a unique ID for a sensor for the time it is connected to the system, and is never reused for the lifetime of the application.

The ID value starts at 0 and increments from there. The value -1 is an invalid ID.

PPSDL_SensorType = ˆPSDL_SensorType;

The different sensors defined by SDL

Additional sensors may be available, using platform dependent semantics.

Hare are the additional Android sensors: https://developer.android.com/reference/android/hardware/SensorEvent.html#values

PPSDL_SpinLock = ˆPSDL_SpinLock;

Atomic locks are efficient spinlocks using CPU instructions, but are vulnerable to starvation and can spin forever if a thread holding a lock has been terminated. For this reason you should minimize the code executed inside an atomic lock and never do expensive things like API or system calls while holding them.

The atomic locks are not safe to lock recursively.

PPSDL_Surface = ˆPSDL_Surface;
 
PPSDL_SystemCursor = ˆPSDL_SystemCursor;

Cursor types for SDL_CreateSystemCursor.

PPSDL_SysWMEvent = ˆPSDL_SysWMEvent;

A video driver dependent system event (event.syswm.*) This event is disabled by default, you can enable it with SDL_EventState()

If you want to use this event, you should include SDL_syswm.h.

PPSDL_SysWMinfo = ˆPSDL_SysWMinfo;

The custom window manager information structure.

When this structure is returned, it holds information about which low level system it is using, and will be one of SDL_SYSWM_TYPE.

PPSDL_SysWMmsg = ˆPSDL_SysWMmsg;

The custom event structure.

PPSDL_TextEditingEvent = ˆPSDL_TextEditingEvent;

Keyboard text editing event structure (event.edit.*)

PPSDL_TextEditingExtEvent = ˆPSDL_TextEditingExtEvent;

Extended keyboard text editing event structure (event.editExt.*) when text would be truncated if stored in the text buffer SDL_TextEditingEvent

PPSDL_TextInputEvent = ˆPSDL_TextInputEvent;

Keyboard text input event structure (event.text.*)

PPSDL_Texture = ˆPSDL_Texture;

An efficient driver-specific representation of pixel data

PPSDL_TextureAccess = ˆPSDL_TextureAccess;

The access pattern allowed for a texture.

PPSDL_TextureModulate = ˆPSDL_TextureModulate;

The texture channel modulation used in SDL_RenderCopy().

PPSDL_ThreadFunction = ˆPSDL_ThreadFunction;

The function passed to SDL_CreateThread().

\param data what was passed as `data` to SDL_CreateThread() \returns a value that can be reported through SDL_WaitThread().

PPSDL_threadID = ˆPSDL_threadID;

The SDL thread ID *

PPSDL_ThreadPriority = ˆPSDL_ThreadPriority;

The SDL thread priority.

SDL will make system changes as necessary in order to apply the thread priority. Code which attempts to control thread state related to priority should be aware that calling SDL_SetThreadPriority may alter such state. SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior.

\note On many systems you require special privileges to set high or time critical priority.

PPSDL_TimerCallback = ˆPSDL_TimerCallback;

Function prototype for the timer callback function.

The callback function is passed the current timer interval and returns the next timer interval. If the returned value is the same as the one passed in, the periodic alarm continues, otherwise a new alarm is scheduled. If the callback returns 0, the periodic alarm is cancelled.

PPSDL_TimerID = ˆPSDL_TimerID;

Definition of the timer ID type.

PPSDL_TLSID = ˆPSDL_TLSID;

Thread local storage ID, 0 is the invalid ID *

PPSDL_TouchDeviceType = ˆPSDL_TouchDeviceType;
 
PPSDL_TouchFingerEvent = ˆPSDL_TouchFingerEvent;

Touch finger event structure (event.tfinger.*)

PPSDL_TouchID = ˆPSDL_TouchID;

2.0.18 from "sdl_touch.h"

PPSDL_UserEvent = ˆPSDL_UserEvent;

A user-defined event type (event.user.*)

PPSDL_Version = ˆPSDL_Version;

Information the version of SDL in use.

Represents the library's version as three levels: major revision (increments with massive changes, additions, and enhancements), minor revision (increments with backwards-compatible changes to the major revision), and patchlevel (increments with fixes to the minor revision).

SDL_VERSION SDL_GetVersion

PPSDL_Vertex = ˆPSDL_Vertex;
 
PPSDL_VirtualJoystickDesc = ˆPSDL_VirtualJoystickDesc;
 
PPSDL_Window = ˆPSDL_Window;

2.0.14 from "sdl_video.h"

PPSDL_WindowEvent = ˆPSDL_WindowEvent;

Window state change event data (event.window.*)

PPSDL_WindowEventID = ˆPSDL_WindowEventID;

Event subtype for window events

PPSDL_WindowFlags = ˆPSDL_WindowFlags;

The flags on a window

SDL_GetWindowFlags()

PPSDL_WindowShapeMode = ˆPSDL_WindowShapeMode;

A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. *

PPSDL_WindowShapeParams = ˆPSDL_WindowShapeParams;

A union containing parameters for shaped windows. *

PPUInt8Array = ˆPUInt8Array;

Data types for all compilers

PPWindowShapeMode = ˆPWindowShapeMode;

\brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. *

PSDL_ArrayOrder = ˆTSDL_ArrayOrder;
 
PSDL_Atomic = ˆTSDL_Atomic;
 
PSDL_AudioCallback = ˆTSDL_AudioCallback;
 
PSDL_AudioCVT = ˆTSDL_AudioCVT;
 
PSDL_AudioDeviceEvent = ˆTSDL_AudioDeviceEvent;
 
PSDL_AudioDeviceID = ˆTSDL_AudioDeviceID;
 
PSDL_AudioFormat = ˆTSDL_AudioFormat;
 
PSDL_AudioSpec = ˆTSDL_AudioSpec;
 
PSDL_AudioStatus = ˆTSDL_AudioStatus;
 
PSDL_AudioStream = type Pointer;

this is opaque to the outside world.

PSDL_BitmapOrder = ˆTSDL_BitmapOrder;
 
PSDL_BlendFactor = ˆTSDL_BlendFactor;
 
PSDL_BlendMode = ˆTSDL_BlendMode;
 
PSDL_BlendOperation = ˆTSDL_BlendOperation;
 
PSDL_Blit = ˆTSDL_Blit;
 
PSDL_BlitMap = type Pointer;
 
PSDL_Bool = ˆTSDL_Bool;
 
PSDL_calloc_func = ˆTSDL_calloc_func;
 
PSDL_Color = ˆTSDL_Color;
 
PSDL_Colour = ˆTSDL_Colour;
 
PSDL_CommonEvent = ˆTSDL_CommonEvent;
 
PSDL_Cond = Type Pointer;

The condition variable type.

Typical use of condition variables:

Thread A: SDL_LockMutex(lock); while ( not condition ) begin SDL_CondWait(cond, lock); end; SDL_UnlockMutex(lock);

Thread B: SDL_LockMutex(lock); ... condition := true; ... SDL_CondSignal(cond); SDL_UnlockMutex(lock);

There is some discussion whether to signal the condition variable with the mutex locked or not. There is some potential performance benefit to unlocking first on some platforms, but there are some potential race conditions depending on how your code is structured.

In general it's safer to signal the condition variable while the mutex is locked.

PSDL_ControllerAxisEvent = ˆTSDL_ControllerAxisEvent;
 
PSDL_ControllerButtonEvent = ˆTSDL_ControllerButtonEvent;
 
PSDL_ControllerDeviceEvent = ˆTSDL_ControllerDeviceEvent;
 
PSDL_ControllerSensorEvent = ˆTSDL_ControllerSensorEvent;
 
PSDL_ControllerTouchpadEvent = ˆTSDL_ControllerTouchpadEvent;
 
PSDL_Cursor = type Pointer;
 
PSDL_DisplayEvent = ˆTSDL_DisplayEvent;
 
PSDL_DisplayEventID = ˆTSDL_DisplayEventID;
 
PSDL_DisplayMode = ˆTSDL_DisplayMode;
 
PSDL_DisplayOrientation = ˆTSDL_DisplayOrientation;
 
PSDL_DollarGestureEvent = ˆTSDL_DollarGestureEvent;
 
PSDL_DropEvent = ˆTSDL_DropEvent;
 
PSDL_ErrorCode = ˆTSDL_ErrorCode;
 
PSDL_Event = ˆTSDL_Event;
 
PSDL_EventAction = ˆTSDL_EventAction;
 
PSDL_EventFilter = ˆTSDL_EventFilter;
 
PSDL_EventType = ˆTSDL_EventType;
 
PSDL_Finger = ˆTSDL_Finger;
 
PSDL_FingerID = ˆTSDL_FingerID;
 
PSDL_FlashOperation = ˆTSDL_FlashOperation;
 
PSDL_FPoint = ˆTSDL_FPoint;
 
PSDL_FRect = ˆTSDL_FRect;
 
PSDL_free_func = ˆTSDL_free_func;
 
PSDL_GameController = type Pointer;
 
PSDL_GameControllerAxis = ˆTSDL_GameControllerAxis;
 
PSDL_GameControllerBindType = ˆTSDL_GameControllerBindType;
 
PSDL_GameControllerButton = ˆTSDL_GameControllerButton;
 
PSDL_GameControllerButtonBind = ˆTSDL_GameControllerButtonBind;
 
PSDL_GameControllerType = ˆTSDL_GameControllerType;
 
PSDL_GestureID = ˆTSDL_GestureID;
 
PSDL_GLattr = ˆTSDL_GLattr;
 
PSDL_GLContext = ˆTSDL_GLContext;
 
PSDL_GLcontextFlag = ˆTSDL_GLcontextFlag;
 
PSDL_GLcontextReleaseFlag = ˆTSDL_GLcontextReleaseFlag;
 
PSDL_GLContextResetNotification = ˆTSDL_GLContextResetNotification;
 
PSDL_GLprofile = ˆTSDL_GLprofile;
 
PSDL_GUID = ˆTSDL_GUID;
 
PSDL_Haptic = type Pointer;
 
PSDL_HapticCondition = ˆTSDL_HapticCondition;
 
PSDL_HapticConstant = ˆTSDL_HapticConstant;
 
PSDL_HapticCustom = ˆTSDL_HapticCustom;
 
PSDL_HapticDirection = ˆTSDL_HapticDirection;
 
PSDL_HapticEffect = ˆTSDL_HapticEffect;
 
PSDL_HapticPeriodic = ˆTSDL_HapticPeriodic;
 
PSDL_HapticRamp = ˆTSDL_HapticRamp;
 
PSDL_hid_device = type Pointer;

\brief A handle representing an open HID device.

PSDL_hid_device_info = ˆTSDL_hid_device_info;
 
PSDL_HintCallback = ˆTSDL_HintCallback;
 
PSDL_HintPriority = ˆTSDL_HintPriority;
 
PSDL_HitTest = ˆTSDL_HitTest;
 
PSDL_HitTestResult = ˆTSDL_HitTestResult;
 
PSDL_iconv = type Pointer;
 
PSDL_Init = ˆTSDL_Init;
 
PSDL_JoyAxisEvent = ˆTSDL_JoyAxisEvent;
 
PSDL_JoyBallEvent = ˆTSDL_JoyBallEvent;
 
PSDL_JoyBatteryEvent = ˆTSDL_JoyBatteryEvent;
 
PSDL_JoyButtonEvent = ˆTSDL_JoyButtonEvent;
 
PSDL_JoyDeviceEvent = ˆTSDL_JoyDeviceEvent;
 
PSDL_JoyHatEvent = ˆTSDL_JoyHatEvent;
 
PSDL_Joystick = type Pointer;
 
PSDL_JoystickGUID = ˆTSDL_JoystickGUID;
 
PSDL_JoystickID = ˆTSDL_JoystickID;
 
PSDL_JoystickPowerLevel = ˆTSDL_JoystickPowerLevel;
 
PSDL_JoystickType = ˆTSDL_JoystickType;
 
PSDL_KeyboardEvent = ˆTSDL_KeyboardEvent;
 
PSDL_KeyCode = ˆTSDL_KeyCode;
 
PSDL_KeyMod = ˆTSDL_KeyMod;
 
PSDL_Keysym = ˆTSDL_Keysym;
 
PSDL_Locale = ˆTSDL_Locale;
 
PSDL_LogCategory = ˆTSDL_LogCategory;
 
PSDL_LogOutputFunction = ˆTSDL_LogOutputFunction;
 
PSDL_LogPriority = ˆTSDL_LogPriority;
 
PSDL_malloc_func = ˆTSDL_malloc_func;
 
PSDL_MessageBoxButtonData = ˆTSDL_MessageBoxButtonData;
 
PSDL_MessageBoxButtonFlags = ˆTSDL_MessageBoxButtonFlags;
 
PSDL_MessageBoxColor = ˆTSDL_MessageBoxColor;
 
PSDL_MessageBoxColorScheme = ˆTSDL_MessageBoxColorScheme;
 
PSDL_MessageBoxColorType = ˆTSDL_MessageBoxColorType;
 
PSDL_MessageBoxData = ˆTSDL_MessageBoxData;
 
PSDL_MessageBoxFlags = ˆTSDL_MessageBoxFlags;
 
PSDL_MouseButtonEvent = ˆTSDL_MouseButtonEvent;
 
PSDL_MouseMotionEvent = ˆTSDL_MouseMotionEvent;
 
PSDL_MouseWheelDirection = ˆTSDL_MouseWheelDirection;
 
PSDL_MouseWheelEvent = ˆTSDL_MouseWheelEvent;
 
PSDL_MultiGestureEvent = ˆTSDL_MultiGestureEvent;
 
PSDL_Mutex = Type Pointer;
 
PSDL_PackedLayout = ˆTSDL_PackedLayout;
 
PSDL_PackOrder = ˆTSDL_PackOrder;
 
PSDL_Palette = ˆTSDL_Palette;
 
PSDL_PixelFormat = ˆTSDL_PixelFormat;
 
PSDL_PixelType = ˆTSDL_PixelType;
 
PSDL_Point = ˆTSDL_Point;
 
PSDL_PowerState = ˆTSDL_PowerState;
 
PSDL_QuitEvent = ˆTSDL_QuitEvent;
 
PSDL_realloc_func = ˆTSDL_realloc_func;
 
PSDL_Rect = ˆTSDL_Rect;
 
PSDL_Renderer = type Pointer;
 
PSDL_RendererFlags = ˆTSDL_RendererFlags;
 
PSDL_RendererInfo = ˆTSDL_RendererInfo;
 
PSDL_RenderFlip = ˆTSDL_RenderFlip;
 
PSDL_RWops = ˆTSDL_RWops;
 
PSDL_ScaleMode = ˆTSDL_ScaleMode;
 
PSDL_ScanCode = ˆTSDL_ScanCode;
 
PSDL_Sem = Type Pointer;
 
PSDL_Sensor = type Pointer;
 
PSDL_SensorEvent = ˆTSDL_SensorEvent;
 
PSDL_SensorID = ˆTSDL_SensorID;
 
PSDL_SensorType = ˆTSDL_SensorType;
 
PSDL_SpinLock = ˆTSDL_SpinLock;
 
PSDL_Surface = ˆTSDL_Surface;
 
PSDL_SystemCursor = ˆTSDL_SystemCursor;
 
PSDL_SysWMEvent = ˆTSDL_SysWMEvent;
 
PSDL_SysWMinfo = ˆTSDL_SysWMinfo;
 
PSDL_SysWMmsg = ˆTSDL_SysWMmsg;
 
PSDL_TextEditingEvent = ˆTSDL_TextEditingEvent;
 
PSDL_TextEditingExtEvent = ˆTSDL_TextEditingExtEvent;
 
PSDL_TextInputEvent = ˆTSDL_TextInputEvent;
 
PSDL_Texture = type Pointer;
 
PSDL_TextureAccess = ˆTSDL_TextureAccess;
 
PSDL_TextureModulate = ˆTSDL_TextureModulate;
 
PSDL_Thread = type Pointer;

The SDL thread structure, defined in SDL_thread.c *

PSDL_ThreadFunction = ˆTSDL_ThreadFunction;
 
PSDL_threadID = ˆTSDL_threadID;
 
PSDL_ThreadPriority = ˆTSDL_ThreadPriority;
 
PSDL_TimerCallback = ˆTSDL_TimerCallback;
 
PSDL_TimerID = ˆTSDL_TimerID;
 
PSDL_TLSID = ˆTSDL_TLSID;
 
PSDL_TouchDeviceType = ˆTSDL_TouchDeviceType;
 
PSDL_TouchFingerEvent = ˆTSDL_TouchFingerEvent;
 
PSDL_TouchID = ˆTSDL_TouchID;
 
PSDL_UserEvent = ˆTSDL_UserEvent;
 
PSDL_Version = ˆTSDL_Version;
 
PSDL_Vertex = ˆTSDL_Vertex;
 
PSDL_VirtualJoystickDesc = ˆTSDL_VirtualJoystickDesc;
 
PSDL_Window = type Pointer;
 
PSDL_WindowEvent = ˆTSDL_WindowEvent;
 
PSDL_WindowEventID = ˆTSDL_WindowEventID;
 
PSDL_WindowFlags = ˆTSDL_WindowFlags;
 
PSDL_WindowShapeMode = ˆTSDL_WindowShapeMode;
 
PSDL_WindowShapeParams = ˆTSDL_WindowShapeParams;
 
PUInt8Array = ˆTUInt8Array;
 
PWindowShapeMode = ˆTWindowShapeMode;
 
TClose = function(context: PSDL_RWops): cint; cdecl;

Close and free an allocated SDL_RWops structure.

0 if successful or -1 on write error when flushing data.

TKeyStateArr = array[0..65000] of cuint8;
 
TRead = function(context: PSDL_RWops; ptr: Pointer; size: csize_t; maxnum: csize_t): csize_t; cdecl;

Read up to maxnum objects each of size size from the data stream to the area pointed at by ptr.

the number of objects read, or 0 at error or end of file.

TRumbleFunc = function(userdata: Pointer; low_frequency_rumble: cuint16; high_frequency_rumble: cuint16): cint; cdecl;
 
TRumbleTriggersFunc = function(userdata: Pointer; left_rumble: cuint16; right_rumble: cuint16): cint; cdecl;
 
TSDL_ArrayOrder = type cuint32;
 
TSDL_AudioCallback = procedure(userdata: Pointer; stream: pcuint8; len: cint); cdecl;
 
TSDL_AudioDeviceID = cuint32;
 
TSDL_AudioFilter = procedure(cvt: PSDL_AudioCVT; format: TSDL_AudioFormat); cdecl;
 
TSDL_AudioFormat = cuint16;
 
TSDL_AudioStatus = type cint;
 
TSDL_BitmapOrder = type cuint32;
 
TSDL_BlendFactor = type DWord;
 
TSDL_BlendMode = type DWord;
 
TSDL_BlendOperation = type DWord;
 
TSDL_Blit = function(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): cint;
 
TSDL_Bool = cbool;
 
TSDL_calloc_func = function(nmemb, size: csize_t): Pointer; cdecl;
 
TSDL_Colour = TSDL_Color;
 
TSDL_DisplayEventID = type Integer;
 
TSDL_DisplayOrientation = type Integer;
 
TSDL_ErrorCode = (...);
 
Values
  • SDL_ENOMEM
  • SDL_EFREAD
  • SDL_EFWRITE
  • SDL_EFSEEK
  • SDL_UNSUPPORTED
  • SDL_LASTERROR
TSDL_EventAction = Word;
 
TSDL_EventFilter = function(userdata: Pointer; event: PSDL_Event): cint; cdecl;
 
TSDL_EventType = type cuint32;
 
TSDL_FingerID = type cint64;
 
TSDL_FlashOperation = type Integer;
 
TSDL_free_func = procedure(mem: Pointer); cdecl;
 
TSDL_GameControllerAxis = type cint;
 
TSDL_GameControllerBindType = type cint;
 
TSDL_GameControllerButton = type cint;
 
TSDL_GameControllerType = type cint;
 
TSDL_GestureID = type cint64;
 
TSDL_GLattr = type Integer;
 
TSDL_GLContext = Pointer;
 
TSDL_GLcontextFlag = type Integer;
 
TSDL_GLcontextReleaseFlag = type Integer;
 
TSDL_GLContextResetNotification = type Integer;
 
TSDL_GLprofile = type Integer;
 
TSDL_HintCallback = procedure(userdata: Pointer; const name: PAnsiChar; const oldValue: PAnsiChar; const newValue: PAnsiChar); cdecl;
 
TSDL_HintPriority = type Integer;
 
TSDL_HitTest = function(win: PSDL_Window; const area: PSDL_Point; data: Pointer): TSDL_HitTestResult; cdecl;
 
TSDL_HitTestResult = type Integer;
 
TSDL_Init = type cuint32;
 
TSDL_JoystickGUID = type TSDL_GUID;
 
TSDL_JoystickID = type cint32;
 
TSDL_JoystickPowerLevel = type Integer;
 
TSDL_JoystickType = type Integer;
 
TSDL_KeyCode = type cint32;
 
TSDL_KeyMod = type cint;
 
TSDL_LogCategory = type cint;
 
TSDL_LogOutputFunction = procedure( userdata: Pointer; category: TSDL_LogCategory; priority: TSDL_LogPriority; const msg: PAnsiChar); cdecl;
 
TSDL_LogPriority = type cint32;
 
TSDL_malloc_func = function(size: csize_t): Pointer; cdecl;
 
TSDL_MessageBoxButtonFlags = type cuint32;
 
TSDL_MessageBoxColorType = type Word;
 
TSDL_MessageBoxFlags = type cuint32;
 
TSDL_MouseWheelDirection = type Integer;
 
TSDL_PackedLayout = type cuint32;
 
TSDL_PackOrder = type cuint32;
 
TSDL_PixelType = type cuint;
 
TSDL_PowerState = (...);
 
Values
  • SDL_POWERSTATE_UNKNOWN
  • SDL_POWERSTATE_ON_BATTERY: < cannot determine power status *
  • SDL_POWERSTATE_NO_BATTERY: < Not plugged in, running on the battery *
  • SDL_POWERSTATE_CHARGING: < Plugged in, no battery available *
  • SDL_POWERSTATE_CHARGED: < Plugged in, charging battery *
TSDL_realloc_func = function(mem: Pointer; size: csize_t): Pointer; cdecl;
 
TSDL_RendererFlags = Word;
 
TSDL_RenderFlip = type cint;
 
TSDL_ScaleMode = type cint;
 
TSDL_ScanCode = type cint;
 
TSDL_SensorID = type cint32;
 
TSDL_SensorType = type cint;
 
TSDL_SpinLock = type cint;
 
TSDL_SystemCursor = type Integer;
 
TSDL_SYSWM_TYPE = type cint;

These are the various supported windowing subsystems

TSDL_TextureAccess = type cint;
 
TSDL_TextureModulate = type cint;
 
TSDL_ThreadFunction = function(data: Pointer): cint; cdecl;
 
TSDL_threadID = culong;
 
TSDL_ThreadPriority = cint;
 
TSDL_TimerCallback = function(interval: cuint32; param: Pointer): cuint32; cdecl;
 
TSDL_TimerID = cint;
 
TSDL_TLSID = cuint;
 
TSDL_TouchDeviceType = type cint;
 
TSDL_TouchID = type cint64;
 
TSDL_WindowEventID = type cint;
 
TSDL_WindowFlags = type cuint;
 
TSDL_YUV_CONVERSION_MODE = type Integer;

\brief The formula used for converting between YUV and RGB

TSeek = function(context: PSDL_RWops; offset: cint64; whence: cint): cint64; cdecl;

Seek to offset relative to whence, one of stdio's whence values: RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END

the final offset in the data stream, or -1 on error.

TSendEffectFunc = function(userdata: Pointer; const data: Pointer; size: cint): cint; cdecl;
 
TSetLEDFunc = function(userdata: Pointer; red: cuint8; green: cuint8; blue: cuint8): cint; cdecl;
 
TSetPlayerIndexProc = procedure(userdata: Pointer; player_index: cint); cdecl;
 
TSize = function(context: PSDL_RWops): cint64; cdecl;

Return the size of the file in this rwops, or -1 if unknown

TTLSDestructor = procedure(value: Pointer); cdecl;

SDL2-For-Pascal: This function pointer is introduced to specifiy the destructor pointer in the SDL_TLSSet function according to C headers.

The TTLSDestructor type itself is not defined by the original SDL2 headers.

TUInt8Array = array [0..MAXINT shr 1] of cuint8;
 
TUpdateProc = procedure(userdata: Pointer); cdecl;

The structure that defines an extended virtual joystick description

The caller must zero the structure and then initialize the version with `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to SDL_JoystickAttachVirtualEx() All other elements of this structure are optional and can be left 0.

\sa SDL_JoystickAttachVirtualEx

TWindowShapeMode = type Integer;
 
TWrite = function(context: PSDL_RWops; const ptr: Pointer; size: csize_t; num: csize_t): csize_t; cdecl;

Write exactly num objects each of size size from the area pointed at by ptr to data stream.

the number of objects written, or 0 at error or end of file.

Constants

AUDIO_F32 = AUDIO_F32LSB;

< As above, but big-endian byte order *

AUDIO_F32LSB = $8120;

float32 support

AUDIO_F32MSB = $9120;

< 32-bit floating point samples *

AUDIO_S16 = AUDIO_S16LSB;
 
AUDIO_S16LSB = $8010;

< Unsigned 16-bit samples *

AUDIO_S16MSB = $9010;

< As above, but big-endian byte order *

AUDIO_S32 = AUDIO_S32LSB;

< As above, but big-endian byte order *

AUDIO_S32LSB = $8020;

int32 support

AUDIO_S32MSB = $9020;

< 32-bit integer samples *

AUDIO_S8 = $8008;

< Unsigned 8-bit samples *

AUDIO_U16 = AUDIO_U16LSB;

< As above, but big-endian byte order *

AUDIO_U16LSB = $0010;

< Signed 8-bit samples *

AUDIO_U16MSB = $1010;

< Signed 16-bit samples *

AUDIO_U8 = $0008;

Audio format flags

Defaults to LSB byte order.

KMOD_ALT = KMOD_LALT or KMOD_RALT;
 
KMOD_CAPS = TSDL_KeyMod($2000);
 
KMOD_CTRL = KMOD_LCTRL or KMOD_RCTRL;
 
KMOD_GUI = KMOD_LGUI or KMOD_RGUI;
 
KMOD_LALT = TSDL_KeyMod($0100);
 
KMOD_LCTRL = TSDL_KeyMod($0040);
 
KMOD_LGUI = TSDL_KeyMod($0400);
 
KMOD_LSHIFT = TSDL_KeyMod($0001);
 
KMOD_MODE = TSDL_KeyMod($4000);
 
KMOD_NONE = TSDL_KeyMod($0000);
 
KMOD_NUM = TSDL_KeyMod($1000);
 
KMOD_RALT = TSDL_KeyMod($0200);
 
KMOD_RCTRL = TSDL_KeyMod($0080);
 
KMOD_RESERVED = KMOD_SCROLL;
 
KMOD_RGUI = TSDL_KeyMod($0800);
 
KMOD_RSHIFT = TSDL_KeyMod($0002);
 
KMOD_SCROLL = TSDL_KeyMod($8000);
 
KMOD_SHIFT = KMOD_LSHIFT or KMOD_RSHIFT;
 
RW_SEEK_CUR = 1;

< Seek from the beginning of data *

RW_SEEK_END = 2;

< Seek relative to current read point *

RW_SEEK_SET = 0;
 
SDLK_0 = TSDL_KeyCode('0');
 
SDLK_1 = TSDL_KeyCode('1');
 
SDLK_2 = TSDL_KeyCode('2');
 
SDLK_3 = TSDL_KeyCode('3');
 
SDLK_4 = TSDL_KeyCode('4');
 
SDLK_5 = TSDL_KeyCode('5');
 
SDLK_6 = TSDL_KeyCode('6');
 
SDLK_7 = TSDL_KeyCode('7');
 
SDLK_8 = TSDL_KeyCode('8');
 
SDLK_9 = TSDL_KeyCode('9');
 
SDLK_a = TSDL_KeyCode('a');
 
SDLK_AC_BACK = TSDL_KeyCode(SDL_SCANCODE_AC_BACK or SDLK_SCANCODE_MASK);
 
SDLK_AC_BOOKMARKS = TSDL_KeyCode(SDL_SCANCODE_AC_BOOKMARKS or SDLK_SCANCODE_MASK);
 
SDLK_AC_FORWARD = TSDL_KeyCode(SDL_SCANCODE_AC_FORWARD or SDLK_SCANCODE_MASK);
 
SDLK_AC_HOME = TSDL_KeyCode(SDL_SCANCODE_AC_HOME or SDLK_SCANCODE_MASK);
 
SDLK_AC_REFRESH = TSDL_KeyCode(SDL_SCANCODE_AC_REFRESH or SDLK_SCANCODE_MASK);
 
SDLK_AC_SEARCH = TSDL_KeyCode(SDL_SCANCODE_AC_SEARCH or SDLK_SCANCODE_MASK);
 
SDLK_AC_STOP = TSDL_KeyCode(SDL_SCANCODE_AC_STOP or SDLK_SCANCODE_MASK);
 
SDLK_AGAIN = TSDL_KeyCode(SDL_SCANCODE_AGAIN or SDLK_SCANCODE_MASK);
 
SDLK_ALTERASE = TSDL_KeyCode(SDL_SCANCODE_ALTERASE or SDLK_SCANCODE_MASK);
 
SDLK_AMPERSAND = TSDL_KeyCode('&');
 
SDLK_APP1 = TSDL_KeyCode(SDL_SCANCODE_APP1 or SDLK_SCANCODE_MASK);
 
SDLK_APP2 = TSDL_KeyCode(SDL_SCANCODE_APP2 or SDLK_SCANCODE_MASK);
 
SDLK_APPLICATION = TSDL_KeyCode(SDL_SCANCODE_APPLICATION or SDLK_SCANCODE_MASK);
 
SDLK_ASTERISK = TSDL_KeyCode('*');
 
SDLK_AT = TSDL_KeyCode('@');
 
SDLK_AUDIOFASTFORWARD = TSDL_KeyCode(SDL_SCANCODE_AUDIOFASTFORWARD or SDLK_SCANCODE_MASK);
 
SDLK_AUDIOMUTE = TSDL_KeyCode(SDL_SCANCODE_AUDIOMUTE or SDLK_SCANCODE_MASK);
 
SDLK_AUDIONEXT = TSDL_KeyCode(SDL_SCANCODE_AUDIONEXT or SDLK_SCANCODE_MASK);
 
SDLK_AUDIOPLAY = TSDL_KeyCode(SDL_SCANCODE_AUDIOPLAY or SDLK_SCANCODE_MASK);
 
SDLK_AUDIOPREV = TSDL_KeyCode(SDL_SCANCODE_AUDIOPREV or SDLK_SCANCODE_MASK);
 
SDLK_AUDIOREWIND = TSDL_KeyCode(SDL_SCANCODE_AUDIOREWIND or SDLK_SCANCODE_MASK);
 
SDLK_AUDIOSTOP = TSDL_KeyCode(SDL_SCANCODE_AUDIOSTOP or SDLK_SCANCODE_MASK);
 
SDLK_b = TSDL_KeyCode('b');
 
SDLK_BACKQUOTE = TSDL_KeyCode('`');
 
SDLK_BACKSLASH = TSDL_KeyCode('\');
 
SDLK_BACKSPACE = TSDL_KeyCode(#8);

C: '\x1B'

SDLK_BRIGHTNESSDOWN = TSDL_KeyCode(SDL_SCANCODE_BRIGHTNESSDOWN or SDLK_SCANCODE_MASK);
 
SDLK_BRIGHTNESSUP = TSDL_KeyCode(SDL_SCANCODE_BRIGHTNESSUP or SDLK_SCANCODE_MASK);
 
SDLK_c = TSDL_KeyCode('c');
 
SDLK_CALCULATOR = TSDL_KeyCode(SDL_SCANCODE_CALCULATOR or SDLK_SCANCODE_MASK);
 
SDLK_CALL = TSDL_KeyCode(SDL_SCANCODE_CALL or SDLK_SCANCODE_MASK);
 
SDLK_CANCEL = TSDL_KeyCode(SDL_SCANCODE_CANCEL or SDLK_SCANCODE_MASK);
 
SDLK_CAPSLOCK = TSDL_KeyCode(SDL_SCANCODE_CAPSLOCK or SDLK_SCANCODE_MASK);

SDL2-for-Pascal: In C the following scancodes are or'd by a macro: SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK)

We convert the scancodes directly by: TSDL_KeyCode(X or SDLK_SCANCODE_MASK);

SDLK_CARET = TSDL_KeyCode('ˆ');
 
SDLK_CLEAR = TSDL_KeyCode(SDL_SCANCODE_CLEAR or SDLK_SCANCODE_MASK);
 
SDLK_CLEARAGAIN = TSDL_KeyCode(SDL_SCANCODE_CLEARAGAIN or SDLK_SCANCODE_MASK);
 
SDLK_COLON = TSDL_KeyCode(':');
 
SDLK_COMMA = TSDL_KeyCode(',');
 
SDLK_COMPUTER = TSDL_KeyCode(SDL_SCANCODE_COMPUTER or SDLK_SCANCODE_MASK);
 
SDLK_COPY = TSDL_KeyCode(SDL_SCANCODE_COPY or SDLK_SCANCODE_MASK);
 
SDLK_CRSEL = TSDL_KeyCode(SDL_SCANCODE_CRSEL or SDLK_SCANCODE_MASK);
 
SDLK_CURRENCYSUBUNIT = TSDL_KeyCode(SDL_SCANCODE_CURRENCYSUBUNIT or SDLK_SCANCODE_MASK);
 
SDLK_CURRENCYUNIT = TSDL_KeyCode(SDL_SCANCODE_CURRENCYUNIT or SDLK_SCANCODE_MASK);
 
SDLK_CUT = TSDL_KeyCode(SDL_SCANCODE_CUT or SDLK_SCANCODE_MASK);
 
SDLK_d = TSDL_KeyCode('d');
 
SDLK_DECIMALSEPARATOR = TSDL_KeyCode(SDL_SCANCODE_DECIMALSEPARATOR or SDLK_SCANCODE_MASK);
 
SDLK_DELETE = TSDL_KeyCode(#127);
 
SDLK_DISPLAYSWITCH = TSDL_KeyCode(SDL_SCANCODE_DISPLAYSWITCH or SDLK_SCANCODE_MASK);
 
SDLK_DOLLAR = TSDL_KeyCode('$');
 
SDLK_DOWN = TSDL_KeyCode(SDL_SCANCODE_DOWN or SDLK_SCANCODE_MASK);
 
SDLK_e = TSDL_KeyCode('e');
 
SDLK_EJECT = TSDL_KeyCode(SDL_SCANCODE_EJECT or SDLK_SCANCODE_MASK);
 
SDLK_END = TSDL_KeyCode(SDL_SCANCODE_END or SDLK_SCANCODE_MASK);

C: '\x7F'

SDLK_ENDCALL = TSDL_KeyCode(SDL_SCANCODE_ENDCALL or SDLK_SCANCODE_MASK);
 
SDLK_EQUALS = TSDL_KeyCode('=');
 
SDLK_ESCAPE = TSDL_KeyCode(#27);

C: '\r'

SDLK_EXCLAIM = TSDL_KeyCode('!');
 
SDLK_EXECUTE = TSDL_KeyCode(SDL_SCANCODE_EXECUTE or SDLK_SCANCODE_MASK);
 
SDLK_EXSEL = TSDL_KeyCode(SDL_SCANCODE_EXSEL or SDLK_SCANCODE_MASK);
 
SDLK_f = TSDL_KeyCode('f');
 
SDLK_F1 = TSDL_KeyCode(SDL_SCANCODE_F1 or SDLK_SCANCODE_MASK);
 
SDLK_F10 = TSDL_KeyCode(SDL_SCANCODE_F10 or SDLK_SCANCODE_MASK);
 
SDLK_F11 = TSDL_KeyCode(SDL_SCANCODE_F11 or SDLK_SCANCODE_MASK);
 
SDLK_F12 = TSDL_KeyCode(SDL_SCANCODE_F12 or SDLK_SCANCODE_MASK);
 
SDLK_F13 = TSDL_KeyCode(SDL_SCANCODE_F13 or SDLK_SCANCODE_MASK);
 
SDLK_F14 = TSDL_KeyCode(SDL_SCANCODE_F14 or SDLK_SCANCODE_MASK);
 
SDLK_F15 = TSDL_KeyCode(SDL_SCANCODE_F15 or SDLK_SCANCODE_MASK);
 
SDLK_F16 = TSDL_KeyCode(SDL_SCANCODE_F16 or SDLK_SCANCODE_MASK);
 
SDLK_F17 = TSDL_KeyCode(SDL_SCANCODE_F17 or SDLK_SCANCODE_MASK);
 
SDLK_F18 = TSDL_KeyCode(SDL_SCANCODE_F18 or SDLK_SCANCODE_MASK);
 
SDLK_F19 = TSDL_KeyCode(SDL_SCANCODE_F19 or SDLK_SCANCODE_MASK);
 
SDLK_F2 = TSDL_KeyCode(SDL_SCANCODE_F2 or SDLK_SCANCODE_MASK);
 
SDLK_F20 = TSDL_KeyCode(SDL_SCANCODE_F20 or SDLK_SCANCODE_MASK);
 
SDLK_F21 = TSDL_KeyCode(SDL_SCANCODE_F21 or SDLK_SCANCODE_MASK);
 
SDLK_F22 = TSDL_KeyCode(SDL_SCANCODE_F22 or SDLK_SCANCODE_MASK);
 
SDLK_F23 = TSDL_KeyCode(SDL_SCANCODE_F23 or SDLK_SCANCODE_MASK);
 
SDLK_F24 = TSDL_KeyCode(SDL_SCANCODE_F24 or SDLK_SCANCODE_MASK);
 
SDLK_F3 = TSDL_KeyCode(SDL_SCANCODE_F3 or SDLK_SCANCODE_MASK);
 
SDLK_F4 = TSDL_KeyCode(SDL_SCANCODE_F4 or SDLK_SCANCODE_MASK);
 
SDLK_F5 = TSDL_KeyCode(SDL_SCANCODE_F5 or SDLK_SCANCODE_MASK);
 
SDLK_F6 = TSDL_KeyCode(SDL_SCANCODE_F6 or SDLK_SCANCODE_MASK);
 
SDLK_F7 = TSDL_KeyCode(SDL_SCANCODE_F7 or SDLK_SCANCODE_MASK);
 
SDLK_F8 = TSDL_KeyCode(SDL_SCANCODE_F8 or SDLK_SCANCODE_MASK);
 
SDLK_F9 = TSDL_KeyCode(SDL_SCANCODE_F9 or SDLK_SCANCODE_MASK);
 
SDLK_FIND = TSDL_KeyCode(SDL_SCANCODE_FIND or SDLK_SCANCODE_MASK);
 
SDLK_g = TSDL_KeyCode('g');
 
SDLK_GREATER = TSDL_KeyCode('>');
 
SDLK_h = TSDL_KeyCode('h');
 
SDLK_HASH = TSDL_KeyCode('#');
 
SDLK_HELP = TSDL_KeyCode(SDL_SCANCODE_HELP or SDLK_SCANCODE_MASK);
 
SDLK_HOME = TSDL_KeyCode(SDL_SCANCODE_HOME or SDLK_SCANCODE_MASK);
 
SDLK_i = TSDL_KeyCode('i');
 
SDLK_INSERT = TSDL_KeyCode(SDL_SCANCODE_INSERT or SDLK_SCANCODE_MASK);
 
SDLK_j = TSDL_KeyCode('j');
 
SDLK_k = TSDL_KeyCode('k');
 
SDLK_KBDILLUMDOWN = TSDL_KeyCode(SDL_SCANCODE_KBDILLUMDOWN or SDLK_SCANCODE_MASK);
 
SDLK_KBDILLUMTOGGLE = TSDL_KeyCode(SDL_SCANCODE_KBDILLUMTOGGLE or SDLK_SCANCODE_MASK);
 
SDLK_KBDILLUMUP = TSDL_KeyCode(SDL_SCANCODE_KBDILLUMUP or SDLK_SCANCODE_MASK);
 
SDLK_KP_0 = TSDL_KeyCode(SDL_SCANCODE_KP_0 or SDLK_SCANCODE_MASK);
 
SDLK_KP_00 = TSDL_KeyCode(SDL_SCANCODE_KP_00 or SDLK_SCANCODE_MASK);
 
SDLK_KP_000 = TSDL_KeyCode(SDL_SCANCODE_KP_000 or SDLK_SCANCODE_MASK);
 
SDLK_KP_1 = TSDL_KeyCode(SDL_SCANCODE_KP_1 or SDLK_SCANCODE_MASK);
 
SDLK_KP_2 = TSDL_KeyCode(SDL_SCANCODE_KP_2 or SDLK_SCANCODE_MASK);
 
SDLK_KP_3 = TSDL_KeyCode(SDL_SCANCODE_KP_3 or SDLK_SCANCODE_MASK);
 
SDLK_KP_4 = TSDL_KeyCode(SDL_SCANCODE_KP_4 or SDLK_SCANCODE_MASK);
 
SDLK_KP_5 = TSDL_KeyCode(SDL_SCANCODE_KP_5 or SDLK_SCANCODE_MASK);
 
SDLK_KP_6 = TSDL_KeyCode(SDL_SCANCODE_KP_6 or SDLK_SCANCODE_MASK);
 
SDLK_KP_7 = TSDL_KeyCode(SDL_SCANCODE_KP_7 or SDLK_SCANCODE_MASK);
 
SDLK_KP_8 = TSDL_KeyCode(SDL_SCANCODE_KP_8 or SDLK_SCANCODE_MASK);
 
SDLK_KP_9 = TSDL_KeyCode(SDL_SCANCODE_KP_9 or SDLK_SCANCODE_MASK);
 
SDLK_KP_A = TSDL_KeyCode(SDL_SCANCODE_KP_A or SDLK_SCANCODE_MASK);
 
SDLK_KP_AMPERSAND = TSDL_KeyCode(SDL_SCANCODE_KP_AMPERSAND or SDLK_SCANCODE_MASK);
 
SDLK_KP_AT = TSDL_KeyCode(SDL_SCANCODE_KP_AT or SDLK_SCANCODE_MASK);
 
SDLK_KP_B = TSDL_KeyCode(SDL_SCANCODE_KP_B or SDLK_SCANCODE_MASK);
 
SDLK_KP_BACKSPACE = TSDL_KeyCode(SDL_SCANCODE_KP_BACKSPACE or SDLK_SCANCODE_MASK);
 
SDLK_KP_BINARY = TSDL_KeyCode(SDL_SCANCODE_KP_BINARY or SDLK_SCANCODE_MASK);
 
SDLK_KP_C = TSDL_KeyCode(SDL_SCANCODE_KP_C or SDLK_SCANCODE_MASK);
 
SDLK_KP_CLEAR = TSDL_KeyCode(SDL_SCANCODE_KP_CLEAR or SDLK_SCANCODE_MASK);
 
SDLK_KP_CLEARENTRY = TSDL_KeyCode(SDL_SCANCODE_KP_CLEARENTRY or SDLK_SCANCODE_MASK);
 
SDLK_KP_COLON = TSDL_KeyCode(SDL_SCANCODE_KP_COLON or SDLK_SCANCODE_MASK);
 
SDLK_KP_COMMA = TSDL_KeyCode(SDL_SCANCODE_KP_COMMA or SDLK_SCANCODE_MASK);
 
SDLK_KP_D = TSDL_KeyCode(SDL_SCANCODE_KP_D or SDLK_SCANCODE_MASK);
 
SDLK_KP_DBLAMPERSAND = TSDL_KeyCode(SDL_SCANCODE_KP_DBLAMPERSAND or SDLK_SCANCODE_MASK);
 
SDLK_KP_DBLVERTICALBAR = TSDL_KeyCode(SDL_SCANCODE_KP_DBLVERTICALBAR or SDLK_SCANCODE_MASK);
 
SDLK_KP_DECIMAL = TSDL_KeyCode(SDL_SCANCODE_KP_DECIMAL or SDLK_SCANCODE_MASK);
 
SDLK_KP_DIVIDE = TSDL_KeyCode(SDL_SCANCODE_KP_DIVIDE or SDLK_SCANCODE_MASK);
 
SDLK_KP_E = TSDL_KeyCode(SDL_SCANCODE_KP_E or SDLK_SCANCODE_MASK);
 
SDLK_KP_ENTER = TSDL_KeyCode(SDL_SCANCODE_KP_ENTER or SDLK_SCANCODE_MASK);
 
SDLK_KP_EQUALS = TSDL_KeyCode(SDL_SCANCODE_KP_EQUALS or SDLK_SCANCODE_MASK);
 
SDLK_KP_EQUALSAS400 = TSDL_KeyCode(SDL_SCANCODE_KP_EQUALSAS400 or SDLK_SCANCODE_MASK);
 
SDLK_KP_EXCLAM = TSDL_KeyCode(SDL_SCANCODE_KP_EXCLAM or SDLK_SCANCODE_MASK);
 
SDLK_KP_F = TSDL_KeyCode(SDL_SCANCODE_KP_F or SDLK_SCANCODE_MASK);
 
SDLK_KP_GREATER = TSDL_KeyCode(SDL_SCANCODE_KP_GREATER or SDLK_SCANCODE_MASK);
 
SDLK_KP_HASH = TSDL_KeyCode(SDL_SCANCODE_KP_HASH or SDLK_SCANCODE_MASK);
 
SDLK_KP_HEXADECIMAL = TSDL_KeyCode(SDL_SCANCODE_KP_HEXADECIMAL or SDLK_SCANCODE_MASK);
 
SDLK_KP_LEFTBRACE = TSDL_KeyCode(SDL_SCANCODE_KP_LEFTBRACE or SDLK_SCANCODE_MASK);
 
SDLK_KP_LEFTPAREN = TSDL_KeyCode(SDL_SCANCODE_KP_LEFTPAREN or SDLK_SCANCODE_MASK);
 
SDLK_KP_LESS = TSDL_KeyCode(SDL_SCANCODE_KP_LESS or SDLK_SCANCODE_MASK);
 
SDLK_KP_MEMADD = TSDL_KeyCode(SDL_SCANCODE_KP_MEMADD or SDLK_SCANCODE_MASK);
 
SDLK_KP_MEMCLEAR = TSDL_KeyCode(SDL_SCANCODE_KP_MEMCLEAR or SDLK_SCANCODE_MASK);
 
SDLK_KP_MEMDIVIDE = TSDL_KeyCode(SDL_SCANCODE_KP_MEMDIVIDE or SDLK_SCANCODE_MASK);
 
SDLK_KP_MEMMULTIPLY = TSDL_KeyCode(SDL_SCANCODE_KP_MEMMULTIPLY or SDLK_SCANCODE_MASK);
 
SDLK_KP_MEMRECALL = TSDL_KeyCode(SDL_SCANCODE_KP_MEMRECALL or SDLK_SCANCODE_MASK);
 
SDLK_KP_MEMSTORE = TSDL_KeyCode(SDL_SCANCODE_KP_MEMSTORE or SDLK_SCANCODE_MASK);
 
SDLK_KP_MEMSUBTRACT = TSDL_KeyCode(SDL_SCANCODE_KP_MEMSUBTRACT or SDLK_SCANCODE_MASK);
 
SDLK_KP_MINUS = TSDL_KeyCode(SDL_SCANCODE_KP_MINUS or SDLK_SCANCODE_MASK);
 
SDLK_KP_MULTIPLY = TSDL_KeyCode(SDL_SCANCODE_KP_MULTIPLY or SDLK_SCANCODE_MASK);
 
SDLK_KP_OCTAL = TSDL_KeyCode(SDL_SCANCODE_KP_OCTAL or SDLK_SCANCODE_MASK);
 
SDLK_KP_PERCENT = TSDL_KeyCode(SDL_SCANCODE_KP_PERCENT or SDLK_SCANCODE_MASK);
 
SDLK_KP_PERIOD = TSDL_KeyCode(SDL_SCANCODE_KP_PERIOD or SDLK_SCANCODE_MASK);
 
SDLK_KP_PLUS = TSDL_KeyCode(SDL_SCANCODE_KP_PLUS or SDLK_SCANCODE_MASK);
 
SDLK_KP_PLUSMINUS = TSDL_KeyCode(SDL_SCANCODE_KP_PLUSMINUS or SDLK_SCANCODE_MASK);
 
SDLK_KP_POWER = TSDL_KeyCode(SDL_SCANCODE_KP_POWER or SDLK_SCANCODE_MASK);
 
SDLK_KP_RIGHTBRACE = TSDL_KeyCode(SDL_SCANCODE_KP_RIGHTBRACE or SDLK_SCANCODE_MASK);
 
SDLK_KP_RIGHTPAREN = TSDL_KeyCode(SDL_SCANCODE_KP_RIGHTPAREN or SDLK_SCANCODE_MASK);
 
SDLK_KP_SPACE = TSDL_KeyCode(SDL_SCANCODE_KP_SPACE or SDLK_SCANCODE_MASK);
 
SDLK_KP_TAB = TSDL_KeyCode(SDL_SCANCODE_KP_TAB or SDLK_SCANCODE_MASK);
 
SDLK_KP_VERTICALBAR = TSDL_KeyCode(SDL_SCANCODE_KP_VERTICALBAR or SDLK_SCANCODE_MASK);
 
SDLK_KP_XOR = TSDL_KeyCode(SDL_SCANCODE_KP_XOR or SDLK_SCANCODE_MASK);
 
SDLK_l = TSDL_KeyCode('l');
 
SDLK_LALT = TSDL_KeyCode(SDL_SCANCODE_LALT or SDLK_SCANCODE_MASK);
 
SDLK_LCTRL = TSDL_KeyCode(SDL_SCANCODE_LCTRL or SDLK_SCANCODE_MASK);
 
SDLK_LEFT = TSDL_KeyCode(SDL_SCANCODE_LEFT or SDLK_SCANCODE_MASK);
 
SDLK_LEFTBRACKET = TSDL_KeyCode('[');

Skip uppercase letters

SDLK_LEFTPAREN = TSDL_KeyCode('(');
 
SDLK_LESS = TSDL_KeyCode('<');
 
SDLK_LGUI = TSDL_KeyCode(SDL_SCANCODE_LGUI or SDLK_SCANCODE_MASK);
 
SDLK_LSHIFT = TSDL_KeyCode(SDL_SCANCODE_LSHIFT or SDLK_SCANCODE_MASK);
 
SDLK_m = TSDL_KeyCode('m');
 
SDLK_MAIL = TSDL_KeyCode(SDL_SCANCODE_MAIL or SDLK_SCANCODE_MASK);
 
SDLK_MEDIASELECT = TSDL_KeyCode(SDL_SCANCODE_MEDIASELECT or SDLK_SCANCODE_MASK);
 
SDLK_MENU = TSDL_KeyCode(SDL_SCANCODE_MENU or SDLK_SCANCODE_MASK);
 
SDLK_MINUS = TSDL_KeyCode('-');
 
SDLK_MODE = TSDL_KeyCode(SDL_SCANCODE_MODE or SDLK_SCANCODE_MASK);
 
SDLK_MUTE = TSDL_KeyCode(SDL_SCANCODE_MUTE or SDLK_SCANCODE_MASK);
 
SDLK_n = TSDL_KeyCode('n');
 
SDLK_NUMLOCKCLEAR = TSDL_KeyCode(SDL_SCANCODE_NUMLOCKCLEAR or SDLK_SCANCODE_MASK);
 
SDLK_o = TSDL_KeyCode('o');
 
SDLK_OPER = TSDL_KeyCode(SDL_SCANCODE_OPER or SDLK_SCANCODE_MASK);
 
SDLK_OUT = TSDL_KeyCode(SDL_SCANCODE_OUT or SDLK_SCANCODE_MASK);
 
SDLK_p = TSDL_KeyCode('p');
 
SDLK_PAGEDOWN = TSDL_KeyCode(SDL_SCANCODE_PAGEDOWN or SDLK_SCANCODE_MASK);
 
SDLK_PAGEUP = TSDL_KeyCode(SDL_SCANCODE_PAGEUP or SDLK_SCANCODE_MASK);
 
SDLK_PASTE = TSDL_KeyCode(SDL_SCANCODE_PASTE or SDLK_SCANCODE_MASK);
 
SDLK_PAUSE = TSDL_KeyCode(SDL_SCANCODE_PAUSE or SDLK_SCANCODE_MASK);
 
SDLK_PERCENT = TSDL_KeyCode('%');
 
SDLK_PERIOD = TSDL_KeyCode('.');
 
SDLK_PLUS = TSDL_KeyCode('+');
 
SDLK_POWER = TSDL_KeyCode(SDL_SCANCODE_POWER or SDLK_SCANCODE_MASK);
 
SDLK_PRINTSCREEN = TSDL_KeyCode(SDL_SCANCODE_PRINTSCREEN or SDLK_SCANCODE_MASK);
 
SDLK_PRIOR = TSDL_KeyCode(SDL_SCANCODE_PRIOR or SDLK_SCANCODE_MASK);
 
SDLK_q = TSDL_KeyCode('q');
 
SDLK_QUESTION = TSDL_KeyCode('?');
 
SDLK_QUOTE = TSDL_KeyCode('''');
 
SDLK_QUOTEDBL = TSDL_KeyCode('"');
 
SDLK_r = TSDL_KeyCode('r');
 
SDLK_RALT = TSDL_KeyCode(SDL_SCANCODE_RALT or SDLK_SCANCODE_MASK);
 
SDLK_RCTRL = TSDL_KeyCode(SDL_SCANCODE_RCTRL or SDLK_SCANCODE_MASK);
 
SDLK_RETURN = TSDL_KeyCode(#13);
 
SDLK_RETURN2 = TSDL_KeyCode(SDL_SCANCODE_RETURN2 or SDLK_SCANCODE_MASK);
 
SDLK_RGUI = TSDL_KeyCode(SDL_SCANCODE_RGUI or SDLK_SCANCODE_MASK);
 
SDLK_RIGHT = TSDL_KeyCode(SDL_SCANCODE_RIGHT or SDLK_SCANCODE_MASK);
 
SDLK_RIGHTBRACKET = TSDL_KeyCode(']');

C: '\\'

SDLK_RIGHTPAREN = TSDL_KeyCode(')');
 
SDLK_RSHIFT = TSDL_KeyCode(SDL_SCANCODE_RSHIFT or SDLK_SCANCODE_MASK);
 
SDLK_s = TSDL_KeyCode('s');
 
SDLK_SCANCODE_MASK = 1 shl 30;
 
SDLK_SCROLLLOCK = TSDL_KeyCode(SDL_SCANCODE_SCROLLLOCK or SDLK_SCANCODE_MASK);
 
SDLK_SELECT = TSDL_KeyCode(SDL_SCANCODE_SELECT or SDLK_SCANCODE_MASK);
 
SDLK_SEMICOLON = TSDL_KeyCode(';');
 
SDLK_SEPARATOR = TSDL_KeyCode(SDL_SCANCODE_SEPARATOR or SDLK_SCANCODE_MASK);
 
SDLK_SLASH = TSDL_KeyCode('/');
 
SDLK_SLEEP = TSDL_KeyCode(SDL_SCANCODE_SLEEP or SDLK_SCANCODE_MASK);
 
SDLK_SOFTLEFT = TSDL_KeyCode(SDL_SCANCODE_SOFTLEFT or SDLK_SCANCODE_MASK);
 
SDLK_SOFTRIGHT = TSDL_KeyCode(SDL_SCANCODE_SOFTRIGHT or SDLK_SCANCODE_MASK);
 
SDLK_SPACE = TSDL_KeyCode(' ');

C: '\t'

SDLK_STOP = TSDL_KeyCode(SDL_SCANCODE_STOP or SDLK_SCANCODE_MASK);
 
SDLK_SYSREQ = TSDL_KeyCode(SDL_SCANCODE_SYSREQ or SDLK_SCANCODE_MASK);
 
SDLK_t = TSDL_KeyCode('t');
 
SDLK_TAB = TSDL_KeyCode(#9);

C: '\b'

SDLK_THOUSANDSSEPARATOR = TSDL_KeyCode(SDL_SCANCODE_THOUSANDSSEPARATOR or SDLK_SCANCODE_MASK);
 
SDLK_u = TSDL_KeyCode('u');
 
SDLK_UNDERSCORE = TSDL_KeyCode('_');
 
SDLK_UNDO = TSDL_KeyCode(SDL_SCANCODE_UNDO or SDLK_SCANCODE_MASK);
 
SDLK_UNKNOWN = TSDL_KeyCode(0);

#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) SDL2-for-Pascal: Not translated, see comment about this macro below.

SDLK_UP = TSDL_KeyCode(SDL_SCANCODE_UP or SDLK_SCANCODE_MASK);
 
SDLK_v = TSDL_KeyCode('v');
 
SDLK_VOLUMEDOWN = TSDL_KeyCode(SDL_SCANCODE_VOLUMEDOWN or SDLK_SCANCODE_MASK);
 
SDLK_VOLUMEUP = TSDL_KeyCode(SDL_SCANCODE_VOLUMEUP or SDLK_SCANCODE_MASK);
 
SDLK_w = TSDL_KeyCode('w');
 
SDLK_WWW = TSDL_KeyCode(SDL_SCANCODE_WWW or SDLK_SCANCODE_MASK);
 
SDLK_x = TSDL_KeyCode('x');
 
SDLK_y = TSDL_KeyCode('y');
 
SDLK_z = TSDL_KeyCode('z');
 
SDL_ADDEVENT = 0;
 
SDL_ALPHA_OPAQUE = 255;

Transparency definitions

These define alpha as the opacity of a surface.

SDL_ALPHA_TRANSPARENT = 0;
 
SDL_APP_DIDENTERBACKGROUND = TSDL_EventType($104);

The application did enter the background and may not get CPU for some time. * Called on iOS in applicationDidEnterBackground() * Called on Android in onPause() *

SDL_APP_DIDENTERFOREGROUND = TSDL_EventType($106);

The application is now interactive. * Called on iOS in applicationDidBecomeActive() * Called on Android in onResume() *

SDL_APP_LOWMEMORY = TSDL_EventType($102);

The application is low on memory, free memory if possible. * Called on iOS in applicationDidReceiveMemoryWarning() * Called on Android in onLowMemory() *

SDL_APP_TERMINATING = TSDL_EventType($101);

The application is being terminated by the OS. * Called on iOS in applicationWillTerminate() * Called on Android in onDestroy() *

SDL_APP_WILLENTERBACKGROUND = TSDL_EventType($103);

The application is about to enter the background. * Called on iOS in applicationWillResignActive() * Called on Android in onPause() *

SDL_APP_WILLENTERFOREGROUND = TSDL_EventType($105);

The application is about to enter the foreground. * Called on iOS in applicationWillEnterForeground() * Called on Android in onResume() *

SDL_ARRAYORDER_ABGR = TSDL_ArrayOrder(6);
 
SDL_ARRAYORDER_ARGB = TSDL_ArrayOrder(3);
 
SDL_ARRAYORDER_BGR = TSDL_ArrayOrder(4);
 
SDL_ARRAYORDER_BGRA = TSDL_ArrayOrder(5);
 
SDL_ARRAYORDER_NONE = TSDL_ArrayOrder(0);
 
SDL_ARRAYORDER_RGB = TSDL_ArrayOrder(1);
 
SDL_ARRAYORDER_RGBA = TSDL_ArrayOrder(2);
 
SDL_AUDIOCVT_MAX_FILTERS = 9;

\brief Upper limit of filters in SDL_AudioCVT

The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, one of which is the terminating NULL pointer.

SDL_AUDIODEVICEADDED = TSDL_EventType($1100);

Audio hotplug events

SDL_AUDIODEVICEREMOVED = TSDL_EventType($1101);

A new audio device is available

SDL_AUDIO_ALLOW_ANY_CHANGE = (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE or SDL_AUDIO_ALLOW_FORMAT_CHANGE or SDL_AUDIO_ALLOW_CHANNELS_CHANGE);
 
SDL_AUDIO_ALLOW_CHANNELS_CHANGE = $00000004;
 
SDL_AUDIO_ALLOW_FORMAT_CHANGE = $00000002;
 
SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = $00000001;

Allow change flags

Which audio format changes are allowed when opening a device.

SDL_AUDIO_MASK_BITSIZE = ($FF);

Audio flags

SDL_AUDIO_MASK_DATATYPE = (1 shl 8);
 
SDL_AUDIO_MASK_ENDIAN = (1 shl 12);
 
SDL_AUDIO_MASK_SIGNED = (1 shl 15);
 
SDL_AUDIO_PAUSED = TSDL_AudioStatus(2);
 
SDL_AUDIO_PLAYING = TSDL_AudioStatus(1);
 
SDL_AUDIO_STOPPED = TSDL_AudioStatus(0);
 
SDL_BITMAPORDER_1234 = TSDL_BitmapOrder(2);
 
SDL_BITMAPORDER_4321 = TSDL_BitmapOrder(1);
 
SDL_BITMAPORDER_NONE = TSDL_BitmapOrder(0);
 
SDL_BLENDFACTOR_DST_ALPHA = TSDL_BlendFactor($9);

< 1-dstR, 1-dstG, 1-dstB, 1-dstA *

SDL_BLENDFACTOR_DST_COLOR = TSDL_BlendFactor($7);

< 1-srcA, 1-srcA, 1-srcA, 1-srcA *

SDL_BLENDFACTOR_ONE = TSDL_BlendFactor($2);

< 0, 0, 0, 0 *

SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = TSDL_BlendFactor($A);

< dstA, dstA, dstA, dstA *

SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = TSDL_BlendFactor($8);

< dstR, dstG, dstB, dstA *

SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = TSDL_BlendFactor($6);

< srcA, srcA, srcA, srcA *

SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = TSDL_BlendFactor($4);

< srcR, srcG, srcB, srcA *

SDL_BLENDFACTOR_SRC_ALPHA = TSDL_BlendFactor($5);

< 1-srcR, 1-srcG, 1-srcB, 1-srcA *

SDL_BLENDFACTOR_SRC_COLOR = TSDL_BlendFactor($3);

< 1, 1, 1, 1 *

SDL_BLENDFACTOR_ZERO = TSDL_BlendFactor($1);
 
SDL_BLENDMODE_ADD = TSDL_BlendMode($00000002);

< alpha blending dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) dstA = srcA + (dstA * (1-srcA)) *

SDL_BLENDMODE_BLEND = TSDL_BlendMode($00000001);

< no blending dstRGBA = srcRGBA *

SDL_BLENDMODE_INVALID = TSDL_BlendMode($7FFFFFFF);

< color multiply dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA)) dstA = (srcA * dstA) + (dstA * (1-srcA)) *

SDL_BLENDMODE_MOD = TSDL_BlendMode($00000004);

< additive blending dstRGB = (srcRGB * srcA) + dstRGB dstA = dstA *

SDL_BLENDMODE_MUL = TSDL_BlendMode($00000008);

< color modulate dstRGB = srcRGB * dstRGB dstA = dstA *

SDL_BLENDMODE_NONE = TSDL_BlendMode($00000000);
 
SDL_BLENDOPERATION_ADD = TSDL_BlendOperation($1);
 
SDL_BLENDOPERATION_MAXIMUM = TSDL_BlendOperation($5);

< min(dst, src) : supported by D3D11 *

SDL_BLENDOPERATION_MINIMUM = TSDL_BlendOperation($4);

< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES

SDL_BLENDOPERATION_REV_SUBTRACT = TSDL_BlendOperation($3);

< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES

SDL_BLENDOPERATION_SUBTRACT = TSDL_BlendOperation($2);

< dst + src: supported by all renderers *

SDL_BUTTON_LEFT = 1;
 
SDL_BUTTON_LMASK = 1 shl ((SDL_BUTTON_LEFT) - 1);

Pascal Conv.: For better performance instead of using the SDL_Button(X) macro, the following defines are implemented directly.

SDL_BUTTON_MIDDLE = 2;
 
SDL_BUTTON_MMASK = 1 shl ((SDL_BUTTON_MIDDLE) - 1);
 
SDL_BUTTON_RIGHT = 3;
 
SDL_BUTTON_RMASK = 1 shl ((SDL_BUTTON_RIGHT) - 1);
 
SDL_BUTTON_X1 = 4;
 
SDL_BUTTON_X1MASK = 1 shl ((SDL_BUTTON_X1) - 1);
 
SDL_BUTTON_X2 = 5;
 
SDL_BUTTON_X2MASK = 1 shl ((SDL_BUTTON_X2) - 1);
 
SDL_CACHELINE_SIZE = 128;

This is a guess for the cacheline size used for padding. Most x86 processors have a 64 byte cache line. The 64-bit PowerPC processors have a 128 byte cache line. We'll use the larger value to be generally safe.

SDL_CLIPBOARDUPDATE = TSDL_EventType($900);

Clipboard events

SDL_COMMONEVENT = TSDL_EventType(1);

Unused (do not remove) (needed in pascal?)

SDL_CONTROLLERAXISMOTION = TSDL_EventType($650);

Game controller events

SDL_CONTROLLERBUTTONDOWN = TSDL_EventType($651);

Game controller axis motion

SDL_CONTROLLERBUTTONUP = TSDL_EventType($652);

Game controller button pressed

SDL_CONTROLLERDEVICEADDED = TSDL_EventType($653);

Game controller button released

SDL_CONTROLLERDEVICEREMAPPED = TSDL_EventType($655);

An opened Game controller has been removed

SDL_CONTROLLERDEVICEREMOVED = TSDL_EventType($654);

A new Game controller has been inserted into the system

SDL_CONTROLLERSENSORUPDATE = TSDL_EventType($669);

Game controller touchpad finger was lifted

SDL_CONTROLLERTOUCHPADDOWN = TSDL_EventType($666);

The controller mapping was updated

SDL_CONTROLLERTOUCHPADMOTION = TSDL_EventType($667);

Game controller touchpad was touched

SDL_CONTROLLERTOUCHPADUP = TSDL_EventType($668);

Game controller touchpad finger was moved

SDL_CONTROLLER_AXIS_INVALID = TSDL_GameControllerAxis(-1);
 
SDL_CONTROLLER_AXIS_LEFTX = TSDL_GameControllerAxis(0);
 
SDL_CONTROLLER_AXIS_LEFTY = TSDL_GameControllerAxis(1);
 
SDL_CONTROLLER_AXIS_MAX = TSDL_GameControllerAxis(6);
 
SDL_CONTROLLER_AXIS_RIGHTX = TSDL_GameControllerAxis(2);
 
SDL_CONTROLLER_AXIS_RIGHTY = TSDL_GameControllerAxis(3);
 
SDL_CONTROLLER_AXIS_TRIGGERLEFT = TSDL_GameControllerAxis(4);
 
SDL_CONTROLLER_AXIS_TRIGGERRIGHT = TSDL_GameControllerAxis(5);
 
SDL_CONTROLLER_BINDTYPE_AXIS = TSDL_GameControllerBindType(2);
 
SDL_CONTROLLER_BINDTYPE_BUTTON = TSDL_GameControllerBindType(1);
 
SDL_CONTROLLER_BINDTYPE_HAT = TSDL_GameControllerBindType(3);
 
SDL_CONTROLLER_BINDTYPE_NONE = TSDL_GameControllerBindType(0);
 
SDL_CONTROLLER_BUTTON_A = TSDL_GameControllerButton(0);
 
SDL_CONTROLLER_BUTTON_B = TSDL_GameControllerButton(1);
 
SDL_CONTROLLER_BUTTON_BACK = TSDL_GameControllerButton(4);
 
SDL_CONTROLLER_BUTTON_DPAD_DOWN = TSDL_GameControllerButton(12);
 
SDL_CONTROLLER_BUTTON_DPAD_LEFT = TSDL_GameControllerButton(13);
 
SDL_CONTROLLER_BUTTON_DPAD_RIGHT = TSDL_GameControllerButton(14);
 
SDL_CONTROLLER_BUTTON_DPAD_UP = TSDL_GameControllerButton(11);
 
SDL_CONTROLLER_BUTTON_GUIDE = TSDL_GameControllerButton(5);
 
SDL_CONTROLLER_BUTTON_INVALID = TSDL_GameControllerButton(-1);
 
SDL_CONTROLLER_BUTTON_LEFTSHOULDER = TSDL_GameControllerButton(9);
 
SDL_CONTROLLER_BUTTON_LEFTSTICK = TSDL_GameControllerButton(7);
 
SDL_CONTROLLER_BUTTON_MAX = TSDL_GameControllerButton(21);

< PS4/PS5 touchpad button *

SDL_CONTROLLER_BUTTON_MISC1 = TSDL_GameControllerButton(15);
 
SDL_CONTROLLER_BUTTON_PADDLE1 = TSDL_GameControllerButton(16);

< Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button *

SDL_CONTROLLER_BUTTON_PADDLE2 = TSDL_GameControllerButton(17);

< Xbox Elite paddle P1 *

SDL_CONTROLLER_BUTTON_PADDLE3 = TSDL_GameControllerButton(18);

< Xbox Elite paddle P3 *

SDL_CONTROLLER_BUTTON_PADDLE4 = TSDL_GameControllerButton(19);

< Xbox Elite paddle P2 *

SDL_CONTROLLER_BUTTON_RIGHTSHOULDER = TSDL_GameControllerButton(10);
 
SDL_CONTROLLER_BUTTON_RIGHTSTICK = TSDL_GameControllerButton(8);
 
SDL_CONTROLLER_BUTTON_START = TSDL_GameControllerButton(6);
 
SDL_CONTROLLER_BUTTON_TOUCHPAD = TSDL_GameControllerButton(20);

< Xbox Elite paddle P4 *

SDL_CONTROLLER_BUTTON_X = TSDL_GameControllerButton(2);
 
SDL_CONTROLLER_BUTTON_Y = TSDL_GameControllerButton(3);
 
SDL_CONTROLLER_TYPE_AMAZON_LUNA = TSDL_GameControllerType(8);
 
SDL_CONTROLLER_TYPE_GOOGLE_STADIA = TSDL_GameControllerType(9);
 
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT = TSDL_GameControllerType(11);
 
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR = TSDL_GameControllerType(13);
 
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT = TSDL_GameControllerType(12);
 
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO = TSDL_GameControllerType(5);
 
SDL_CONTROLLER_TYPE_NVIDIA_SHIELD = TSDL_GameControllerType(10);
 
SDL_CONTROLLER_TYPE_PS3 = TSDL_GameControllerType(3);
 
SDL_CONTROLLER_TYPE_PS4 = TSDL_GameControllerType(4);
 
SDL_CONTROLLER_TYPE_PS5 = TSDL_GameControllerType(7);
 
SDL_CONTROLLER_TYPE_UNKNOWN = TSDL_GameControllerType(0);
 
SDL_CONTROLLER_TYPE_VIRTUAL = TSDL_GameControllerType(6);
 
SDL_CONTROLLER_TYPE_XBOX360 = TSDL_GameControllerType(1);
 
SDL_CONTROLLER_TYPE_XBOXONE = TSDL_GameControllerType(2);
 
SDL_DISABLE = 0;
 
SDL_DISPLAYEVENT = TSDL_EventType($150);

Display events

SDL_DISPLAYEVENT_CONNECTED = TSDL_DisplayEventID(2);

< Display orientation has changed to data1 *

SDL_DISPLAYEVENT_DISCONNECTED = TSDL_DisplayEventID(3);

< Display has been added to the system *

SDL_DISPLAYEVENT_NONE = TSDL_DisplayEventID(0);
 
SDL_DISPLAYEVENT_ORIENTATION = TSDL_DisplayEventID(1);

< Never used *

SDL_DOLLARGESTURE = TSDL_EventType($800);

Gesture events

SDL_DOLLARRECORD = TSDL_EventType($801);
 
SDL_DONTFREE = $00000004;

< Surface is RLE encoded *

SDL_DROPBEGIN = TSDL_EventType($1002);

text/plain drag-and-drop event

SDL_DROPCOMPLETE = TSDL_EventType($1003);

A new set of drops is beginning (NULL filename)

SDL_DROPFILE = TSDL_EventType($1000);

Drag and drop events

SDL_DROPTEXT = TSDL_EventType($1001);

The system requests a file open

SDL_ENABLE = 1;
 
SDL_FALSE = TSDL_Bool(0);
 
SDL_FINGERDOWN = TSDL_EventType($700);

Touch events

SDL_FINGERMOTION = TSDL_EventType($702);
 
SDL_FINGERUP = TSDL_EventType($701);
 
SDL_FIRSTEVENT = TSDL_EventType(0);
 
SDL_FLASH_BRIEFLY = TSDL_FlashOperation(1);

< Cancel any window flash state *

SDL_FLASH_CANCEL = TSDL_FlashOperation(0);
 
SDL_FLASH_UNTIL_FOCUSED = TSDL_FlashOperation(2);

< Flash the window briefly to get attention *

SDL_FLIP_HORIZONTAL = TSDL_RenderFlip($1);

< Do not flip *

SDL_FLIP_NONE = TSDL_RenderFlip($0);
 
SDL_FLIP_VERTICAL = TSDL_RenderFlip($2);

< flip horizontally *

SDL_FLT_EPSILON = cfloat(1.1920928955078125e-07);
 
SDL_GETEVENT = 2;
 
SDL_GL_ACCELERATED_VISUAL = TSDL_GLattr(15);
 
SDL_GL_ACCUM_ALPHA_SIZE = TSDL_GLattr(11);
 
SDL_GL_ACCUM_BLUE_SIZE = TSDL_GLattr(10);
 
SDL_GL_ACCUM_GREEN_SIZE = TSDL_GLattr(9);
 
SDL_GL_ACCUM_RED_SIZE = TSDL_GLattr(8);
 
SDL_GL_ALPHA_SIZE = TSDL_GLattr(3);
 
SDL_GL_BLUE_SIZE = TSDL_GLattr(2);
 
SDL_GL_BUFFER_SIZE = TSDL_GLattr(4);
 
SDL_GL_CONTEXT_DEBUG_FLAG = TSDL_GLcontextFlag($0001);
 
SDL_GL_CONTEXT_EGL = TSDL_GLattr(19);
 
SDL_GL_CONTEXT_FLAGS = TSDL_GLattr(20);
 
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = TSDL_GLcontextFlag($0002);
 
SDL_GL_CONTEXT_MAJOR_VERSION = TSDL_GLattr(17);
 
SDL_GL_CONTEXT_MINOR_VERSION = TSDL_GLattr(18);
 
SDL_GL_CONTEXT_NO_ERROR = TSDL_GLattr(26);
 
SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = TSDL_GLprofile($0002);
 
SDL_GL_CONTEXT_PROFILE_CORE = TSDL_GLprofile($0001);
 
SDL_GL_CONTEXT_PROFILE_ES = TSDL_GLprofile($0004);
 
SDL_GL_CONTEXT_PROFILE_MASK = TSDL_GLattr(21);
 
SDL_GL_CONTEXT_RELEASE_BEHAVIOR = TSDL_GLattr(24);
 
SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = TSDL_GLcontextReleaseFlag($0001);
 
SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = TSDL_GLcontextReleaseFlag($0000);
 
SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = TSDL_GLcontextFlag($0008);
 
SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = TSDL_GLContextResetNotification($0001);
 
SDL_GL_CONTEXT_RESET_NOTIFICATION = TSDL_GLattr(25);
 
SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = TSDL_GLContextResetNotification($0000);
 
SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = TSDL_GLcontextFlag($0004);
 
SDL_GL_DEPTH_SIZE = TSDL_GLattr(6);
 
SDL_GL_DOUBLEBUFFER = TSDL_GLattr(5);
 
SDL_GL_FLOATBUFFERS = TSDL_GLattr(27);
 
SDL_GL_FRAMEBUFFER_SRGB_CAPABLE = TSDL_GLattr(23);
 
SDL_GL_GREEN_SIZE = TSDL_GLattr(1);
 
SDL_GL_MULTISAMPLEBUFFERS = TSDL_GLattr(13);
 
SDL_GL_MULTISAMPLESAMPLES = TSDL_GLattr(14);
 
SDL_GL_RED_SIZE = TSDL_GLattr(0);
 
SDL_GL_RETAINED_BACKING = TSDL_GLattr(16);
 
SDL_GL_SHARE_WITH_CURRENT_CONTEXT = TSDL_GLattr(22);
 
SDL_GL_STENCIL_SIZE = TSDL_GLattr(7);
 
SDL_GL_STEREO = TSDL_GLattr(12);
 
SDL_HAPTIC_AUTOCENTER = (1 shl 13);

Device can set autocenter.

Device supports setting autocenter.

SDL_HapticSetAutocenter

SDL_HAPTIC_CARTESIAN = 1;

Uses cartesian coordinates for the direction.

SDL_HapticDirection

SDL_HAPTIC_CONSTANT = (1 shl 0);

Constant effect supported.

Constant haptic effect.

SDL_HapticCondition

SDL_HAPTIC_CUSTOM = (1 shl 11);

Custom effect is supported.

User defined custom haptic effect.

SDL_HAPTIC_DAMPER = (1 shl 8);

Damper effect supported - uses axes velocity.

Condition haptic effect that simulates dampening. Effect is based on the axes velocity.

SDL_HapticCondition

SDL_HAPTIC_FRICTION = (1 shl 10);

Friction effect supported - uses axes movement.

Condition haptic effect that simulates friction. Effect is based on the axes movement.

SDL_HapticCondition

SDL_HAPTIC_GAIN = (1 shl 12);

Device can set global gain.

Device supports setting the global gain.

SDL_HapticSetGain

SDL_HAPTIC_INERTIA = (1 shl 9);

Inertia effect supported - uses axes acceleration.

Condition haptic effect that simulates inertia. Effect is based on the axes acceleration.

SDL_HapticCondition

SDL_HAPTIC_INFINITY = 4294967295;

Used to play a device an infinite number of times.

SDL_HapticRunEffect

SDL_HAPTIC_LEFTRIGHT = (1 shl 2);

Square wave effect supported.

Periodic haptic effect that simulates square waves.

SDL_HapticPeriodic

SDL_HAPTIC_PAUSE = (1 shl 15);

Device can be paused.

SDL_HapticPause SDL_HapticUnpause

SDL_HAPTIC_POLAR = 0;

Uses polar coordinates for the direction.

SDL_HapticDirection

SDL_HAPTIC_RAMP = (1 shl 6);

Ramp effect supported.

Ramp haptic effect.

SDL_HapticRamp

SDL_HAPTIC_SAWTOOTHDOWN = (1 shl 5);

Sawtoothdown wave effect supported.

Periodic haptic effect that simulates saw tooth down waves.

SDL_HapticPeriodic

SDL_HAPTIC_SAWTOOTHUP = (1 shl 4);

Sawtoothup wave effect supported.

Periodic haptic effect that simulates saw tooth up waves.

SDL_HapticPeriodic

SDL_HAPTIC_SINE = (1 shl 1);

Sine wave effect supported.

Periodic haptic effect that simulates sine waves.

SDL_HapticPeriodic

SDL_HAPTIC_SPHERICAL = 2;

Uses spherical coordinates for the direction.

SDL_HapticDirection

SDL_HAPTIC_SPRING = (1 shl 7);

Spring effect supported - uses axes position.

Condition haptic effect that simulates a spring. Effect is based on the axes position.

SDL_HapticCondition

SDL_HAPTIC_SQUARE = (1 shl 2);

#define SDL_HAPTIC_SQUARE (1<<2)

SDL_HAPTIC_STATUS = (1 shl 14);

Device can be queried for effect status.

Device can be queried for effect status.

SDL_HapticGetEffectStatus

SDL_HAPTIC_STEERING_AXIS = 3;

\brief Use this value to play an effect on the steering wheel axis. This provides better compatibility across platforms and devices as SDL will guess the correct axis. \sa SDL_HapticDirection

SDL_HAPTIC_TRIANGLE = (1 shl 3);

Triangle wave effect supported.

Periodic haptic effect that simulates triangular waves.

SDL_HapticPeriodic

SDL_HAT_CENTERED = $00;

Hat positions

SDL_HAT_DOWN = $04;
 
SDL_HAT_LEFT = $08;
 
SDL_HAT_LEFTDOWN = SDL_HAT_LEFT or SDL_HAT_DOWN;
 
SDL_HAT_LEFTUP = SDL_HAT_LEFT or SDL_HAT_UP;
 
SDL_HAT_RIGHT = $02;
 
SDL_HAT_RIGHTDOWN = SDL_HAT_RIGHT or SDL_HAT_DOWN;
 
SDL_HAT_RIGHTUP = SDL_HAT_RIGHT or SDL_HAT_UP;
 
SDL_HAT_UP = $01;
 
SDL_HINT_ACCELEROMETER_AS_JOYSTICK = 'SDL_ACCELEROMETER_AS_JOYSTICK';

/** \brief A variable controlling whether the Android / iOS built-in accelerometer should be listed as a joystick device, rather than listing actual joysticks only.

This variable can be set to the following values: "0" - List only real joysticks and accept input from them "1" - List real joysticks along with the accelerometer as if it were a 3 axis joystick (the default). /

SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED = 'SDL_ALLOW_ALT_TAB_WHILE_GRABBED';

/** \brief Specify the behavior of Alt+Tab while the keyboard is grabbed.

By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed and your window is full-screen. This prevents the user from getting stuck in your application if you've enabled keyboard grab.

The variable can be set to the following values: "0" - SDL will not handle Alt+Tab. Your application is responsible for handling Alt+Tab while the keyboard is grabbed. "1" - SDL will minimize your window when Alt+Tab is pressed (default) /

SDL_HINT_ALLOW_TOPMOST = 'SDL_ALLOW_TOPMOST';

/** \brief If set to 0 then never set the top most bit on a SDL Window, even if the video mode expects it. This is a debugging aid for developers and not expected to be used by end users. The default is "1"

This variable can be set to the following values: "0" - don't allow topmost "1" - allow topmost /

SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION = 'SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION';

/** \brief Android APK expansion main file version. Should be a string number like "1", "2" etc.

Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.

If both hints were set then SDL_RWFromFile() will look into expansion files after a given relative path was not found in the internal storage and assets.

By default this hint is not set and the APK expansion files are not searched. /

SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION = 'SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION';

/** \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc.

Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.

If both hints were set then SDL_RWFromFile() will look into expansion files after a given relative path was not found in the internal storage and assets.

By default this hint is not set and the APK expansion files are not searched. /

SDL_HINT_ANDROID_BLOCK_ON_PAUSE = 'SDL_ANDROID_BLOCK_ON_PAUSE';

/** \brief A variable to control whether the event loop will block itself when the app is paused.

The variable can be set to the following values: "0" - Non blocking. "1" - Blocking. (default)

The value should be set before SDL is initialized. /

SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO = 'SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO';

/** \brief A variable to control whether SDL will pause audio in background (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")

The variable can be set to the following values: "0" - Non paused. "1" - Paused. (default)

The value should be set before SDL is initialized. /

SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH = 'SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH' deprecated 'This hint is no longer supported on SDL >= 2.0.10. Use SDL_HINT_MOUSE_TOUCH_EVENTS and SDL_HINT_TOUCH_MOUSE_EVENTS instead.';

Warning: this symbol is deprecated: This hint is no longer supported on SDL >= 2.0.10. Use SDL_HINT_MOUSE_TOUCH_EVENTS and SDL_HINT_TOUCH_MOUSE_EVENTS instead.

/** \brief A variable to control whether mouse and touch events are to be treated together or separately

The variable can be set to the following values: "0" - Mouse events will be handled as touch events, and touch will raise fake mouse events. This is the behaviour of SDL <= 2.0.3. (default) "1" - Mouse events will be handled separately from pure touch events.

NOTE: This hint is no longer supported on SDL >= 2.0.10. Use SDL_HINT_MOUSE_TOUCH_EVENTS and SDL_HINT_TOUCH_MOUSE_EVENTS for generating synthetic touch/mouse events. /

SDL_HINT_ANDROID_TRAP_BACK_BUTTON = 'SDL_ANDROID_TRAP_BACK_BUTTON';

/** \brief A variable to control whether we trap the Android back button to handle it manually. This is necessary for the right mouse button to work on some Android devices, or to be able to trap the back button for use in your code reliably. If set to true, the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of SDL_SCANCODE_AC_BACK.

The variable can be set to the following values: "0" - Back button will be handled as usual for system. (default) "1" - Back button will be trapped, allowing you to handle the key press manually. (This will also let right mouse click work on systems where the right mouse button functions as back.)

The value of this hint is used at runtime, so it can be changed at any time. /

SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS = 'SDL_APPLE_TV_CONTROLLER_UI_EVENTS';

/** \brief A variable controlling whether controllers used with the Apple TV generate UI events.

When UI events are generated by controller input, the app will be backgrounded when the Apple TV remote's menu button is pressed, and when the pause or B buttons on gamepads are pressed.

More information about properly making use of controllers for the Apple TV can be found here: https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/

This variable can be set to the following values: "0" - Controller input does not generate UI events (the default). "1" - Controller input generates UI events. /

SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION = 'SDL_APPLE_TV_REMOTE_ALLOW_ROTATION';

/** \brief A variable controlling whether the Apple TV remote's joystick axes will automatically match the rotation of the remote.

This variable can be set to the following values: "0" - Remote orientation does not affect joystick axes (the default). "1" - Joystick axes are based on the orientation of the remote. /

SDL_HINT_APP_NAME = 'SDL_APP_NAME';

\brief Specify an application name.

This hint lets you specify the application name sent to the OS when required. For example, this will often appear in volume control applets for audio streams, and in lists of applications which are inhibiting the screensaver. You should use a string that describes your program ("My Game 2: The Revenge")

Setting this to "" or leaving it unset will have SDL use a reasonable default: probably the application's name or "SDL Application" if SDL doesn't have any better information.

Note that, for audio streams, this can be overridden with SDL_HINT_AUDIO_DEVICE_APP_NAME.

On targets where this is not supported, this hint does nothing.

SDL_HINT_AUDIODRIVER = 'SDL_AUDIODRIVER';

\brief A variable that decides what audio backend to use.

By default, SDL will try all available audio backends in a reasonable order until it finds one that can work, but this hint allows the app or user to force a specific target, such as "alsa" if, say, you are on PulseAudio but want to try talking to the lower level instead.

This functionality has existed since SDL 2.0.0 (indeed, before that) but before 2.0.22 this was an environment variable only. In 2.0.22, it was upgraded to a full SDL hint, so you can set the environment variable as usual or programatically set the hint with SDL_SetHint, which won't propagate to child processes.

The default value is unset, in which case SDL will try to figure out the best audio backend on your behalf. This hint needs to be set before SDL_Init() is called to be useful.

This hint is available since SDL 2.0.22. Before then, you could set the environment variable to get the same effect.

SDL_HINT_AUDIO_CATEGORY = 'SDL_AUDIO_CATEGORY';

/** \brief A variable controlling the audio category on iOS and Mac OS X

This variable can be set to the following values:

"ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default) "playback" - Use the AVAudioSessionCategoryPlayback category

For more information, see Apple's documentation: https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html /

SDL_HINT_AUDIO_DEVICE_APP_NAME = 'SDL_AUDIO_DEVICE_APP_NAME';

/** \brief Specify an application name for an audio device.

Some audio backends (such as PulseAudio) allow you to describe your audio stream. Among other things, this description might show up in a system control panel that lets the user adjust the volume on specific audio streams instead of using one giant master volume slider.

This hints lets you transmit that information to the OS. The contents of this hint are used while opening an audio device. You should use a string that describes your program ("My Game 2: The Revenge")

Setting this to "" or leaving it unset will have SDL use a reasonable default: this will be the name set with SDL_HINT_APP_NAME, if that hint is set. Otherwise, it'll probably the application's name or "SDL Application" if SDL doesn't have any better information.

On targets where this is not supported, this hint does nothing.

SDL_HINT_AUDIO_DEVICE_STREAM_NAME = 'SDL_AUDIO_DEVICE_STREAM_NAME';

/** \brief Specify an application name for an audio device.

Some audio backends (such as PulseAudio) allow you to describe your audio stream. Among other things, this description might show up in a system control panel that lets the user adjust the volume on specific audio streams instead of using one giant master volume slider.

This hints lets you transmit that information to the OS. The contents of this hint are used while opening an audio device. You should use a string that describes your what your program is playing ("audio stream" is probably sufficient in many cases, but this could be useful for something like "team chat" if you have a headset playing VoIP audio separately).

Setting this to "" or leaving it unset will have SDL use a reasonable default: "audio stream" or something similar.

On targets where this is not supported, this hint does nothing. /

SDL_HINT_AUDIO_DEVICE_STREAM_ROLE = 'SDL_AUDIO_DEVICE_STREAM_ROLE';

/** \brief Specify an application role for an audio device.

Some audio backends (such as Pipewire) allow you to describe the role of your audio stream. Among other things, this description might show up in a system control panel or software for displaying and manipulating media playback/capture graphs.

This hints lets you transmit that information to the OS. The contents of this hint are used while opening an audio device. You should use a string that describes your what your program is playing (Game, Music, Movie, etc...).

Setting this to "" or leaving it unset will have SDL use a reasonable default: "Game" or something similar.

On targets where this is not supported, this hint does nothing. /

SDL_HINT_AUDIO_INCLUDE_MONITORS = 'SDL_AUDIO_INCLUDE_MONITORS';

/** \brief A variable that causes SDL to not ignore audio "monitors"

This is currently only used for PulseAudio and ignored elsewhere.

By default, SDL ignores audio devices that aren't associated with physical hardware. Changing this hint to "1" will expose anything SDL sees that appears to be an audio source or sink. This will add "devices" to the list that the user probably doesn't want or need, but it can be useful in scenarios where you want to hook up SDL to some sort of virtual device, etc.

The default value is "0". This hint must be set before SDL_Init().

This hint is available since SDL 2.0.16. Before then, virtual devices are always ignored. /

SDL_HINT_AUDIO_RESAMPLING_MODE = 'SDL_AUDIO_RESAMPLING_MODE';

/** \brief A variable controlling speed/quality tradeoff of audio resampling.

If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) to handle audio resampling. There are different resampling modes available that produce different levels of quality, using more CPU.

If this hint isn't specified to a valid setting, or libsamplerate isn't available, SDL will use the default, internal resampling algorithm.

Note that this is currently only applicable to resampling audio that is being written to a device for playback or audio being read from a device for capture. SDL_AudioCVT always uses the default resampler (although this might change for SDL 2.1).

This hint is currently only checked at audio subsystem initialization.

This variable can be set to the following values:

"0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast) "1" or "fast" - Use fast, slightly higher quality resampling, if available "2" or "medium" - Use medium quality resampling, if available "3" or "best" - Use high quality resampling, if available /

SDL_HINT_AUTO_UPDATE_JOYSTICKS = 'SDL_AUTO_UPDATE_JOYSTICKS';

\brief A variable controlling whether SDL updates joystick state when getting input events

This variable can be set to the following values:

"0" - You'll call SDL_JoystickUpdate() manually "1" - SDL will automatically call SDL_JoystickUpdate() (default)

This hint can be toggled on and off at runtime. /

SDL_HINT_AUTO_UPDATE_SENSORS = 'SDL_AUTO_UPDATE_SENSORS';

/** \brief A variable controlling whether SDL updates sensor state when getting input events

This variable can be set to the following values:

"0" - You'll call SDL_SensorUpdate() manually "1" - SDL will automatically call SDL_SensorUpdate() (default)

This hint can be toggled on and off at runtime. /

SDL_HINT_BMP_SAVE_LEGACY_FORMAT = 'SDL_BMP_SAVE_LEGACY_FORMAT';

/** \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.

The bitmap header version 4 is required for proper alpha channel support and SDL will use it when required. Should this not be desired, this hint can force the use of the 40 byte header version which is supported everywhere.

The variable can be set to the following values: "0" - Surfaces with a colorkey or an alpha channel are saved to a 32-bit BMP file with an alpha mask. SDL will use the bitmap header version 4 and set the alpha mask accordingly. "1" - Surfaces with a colorkey or an alpha channel are saved to a 32-bit BMP file without an alpha mask. The alpha channel data will be in the file, but applications are going to ignore it.

The default value is "0". /

SDL_HINT_DEFAULT = TSDL_HintPriority(0);
 
SDL_HINT_DIRECTINPUT_ENABLED = 'SDL_DIRECTINPUT_ENABLED';

\brief A variable that lets you disable the detection and use of DirectInput gamepad devices

The variable can be set to the following values: "0" - Disable DirectInput detection (only uses XInput) "1" - Enable DirectInput detection (the default)

SDL_HINT_DISPLAY_USABLE_BOUNDS = 'SDL_DISPLAY_USABLE_BOUNDS';

/** \brief Override for SDL_GetDisplayUsableBounds()

If set, this hint will override the expected results for SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want to do this, but this allows an embedded system to request that some of the screen be reserved for other uses when paired with a well-behaved application.

The contents of this hint must be 4 comma-separated integers, the first is the bounds x, then y, width and height, in that order. /

SDL_HINT_EMSCRIPTEN_ASYNCIFY = 'SDL_EMSCRIPTEN_ASYNCIFY';

/** \brief Disable giving back control to the browser automatically when running with asyncify

With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations such as refreshing the screen or polling events.

This hint only applies to the emscripten platform

The variable can be set to the following values: "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes) "1" - Enable emscripten_sleep calls (the default) /

SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT = 'SDL_EMSCRIPTEN_KEYBOARD_ELEMENT';

/** \brief override the binding element for keyboard inputs for Emscripten builds

This hint only applies to the emscripten platform

The variable can be one of "#window" - The javascript window object (this is the default) "#document" - The javascript document object "#screen" - the javascript window.screen object "#canvas" - the WebGL canvas element any other string without a leading # sign applies to the element on the page with that ID. /

SDL_HINT_ENABLE_STEAM_CONTROLLERS = 'SDL_ENABLE_STEAM_CONTROLLERS';

/** \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs

The variable can be set to the following values: "0" - Do not scan for Steam Controllers "1" - Scan for Steam Controllers (the default)

The default value is "1". This hint must be set before initializing the joystick subsystem. /

SDL_HINT_EVENT_LOGGING = 'SDL_EVENT_LOGGING';

/** \brief A variable controlling whether SDL logs all events pushed onto its internal queue.

This variable can be set to the following values:

"0" - Don't log any events (default) "1" - Log all events except mouse and finger motion, which are pretty spammy. "2" - Log all events.

This is generally meant to be used to debug SDL itself, but can be useful for application developers that need better visibility into what is going on in the event queue. Logged events are sent through SDL_Log(), which means by default they appear on stdout on most platforms or maybe OutputDebugString() on Windows, and can be funneled by the app with SDL_LogSetOutputFunction(), etc.

This hint can be toggled on and off at runtime, if you only need to log events for a small subset of program execution. /

SDL_HINT_FORCE_RAISEWINDOW = 'SDL_HINT_FORCE_RAISEWINDOW';

\brief A variable controlling whether raising the window should be done more forcefully

This variable can be set to the following values: "0" - No forcing (the default) "1" - Extra level of forcing

At present, this is only an issue under MS Windows, which makes it nearly impossible to programmatically move a window to the foreground, for "security" reasons. See http://stackoverflow.com/a/34414846 for a discussion.

SDL_HINT_FRAMEBUFFER_ACCELERATION = 'SDL_FRAMEBUFFER_ACCELERATION';

/** \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.

SDL can try to accelerate the SDL screen surface by using streaming textures with a 3D rendering engine. This variable controls whether and how this is done.

This variable can be set to the following values: "0" - Disable 3D acceleration "1" - Enable 3D acceleration, using the default renderer. "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.)

By default SDL tries to make a best guess for each platform whether to use acceleration or not. /

SDL_HINT_GAMECONTROLLERCONFIG = 'SDL_GAMECONTROLLERCONFIG';

/** \brief A variable that lets you manually hint extra gamecontroller db entries

The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h

This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() /

SDL_HINT_GAMECONTROLLERCONFIG_FILE = 'SDL_GAMECONTROLLERCONFIG_FILE';

/** \brief A variable that lets you provide a file with extra gamecontroller db entries.

The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h

This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() /

SDL_HINT_GAMECONTROLLERTYPE = 'SDL_GAMECONTROLLERTYPE';

/** \brief A variable that overrides the automatic controller type detection

The variable should be comma separated entries, in the form: VID/PID=type

The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd

The type should be one of: Xbox360 XboxOne PS3 PS4 PS5 SwitchPro

This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) /

SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES = 'SDL_GAMECONTROLLER_IGNORE_DEVICES';

/** \brief A variable containing a list of devices to skip when scanning for game controllers.

The format of the string is a comma separated list of USB VID/PID pairs in hexadecimal form, e.g.

0xAAAA/0xBBBB,0xCCCC/0xDDDD

The variable can also take the form of @file, in which case the named file will be loaded and interpreted as the value of the variable. /

SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT = 'SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT';

/** \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable.

The format of the string is a comma separated list of USB VID/PID pairs in hexadecimal form, e.g.

0xAAAA/0xBBBB,0xCCCC/0xDDDD

The variable can also take the form of @file, in which case the named file will be loaded and interpreted as the value of the variable. /

SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS = 'SDL_GAMECONTROLLER_USE_BUTTON_LABELS';

/** \brief If set, game controller face buttons report their values according to their labels instead of their positional layout.

For example, on Nintendo Switch controllers, normally you'd get:

(Y) (X) (B) (A)

but if this hint is set, you'll get:

(X) (Y) (A) (B)

The variable can be set to the following values: "0" - Report the face buttons by position, as though they were on an Xbox controller. "1" - Report the face buttons by label instead of position

The default value is "1". This hint may be set at any time. /

SDL_HINT_GRAB_KEYBOARD = 'SDL_GRAB_KEYBOARD';

/** \brief A variable controlling whether grabbing input grabs the keyboard

This variable can be set to the following values: "0" - Grab will affect only the mouse "1" - Grab will affect mouse and keyboard

By default SDL will not grab the keyboard so system shortcuts still work. /

SDL_HINT_HIDAPI_IGNORE_DEVICES = 'SDL_HIDAPI_IGNORE_DEVICES';

\brief A variable containing a list of devices to ignore in SDL_hid_enumerate()

For example, to ignore the Shanwan DS3 controller and any Valve controller, you might have the string "0x2563/0x0523,0x28de/0x0000".

This hint is available since SDL 2.26.0.

SDL_HINT_IDLE_TIMER_DISABLED = 'SDL_IOS_IDLE_TIMER_DISABLED';

/** \brief A variable controlling whether the idle timer is disabled on iOS.

When an iOS app does not receive touches for some time, the screen is dimmed automatically. For games where the accelerometer is the only input this is problematic. This functionality can be disabled by setting this hint.

As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() accomplish the same thing on iOS. They should be preferred over this hint.

This variable can be set to the following values: "0" - Enable idle timer "1" - Disable idle timer /

SDL_HINT_IME_INTERNAL_EDITING = 'SDL_IME_INTERNAL_EDITING';

/** \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.

The variable can be set to the following values: "0" - SDL_TEXTEDITING events are sent, and it is the application's responsibility to render the text from these events and differentiate it somehow from committed text. (default) "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, and text that is being composed will be rendered in its own UI. /

SDL_HINT_IME_SHOW_UI = 'SDL_IME_SHOW_UI';

/** \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them.

The variable can be set to the following values: "0" - Native UI components are not display. (default) "1" - Native UI components are displayed. /

SDL_HINT_IME_SUPPORT_EXTENDED_TEXT = 'SDL_IME_SUPPORT_EXTENDED_TEXT';

\brief A variable to control if extended IME text support is enabled. If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise. Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated.

The variable can be set to the following values: "0" - Legacy behavior. Text can be truncated, no heap allocations. (default) "1" - Modern behavior.

SDL_HINT_IOS_HIDE_HOME_INDICATOR = 'SDL_IOS_HIDE_HOME_INDICATOR';

/** \brief A variable controlling whether the home indicator bar on iPhone X should be hidden.

This variable can be set to the following values: "0" - The indicator bar is not hidden (default for windowed applications) "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) /

SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS = 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS';

/** \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.

The variable can be set to the following values: "0" - Disable joystick & gamecontroller input events when the application is in the background. "1" - Enable joystick & gamecontroller input events when the application is in the backgroumd.

The default value is "0". This hint may be set at any time. /

SDL_HINT_JOYSTICK_DEVICE = 'SDL_JOYSTICK_DEVICE';

/** \brief A comma separated list of devices to open as joysticks

This variable is currently only used by the Linux joystick driver.

SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE = 'SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE';

\brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2) this is useful for applications that need full compatibility for things like ADSR envelopes. Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0" Rumble is both at any arbitrary value, StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0"

This variable can be set to the following values: "0" - Normal rumble behavior is behavior is used (default) "1" - Proper GameCube controller rumble behavior is used

SDL_HINT_JOYSTICK_HIDAPI = 'SDL_JOYSTICK_HIDAPI';

/** \brief A variable controlling whether the HIDAPI joystick drivers should be used.

This variable can be set to the following values: "0" - HIDAPI drivers are not used "1" - HIDAPI drivers are used (the default)

This variable is the default for all drivers, but can be overridden by the hints for specific drivers below. /

SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS = 'SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS';

\brief A variable controlling whether Nintendo Switch Joy-Con controllers will be combined into a single Pro-like controller when using the HIDAPI driver

This variable can be set to the following values: "0" - Left and right Joy-Con controllers will not be combined and each will be a mini-gamepad "1" - Left and right Joy-Con controllers will be combined into a single controller (the default)

SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE = 'SDL_JOYSTICK_HIDAPI_GAMECUBE';

/** \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI /

SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED = 'SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED';

\brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Joy-Con controller is opened

This variable can be set to the following values: "0" - home button LED is turned off "1" - home button LED is turned on

By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.

SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS = 'SDL_JOYSTICK_HIDAPI_JOY_CONS';

/** \brief A variable controlling whether Switch Joy-Cons should be treated the same as Switch Pro Controllers when using the HIDAPI driver.

This variable can be set to the following values: "0" - basic Joy-Con support with no analog input (the default) "1" - Joy-Cons treated as half full Pro Controllers with analog inputs and sensors

This does not combine Joy-Cons into a single controller. That's up to the user. /

SDL_HINT_JOYSTICK_HIDAPI_LUNA = 'SDL_JOYSTICK_HIDAPI_LUNA';

/** \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI /

SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC = 'SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC';

\brief A variable controlling whether the HIDAPI driver for Nintendo Online classic controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI

SDL_HINT_JOYSTICK_HIDAPI_PS3 = 'SDL_JOYSTICK_HIDAPI_PS3';

\brief A variable controlling whether the HIDAPI driver for PS3 controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on other platforms.

It is not possible to use this driver on Windows, due to limitations in the default drivers installed. See https://github.com/ViGEm/DsHidMini for an alternative driver on Windows.

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_PS4 = 'SDL_JOYSTICK_HIDAPI_PS4';

/** \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI /

SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE = 'SDL_JOYSTICK_HIDAPI_PS4_RUMBLE';

/** \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver.

This variable can be set to the following values: "0" - extended reports are not enabled (the default) "1" - extended reports

Extended input reports allow rumble on Bluetooth PS4 controllers, but break DirectInput handling for applications that don't use SDL.

Once extended reports are enabled, they can not be disabled without power cycling the controller.

For compatibility with applications written for versions of SDL prior to the introduction of PS5 controller support, this value will also control the state of extended reports on PS5 controllers when the SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. /

SDL_HINT_JOYSTICK_HIDAPI_PS5 = 'SDL_JOYSTICK_HIDAPI_PS5';

/** \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI /

SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED';

/** \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller.

This variable can be set to the following values: "0" - player LEDs are not enabled "1" - player LEDs are enabled (the default) /

SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE = 'SDL_JOYSTICK_HIDAPI_PS5_RUMBLE';

/** \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver.

This variable can be set to the following values: "0" - extended reports are not enabled (the default) "1" - extended reports

Extended input reports allow rumble on Bluetooth PS5 controllers, but break DirectInput handling for applications that don't use SDL.

Once extended reports are enabled, they can not be disabled without power cycling the controller.

For compatibility with applications written for versions of SDL prior to the introduction of PS5 controller support, this value defaults to the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. /

SDL_HINT_JOYSTICK_HIDAPI_SHIELD = 'SDL_JOYSTICK_HIDAPI_SHIELD';

\brief A variable controlling whether the HIDAPI driver for NVIDIA SHIELD controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI

SDL_HINT_JOYSTICK_HIDAPI_STADIA = 'SDL_JOYSTICK_HIDAPI_STADIA';

/** \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI /

SDL_HINT_JOYSTICK_HIDAPI_STEAM = 'SDL_JOYSTICK_HIDAPI_STEAM';

/** \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access and may prompt the user for permission on iOS and Android.

The default is "0" /

SDL_HINT_JOYSTICK_HIDAPI_SWITCH = 'SDL_JOYSTICK_HIDAPI_SWITCH';

/** \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI /

SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED = 'SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED';

/** \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch controller is opened

This variable can be set to the following values: "0" - home button LED is turned off "1" - home button LED is turned on

By default the Home button LED state is not changed. /

SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED';

\brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller.

This variable can be set to the following values: "0" - player LEDs are not enabled "1" - player LEDs are enabled (the default)

SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS = 'SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS';

\brief A variable controlling whether Nintendo Switch Joy-Con controllers will be in vertical mode when using the HIDAPI driver

This variable can be set to the following values: "0" - Left and right Joy-Con controllers will not be in vertical mode (the default) "1" - Left and right Joy-Con controllers will be in vertical mode

This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER).

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_WII = 'SDL_JOYSTICK_HIDAPI_WII';

\brief A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

This driver doesn't work with the dolphinbar, so the default is SDL_FALSE for now.

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED';

\brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Wii controller.

This variable can be set to the following values: "0" - player LEDs are not enabled "1" - player LEDs are enabled (the default)

This hiny is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_XBOX = 'SDL_JOYSTICK_HIDAPI_XBOX';

/** \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI /

SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 = 'SDL_JOYSTICK_HIDAPI_XBOX_360';

\brief A variable controlling whether the HIDAPI driver for XBox 360 controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX.

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED = 'SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED';

\brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with an Xbox 360 controller.

This variable can be set to the following values: "0" - player LEDs are not enabled "1" - player LEDs are enabled (the default)

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS = 'SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS';

\brief A variable controlling whether the HIDAPI driver for XBox 360 wireless controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360.

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE = 'SDL_JOYSTICK_HIDAPI_XBOX_ONE';

\brief A variable controlling whether the HIDAPI driver for XBox One controllers should be used.

This variable can be set to the following values: "0" - HIDAPI driver is not used "1" - HIDAPI driver is used

The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX.

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED = 'SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED';

\brief A variable controlling whether the Home button LED should be turned on when an Xbox One controller is opened

This variable can be set to the following values: "0" - home button LED is turned off "1" - home button LED is turned on

By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. The default brightness is 0.4.

This hint is available since SDL 2.26.0.

SDL_HINT_JOYSTICK_RAWINPUT = 'SDL_JOYSTICK_RAWINPUT';

/** \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices.

This variable can be set to the following values: "0" - RAWINPUT drivers are not used "1" - RAWINPUT drivers are used (the default)

/

SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT = 'SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT';

/** \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput.

This variable can be set to the following values: "0" - RAWINPUT driver will only use data from raw input APIs "1" - RAWINPUT driver will also pull data from XInput, providing better trigger axes, guide button presses, and rumble support for Xbox controllers

The default is "1". This hint applies to any joysticks opened after setting the hint. /

SDL_HINT_JOYSTICK_ROG_CHAKRAM = 'SDL_JOYSTICK_ROG_CHAKRAM';

\brief A variable controlling whether the ROG Chakram mice should show up as joysticks

This variable can be set to the following values: "0" - ROG Chakram mice do not show up as joysticks (the default) "1" - ROG Chakram mice show up as joysticks

SDL_HINT_JOYSTICK_THREAD = 'SDL_JOYSTICK_THREAD';

/** \brief A variable controlling whether a separate thread should be used for handling joystick detection and raw input messages on Windows

This variable can be set to the following values: "0" - A separate thread is not used (the default) "1" - A separate thread is used for handling raw input messages

/

SDL_HINT_KMSDRM_DEVICE_INDEX = 'SDL_KMSDRM_DEVICE_INDEX';

\brief A variable that decides what KMSDRM device to use.

Internally, SDL might open something like "/dev/dri/cardNN" to access KMSDRM functionality, where "NN" is a device index number.

SDL makes a guess at the best index to use (usually zero), but the app or user can set this hint to a number between 0 and 99 to force selection.

This hint is available since SDL 2.24.0.

SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER = 'SDL_KMSDRM_REQUIRE_DRM_MASTER';

/** \brief Determines whether SDL enforces that DRM master is required in order to initialize the KMSDRM video backend.

The DRM subsystem has a concept of a "DRM master" which is a DRM client that has the ability to set planes, set cursor, etc. When SDL is DRM master, it can draw to the screen using the SDL rendering APIs. Without DRM master, SDL is still able to process input and query attributes of attached displays, but it cannot change display state or draw to the screen directly.

In some cases, it can be useful to have the KMSDRM backend even if it cannot be used for rendering. An app may want to use SDL for input processing while using another rendering API (such as an MMAL overlay on Raspberry Pi) or using its own code to render to DRM overlays that SDL doesn't support.

This hint must be set before initializing the video subsystem.

This variable can be set to the following values: "0" - SDL will allow usage of the KMSDRM backend without DRM master "1" - SDL will require DRM master to use the KMSDRM backend (default) /

SDL_HINT_LINUX_DIGITAL_HATS = 'SDL_LINUX_DIGITAL_HATS';

\brief A variable controlling whether joysticks on Linux will always treat 'hat' axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking whether they may be analog.

This variable can be set to the following values: "0" - Only map hat axis inputs to digital hat outputs if the input axes appear to actually be digital (the default) "1" - Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as digital hats

SDL_HINT_LINUX_HAT_DEADZONES = 'SDL_LINUX_HAT_DEADZONES';

\brief A variable controlling whether digital hats on Linux will apply deadzones to their underlying input axes or use unfiltered values.

This variable can be set to the following values: "0" - Return digital hat values based on unfiltered input axis values "1" - Return digital hat values with deadzones on the input axes taken into account (the default)

SDL_HINT_LINUX_JOYSTICK_CLASSIC = 'SDL_LINUX_JOYSTICK_CLASSIC';

/** \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux

This variable can be set to the following values: "0" - Use /dev/input/event* "1" - Use /dev/input/js*

By default the /dev/input/event* interfaces are used /

SDL_HINT_LINUX_JOYSTICK_DEADZONES = 'SDL_LINUX_JOYSTICK_DEADZONES';

/** \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values.

This variable can be set to the following values: "0" - Return unfiltered joystick axis values (the default) "1" - Return axis values with deadzones taken into account /

SDL_HINT_MAC_BACKGROUND_APP = 'SDL_MAC_BACKGROUND_APP';

/** \brief When set don't force the SDL app to become a foreground process

This hint only applies to Mac OS X.

/

SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK = 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK';

/** \brief A variable that determines whether ctrl+click should generate a right-click event on Mac

If present, holding ctrl while left clicking will generate a right click event when on Mac. /

SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH = 'SDL_MAC_OPENGL_ASYNC_DISPATCH';

\brief A variable controlling whether dispatching OpenGL context updates should block the dispatching thread until the main thread finishes processing

This variable can be set to the following values: "0" - Dispatching OpenGL context updates will block the dispatching thread until the main thread finishes processing (default). "1" - Dispatching OpenGL context updates will allow the dispatching thread to continue execution.

Generally you want the default, but if you have OpenGL code in a background thread on a Mac, and the main thread hangs because it's waiting for that background thread, but that background thread is also hanging because it's waiting for the main thread to do an update, this might fix your issue.

This hint only applies to macOS.

This hint is available since SDL 2.24.0.

SDL_HINT_MOUSE_AUTO_CAPTURE = 'SDL_MOUSE_AUTO_CAPTURE';

\brief A variable controlling whether the mouse is captured while mouse buttons are pressed

This variable can be set to the following values: "0" - The mouse is not captured while mouse buttons are pressed "1" - The mouse is captured while mouse buttons are pressed

By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged outside the window, the application continues to receive mouse events until the button is released.

SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS = 'SDL_MOUSE_DOUBLE_CLICK_RADIUS';

/** \brief A variable setting the double click radius, in pixels. /

SDL_HINT_MOUSE_DOUBLE_CLICK_TIME = 'SDL_MOUSE_DOUBLE_CLICK_TIME';

/** \brief A variable setting the double click time, in milliseconds. /

SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH = 'SDL_MOUSE_FOCUS_CLICKTHROUGH';

/** \brief Allow mouse click events when clicking to focus an SDL window

This variable can be set to the following values: "0" - Ignore mouse clicks that activate a window "1" - Generate events for mouse clicks that activate a window

By default SDL will ignore mouse clicks that activate a window /

SDL_HINT_MOUSE_NORMAL_SPEED_SCALE = 'SDL_MOUSE_NORMAL_SPEED_SCALE';

/** \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode /

SDL_HINT_MOUSE_RELATIVE_MODE_CENTER = 'SDL_MOUSE_RELATIVE_MODE_CENTER';

\brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window

This variable can be set to the following values: "0" - Relative mouse mode constrains the mouse to the window "1" - Relative mouse mode constrains the mouse to the center of the window

Constraining to the center of the window works better for FPS games and when the application is running over RDP. Constraining to the whole window works better for 2D games and increases the chance that the mouse will be in the correct position when using high DPI mice.

By default SDL will constrain the mouse to the center of the window

SDL_HINT_MOUSE_RELATIVE_MODE_WARP = 'SDL_MOUSE_RELATIVE_MODE_WARP';

/** \brief A variable controlling whether relative mouse mode is implemented using mouse warping

This variable can be set to the following values: "0" - Relative mouse mode uses raw input "1" - Relative mouse mode uses mouse warping

By default SDL will use raw input for relative mouse mode /

SDL_HINT_MOUSE_RELATIVE_SCALING = 'SDL_MOUSE_RELATIVE_SCALING';

/** \brief A variable controlling whether relative mouse motion is affected by renderer scaling

This variable can be set to the following values: "0" - Relative motion is unaffected by DPI or renderer's logical size "1" - Relative motion is scaled according to DPI scaling and logical size

By default relative mouse deltas are affected by DPI and renderer scaling /

SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE = 'SDL_MOUSE_RELATIVE_SPEED_SCALE';

/** \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode /

SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE = 'SDL_MOUSE_RELATIVE_SYSTEM_SCALE';

\brief A variable controlling whether the system mouse acceleration curve is used for relative mouse motion.

This variable can be set to the following values: "0" - Relative mouse motion will be unscaled (the default) "1" - Relative mouse motion will be scaled using the system mouse acceleration curve.

If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the system speed scale.

This hint is available since SDL 2.26.0.

SDL_HINT_MOUSE_RELATIVE_WARP_MOTION = 'SDL_MOUSE_RELATIVE_WARP_MOTION';

\brief A variable controlling whether a motion event should be generated for mouse warping in relative mode.

This variable can be set to the following values: "0" - Warping the mouse will not generate a motion event in relative mode "1" - Warping the mouse will generate a motion event in relative mode

By default warping the mouse will not generate motion events in relative mode. This avoids the application having to filter out large relative motion due to warping.

SDL_HINT_MOUSE_TOUCH_EVENTS = 'SDL_MOUSE_TOUCH_EVENTS';

/** \brief A variable controlling whether mouse events should generate synthetic touch events

This variable can be set to the following values: "0" - Mouse events will not generate touch events (default for desktop platforms) "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS) /

SDL_HINT_NORMAL = TSDL_HintPriority(1);
 
SDL_HINT_NO_SIGNAL_HANDLERS = 'SDL_NO_SIGNAL_HANDLERS';

/** \brief Tell SDL not to catch the SIGINT or SIGTERM signals.

This hint only applies to Unix-like platforms.

The variable can be set to the following values: "0" - SDL will install a SIGINT and SIGTERM handler, and when it catches a signal, convert it into an SDL_QUIT event. "1" - SDL will not install a signal handler at all. /

SDL_HINT_OPENGL_ES_DRIVER = 'SDL_OPENGL_ES_DRIVER';

/** \brief A variable controlling what driver to use for OpenGL ES contexts.

On some platforms, currently Windows and X11, OpenGL drivers may support creating contexts with an OpenGL ES profile. By default SDL uses these profiles, when available, otherwise it attempts to load an OpenGL ES library, e.g. that provided by the ANGLE project. This variable controls whether SDL follows this default behaviour or will always load an OpenGL ES library.

Circumstances where this is useful include - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, or emulator, e.g. those from ARM, Imagination or Qualcomm. - Resolving OpenGL ES function addresses at link time by linking with the OpenGL ES library instead of querying them at run time with SDL_GL_GetProcAddress().

Caution: for an application to work with the default behaviour across different OpenGL drivers it must query the OpenGL ES function addresses at run time using SDL_GL_GetProcAddress().

This variable is ignored on most platforms because OpenGL ES is native or not supported.

This variable can be set to the following values: "0" - Use ES profile of OpenGL, if available. (Default when not set.) "1" - Load OpenGL ES library using the default library names.

/

SDL_HINT_ORIENTATIONS = 'SDL_IOS_ORIENTATIONS';

/** \brief A variable controlling which orientations are allowed on iOS.

In some circumstances it is necessary to be able to explicitly control which UI orientations are allowed.

This variable is a space delimited list of the following values: "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" /

SDL_HINT_OVERRIDE = TSDL_HintPriority(2);
 
SDL_HINT_POLL_SENTINEL = 'SDL_POLL_SENTINEL';

/** \brief A variable controlling the use of a sentinel event when polling the event queue

This variable can be set to the following values: "0" - Disable poll sentinels "1" - Enable poll sentinels

When polling for events, SDL_PumpEvents is used to gather new events from devices. If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will become stuck until the new events stop. This is most noticable when moving a high frequency mouse.

By default, poll sentinels are enabled. /

SDL_HINT_PREFERRED_LOCALES = 'SDL_PREFERRED_LOCALES';

/** \brief Override for SDL_GetPreferredLocales()

If set, this will be favored over anything the OS might report for the user's preferred locales. Changing this hint at runtime will not generate a SDL_LOCALECHANGED event (but if you can change the hint, you can push your own event, if you want).

The format of this hint is a comma-separated list of language and locale, combined with an underscore, as is a common format: "en_GB". Locale is optional: "en". So you might have a list like this: "en_GB,jp,es_PT" /

SDL_HINT_PS2_DYNAMIC_VSYNC = 'SDL_PS2_DYNAMIC_VSYNC';

\brief A variable controlling if VSYNC is automatically disable if doesn't reach the enough FPS

This variable can be set to the following values: "0" - It will be using VSYNC as defined in the main flag. Default "1" - If VSYNC was previously enabled, then it will disable VSYNC if doesn't reach enough speed

By default SDL does not enable the automatic VSYNC

SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION = 'SDL_QTWAYLAND_CONTENT_ORIENTATION';

/** \brief A variable describing the content orientation on QtWayland-based platforms.

On QtWayland platforms, windows are rotated client-side to allow for custom transitions. In order to correctly position overlays (e.g. volume bar) and gestures (e.g. events view, close/minimize gestures), the system needs to know in which orientation the application is currently drawing its contents.

This does not cause the window to be rotated or resized, the application needs to take care of drawing the content in the right orientation (the framebuffer is always in portrait mode).

This variable can be one of the following values: "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape" /

SDL_HINT_QTWAYLAND_WINDOW_FLAGS = 'SDL_QTWAYLAND_WINDOW_FLAGS';

/** \brief Flags to set on QtWayland windows to integrate with the native window manager.

On QtWayland platforms, this hint controls the flags to set on the windows. For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures.

This variable is a space-separated list of the following values (empty = no flags): "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager" /

SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE = 'SDL_QUIT_ON_LAST_WINDOW_CLOSE';

\brief A variable that decides whether to send SDL_QUIT when closing the final window.

By default, SDL sends an SDL_QUIT event when there is only one window and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most apps would also take the loss of this window as a signal to terminate the program.

However, it's not unreasonable in some cases to have the program continue to live on, perhaps to create new windows later.

Changing this hint to "0" will cause SDL to not send an SDL_QUIT event when the final window is requesting to close. Note that in this case, there are still other legitimate reasons one might get an SDL_QUIT event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) on Unix, etc.

The default value is "1". This hint can be changed at any time.

This hint is available since SDL 2.0.22. Before then, you always get an SDL_QUIT event when closing the final window.

SDL_HINT_RENDER_BATCHING = 'SDL_RENDER_BATCHING';

/** \brief A variable controlling whether the 2D render API is compatible or efficient.

This variable can be set to the following values:

"0" - Don't use batching to make rendering more efficient. "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls.

Up to SDL 2.0.9, the render API would draw immediately when requested. Now it batches up draw requests and sends them all to the GPU only when forced to (during SDL_RenderPresent, when changing render targets, by updating a texture that the batch needs, etc). This is significantly more efficient, but it can cause problems for apps that expect to render on top of the render API's output. As such, SDL will disable batching if a specific render backend is requested (since this might indicate that the app is planning to use the underlying graphics API directly). This hint can be used to explicitly request batching in this instance. It is a contract that you will either never use the underlying graphics API directly, or if you do, you will call SDL_RenderFlush() before you do so any current batch goes to the GPU before your work begins. Not following this contract will result in undefined behavior. /

SDL_HINT_RENDER_DIRECT3D11_DEBUG = 'SDL_RENDER_DIRECT3D11_DEBUG';

/** \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer.

This variable does not have any effect on the Direct3D 9 based renderer.

This variable can be set to the following values: "0" - Disable Debug Layer use "1" - Enable Debug Layer use

By default, SDL does not use Direct3D Debug Layer. /

SDL_HINT_RENDER_DIRECT3D_THREADSAFE = 'SDL_RENDER_DIRECT3D_THREADSAFE';

/** \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations.

This variable can be set to the following values: "0" - Thread-safety is not enabled (faster) "1" - Thread-safety is enabled

By default the Direct3D device is created with thread-safety disabled. /

SDL_HINT_RENDER_DRIVER = 'SDL_RENDER_DRIVER';

/** \brief A variable specifying which render driver to use.

If the application doesn't pick a specific renderer to use, this variable specifies the name of the preferred renderer. If the preferred renderer can't be initialized, the normal default renderer is used.

This variable is case insensitive and can be set to the following values: "direct3d" "opengl" "opengles2" "opengles" "software"

The default varies by platform, but it's the first one in the list that is available on the current platform. /

SDL_HINT_RENDER_LINE_METHOD = 'SDL_RENDER_LINE_METHOD';

/** \brief A variable controlling how the 2D render API renders lines

This variable can be set to the following values: "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20) "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points) "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20) "3" - Use the driver geometry API (correct, draws thicker diagonal lines)

This variable should be set when the renderer is created. /

SDL_HINT_RENDER_LOGICAL_SIZE_MODE = 'SDL_RENDER_LOGICAL_SIZE_MODE';

/** \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize.

This variable can be set to the following values: "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen

By default letterbox is used /

SDL_HINT_RENDER_OPENGL_SHADERS = 'SDL_RENDER_OPENGL_SHADERS';

/** \brief A variable controlling whether the OpenGL render driver uses shaders if they are available.

This variable can be set to the following values: "0" - Disable shaders "1" - Enable shaders

By default shaders are used if OpenGL supports them. /

SDL_HINT_RENDER_SCALE_QUALITY = 'SDL_RENDER_SCALE_QUALITY';

/** \brief A variable controlling the scaling quality

This variable can be set to the following values: "0" or "nearest" - Nearest pixel sampling "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) "2" or "best" - Currently this is the same as "linear"

By default nearest pixel sampling is used /

SDL_HINT_RENDER_VSYNC = 'SDL_RENDER_VSYNC';

/** \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing.

This variable can be set to the following values: "0" - Disable vsync "1" - Enable vsync

By default SDL does not sync screen surface updates with vertical refresh. /

SDL_HINT_RETURN_KEY_HIDES_IME = 'SDL_RETURN_KEY_HIDES_IME';

/** \brief A variable to control whether the return key on the soft keyboard should hide the soft keyboard on Android and iOS.

The variable can be set to the following values: "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) "1" - The return key will hide the keyboard.

The value of this hint is used at runtime, so it can be changed at any time. /

SDL_HINT_RPI_VIDEO_LAYER = 'SDL_RPI_VIDEO_LAYER';

/** \brief Tell SDL which Dispmanx layer to use on a Raspberry PI

Also known as Z-order. The variable can take a negative or positive value. The default is 10000. /

SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME = 'SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME';

/** \brief Specify an "activity name" for screensaver inhibition.

Some platforms, notably Linux desktops, list the applications which are inhibiting the screensaver or other power-saving features.

This hint lets you specify the "activity name" sent to the OS when SDL_DisableScreenSaver() is used (or the screensaver is automatically disabled). The contents of this hint are used when the screensaver is disabled. You should use a string that describes what your program is doing (and, therefore, why the screensaver is disabled). For example, "Playing a game" or "Watching a video".

Setting this to "" or leaving it unset will have SDL use a reasonable default: "Playing a game" or something similar.

On targets where this is not supported, this hint does nothing. /

SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL = 'SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL';

/** \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime.

On some platforms, like Linux, a realtime priority thread may be subject to restrictions that require special handling by the application. This hint exists to let SDL know that the app is prepared to handle said restrictions.

On Linux, SDL will apply the following configuration to any thread that becomes realtime: * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy, * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. * Exceeding this limit will result in the kernel sending SIGKILL to the app, * Refer to the man pages for more information.

This variable can be set to the following values: "0" - default platform specific behaviour "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy /

SDL_HINT_THREAD_PRIORITY_POLICY = 'SDL_THREAD_PRIORITY_POLICY';

/** \brief A string specifying additional information to use with SDL_SetThreadPriority.

By default SDL_SetThreadPriority will make appropriate system changes in order to apply a thread priority. For example on systems using pthreads the scheduler policy is changed automatically to a policy that works well with a given priority. Code which has specific requirements can override SDL's default behavior with this hint.

pthread hint values are "current", "other", "fifo" and "rr". Currently no other platform hint values are defined but may be in the future.

\note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME after calling SDL_SetThreadPriority(). /

SDL_HINT_THREAD_STACK_SIZE = 'SDL_THREAD_STACK_SIZE';

/** \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size

Use this hint in case you need to set SDL's threads stack size to other than the default. This is specially useful if you build SDL against a non glibc libc library (such as musl) which provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). Support for this hint is currently available only in the pthread, Windows, and PSP backend. /

SDL_HINT_TIMER_RESOLUTION = 'SDL_TIMER_RESOLUTION';

/** \brief A variable that controls the timer resolution, in milliseconds.

The higher resolution the timer, the more frequently the CPU services timer interrupts, and the more precise delays are, but this takes up power and CPU time. This hint is only used on Windows 7 and earlier.

See this blog post for more information: http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/

If this variable is set to "0", the system timer resolution is not set.

The default value is "1". This hint may be set at any time. /

SDL_HINT_TOUCH_MOUSE_EVENTS = 'SDL_TOUCH_MOUSE_EVENTS';

/** \brief A variable controlling whether touch events should generate synthetic mouse events

This variable can be set to the following values: "0" - Touch events will not generate mouse events "1" - Touch events will generate mouse events

By default SDL will generate mouse events for touch events /

SDL_HINT_TRACKPAD_IS_TOUCH_ONLY = 'SDL_TRACKPAD_IS_TOUCH_ONLY';

\brief A variable that treats trackpads as touch devices.

On macOS (and possibly other platforms in the future), SDL will report touches on a trackpad as mouse input, which is generally what users expect from this device; however, these are often actually full multitouch-capable touch devices, so it might be preferable to some apps to treat them as such.

Setting this hint to true will make the trackpad input report as a multitouch device instead of a mouse. The default is false.

Note that most platforms don't support this hint. As of 2.24.0, it only supports MacBooks' trackpads on macOS. Others may follow later.

This hint is checked during SDL_Init and can not be changed after.

This hint is available since SDL 2.24.0.

SDL_HINT_TV_REMOTE_AS_JOYSTICK = 'SDL_TV_REMOTE_AS_JOYSTICK';

/** \brief A variable controlling whether the Android / tvOS remotes should be listed as joystick devices, instead of sending keyboard events.

This variable can be set to the following values: "0" - Remotes send enter/escape/arrow key events "1" - Remotes are available as 2 axis, 2 button joysticks (the default). /

SDL_HINT_VIDEODRIVER = 'SDL_VIDEODRIVER';

\brief A variable that decides what video backend to use.

By default, SDL will try all available video backends in a reasonable order until it finds one that can work, but this hint allows the app or user to force a specific target, such as "x11" if, say, you are on Wayland but want to try talking to the X server instead.

This functionality has existed since SDL 2.0.0 (indeed, before that) but before 2.0.22 this was an environment variable only. In 2.0.22, it was upgraded to a full SDL hint, so you can set the environment variable as usual or programatically set the hint with SDL_SetHint, which won't propagate to child processes.

The default value is unset, in which case SDL will try to figure out the best video backend on your behalf. This hint needs to be set before SDL_Init() is called to be useful.

This hint is available since SDL 2.0.22. Before then, you could set the environment variable to get the same effect.

SDL_HINT_VIDEO_ALLOW_SCREENSAVER = 'SDL_VIDEO_ALLOW_SCREENSAVER';

/** \brief A variable controlling whether the screensaver is enabled.

This variable can be set to the following values: "0" - Disable screensaver "1" - Enable screensaver

By default SDL will disable the screensaver. /

SDL_HINT_VIDEO_DOUBLE_BUFFER = 'SDL_VIDEO_DOUBLE_BUFFER';

/** \brief Tell the video driver that we only want a double buffer.

By default, most lowlevel 2D APIs will use a triple buffer scheme that wastes no CPU time on waiting for vsync after issuing a flip, but introduces a frame of latency. On the other hand, using a double buffer scheme instead is recommended for cases where low latency is an important factor because we save a whole frame of latency. We do so by waiting for vsync immediately after issuing a flip, usually just after eglSwapBuffers call in the backend's *_SwapWindow function.

Since it's driver-specific, it's only supported where possible and implemented. Currently supported the following drivers:

- KMSDRM (kmsdrm) - Raspberry Pi (raspberrypi) /

SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY = 'SDL_VIDEO_EGL_ALLOW_TRANSPARENCY';

/** \brief A variable controlling whether the EGL window is allowed to be composited as transparent, rather than opaque.

Most window systems will always render windows opaque, even if the surface format has an alpha channel. This is not always true, however, so by default SDL will try to enforce opaque composition. To override this behavior, you can set this hint to "1". /

SDL_HINT_VIDEO_EXTERNAL_CONTEXT = 'SDL_VIDEO_EXTERNAL_CONTEXT';

/** \brief A variable controlling whether the graphics context is externally managed.

This variable can be set to the following values: "0" - SDL will manage graphics contexts that are attached to windows. "1" - Disable graphics context management on windows.

By default SDL will manage OpenGL contexts in certain situations. For example, on Android the context will be automatically saved and restored when pausing the application. Additionally, some platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this behavior, which is desireable when the application manages the graphics context, such as an externally managed OpenGL context or attaching a Vulkan surface to the window. /

SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL = 'SDL_VIDEO_FOREIGN_WINDOW_OPENGL';

\brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL.

This variable can be set to the following values: "0" - Don't add any graphics flags to the SDL_WindowFlags "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags

By default SDL will not make the foreign window compatible with OpenGL.

SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN = 'SDL_VIDEO_FOREIGN_WINDOW_VULKAN';

\brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan.

This variable can be set to the following values: "0" - Don't add any graphics flags to the SDL_WindowFlags "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags

By default SDL will not make the foreign window compatible with Vulkan.

SDL_HINT_VIDEO_HIGHDPI_DISABLED = 'SDL_VIDEO_HIGHDPI_DISABLED';

/** \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) /

SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES = 'SDL_VIDEO_MAC_FULLSCREEN_SPACES';

/** \brief A variable that dictates policy for fullscreen Spaces on Mac OS X.

This hint only applies to Mac OS X.

The variable can be set to the following values: "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" button on their titlebars). "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" button on their titlebars).

The default value is "1". Spaces are disabled regardless of this hint if the OS isn't at least Mac OS X Lion (10.7). This hint must be set before any windows are created. /

SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS = 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS';

/** \brief Minimize your SDL_Window if it loses key focus when in Fullscreen mode. Defaults to true.

/

SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR = 'SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR';

/** \brief A variable controlling whether the libdecor Wayland backend is allowed to be used.

This variable can be set to the following values: "0" - libdecor use is disabled. "1" - libdecor use is enabled (default).

libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. /

SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP = 'SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP';

\brief Enable or disable mouse pointer warp emulation, needed by some older games.

When this hint is set, any SDL will emulate mouse warps using relative mouse mode. This is required for some older games (such as Source engine games), which warp the mouse to the centre of the screen rather than using relative mouse motion. Note that relative mouse mode may have different mouse acceleration behaviour than pointer warps.

This variable can be set to the following values: "0" - All mouse warps fail, as mouse warping is not available under Wayland. "1" - Some mouse warps will be emulated by forcing relative mouse mode.

If not set, this is automatically enabled unless an application uses relative mouse mode directly.

This hint is available since SDL 2.26.0.

SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION = 'SDL_VIDEO_WAYLAND_MODE_EMULATION';

\brief A variable controlling whether video mode emulation is enabled under Wayland.

When this hint is set, a standard set of emulated CVT video modes will be exposed for use by the application. If it is disabled, the only modes exposed will be the logical desktop size and, in the case of a scaled desktop, the native display resolution.

This variable can be set to the following values: "0" - Video mode emulation is disabled. "1" - Video mode emulation is enabled.

By default video mode emulation is enabled.

SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR = 'SDL_VIDEO_WAYLAND_PREFER_LIBDECOR';

\brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations.

When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is available. (Note that, by default, libdecor will use xdg-decoration itself if available).

This variable can be set to the following values: "0" - libdecor is enabled only if server-side decorations are unavailable. "1" - libdecor is always enabled if available.

libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.

SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT = 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT';

/** \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").

If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly created SDL_Window:

1. Its pixel format will be set to the same pixel format as this SDL_Window. This is needed for example when sharing an OpenGL context across multiple windows.

2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for OpenGL rendering.

This variable can be set to the following values: The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should share a pixel format with. /

SDL_HINT_VIDEO_WIN_D3DCOMPILER = 'SDL_VIDEO_WIN_D3DCOMPILER';

/** \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries

SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It can use two different sets of binaries, those compiled by the user from source or those provided by the Chrome browser. In the later case, these binaries require that SDL loads a DLL providing the shader compiler.

This variable can be set to the following values: "d3dcompiler_46.dll" - default, best for Vista or later. "d3dcompiler_43.dll" - for XP support. "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.

/

SDL_HINT_VIDEO_X11_FORCE_EGL = 'SDL_VIDEO_X11_FORCE_EGL';

/** \brief A variable controlling whether X11 should use GLX or EGL by default

This variable can be set to the following values: "0" - Use GLX "1" - Use EGL

By default SDL will use GLX when both are present. /

SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR = 'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR';

/** \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used.

This variable can be set to the following values: "0" - Disable _NET_WM_BYPASS_COMPOSITOR "1" - Enable _NET_WM_BYPASS_COMPOSITOR

By default SDL will use _NET_WM_BYPASS_COMPOSITOR

/

SDL_HINT_VIDEO_X11_NET_WM_PING = 'SDL_VIDEO_X11_NET_WM_PING';

/** \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported.

This variable can be set to the following values: "0" - Disable _NET_WM_PING "1" - Enable _NET_WM_PING

By default SDL will use _NET_WM_PING, but for applications that know they will not always be able to respond to ping requests in a timely manner they can turn it off to avoid the window manager thinking the app is hung. The hint is checked in CreateWindow. /

SDL_HINT_VIDEO_X11_WINDOW_VISUALID = 'SDL_VIDEO_X11_WINDOW_VISUALID';

/** \brief A variable forcing the visual ID chosen for new X11 windows

/

SDL_HINT_VIDEO_X11_XINERAMA = 'SDL_VIDEO_X11_XINERAMA';

/** \brief A variable controlling whether the X11 Xinerama extension should be used.

This variable can be set to the following values: "0" - Disable Xinerama "1" - Enable Xinerama

By default SDL will use Xinerama if it is available. /

SDL_HINT_VIDEO_X11_XRANDR = 'SDL_VIDEO_X11_XRANDR';

/** \brief A variable controlling whether the X11 XRandR extension should be used.

This variable can be set to the following values: "0" - Disable XRandR "1" - Enable XRandR

By default SDL will not use XRandR because of window manager issues. /

SDL_HINT_VIDEO_X11_XVIDMODE = 'SDL_VIDEO_X11_XVIDMODE';

/** \brief A variable controlling whether the X11 VidMode extension should be used.

This variable can be set to the following values: "0" - Disable XVidMode "1" - Enable XVidMode

By default SDL will use XVidMode if it is available. /

SDL_HINT_VITA_TOUCH_MOUSE_DEVICE = 'SDL_HINT_VITA_TOUCH_MOUSE_DEVICE';

\brief A variable controlling which touchpad should generate synthetic mouse events

This variable can be set to the following values: "0" - Only front touchpad should generate mouse events. Default "1" - Only back touchpad should generate mouse events. "2" - Both touchpads should generate mouse events.

By default SDL will generate mouse events for all touch devices

SDL_HINT_WAVE_FACT_CHUNK = 'SDL_WAVE_FACT_CHUNK';

/** \brief Controls how the fact chunk affects the loading of a WAVE file.

The fact chunk stores information about the number of samples of a WAVE file. The Standards Update from Microsoft notes that this value can be used to 'determine the length of the data in seconds'. This is especially useful for compressed formats (for which this is a mandatory chunk) if they produce multiple sample frames per block and truncating the block is not allowed. The fact chunk can exactly specify how many sample frames there should be in this case.

Unfortunately, most application seem to ignore the fact chunk and so SDL ignores it by default as well.

This variable can be set to the following values:

"truncate" - Use the number of samples to truncate the wave data if the fact chunk is present and valid "strict" - Like "truncate", but raise an error if the fact chunk is invalid, not present for non-PCM formats, or if the data chunk doesn't have that many samples "ignorezero" - Like "truncate", but ignore fact chunk if the number of samples is zero "ignore" - Ignore fact chunk entirely (default) /

SDL_HINT_WAVE_RIFF_CHUNK_SIZE = 'SDL_WAVE_RIFF_CHUNK_SIZE';

/** \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file.

The size of the RIFF chunk (which includes all the sub-chunks of the WAVE file) is not always reliable. In case the size is wrong, it's possible to just ignore it and step through the chunks until a fixed limit is reached.

Note that files that have trailing data unrelated to the WAVE file or corrupt files may slow down the loading process without a reliable boundary. By default, SDL stops after 10000 chunks to prevent wasting time. Use the environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.

This variable can be set to the following values:

"force" - Always use the RIFF chunk size as a boundary for the chunk search "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default) "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB "maximum" - Search for chunks until the end of file (not recommended) /

SDL_HINT_WAVE_TRUNCATION = 'SDL_WAVE_TRUNCATION';

/** \brief Controls how a truncated WAVE file is handled.

A WAVE file is considered truncated if any of the chunks are incomplete or the data chunk size is not a multiple of the block size. By default, SDL decodes until the first incomplete block, as most applications seem to do.

This variable can be set to the following values:

"verystrict" - Raise an error if the file is truncated "strict" - Like "verystrict", but the size of the RIFF chunk is ignored "dropframe" - Decode until the first incomplete sample frame "dropblock" - Decode until the first incomplete block (default) /

SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING = 'SDL_WINDOWS_DISABLE_THREAD_NAMING';

/** \brief Tell SDL not to name threads on Windows.

The variable can be set to the following values: "0" - SDL will raise the 0x406D1388 Exception to name threads. This is the default behavior of SDL <= 2.0.4. (default) "1" - SDL will not raise this exception, and threads will be unnamed. For .NET languages this is required when running under a debugger. /

SDL_HINT_WINDOWS_DPI_AWARENESS = 'SDL_WINDOWS_DPI_AWARENESS';

\brief Controls whether SDL will declare the process to be DPI aware.

This hint must be set before initializing the video subsystem.

The main purpose of declaring DPI awareness is to disable OS bitmap scaling of SDL windows on monitors with a DPI scale factor.

This hint is equivalent to requesting DPI awareness via external means (e.g. calling SetProcessDpiAwarenessContext) and does not cause SDL to use a virtualized coordinate system, so it will generally give you 1 SDL coordinate = 1 pixel even on high-DPI displays.

For more information, see: https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows

This variable can be set to the following values: "" - Do not change the DPI awareness (default). "unaware" - Declare the process as DPI unaware. (Windows 8.1 and later). "system" - Request system DPI awareness. (Vista and later). "permonitor" - Request per-monitor DPI awareness. (Windows 8.1 and later). "permonitorv2" - Request per-monitor V2 DPI awareness. (Windows 10, version 1607 and later). The most visible difference from "permonitor" is that window title bar will be scaled to the visually correct size when dragging between monitors with different scale factors. This is the preferred DPI awareness level.

If the requested DPI awareness is not available on the currently running OS, SDL will try to request the best available match.

SDL_HINT_WINDOWS_DPI_SCALING = 'SDL_WINDOWS_DPI_SCALING';

\brief Uses DPI-scaled points as the SDL coordinate system on Windows.

This changes the SDL coordinate system units to be DPI-scaled points, rather than pixels everywhere. This means windows will be appropriately sized, even when created on high-DPI displays with scaling.

e.g. requesting a 640x480 window from SDL, on a display with 125% scaling in Windows display settings, will create a window with an 800x600 client area (in pixels).

Setting this to "1" implicitly requests process DPI awareness (setting SDL_WINDOWS_DPI_AWARENESS is unnecessary), and forces SDL_WINDOW_ALLOW_HIGHDPI on all windows.

This variable can be set to the following values: "0" - SDL coordinates equal Windows coordinates. No automatic window resizing when dragging between monitors with different scale factors (unless this is performed by Windows itself, which is the case when the process is DPI unaware). "1" - SDL coordinates are in DPI-scaled points. Automatically resize windows as needed on displays with non-100% scale factors.

SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP = 'SDL_WINDOWS_ENABLE_MESSAGELOOP';

/** \brief A variable controlling whether the windows message loop is processed by SDL

This variable can be set to the following values: "0" - The window message loop is not run "1" - The window message loop is processed in SDL_PumpEvents()

By default SDL will process the windows message loop /

SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS = 'SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS';

/** \brief Force SDL to use Critical Sections for mutexes on Windows. On Windows 7 and newer, Slim Reader/Writer Locks are available. They offer better performance, allocate no kernel ressources and use less memory. SDL will fall back to Critical Sections on older OS versions or if forced to by this hint.

This variable can be set to the following values: "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default) "1" - Force the use of Critical Sections in all cases.

/

SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL = 'SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL';

/** \brief Force SDL to use Kernel Semaphores on Windows. Kernel Semaphores are inter-process and require a context switch on every interaction. On Windows 8 and newer, the WaitOnAddress API is available. Using that and atomics to implement semaphores increases performance. SDL will fall back to Kernel Objects on older OS versions or if forced to by this hint.

This variable can be set to the following values: "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default) "1" - Force the use of Kernel Objects in all cases.

/

SDL_HINT_WINDOWS_INTRESOURCE_ICON = 'SDL_WINDOWS_INTRESOURCE_ICON';

/** \brief A variable to specify custom icon resource id from RC file on Windows platform /

SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL = 'SDL_WINDOWS_INTRESOURCE_ICON_SMALL';
 
SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 = 'SDL_WINDOWS_NO_CLOSE_ON_ALT_F4';

/** \brief Tell SDL not to generate window-close events for Alt+F4 on Windows.

The variable can be set to the following values: "0" - SDL will generate a window-close event when it sees Alt+F4. "1" - SDL will only do normal key handling for Alt+F4. /

SDL_HINT_WINDOWS_USE_D3D9EX = 'SDL_WINDOWS_USE_D3D9EX';

/** \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. Direct3D 9Ex contains changes to state management that can eliminate device loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require some changes to your application to cope with the new behavior, so this is disabled by default.

This hint must be set before initializing the video subsystem.

For more information on Direct3D 9Ex, see: - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements

This variable can be set to the following values: "0" - Use the original Direct3D 9 API (default) "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable)

/

SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN = 'SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN';

/** \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden

This variable can be set to the following values: "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) "1" - The window frame is interactive when the cursor is hidden

By default SDL will allow interaction with the window frame when the cursor is hidden /

SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN = 'SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN';

/** \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called

This variable can be set to the following values: "0" - The window is activated when the SDL_ShowWindow function is called "1" - The window is not activated when the SDL_ShowWindow function is called

By default SDL will activate the window when the SDL_ShowWindow function is called /

SDL_HINT_WINRT_HANDLE_BACK_BUTTON = 'SDL_WINRT_HANDLE_BACK_BUTTON';

/** \brief Allows back-button-press events on Windows Phone to be marked as handled

Windows Phone devices typically feature a Back button. When pressed, the OS will emit back-button-press events, which apps are expected to handle in an appropriate manner. If apps do not explicitly mark these events as 'Handled', then the OS will invoke its default behavior for unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to terminate the app (and attempt to switch to the previous app, or to the device's home screen).

Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL to mark back-button-press events as Handled, if and when one is sent to the app.

Internally, Windows Phone sends back button events as parameters to special back-button-press callback functions. Apps that need to respond to back-button-press events are expected to register one or more callback functions for such, shortly after being launched (during the app's initialization phase). After the back button is pressed, the OS will invoke these callbacks. If the app's callback(s) do not explicitly mark the event as handled by the time they return, or if the app never registers one of these callback, the OS will consider the event un-handled, and it will apply its default back button behavior (terminate the app).

SDL registers its own back-button-press callback with the Windows Phone OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. If the hint's value is set to "1", the back button event's Handled property will get set to 'true'. If the hint's value is set to something else, or if it is unset, SDL will leave the event's Handled property alone. (By default, the OS sets this property to 'false', to note.)

SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a back button is pressed, or can set it in direct-response to a back button being pressed.

In order to get notified when a back button is pressed, SDL apps should register a callback function with SDL_AddEventWatch(), and have it listen for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. (Alternatively, SDL_KEYUP events can be listened-for. Listening for either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON set by such a callback, will be applied to the OS' current back-button-press event.

More details on back button behavior in Windows Phone apps can be found at the following page, on Microsoft's developer site: http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx /

SDL_HINT_WINRT_PRIVACY_POLICY_LABEL = 'SDL_WINRT_PRIVACY_POLICY_LABEL';

/** \brief Label text for a WinRT app's privacy policy link

Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be available via the Windows Settings charm. SDL provides code to add a link there, with its label text being set via the optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.

Please note that a privacy policy's contents are not set via this hint. A separate hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the policy.

The contents of this hint should be encoded as a UTF8 string.

The default value is "Privacy Policy". This hint should only be set during app initialization, preferably before any calls to SDL_Init().

For additional information on linking to a privacy policy, see the documentation for SDL_HINT_WINRT_PRIVACY_POLICY_URL. /

SDL_HINT_WINRT_PRIVACY_POLICY_URL = 'SDL_WINRT_PRIVACY_POLICY_URL';

/** \brief A URL to a WinRT app's privacy policy

All network-enabled WinRT apps must make a privacy policy available to its users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be be available in the Windows Settings charm, as accessed from within the app. SDL provides code to add a URL-based link there, which can point to the app's privacy policy.

To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL before calling any SDL_Init() functions. The contents of the hint should be a valid URL. For example, "http://www.example.com".

The default value is "", which will prevent SDL from adding a privacy policy link to the Settings charm. This hint should only be set during app init.

The label text of an app's "Privacy Policy" link may be customized via another hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.

Please note that on Windows Phone, Microsoft does not provide standard UI for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL will not get used on that platform. Network-enabled phone apps should display their privacy policy through some other, in-app means. /

SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT = 'SDL_X11_FORCE_OVERRIDE_REDIRECT';

/** \brief Mark X11 windows as override-redirect.

If set, this _might_ increase framerate at the expense of the desktop not working as expected. Override-redirect windows aren't noticed by the window manager at all.

You should probably only use this for fullscreen windows, and you probably shouldn't even use it for that. But it's here if you want to try! /

SDL_HINT_X11_WINDOW_TYPE = 'SDL_X11_WINDOW_TYPE';

\brief A variable that forces X11 windows to create as a custom type.

This is currently only used for X11 and ignored elsewhere.

During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property to report to the window manager the type of window it wants to create. This might be set to various things if SDL_WINDOW_TOOLTIP or SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that haven't set a specific type, this hint can be used to specify a custom type. For example, a dock window might set this to "_NET_WM_WINDOW_TYPE_DOCK".

If not set or set to "", this hint is ignored. This hint must be set before the SDL_CreateWindow() call that it is intended to affect.

SDL_HINT_XINPUT_ENABLED = 'SDL_XINPUT_ENABLED';

/** \brief A variable that lets you disable the detection and use of Xinput gamepad devices

The variable can be set to the following values: "0" - Disable XInput timer (only uses direct input) "1" - Enable XInput timer (the default) /

SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING = 'SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING';

\brief A variable that causes SDL to use the old axis and button mapping for XInput devices.

This hint is for backwards compatibility only and will be removed in SDL 2.1

The default value is "0". This hint must be set before SDL_Init()

SDL_HITTEST_DRAGGABLE = TSDL_HitTestResult(1);

< Region is normal. No special properties. *

SDL_HITTEST_NORMAL = TSDL_HitTestResult(0);
 
SDL_HITTEST_RESIZE_BOTTOM = TSDL_HitTestResult(7);
 
SDL_HITTEST_RESIZE_BOTTOMLEFT = TSDL_HitTestResult(8);
 
SDL_HITTEST_RESIZE_BOTTOMRIGHT = TSDL_HitTestResult(6);
 
SDL_HITTEST_RESIZE_LEFT = TSDL_HitTestResult(9);
 
SDL_HITTEST_RESIZE_RIGHT = TSDL_HitTestResult(5);
 
SDL_HITTEST_RESIZE_TOP = TSDL_HitTestResult(3);
 
SDL_HITTEST_RESIZE_TOPLEFT = TSDL_HitTestResult(2);

< Region can drag entire window. *

SDL_HITTEST_RESIZE_TOPRIGHT = TSDL_HitTestResult(4);
 
SDL_ICONV_E2BIG = csize_t(-2);
 
SDL_ICONV_EILSEQ = csize_t(-3);
 
SDL_ICONV_EINVAL = csize_t(-4);
 
SDL_ICONV_ERROR = csize_t(-1);

The SDL implementation of iconv() returns these error codes

SDL_IGNORE = 0;
 
SDL_INIT_AUDIO = TSDL_Init($00000010);
 
SDL_INIT_EVENTS = TSDL_Init($00004000);

turn on game controller also implicitly does JOYSTICK SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK

SDL_INIT_EVERYTHING = TSDL_Init( SDL_INIT_TIMER or SDL_INIT_AUDIO or SDL_INIT_VIDEO or SDL_INIT_EVENTS or SDL_INIT_JOYSTICK or SDL_INIT_HAPTIC or SDL_INIT_GAMECONTROLLER or SDL_INIT_SENSOR );

Don't catch fatal signals compatibility; this flag is ignored.

SDL_INIT_GAMECONTROLLER = TSDL_Init($00002000);
 
SDL_INIT_HAPTIC = TSDL_Init($00001000);

SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS

SDL_INIT_JOYSTICK = TSDL_Init($00000200);

SDL_INIT_VIDEO implies SDL_INIT_EVENTS

SDL_INIT_NOPARACHUTE = TSDL_Init($00100000);
 
SDL_INIT_SENSOR = TSDL_Init($00008000);
 
SDL_INIT_TIMER = TSDL_Init($00000001);
 
SDL_INIT_VIDEO = TSDL_Init($00000020);
 
SDL_INVALID_SHAPE_ARGUMENT = -2;
 
SDL_IPHONE_MAX_GFORCE = 5.0;

Set max recognized G-force from accelerometer See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed

SDL_JOYAXISMOTION = TSDL_EventType($600);

Joystick events

SDL_JOYBALLMOTION = TSDL_EventType($601);

Joystick axis motion

SDL_JOYBATTERYUPDATED = TSDL_EventType($607);

An opened joystick has been removed

SDL_JOYBUTTONDOWN = TSDL_EventType($603);

Joystick hat position change

SDL_JOYBUTTONUP = TSDL_EventType($604);

Joystick button pressed

SDL_JOYDEVICEADDED = TSDL_EventType($605);

Joystick button released

SDL_JOYDEVICEREMOVED = TSDL_EventType($606);

A new joystick has been inserted into the system

SDL_JOYHATMOTION = TSDL_EventType($602);

Joystick trackball motion

SDL_JOYSTICK_AXIS_MAX = 32767;
 
SDL_JOYSTICK_AXIS_MIN = -32768;
 
SDL_JOYSTICK_POWER_EMPTY = TSDL_JoystickPowerLevel(0);
 
SDL_JOYSTICK_POWER_FULL = TSDL_JoystickPowerLevel(3);

<= 70% *

SDL_JOYSTICK_POWER_LOW = TSDL_JoystickPowerLevel(1);

<= 5% *

SDL_JOYSTICK_POWER_MAX = TSDL_JoystickPowerLevel(5);
 
SDL_JOYSTICK_POWER_MEDIUM = TSDL_JoystickPowerLevel(2);

<= 20% *

SDL_JOYSTICK_POWER_UNKNOWN = TSDL_JoystickPowerLevel(-1);
 
SDL_JOYSTICK_POWER_WIRED = TSDL_JoystickPowerLevel(4);

<= 100% *

SDL_JOYSTICK_TYPE_ARCADE_PAD = TSDL_JoystickType(8);
 
SDL_JOYSTICK_TYPE_ARCADE_STICK = TSDL_JoystickType(3);
 
SDL_JOYSTICK_TYPE_DANCE_PAD = TSDL_JoystickType(5);
 
SDL_JOYSTICK_TYPE_DRUM_KIT = TSDL_JoystickType(7);
 
SDL_JOYSTICK_TYPE_FLIGHT_STICK = TSDL_JoystickType(4);
 
SDL_JOYSTICK_TYPE_GAMECONTROLLER = TSDL_JoystickType(1);
 
SDL_JOYSTICK_TYPE_GUITAR = TSDL_JoystickType(6);
 
SDL_JOYSTICK_TYPE_THROTTLE = TSDL_JoystickType(9);
 
SDL_JOYSTICK_TYPE_UNKNOWN = TSDL_JoystickType(0);
 
SDL_JOYSTICK_TYPE_WHEEL = TSDL_JoystickType(2);
 
SDL_KEYDOWN = TSDL_EventType($300);

Keyboard events

SDL_KEYMAPCHANGED = TSDL_EventType($304);

Keyboard text input

SDL_KEYUP = TSDL_EventType($301);

Key pressed

SDL_LASTEVENT = TSDL_EventType($FFFF);

This last event is only for bounding internal arrays (needed in pascal ??)

SDL_LOCALECHANGED = TSDL_EventType($107);

The user's locale preferences have changed. *

SDL_LOG_CATEGORY_APPLICATION = TSDL_LogCategory(0);
 
SDL_LOG_CATEGORY_ASSERT = TSDL_LogCategory(2);
 
SDL_LOG_CATEGORY_AUDIO = TSDL_LogCategory(4);
 
SDL_LOG_CATEGORY_CUSTOM = TSDL_LogCategory(19);

Beyond this point is reserved for application use *

SDL_LOG_CATEGORY_ERROR = TSDL_LogCategory(1);
 
SDL_LOG_CATEGORY_INPUT = TSDL_LogCategory(7);
 
SDL_LOG_CATEGORY_RENDER = TSDL_LogCategory(6);
 
SDL_LOG_CATEGORY_RESERVED1 = TSDL_LogCategory(9);

Reserved for future SDL library use *

SDL_LOG_CATEGORY_RESERVED10 = TSDL_LogCategory(18);
 
SDL_LOG_CATEGORY_RESERVED2 = TSDL_LogCategory(10);
 
SDL_LOG_CATEGORY_RESERVED3 = TSDL_LogCategory(11);
 
SDL_LOG_CATEGORY_RESERVED4 = TSDL_LogCategory(12);
 
SDL_LOG_CATEGORY_RESERVED5 = TSDL_LogCategory(13);
 
SDL_LOG_CATEGORY_RESERVED6 = TSDL_LogCategory(14);
 
SDL_LOG_CATEGORY_RESERVED7 = TSDL_LogCategory(15);
 
SDL_LOG_CATEGORY_RESERVED8 = TSDL_LogCategory(16);
 
SDL_LOG_CATEGORY_RESERVED9 = TSDL_LogCategory(17);
 
SDL_LOG_CATEGORY_SYSTEM = TSDL_LogCategory(3);
 
SDL_LOG_CATEGORY_TEST = TSDL_LogCategory(8);
 
SDL_LOG_CATEGORY_VIDEO = TSDL_LogCategory(5);
 
SDL_LOG_PRIORITY_CRITICAL = TSDL_LogPriority(6);
 
SDL_LOG_PRIORITY_DEBUG = TSDL_LogPriority(2);
 
SDL_LOG_PRIORITY_ERROR = TSDL_LogPriority(5);
 
SDL_LOG_PRIORITY_INFO = TSDL_LogPriority(3);
 
SDL_LOG_PRIORITY_VERBOSE = TSDL_LogPriority(1);
 
SDL_LOG_PRIORITY_WARN = TSDL_LogPriority(4);
 
SDL_MAJOR_VERSION = 2;

Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL

Last updated when TSDL_FPoint and TSDL_FRect were added.

SDL_MAX_LOG_MESSAGE = 4096;

\brief The maximum size of a log message

Messages longer than the maximum size will be truncated

SDL_MAX_SINT16 = High(cint16);
 
SDL_MAX_SINT32 = High(cint32);
 
SDL_MAX_SINT64 = High(cint64);
 
SDL_MAX_SINT8 = High(cint8);
 
SDL_MAX_UINT16 = High(cuint16);
 
SDL_MAX_UINT32 = High(cuint32);
 
SDL_MAX_UINT64 = High(cuint64);
 
SDL_MAX_UINT8 = High(cuint8);
 
SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = TSDL_MessageBoxFlags($00000080);

< informational dialog *

SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = TSDL_MessageBoxFlags($00000100);

/**< buttons placed left to right */

SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = TSDL_MessageBoxButtonFlags($00000002);

< Marks the default button when return is hit *

SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = TSDL_MessageBoxButtonFlags($00000001);
 
SDL_MESSAGEBOX_COLOR_BACKGROUND = TSDL_MessageBoxColorType(0);
 
SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND = TSDL_MessageBoxColorType(3);
 
SDL_MESSAGEBOX_COLOR_BUTTON_BORDER = TSDL_MessageBoxColorType(2);
 
SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED = TSDL_MessageBoxColorType(4);
 
SDL_MESSAGEBOX_COLOR_MAX = TSDL_MessageBoxColorType(5);
 
SDL_MESSAGEBOX_COLOR_TEXT = TSDL_MessageBoxColorType(1);
 
SDL_MESSAGEBOX_ERROR = TSDL_MessageBoxFlags($00000010);
 
SDL_MESSAGEBOX_INFORMATION = TSDL_MessageBoxFlags($00000040);

< warning dialog *

SDL_MESSAGEBOX_WARNING = TSDL_MessageBoxFlags($00000020);

< error dialog *

SDL_MINOR_VERSION = 0;
 
SDL_MIN_SINT16 = Low(cint16);
 
SDL_MIN_SINT32 = Low(cint32);
 
SDL_MIN_SINT64 = Low(cint64);
 
SDL_MIN_SINT8 = Low(cint8);
 
SDL_MIN_UINT16 = Low(cuint16);
 
SDL_MIN_UINT32 = Low(cuint32);
 
SDL_MIN_UINT64 = Low(cuint64);
 
SDL_MIN_UINT8 = Low(cuint8);
 
SDL_MIX_MAXVOLUME = 128;
 
SDL_MOUSEBUTTONDOWN = TSDL_EventType($401);

Mouse moved

SDL_MOUSEBUTTONUP = TSDL_EventType($402);

Mouse button pressed

SDL_MOUSEMOTION = TSDL_EventType($400);

Mouse events

SDL_MOUSEWHEEL = TSDL_EventType($403);

Mouse button released

SDL_MOUSEWHEEL_FLIPPED = TSDL_MouseWheelDirection(1);

< The scroll direction is normal *

SDL_MOUSEWHEEL_NORMAL = TSDL_MouseWheelDirection(0);
 
SDL_MOUSE_TOUCHID = TSDL_TouchID(-1);

Used as the SDL_TouchID for touch events simulated with mouse input *

SDL_MULTIGESTURE = TSDL_EventType($802);
 
SDL_MUTEX_MAXWAIT = Not cuint32(0);

This is the timeout value which corresponds to never time out.

SDL_MUTEX_TIMEDOUT = 1;

Synchronization functions which can time out return this value if they time out.

SDL_NONSHAPEABLE_WINDOW = -1;

SDL_shape.h

Header file for the shaped window API.

SDL_NUM_LOG_PRIORITIES = TSDL_LogPriority(7);
 
SDL_NUM_SCANCODES = TSDL_ScanCode(512);

Add any other keys here. *

SDL_NUM_SYSTEM_CURSORS = TSDL_SystemCursor(12);

Hand

SDL_ORIENTATION_LANDSCAPE = TSDL_DisplayOrientation(1);

< The display orientation can't be determined *

SDL_ORIENTATION_LANDSCAPE_FLIPPED = TSDL_DisplayOrientation(2);

< The display is in landscape mode, with the right side up, relative to portrait mode *

SDL_ORIENTATION_PORTRAIT = TSDL_DisplayOrientation(3);

< The display is in landscape mode, with the left side up, relative to portrait mode *

SDL_ORIENTATION_PORTRAIT_FLIPPED = TSDL_DisplayOrientation(4);

< The display is in portrait mode *

SDL_ORIENTATION_UNKNOWN = TSDL_DisplayOrientation(0);
 
SDL_PACKEDLAYOUT_1010102 = TSDL_PackedLayout(8);
 
SDL_PACKEDLAYOUT_1555 = TSDL_PackedLayout(3);
 
SDL_PACKEDLAYOUT_2101010 = TSDL_PackedLayout(7);
 
SDL_PACKEDLAYOUT_332 = TSDL_PackedLayout(1);
 
SDL_PACKEDLAYOUT_4444 = TSDL_PackedLayout(2);
 
SDL_PACKEDLAYOUT_5551 = TSDL_PackedLayout(4);
 
SDL_PACKEDLAYOUT_565 = TSDL_PackedLayout(5);
 
SDL_PACKEDLAYOUT_8888 = TSDL_PackedLayout(6);
 
SDL_PACKEDLAYOUT_NONE = TSDL_PackedLayout(0);
 
SDL_PACKEDORDER_ABGR = TSDL_PackOrder(7);
 
SDL_PACKEDORDER_ARGB = TSDL_PackOrder(3);
 
SDL_PACKEDORDER_BGRA = TSDL_PackOrder(8);
 
SDL_PACKEDORDER_BGRX = TSDL_PackOrder(6);
 
SDL_PACKEDORDER_NONE = TSDL_PackOrder(0);
 
SDL_PACKEDORDER_RGBA = TSDL_PackOrder(4);
 
SDL_PACKEDORDER_RGBX = TSDL_PackOrder(2);
 
SDL_PACKEDORDER_XBGR = TSDL_PackOrder(5);
 
SDL_PACKEDORDER_XRGB = TSDL_PackOrder(1);
 
SDL_PATCHLEVEL = 10;
 
SDL_PEEKEVENT = 1;
 
SDL_PIXELFORMAT_ABGR1555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ABGR shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_ABGR4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ABGR shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_ABGR8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_ABGR shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_ARGB1555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_ARGB2101010 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_2101010 shl 16)or (32 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_ARGB4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_ARGB8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_ARGB shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_BGR24 = (1 shl 28) or (SDL_PIXELTYPE_ARRAYU8 shl 24) or (SDL_ARRAYORDER_BGR shl 20) or (0 shl 16) or (24 shl 8) or (3 shl 0);
 
SDL_PIXELFORMAT_BGR555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XBGR shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (15 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_BGR565 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XBGR shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_BGR888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_XBGR shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_BGRA4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_BGRA shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_BGRA5551 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_BGRA shl 20) or (SDL_PACKEDLAYOUT_5551 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_BGRA8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_RGBX shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_BGRX8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_BGRX shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_EXTERMAL_OES = (cuint32('O') ) or (cuint32('E') shl 8) or (cuint32('S') shl 16) or (cuint32(' ') shl 24);

< Android video texture format *

SDL_PIXELFORMAT_INDEX1LSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX1 shl 24) or (SDL_BITMAPORDER_4321 shl 20) or (0 shl 16) or (1 shl 8) or (0 shl 0);
 
SDL_PIXELFORMAT_INDEX1MSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX1 shl 24) or (SDL_BITMAPORDER_1234 shl 20) or (0 shl 16) or (1 shl 8) or (0 shl 0);
 
SDL_PIXELFORMAT_INDEX4LSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX4 shl 24) or (SDL_BITMAPORDER_4321 shl 20) or (0 shl 16) or (4 shl 8) or (0 shl 0);
 
SDL_PIXELFORMAT_INDEX4MSB = (1 shl 28) or (SDL_PIXELTYPE_INDEX4 shl 24) or (SDL_BITMAPORDER_1234 shl 20) or (0 shl 16) or (4 shl 8) or (0 shl 0);
 
SDL_PIXELFORMAT_INDEX8 = (1 shl 28) or (SDL_PIXELTYPE_PACKED8 shl 24) or (0 shl 20) or (0 shl 16) or (8 shl 8) or (1 shl 0);
 
SDL_PIXELFORMAT_IYUV = (cuint32('I') ) or (cuint32('Y') shl 8) or (cuint32('U') shl 16) or (cuint32('V') shl 24);

< Planar mode: Y + U + V (3 planes) *

SDL_PIXELFORMAT_NV12 = (cuint32('N') ) or (cuint32('V') shl 8) or (cuint32('1') shl 16) or (cuint32('2') shl 24);

< Planar mode: Y + U/V interleaved (2 planes) *

SDL_PIXELFORMAT_NV21 = (cuint32('N') ) or (cuint32('V') shl 8) or (cuint32('2') shl 16) or (cuint32('1') shl 24);

< Planar mode: Y + V/U interleaved (2 planes) *

SDL_PIXELFORMAT_RGB24 = (1 shl 28) or (SDL_PIXELTYPE_ARRAYU8 shl 24) or (SDL_ARRAYORDER_RGB shl 20) or (0 shl 16) or (24 shl 8) or (3 shl 0);
 
SDL_PIXELFORMAT_RGB332 = (1 shl 28) or (SDL_PIXELTYPE_PACKED8 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_332 shl 16) or (8 shl 8) or (1 shl 0);
 
SDL_PIXELFORMAT_RGB444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (12 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_RGB555 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_1555 shl 16) or (15 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_RGB565 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_565 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_RGB888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_XRGB shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_RGBA4444 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_RGBA shl 20) or (SDL_PACKEDLAYOUT_4444 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_RGBA5551 = (1 shl 28) or (SDL_PIXELTYPE_PACKED16 shl 24) or (SDL_PACKEDORDER_RGBA shl 20) or (SDL_PACKEDLAYOUT_5551 shl 16) or (16 shl 8) or (2 shl 0);
 
SDL_PIXELFORMAT_RGBA8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_RGBA shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (32 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_RGBX8888 = (1 shl 28) or (SDL_PIXELTYPE_PACKED32 shl 24) or (SDL_PACKEDORDER_RGBX shl 20) or (SDL_PACKEDLAYOUT_8888 shl 16) or (24 shl 8) or (4 shl 0);
 
SDL_PIXELFORMAT_UNKNOWN = 0;

Note: If you modify this list, update SDL_GetPixelFormatName() *

SDL_PIXELFORMAT_UYVY = (cuint32('U') ) or (cuint32('Y') shl 8) or (cuint32('V') shl 16) or (cuint32('Y') shl 24);

< Packed mode: U0+Y0+V0+Y1 (1 plane) *

SDL_PIXELFORMAT_YUY2 = (cuint32('Y') ) or (cuint32('U') shl 8) or (cuint32('Y') shl 16) or (cuint32('2') shl 24);

< Packed mode: Y0+U0+Y1+V0 (1 plane) *

SDL_PIXELFORMAT_YV12 = (cuint32('Y') ) or (cuint32('V') shl 8) or (cuint32('1') shl 16) or (cuint32('2') shl 24);

< Planar mode: Y + V + U (3 planes) *

SDL_PIXELFORMAT_YVYU = (cuint32('Y') ) or (cuint32('V') shl 8) or (cuint32('Y') shl 16) or (cuint32('U') shl 24);

< Packed mode: Y0+V0+Y1+U0 (1 plane) *

SDL_PIXELTYPE_ARRAYF16 = TSDL_PixelType(10);
 
SDL_PIXELTYPE_ARRAYF32 = TSDL_PixelType(11);
 
SDL_PIXELTYPE_ARRAYU16 = TSDL_PixelType(8);
 
SDL_PIXELTYPE_ARRAYU32 = TSDL_PixelType(9);
 
SDL_PIXELTYPE_ARRAYU8 = TSDL_PixelType(7);
 
SDL_PIXELTYPE_INDEX1 = TSDL_PixelType(1);
 
SDL_PIXELTYPE_INDEX4 = TSDL_PixelType(2);
 
SDL_PIXELTYPE_INDEX8 = TSDL_PixelType(3);
 
SDL_PIXELTYPE_PACKED16 = TSDL_PixelType(5);
 
SDL_PIXELTYPE_PACKED32 = TSDL_PixelType(6);
 
SDL_PIXELTYPE_PACKED8 = TSDL_PixelType(4);
 
SDL_PIXELTYPE_UNKNOWN = TSDL_PixelType(0);
 
SDL_POLLSENTINEL = TSDL_EventType($7F00);

Internal events

SDL_PREALLOC = $00000001;

< Just here for compatibility *

SDL_PRESSED = 1;
 
SDL_QUERY = -1;
 
SDL_QUITEV = TSDL_EventType($100);

Application events

SDL_RELEASED = 0;

General keyboard/mouse state definitions

SDL_RENDERER_ACCELERATED = $00000002;

< The renderer is a software fallback *

SDL_RENDERER_PRESENTVSYNC = $00000004;

< The renderer uses hardware acceleration *

SDL_RENDERER_SOFTWARE = $00000001;

Flags used when creating a rendering context

SDL_RENDERER_TARGETTEXTURE = $00000008;

< Present is synchronized with the refresh rate *

SDL_RENDER_DEVICE_RESET = TSDL_EventType($2001);

The render targets have been reset

SDL_RENDER_TARGETS_RESET = TSDL_EventType($2000);

Render events

SDL_RLEACCEL = $00000002;

< Surface uses preallocated memory *

SDL_RWOPS_JNIFILE = 3;

Stdio file *

SDL_RWOPS_MEMORY = 4;

Android asset *

SDL_RWOPS_MEMORY_RO = 5;

Memory stream *

SDL_RWOPS_STDFILE = 2;

Win32 file *

SDL_RWOPS_UNKNOWN = 0;

RWops Types *

SDL_RWOPS_WINFILE = 1;

Unknown stream type *

SDL_ScaleModeBest = TSDL_ScaleMode(2);

< linear filtering *

SDL_ScaleModeLinear = TSDL_ScaleMode(1);

< nearest pixel sampling *

SDL_ScaleModeNearest = TSDL_ScaleMode(0);
 
SDL_SCANCODE_0 = TSDL_ScanCode(39);
 
SDL_SCANCODE_1 = TSDL_ScanCode(30);
 
SDL_SCANCODE_2 = TSDL_ScanCode(31);
 
SDL_SCANCODE_3 = TSDL_ScanCode(32);
 
SDL_SCANCODE_4 = TSDL_ScanCode(33);
 
SDL_SCANCODE_5 = TSDL_ScanCode(34);
 
SDL_SCANCODE_6 = TSDL_ScanCode(35);
 
SDL_SCANCODE_7 = TSDL_ScanCode(36);
 
SDL_SCANCODE_8 = TSDL_ScanCode(37);
 
SDL_SCANCODE_9 = TSDL_ScanCode(38);
 
SDL_SCANCODE_A = TSDL_ScanCode(4);

Usage page $07

These values are from usage page $07 (USB keyboard page).

SDL_SCANCODE_AC_BACK = TSDL_ScanCode(270);
 
SDL_SCANCODE_AC_BOOKMARKS = TSDL_ScanCode(274);
 
SDL_SCANCODE_AC_FORWARD = TSDL_ScanCode(271);
 
SDL_SCANCODE_AC_HOME = TSDL_ScanCode(269);
 
SDL_SCANCODE_AC_REFRESH = TSDL_ScanCode(273);
 
SDL_SCANCODE_AC_SEARCH = TSDL_ScanCode(268);
 
SDL_SCANCODE_AC_STOP = TSDL_ScanCode(272);
 
SDL_SCANCODE_AGAIN = TSDL_ScanCode(121);

AC Stop

SDL_SCANCODE_ALTERASE = TSDL_ScanCode(153);

< reserved *

SDL_SCANCODE_APOSTROPHE = TSDL_ScanCode(52);
 
SDL_SCANCODE_APP1 = TSDL_ScanCode(283);

SC System Sleep

SDL_SCANCODE_APP2 = TSDL_ScanCode(284);
 
SDL_SCANCODE_APPLICATION = TSDL_ScanCode(101);

< This is the additional key that ISO keyboards have over ANSI ones; located between left shift and Y. Produces GRAVE ACCENT and TILDE in a US or UK Mac layout; REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US or UK Windows layout; and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German; German; or French layout. *

SDL_SCANCODE_AUDIOFASTFORWARD = TSDL_ScanCode(286);
 
SDL_SCANCODE_AUDIOMUTE = TSDL_ScanCode(262);
 
SDL_SCANCODE_AUDIONEXT = TSDL_ScanCode(258);

\name Usage page 0x0C

These values are mapped from usage page 0x0C (USB consumer page). See https://usb.org/sites/default/files/hut1_2.pdf

There are way more keys in the spec than we can represent in the current scancode range, so pick the ones that commonly come up in real world usage. / These values are mapped from usage page $0C (USB consumer page).

SDL_SCANCODE_AUDIOPLAY = TSDL_ScanCode(261);
 
SDL_SCANCODE_AUDIOPREV = TSDL_ScanCode(259);
 
SDL_SCANCODE_AUDIOREWIND = TSDL_ScanCode(285);

\name Usage page 0x0C (additional media keys)

These values are mapped from usage page 0x0C (USB consumer page).

SDL_SCANCODE_AUDIOSTOP = TSDL_ScanCode(260);
 
SDL_SCANCODE_B = TSDL_ScanCode(5);
 
SDL_SCANCODE_BACKSLASH = TSDL_ScanCode(49);
 
SDL_SCANCODE_BACKSPACE = TSDL_ScanCode(42);
 
SDL_SCANCODE_BRIGHTNESSDOWN = TSDL_ScanCode(275);

Walther keys

These are values that Christian Walther added (for mac keyboard?).

SDL_SCANCODE_BRIGHTNESSUP = TSDL_ScanCode(276);
 
SDL_SCANCODE_C = TSDL_ScanCode(6);
 
SDL_SCANCODE_CALCULATOR = TSDL_ScanCode(266);
 
SDL_SCANCODE_CALL = TSDL_ScanCode(289);

< Usually situated below the display on phones and used as a multi-function feature key for selecting a software defined function shown on the bottom right of the display. *

SDL_SCANCODE_CANCEL = TSDL_ScanCode(155);
 
SDL_SCANCODE_CAPSLOCK = TSDL_ScanCode(57);
 
SDL_SCANCODE_CLEAR = TSDL_ScanCode(156);

AC Cancel

SDL_SCANCODE_CLEARAGAIN = TSDL_ScanCode(162);
 
SDL_SCANCODE_COMMA = TSDL_ScanCode(54);

< Located in the top left corner (on both ANSI and ISO keyboards). Produces GRAVE ACCENT and TILDE in a US Windows layout and in US and UK Mac layouts on ANSI keyboards; GRAVE ACCENT and NOT SIGN in a UK Windows layout; SECTION SIGN and PLUS-MINUS SIGN in US and UK Mac layouts on ISO keyboards; SECTION SIGN and DEGREE SIGN in a Swiss German layout (Mac: only on ISO keyboards); CIRCUMFLEX ACCENT and DEGREE SIGN in a German layout (Mac: only on ISO keyboards); SUPERSCRIPT TWO and TILDE in a French Windows layout; COMMERCIAL AT and NUMBER SIGN in a French Mac layout on ISO keyboards; and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German; German; or French Mac layout on ANSI keyboards.

SDL_SCANCODE_COMPUTER = TSDL_ScanCode(267);
 
SDL_SCANCODE_COPY = TSDL_ScanCode(124);

AC Cut

SDL_SCANCODE_CRSEL = TSDL_ScanCode(163);
 
SDL_SCANCODE_CURRENCYSUBUNIT = TSDL_ScanCode(181);
 
SDL_SCANCODE_CURRENCYUNIT = TSDL_ScanCode(180);
 
SDL_SCANCODE_CUT = TSDL_ScanCode(123);

AC Undo

SDL_SCANCODE_D = TSDL_ScanCode(7);
 
SDL_SCANCODE_DECIMALSEPARATOR = TSDL_ScanCode(179);
 
SDL_SCANCODE_DELETE = TSDL_ScanCode(76);
 
SDL_SCANCODE_DISPLAYSWITCH = TSDL_ScanCode(277);
 
SDL_SCANCODE_DOWN = TSDL_ScanCode(81);
 
SDL_SCANCODE_E = TSDL_ScanCode(8);
 
SDL_SCANCODE_EJECT = TSDL_ScanCode(281);
 
SDL_SCANCODE_END = TSDL_ScanCode(77);
 
SDL_SCANCODE_ENDCALL = TSDL_ScanCode(290);

< Used for accepting phone calls. *

SDL_SCANCODE_EQUALS = TSDL_ScanCode(46);
 
SDL_SCANCODE_ESCAPE = TSDL_ScanCode(41);
 
SDL_SCANCODE_EXECUTE = TSDL_ScanCode(116);
 
SDL_SCANCODE_EXSEL = TSDL_ScanCode(164);
 
SDL_SCANCODE_F = TSDL_ScanCode(9);
 
SDL_SCANCODE_F1 = TSDL_ScanCode(58);
 
SDL_SCANCODE_F10 = TSDL_ScanCode(67);
 
SDL_SCANCODE_F11 = TSDL_ScanCode(68);
 
SDL_SCANCODE_F12 = TSDL_ScanCode(69);
 
SDL_SCANCODE_F13 = TSDL_ScanCode(104);
 
SDL_SCANCODE_F14 = TSDL_ScanCode(105);
 
SDL_SCANCODE_F15 = TSDL_ScanCode(106);
 
SDL_SCANCODE_F16 = TSDL_ScanCode(107);
 
SDL_SCANCODE_F17 = TSDL_ScanCode(108);
 
SDL_SCANCODE_F18 = TSDL_ScanCode(109);
 
SDL_SCANCODE_F19 = TSDL_ScanCode(110);
 
SDL_SCANCODE_F2 = TSDL_ScanCode(59);
 
SDL_SCANCODE_F20 = TSDL_ScanCode(111);
 
SDL_SCANCODE_F21 = TSDL_ScanCode(112);
 
SDL_SCANCODE_F22 = TSDL_ScanCode(113);
 
SDL_SCANCODE_F23 = TSDL_ScanCode(114);
 
SDL_SCANCODE_F24 = TSDL_ScanCode(115);
 
SDL_SCANCODE_F3 = TSDL_ScanCode(60);
 
SDL_SCANCODE_F4 = TSDL_ScanCode(61);
 
SDL_SCANCODE_F5 = TSDL_ScanCode(62);
 
SDL_SCANCODE_F6 = TSDL_ScanCode(63);
 
SDL_SCANCODE_F7 = TSDL_ScanCode(64);
 
SDL_SCANCODE_F8 = TSDL_ScanCode(65);
 
SDL_SCANCODE_F9 = TSDL_ScanCode(66);
 
SDL_SCANCODE_FIND = TSDL_ScanCode(126);

AC Paste

SDL_SCANCODE_G = TSDL_ScanCode(10);
 
SDL_SCANCODE_GRAVE = TSDL_ScanCode(53);
 
SDL_SCANCODE_H = TSDL_ScanCode(11);
 
SDL_SCANCODE_HELP = TSDL_ScanCode(117);
 
SDL_SCANCODE_HOME = TSDL_ScanCode(74);

< insert on PC; help on some Mac keyboards (but does send code 73; not 117) *

SDL_SCANCODE_I = TSDL_ScanCode(12);
 
SDL_SCANCODE_INSERT = TSDL_ScanCode(73);
 
SDL_SCANCODE_INTERNATIONAL1 = TSDL_ScanCode(135);
 
SDL_SCANCODE_INTERNATIONAL2 = TSDL_ScanCode(136);

< used on Asian keyboards; see footnotes in USB doc *

SDL_SCANCODE_INTERNATIONAL3 = TSDL_ScanCode(137);
 
SDL_SCANCODE_INTERNATIONAL4 = TSDL_ScanCode(138);

< Yen *

SDL_SCANCODE_INTERNATIONAL5 = TSDL_ScanCode(139);
 
SDL_SCANCODE_INTERNATIONAL6 = TSDL_ScanCode(140);
 
SDL_SCANCODE_INTERNATIONAL7 = TSDL_ScanCode(141);
 
SDL_SCANCODE_INTERNATIONAL8 = TSDL_ScanCode(142);
 
SDL_SCANCODE_INTERNATIONAL9 = TSDL_ScanCode(143);
 
SDL_SCANCODE_J = TSDL_ScanCode(13);
 
SDL_SCANCODE_K = TSDL_ScanCode(14);
 
SDL_SCANCODE_KBDILLUMDOWN = TSDL_ScanCode(279);
 
SDL_SCANCODE_KBDILLUMTOGGLE = TSDL_ScanCode(278);

< display mirroring/dual display switch; video mode switch *

SDL_SCANCODE_KBDILLUMUP = TSDL_ScanCode(280);
 
SDL_SCANCODE_KP_0 = TSDL_ScanCode(98);
 
SDL_SCANCODE_KP_00 = TSDL_ScanCode(176);
 
SDL_SCANCODE_KP_000 = TSDL_ScanCode(177);
 
SDL_SCANCODE_KP_1 = TSDL_ScanCode(89);
 
SDL_SCANCODE_KP_2 = TSDL_ScanCode(90);
 
SDL_SCANCODE_KP_3 = TSDL_ScanCode(91);
 
SDL_SCANCODE_KP_4 = TSDL_ScanCode(92);
 
SDL_SCANCODE_KP_5 = TSDL_ScanCode(93);
 
SDL_SCANCODE_KP_6 = TSDL_ScanCode(94);
 
SDL_SCANCODE_KP_7 = TSDL_ScanCode(95);
 
SDL_SCANCODE_KP_8 = TSDL_ScanCode(96);
 
SDL_SCANCODE_KP_9 = TSDL_ScanCode(97);
 
SDL_SCANCODE_KP_A = TSDL_ScanCode(188);
 
SDL_SCANCODE_KP_AMPERSAND = TSDL_ScanCode(199);
 
SDL_SCANCODE_KP_AT = TSDL_ScanCode(206);
 
SDL_SCANCODE_KP_B = TSDL_ScanCode(189);
 
SDL_SCANCODE_KP_BACKSPACE = TSDL_ScanCode(187);
 
SDL_SCANCODE_KP_BINARY = TSDL_ScanCode(218);
 
SDL_SCANCODE_KP_C = TSDL_ScanCode(190);
 
SDL_SCANCODE_KP_CLEAR = TSDL_ScanCode(216);
 
SDL_SCANCODE_KP_CLEARENTRY = TSDL_ScanCode(217);
 
SDL_SCANCODE_KP_COLON = TSDL_ScanCode(203);
 
SDL_SCANCODE_KP_COMMA = TSDL_ScanCode(133);

SDL_SCANCODE_LOCKINGSCROLLLOCK = 132; *

SDL_SCANCODE_KP_D = TSDL_ScanCode(191);
 
SDL_SCANCODE_KP_DBLAMPERSAND = TSDL_ScanCode(200);
 
SDL_SCANCODE_KP_DBLVERTICALBAR = TSDL_ScanCode(202);
 
SDL_SCANCODE_KP_DECIMAL = TSDL_ScanCode(220);
 
SDL_SCANCODE_KP_DIVIDE = TSDL_ScanCode(84);

< num lock on PC; clear on Mac keyboards

SDL_SCANCODE_KP_E = TSDL_ScanCode(192);
 
SDL_SCANCODE_KP_ENTER = TSDL_ScanCode(88);
 
SDL_SCANCODE_KP_EQUALS = TSDL_ScanCode(103);

< The USB document says this is a status flag; not a physical key - but some Mac keyboards do have a power key. *

SDL_SCANCODE_KP_EQUALSAS400 = TSDL_ScanCode(134);
 
SDL_SCANCODE_KP_EXCLAM = TSDL_ScanCode(207);
 
SDL_SCANCODE_KP_F = TSDL_ScanCode(193);
 
SDL_SCANCODE_KP_GREATER = TSDL_ScanCode(198);
 
SDL_SCANCODE_KP_HASH = TSDL_ScanCode(204);
 
SDL_SCANCODE_KP_HEXADECIMAL = TSDL_ScanCode(221);
 
SDL_SCANCODE_KP_LEFTBRACE = TSDL_ScanCode(184);
 
SDL_SCANCODE_KP_LEFTPAREN = TSDL_ScanCode(182);
 
SDL_SCANCODE_KP_LESS = TSDL_ScanCode(197);
 
SDL_SCANCODE_KP_MEMADD = TSDL_ScanCode(211);
 
SDL_SCANCODE_KP_MEMCLEAR = TSDL_ScanCode(210);
 
SDL_SCANCODE_KP_MEMDIVIDE = TSDL_ScanCode(214);
 
SDL_SCANCODE_KP_MEMMULTIPLY = TSDL_ScanCode(213);
 
SDL_SCANCODE_KP_MEMRECALL = TSDL_ScanCode(209);
 
SDL_SCANCODE_KP_MEMSTORE = TSDL_ScanCode(208);
 
SDL_SCANCODE_KP_MEMSUBTRACT = TSDL_ScanCode(212);
 
SDL_SCANCODE_KP_MINUS = TSDL_ScanCode(86);
 
SDL_SCANCODE_KP_MULTIPLY = TSDL_ScanCode(85);
 
SDL_SCANCODE_KP_OCTAL = TSDL_ScanCode(219);
 
SDL_SCANCODE_KP_PERCENT = TSDL_ScanCode(196);
 
SDL_SCANCODE_KP_PERIOD = TSDL_ScanCode(99);
 
SDL_SCANCODE_KP_PLUS = TSDL_ScanCode(87);
 
SDL_SCANCODE_KP_PLUSMINUS = TSDL_ScanCode(215);
 
SDL_SCANCODE_KP_POWER = TSDL_ScanCode(195);
 
SDL_SCANCODE_KP_RIGHTBRACE = TSDL_ScanCode(185);
 
SDL_SCANCODE_KP_RIGHTPAREN = TSDL_ScanCode(183);
 
SDL_SCANCODE_KP_SPACE = TSDL_ScanCode(205);
 
SDL_SCANCODE_KP_TAB = TSDL_ScanCode(186);
 
SDL_SCANCODE_KP_VERTICALBAR = TSDL_ScanCode(201);
 
SDL_SCANCODE_KP_XOR = TSDL_ScanCode(194);
 
SDL_SCANCODE_L = TSDL_ScanCode(15);
 
SDL_SCANCODE_LALT = TSDL_ScanCode(226);
 
SDL_SCANCODE_LANG1 = TSDL_ScanCode(144);
 
SDL_SCANCODE_LANG2 = TSDL_ScanCode(145);

< Hangul/English toggle *

SDL_SCANCODE_LANG3 = TSDL_ScanCode(146);

< Hanja conversion *

SDL_SCANCODE_LANG4 = TSDL_ScanCode(147);

< Katakana *

SDL_SCANCODE_LANG5 = TSDL_ScanCode(148);

< Hiragana *

SDL_SCANCODE_LANG6 = TSDL_ScanCode(149);

< Zenkaku/Hankaku *

SDL_SCANCODE_LANG7 = TSDL_ScanCode(150);

< reserved *

SDL_SCANCODE_LANG8 = TSDL_ScanCode(151);

< reserved *

SDL_SCANCODE_LANG9 = TSDL_ScanCode(152);

< reserved *

SDL_SCANCODE_LCTRL = TSDL_ScanCode(224);
 
SDL_SCANCODE_LEFT = TSDL_ScanCode(80);
 
SDL_SCANCODE_LEFTBRACKET = TSDL_ScanCode(47);
 
SDL_SCANCODE_LGUI = TSDL_ScanCode(227);

< alt; option *

SDL_SCANCODE_LSHIFT = TSDL_ScanCode(225);
 
SDL_SCANCODE_M = TSDL_ScanCode(16);
 
SDL_SCANCODE_MAIL = TSDL_ScanCode(265);
 
SDL_SCANCODE_MEDIASELECT = TSDL_ScanCode(263);
 
SDL_SCANCODE_MENU = TSDL_ScanCode(118);

AL Integrated Help Center

SDL_SCANCODE_MINUS = TSDL_ScanCode(45);
 
SDL_SCANCODE_MODE = TSDL_ScanCode(257);

< windows; command (apple); meta *

SDL_SCANCODE_MUTE = TSDL_ScanCode(127);

AC Find

SDL_SCANCODE_N = TSDL_ScanCode(17);
 
SDL_SCANCODE_NONUSBACKSLASH = TSDL_ScanCode(100);
 
SDL_SCANCODE_NONUSHASH = TSDL_ScanCode(50);

< Located at the lower left of the return key on ISO keyboards and at the right end of the QWERTY row on ANSI keyboards. Produces REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US layout; REVERSE SOLIDUS and VERTICAL LINE in a UK Mac layout; NUMBER SIGN and TILDE in a UK Windows layout; DOLLAR SIGN and POUND SIGN in a Swiss German layout; NUMBER SIGN and APOSTROPHE in a German layout; GRAVE ACCENT and POUND SIGN in a French Mac layout; and ASTERISK and MICRO SIGN in a French Windows layout.

SDL_SCANCODE_NUMLOCKCLEAR = TSDL_ScanCode(83);
 
SDL_SCANCODE_O = TSDL_ScanCode(18);
 
SDL_SCANCODE_OPER = TSDL_ScanCode(161);
 
SDL_SCANCODE_OUT = TSDL_ScanCode(160);
 
SDL_SCANCODE_P = TSDL_ScanCode(19);
 
SDL_SCANCODE_PAGEDOWN = TSDL_ScanCode(78);
 
SDL_SCANCODE_PAGEUP = TSDL_ScanCode(75);
 
SDL_SCANCODE_PASTE = TSDL_ScanCode(125);

AC Copy

SDL_SCANCODE_PAUSE = TSDL_ScanCode(72);
 
SDL_SCANCODE_PERIOD = TSDL_ScanCode(55);
 
SDL_SCANCODE_POWER = TSDL_ScanCode(102);

< windows contextual menu; compose *

SDL_SCANCODE_PRINTSCREEN = TSDL_ScanCode(70);
 
SDL_SCANCODE_PRIOR = TSDL_ScanCode(157);
 
SDL_SCANCODE_Q = TSDL_ScanCode(20);
 
SDL_SCANCODE_R = TSDL_ScanCode(21);
 
SDL_SCANCODE_RALT = TSDL_ScanCode(230);
 
SDL_SCANCODE_RCTRL = TSDL_ScanCode(228);

< windows; command (apple); meta *

SDL_SCANCODE_RETURN = TSDL_ScanCode(40);
 
SDL_SCANCODE_RETURN2 = TSDL_ScanCode(158);
 
SDL_SCANCODE_RGUI = TSDL_ScanCode(231);

< alt gr; option *

SDL_SCANCODE_RIGHT = TSDL_ScanCode(79);
 
SDL_SCANCODE_RIGHTBRACKET = TSDL_ScanCode(48);
 
SDL_SCANCODE_RSHIFT = TSDL_ScanCode(229);
 
SDL_SCANCODE_S = TSDL_ScanCode(22);
 
SDL_SCANCODE_SCROLLLOCK = TSDL_ScanCode(71);
 
SDL_SCANCODE_SELECT = TSDL_ScanCode(119);

Menu (show menu)

SDL_SCANCODE_SEMICOLON = TSDL_ScanCode(51);

< ISO USB keyboards actually use this code instead of 49 for the same key; but all OSes I've seen treat the two codes identically. So; as an implementor; unless your keyboard generates both of those codes and your OS treats them differently; you should generate SDL_SCANCODE_BACKSLASH instead of this code. As a user; you should not rely on this code because SDL will never generate it with most (all?) keyboards.

SDL_SCANCODE_SEPARATOR = TSDL_ScanCode(159);
 
SDL_SCANCODE_SLASH = TSDL_ScanCode(56);
 
SDL_SCANCODE_SLEEP = TSDL_ScanCode(282);
 
SDL_SCANCODE_SOFTLEFT = TSDL_ScanCode(287);

\name Mobile keys

These are values that are often used on mobile phones.

SDL_SCANCODE_SOFTRIGHT = TSDL_ScanCode(288);

< Usually situated below the display on phones and used as a multi-function feature key for selecting a software defined function shown on the bottom left of the display. *

SDL_SCANCODE_SPACE = TSDL_ScanCode(44);
 
SDL_SCANCODE_STOP = TSDL_ScanCode(120);
 
SDL_SCANCODE_SYSREQ = TSDL_ScanCode(154);

< Erase-Eaze *

SDL_SCANCODE_T = TSDL_ScanCode(23);
 
SDL_SCANCODE_TAB = TSDL_ScanCode(43);
 
SDL_SCANCODE_THOUSANDSSEPARATOR = TSDL_ScanCode(178);
 
SDL_SCANCODE_U = TSDL_ScanCode(24);
 
SDL_SCANCODE_UNDO = TSDL_ScanCode(122);

AC Redo/Repeat

SDL_SCANCODE_UNKNOWN = TSDL_ScanCode(0);
 
SDL_SCANCODE_UP = TSDL_ScanCode(82);
 
SDL_SCANCODE_V = TSDL_ScanCode(25);
 
SDL_SCANCODE_VOLUMEDOWN = TSDL_ScanCode(129);
 
SDL_SCANCODE_VOLUMEUP = TSDL_ScanCode(128);
 
SDL_SCANCODE_W = TSDL_ScanCode(26);
 
SDL_SCANCODE_WWW = TSDL_ScanCode(264);
 
SDL_SCANCODE_X = TSDL_ScanCode(27);
 
SDL_SCANCODE_Y = TSDL_ScanCode(28);
 
SDL_SCANCODE_Z = TSDL_ScanCode(29);
 
SDL_SENSORUPDATED = TSDL_EventType($1200);

Sensor events

SDL_SENSOR_ACCEL = TSDL_SensorType(1);

< Unknown sensor type *

SDL_SENSOR_ACCEL_L = TSDL_SensorType(3);

< Gyroscope *

SDL_SENSOR_ACCEL_R = TSDL_SensorType(5);

< Gyroscope for left Joy-Con controller *

SDL_SENSOR_GYRO = TSDL_SensorType(2);

< Accelerometer *

SDL_SENSOR_GYRO_L = TSDL_SensorType(4);

< Accelerometer for left Joy-Con controller and Wii nunchuk *

SDL_SENSOR_GYRO_R = TSDL_SensorType(6);

< Accelerometer for right Joy-Con controller *

SDL_SENSOR_INVALID = TSDL_SensorType(-1);
 
SDL_SENSOR_UNKNOWN = TSDL_SensorType(0);

< Returned for an invalid sensor *

SDL_SIMD_ALIGNED = $00000008;

< Surface is referenced internally *

SDL_STANDARD_GRAVITY = 9.80665;

Accelerometer sensor

The accelerometer returns the current acceleration in SI meters per second squared. This measurement includes the force of gravity, so a device at rest will have an value of SDL_STANDARD_GRAVITY away from the center of the earth.

values[0]: Acceleration on the x axis values[1]: Acceleration on the y axis values[2]: Acceleration on the z axis

For phones held in portrait mode and game controllers held in front of you, the axes are defined as follows: -X ... +X : left ... right -Y ... +Y : bottom ... top -Z ... +Z : farther ... closer

The axis data is not changed when the phone is rotated.

\sa SDL_GetDisplayOrientation()

SDL_SWSURFACE = 0;

Surface flags

These are the currently supported flags for the ::SDL_surface.

Used internally (read-only).

SDL_SYSTEM_CURSOR_ARROW = TSDL_SystemCursor(0);
 
SDL_SYSTEM_CURSOR_CROSSHAIR = TSDL_SystemCursor(3);

Wait

SDL_SYSTEM_CURSOR_HAND = TSDL_SystemCursor(11);

Slashed circle or crossbones

SDL_SYSTEM_CURSOR_IBEAM = TSDL_SystemCursor(1);

Arrow

SDL_SYSTEM_CURSOR_NO = TSDL_SystemCursor(10);

Four pointed arrow pointing north, south, east, and west

SDL_SYSTEM_CURSOR_SIZEALL = TSDL_SystemCursor(9);

Double arrow pointing north and south

SDL_SYSTEM_CURSOR_SIZENESW = TSDL_SystemCursor(6);

Double arrow pointing northwest and southeast

SDL_SYSTEM_CURSOR_SIZENS = TSDL_SystemCursor(8);

Double arrow pointing west and east

SDL_SYSTEM_CURSOR_SIZENWSE = TSDL_SystemCursor(5);

Small wait cursor (or Wait if not available)

SDL_SYSTEM_CURSOR_SIZEWE = TSDL_SystemCursor(7);

Double arrow pointing northeast and southwest

SDL_SYSTEM_CURSOR_WAIT = TSDL_SystemCursor(2);

I-beam

SDL_SYSTEM_CURSOR_WAITARROW = TSDL_SystemCursor(4);

Crosshair

SDL_SYSWMEVENT = TSDL_EventType($201);

Window state change

SDL_SYSWM_ANDROID = TSDL_SYSWM_TYPE(9);
 
SDL_SYSWM_COCOA = TSDL_SYSWM_TYPE(4);
 
SDL_SYSWM_DIRECTFB = TSDL_SYSWM_TYPE(3);
 
SDL_SYSWM_HAIKU = TSDL_SYSWM_TYPE(12);
 
SDL_SYSWM_KMSDRM = TSDL_SYSWM_TYPE(13);
 
SDL_SYSWM_MIR = TSDL_SYSWM_TYPE(7);
 
SDL_SYSWM_OS2 = TSDL_SYSWM_TYPE(11);
 
SDL_SYSWM_RISCOS = TSDL_SYSWM_TYPE(14);
 
SDL_SYSWM_UIKIT = TSDL_SYSWM_TYPE(5);
 
SDL_SYSWM_UNKNOWN = TSDL_SYSWM_TYPE(0);
 
SDL_SYSWM_VIVANTE = TSDL_SYSWM_TYPE(10);
 
SDL_SYSWM_WAYLAND = TSDL_SYSWM_TYPE(6);
 
SDL_SYSWM_WINDOWS = TSDL_SYSWM_TYPE(1);
 
SDL_SYSWM_WINRT = TSDL_SYSWM_TYPE(8);

* no longer available, left for API/ABI compatibility. Remove in 2.1! *

SDL_SYSWM_X11 = TSDL_SYSWM_TYPE(2);
 
SDL_TEXTEDITING = TSDL_EventType($302);

Key released

SDL_TEXTEDITINGEVENT_TEXT_SIZE = 32;
 
SDL_TEXTEDITING_EXT = TSDL_EventType($305);

Keymap changed due to a system event such as an input language or keyboard layout change.

SDL_TEXTINPUT = TSDL_EventType($303);

Keyboard text editing (composition)

SDL_TEXTINPUTEVENT_TEXT_SIZE = 32;
 
SDL_TEXTUREACCESS_STATIC = 0;
 
SDL_TEXTUREACCESS_STREAMING = 1;

< Changes rarely, not lockable *

SDL_TEXTUREACCESS_TARGET = 2;

< Changes frequently, lockable *

SDL_TEXTUREMODULATE_ALPHA = TSDL_TextureModulate(2);

< srcC = srcC * color *

SDL_TEXTUREMODULATE_COLOR = TSDL_TextureModulate(1);

< No modulation *

SDL_TEXTUREMODULATE_NONE = TSDL_TextureModulate(0);
 
SDL_THREAD_PRIORITY_HIGH = TSDL_ThreadPriority(2);
 
SDL_THREAD_PRIORITY_LOW = TSDL_ThreadPriority(0);
 
SDL_THREAD_PRIORITY_NORMAL = TSDL_ThreadPriority(1);
 
SDL_THREAD_PRIORITY_TIME_CRITICAL = TSDL_ThreadPriority(3);
 
SDL_TOUCH_DEVICE_DIRECT = TSDL_TouchDeviceType(0);
 
SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE = TSDL_TouchDeviceType(1);

touch screen with window-relative coordinates *

SDL_TOUCH_DEVICE_INDIRECT_RELATIVE = TSDL_TouchDeviceType(2);

trackpad with absolute device coordinates *

SDL_TOUCH_DEVICE_INVALID = TSDL_TouchDeviceType(-1);
 
SDL_TOUCH_MOUSEID = cuint32(-1);

Used as the device ID for mouse events simulated with touch input *

SDL_TRUE = TSDL_Bool(1);
 
SDL_USEREVENT = TSDL_EventType($8000);

Events SDL_USEREVENT through SDL_LASTEVENT are for your use, and should be allocated with SDL_RegisterEvents()

SDL_VIRTUAL_JOYSTICK_DESC_VERSION = 1;

\brief The current version of the SDL_VirtualJoystickDesc structure

SDL_WINDOWEVENT = TSDL_EventType($200);

Window events

SDL_WINDOWEVENT_CLOSE = TSDL_WindowEventID(14);

< Window has lost keyboard focus *

SDL_WINDOWEVENT_DISPLAY_CHANGED = TSDL_WindowEventID(18);

< The ICC profile of the window's display has changed. *

SDL_WINDOWEVENT_ENTER = TSDL_WindowEventID(10);

< Window has been restored to normal size and position *

SDL_WINDOWEVENT_EXPOSED = TSDL_WindowEventID(3);

< Window has been hidden *

SDL_WINDOWEVENT_FOCUS_GAINED = TSDL_WindowEventID(12);

< Window has lost mouse focus *

SDL_WINDOWEVENT_FOCUS_LOST = TSDL_WindowEventID(13);

< Window has gained keyboard focus *

SDL_WINDOWEVENT_HIDDEN = TSDL_WindowEventID(2);

< Window has been shown *

SDL_WINDOWEVENT_HIT_TEST = TSDL_WindowEventID(16);

< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) *

SDL_WINDOWEVENT_ICCPROF_CHANGED = TSDL_WindowEventID(17);

< Window had a hit test that wasn't SDL_HITTEST_NORMAL. *

SDL_WINDOWEVENT_LEAVE = TSDL_WindowEventID(11);

< Window has gained mouse focus *

SDL_WINDOWEVENT_MAXIMIZED = TSDL_WindowEventID(8);

< Window has been minimized *

SDL_WINDOWEVENT_MINIMIZED = TSDL_WindowEventID(7);

< The window size has changed; either as a result of an API call or through the system or user changing the window size. *

SDL_WINDOWEVENT_MOVED = TSDL_WindowEventID(4);

< Window has been exposed and should be redrawn *

SDL_WINDOWEVENT_NONE = TSDL_WindowEventID(0);
 
SDL_WINDOWEVENT_RESIZED = TSDL_WindowEventID(5);

< Window has been moved to data1; data2 *

SDL_WINDOWEVENT_RESTORED = TSDL_WindowEventID(9);

< Window has been maximized *

SDL_WINDOWEVENT_SHOWN = TSDL_WindowEventID(1);

< Never used *

SDL_WINDOWEVENT_SIZE_CHANGED = TSDL_WindowEventID(6);

< Window has been resized to data1xdata2 *

SDL_WINDOWEVENT_TAKE_FOCUS = TSDL_WindowEventID(15);

< The window manager requests that the window be closed *

SDL_WINDOWPOS_CENTERED = SDL_WINDOWPOS_CENTERED_MASK or 0;
 
SDL_WINDOWPOS_CENTERED_MASK = $2FFF0000;

Used to indicate that the window position should be centered.

SDL_WINDOWPOS_UNDEFINED = SDL_WINDOWPOS_UNDEFINED_MASK or 0;
 
SDL_WINDOWPOS_UNDEFINED_MASK = $1FFF0000;

Used to indicate that you don't care what the window position is.

SDL_WINDOW_ALLOW_HIGHDPI = TSDL_WindowFlags($00002000);

< window not created by SDL *

SDL_WINDOW_ALWAYS_ON_TOP = TSDL_WindowFlags($00008000);

< window has mouse captured (unrelated to MOUSE_GRABBED) *

SDL_WINDOW_BORDERLESS = TSDL_WindowFlags($00000010);

< window is not visible *

SDL_WINDOW_FOREIGN = TSDL_WindowFlags($00000800);
 
SDL_WINDOW_FULLSCREEN = TSDL_WindowFlags($00000001);
 
SDL_WINDOW_FULLSCREEN_DESKTOP = TSDL_WindowFlags(SDL_WINDOW_FULLSCREEN or $00001000);

< window has mouse focus *

SDL_WINDOW_HIDDEN = TSDL_WindowFlags($00000008);

< window is visible *

SDL_WINDOW_INPUT_FOCUS = TSDL_WindowFlags($00000200);

< window has grabbed mouse input *

SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED;

< window usable for Metal view *

SDL_WINDOW_KEYBOARD_GRABBED = TSDL_WindowFlags($00100000);

< window should be treated as a popup menu *

SDL_WINDOW_LACKS_SHAPE = -3;
 
SDL_WINDOW_MAXIMIZED = TSDL_WindowFlags($00000080);

< window is minimized *

SDL_WINDOW_METAL = TSDL_WindowFlags($20000000);

< window usable for Vulkan surface *

SDL_WINDOW_MINIMIZED = TSDL_WindowFlags($00000040);

< window can be resized *

SDL_WINDOW_MOUSE_CAPTURE = TSDL_WindowFlags($00004000);

< window should be created in high-DPI mode if supported. On macOS NSHighResolutionCapable must be set true in the application's Info.plist for this to have any effect. *

SDL_WINDOW_MOUSE_FOCUS = TSDL_WindowFlags($00000400);

< window has input focus *

SDL_WINDOW_MOUSE_GRABBED = TSDL_WindowFlags($00000100);

< window is maximized *

SDL_WINDOW_OPENGL = TSDL_WindowFlags($00000002);

< fullscreen window *

SDL_WINDOW_POPUP_MENU = TSDL_WindowFlags($00080000);

< window should be treated as a tooltip *

SDL_WINDOW_RESIZABLE = TSDL_WindowFlags($00000020);

< no window decoration *

SDL_WINDOW_SHOWN = TSDL_WindowFlags($00000004);

< window usable with OpenGL context *

SDL_WINDOW_SKIP_TASKBAR = TSDL_WindowFlags($00010000);

< window should always be above others *

SDL_WINDOW_TOOLTIP = TSDL_WindowFlags($00040000);

< window should be treated as a utility window *

SDL_WINDOW_UTILITY = TSDL_WindowFlags($00020000);

< window should not be added to the taskbar *

SDL_WINDOW_VULKAN = TSDL_WindowFlags($10000000);

< window has grabbed keyboard input *

SDL_YUV_CONVERSION_AUTOMATIC = TSDL_YUV_CONVERSION_MODE(3);

< BT.709 *

SDL_YUV_CONVERSION_BT601 = TSDL_YUV_CONVERSION_MODE(1);

< Full range JPEG *

SDL_YUV_CONVERSION_BT709 = TSDL_YUV_CONVERSION_MODE(2);

< BT.601 (the default) *

SDL_YUV_CONVERSION_JPEG = TSDL_YUV_CONVERSION_MODE(0);
 
ShapeModeBinarizeAlpha = TWindowShapeMode(1);

\brief A binarized alpha cutoff with a given integer value. *

ShapeModeColorKey = TWindowShapeMode(3);

\brief A color key is applied. *

ShapeModeDefault = TWindowShapeMode(0);

\brief The default mode, a binarized alpha cutoff of 1. *

ShapeModeReverseBinarizeAlpha = TWindowShapeMode(2);

\brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. *


Generated by PasDoc 0.16.0.