File Coverage

lib/SDL2/Enum.pm
Criterion Covered Total %
statement 12 686 1.7
branch 0 14 0.0
condition 0 39 0.0
subroutine 4 217 1.8
pod 0 2 0.0
total 16 958 1.6


line stmt bran cond sub pod time code
1             package SDL2::Enum {
2 2     2   15 use lib '../../lib';
  2         4  
  2         20  
3 2     2   308 use strictures 2;
  2         18  
  2         100  
4 2     2   500 use experimental 'signatures';
  2         4  
  2         18  
5 2     2   280 use SDL2::Utils;
  2         3  
  2         15  
6              
7             # https://github.com/libsdl-org/SDL/blob/main/include/SDL.h
8             define init => [
9             [ SDL_INIT_TIMER => 0x00000001 ],
10             [ SDL_INIT_AUDIO => 0x00000010 ],
11             [ SDL_INIT_VIDEO => 0x00000020 ],
12             [ SDL_INIT_JOYSTICK => 0x00000200 ],
13             [ SDL_INIT_HAPTIC => 0x00001000 ],
14             [ SDL_INIT_GAMECONTROLLER => 0x00002000 ],
15             [ SDL_INIT_EVENTS => 0x00004000 ],
16             [ SDL_INIT_SENSOR => 0x00008000 ],
17             [ SDL_INIT_NOPARACHUTE => 0x00100000 ],
18             [ SDL_INIT_EVERYTHING => sub {
19 0     0     SDL2::FFI::SDL_INIT_TIMER() | SDL2::FFI::SDL_INIT_AUDIO()
20             | SDL2::FFI::SDL_INIT_VIDEO() | SDL2::FFI::SDL_INIT_EVENTS()
21             | SDL2::FFI::SDL_INIT_JOYSTICK() | SDL2::FFI::SDL_INIT_HAPTIC()
22             | SDL2::FFI::SDL_INIT_GAMECONTROLLER() | SDL2::FFI::SDL_INIT_SENSOR();
23             }
24             ]
25             ];
26              
27             # https://github.com/libsdl-org/SDL/blob/main/include/SDL_audio.h
28 0           define audioformat => [
29             [ SDL_AUDIO_MASK_BITSIZE => 0xFF ],
30             [ SDL_AUDIO_MASK_DATATYPE => ( 1 << 8 ) ],
31             [ SDL_AUDIO_MASK_ENDIAN => ( 1 << 12 ) ],
32             [ SDL_AUDIO_MASK_SIGNED => ( 1 << 15 ) ],
33 0     0     [ SDL_AUDIO_BITSIZE => sub ($x) { $x & SDL_AUDIO_MASK_BITSIZE() } ],
  0            
  0            
  0            
34 0     0     [ SDL_AUDIO_ISFLOAT => sub ($x) { $x & SDL_AUDIO_MASK_DATATYPE() } ],
  0            
  0            
  0            
35 0     0     [ SDL_AUDIO_ISBIGENDIAN => sub ($x) { $x & SDL_AUDIO_MASK_ENDIAN() } ],
  0            
  0            
  0            
36 0     0     [ SDL_AUDIO_ISSIGNED => sub ($x) { $x & SDL_AUDIO_MASK_SIGNED() } ],
  0            
  0            
  0            
37 0     0     [ SDL_AUDIO_ISINT => sub ($x) { !SDL_AUDIO_ISFLOAT($x) } ],
  0            
  0            
  0            
38 0     0     [ SDL_AUDIO_ISLITTLEENDIAN => sub ($x) { !SDL_AUDIO_ISBIGENDIAN($x) } ],
  0            
  0            
  0            
39 0     0     [ SDL_AUDIO_ISUNSIGNED => sub ($x) { !SDL_AUDIO_ISSIGNED($x) } ],
  0            
  0            
  0            
40             [ AUDIO_U8 => 0x0008 ],
41             [ AUDIO_S8 => 0x8008 ],
42             [ AUDIO_U16LSB => 0x0010 ],
43             [ AUDIO_S16LSB => 0x8010 ],
44             [ AUDIO_U16MSB => 0x1010 ],
45             [ AUDIO_S16MSB => 0x9010 ],
46 0     0     [ AUDIO_U16 => sub () { AUDIO_U16LSB() } ],
  0            
  0            
47 0     0     [ AUDIO_S16 => sub () { AUDIO_S16LSB() } ],
  0            
  0            
48             [ AUDIO_S32LSB => 0x8020 ],
49             [ AUDIO_S32MSB => 0x9020 ],
50 0     0     [ AUDIO_S32 => sub () { AUDIO_S32LSB() } ],
  0            
  0            
51             [ AUDIO_F32LSB => 0x8120 ],
52             [ AUDIO_F32MSB => 0x9120 ],
53 0     0     [ AUDIO_F32 => sub () { AUDIO_F32LSB() } ], (
  0            
  0            
54             SDL2::FFI::bigendian() ? (
55 0     0     [ AUDIO_U16SYS => sub () { AUDIO_U16MSB() } ],
  0            
  0            
56 0     0     [ AUDIO_S16SYS => sub () { AUDIO_S16MSB() } ],
  0            
  0            
57 0     0     [ AUDIO_S32SYS => sub () { AUDIO_S32MSB() } ],
  0            
  0            
58 0           [ AUDIO_F32SYS => sub () { AUDIO_F32MSB() } ]
  0            
59             ) : (
60             [ AUDIO_U16SYS => sub () { AUDIO_U16LSB() } ],
61             [ AUDIO_S16SYS => sub () { AUDIO_S16LSB() } ],
62             [ AUDIO_S32SYS => sub () { AUDIO_S32LSB() } ],
63 0     0     [ AUDIO_F32SYS => sub () { AUDIO_F32LSB() } ],
64             )
65             ),
66 0     0     [ SDL_AUDIO_ALLOW_FREQUENCY_CHANGE => sub () {0x00000001} ],
  0            
  0            
67 0     0     [ SDL_AUDIO_ALLOW_FORMAT_CHANGE => sub () {0x00000002} ],
  0            
  0            
68 0     0     [ SDL_AUDIO_ALLOW_CHANNELS_CHANGE => sub () {0x00000004} ],
  0            
  0            
69 0     0     [ SDL_AUDIO_ALLOW_SAMPLES_CHANGE => sub () {0x00000008} ],
  0            
  0            
70 0           [ SDL_AUDIO_ALLOW_ANY_CHANGE => sub () {
71 0           ( SDL_AUDIO_ALLOW_FREQUENCY_CHANGE() | SDL_AUDIO_ALLOW_FORMAT_CHANGE()
72             | SDL_AUDIO_ALLOW_CHANNELS_CHANGE() | SDL_AUDIO_ALLOW_SAMPLES_CHANGE() )
73             }
74             ],
75             [ SDL_AUDIOCVT_MAX_FILTERS => 9 ]
76             ];
77             enum
78             SDL_AudioStatus => [ [ SDL_AUDIO_STOPPED => 0 ], qw[SDL_AUDIO_PLAYING SDL_AUDIO_PAUSED] ],
79             SDL_BlendMode => [
80             [ SDL_BLENDMODE_NONE => 0x00000000 ],
81             [ SDL_BLENDMODE_BLEND => 0x00000001 ],
82             [ SDL_BLENDMODE_ADD => 0x00000002, ],
83             [ SDL_BLENDMODE_MOD => 0x00000004, ],
84             [ SDL_BLENDMODE_MUL => 0x00000008, ],
85             [ SDL_BLENDMODE_INVALID => 0x7FFFFFFF ]
86             ],
87             SDL_BlendOperation => [
88             [ SDL_BLENDOPERATION_ADD => 0x1 ],
89             [ SDL_BLENDOPERATION_SUBTRACT => 0x2 ],
90             [ SDL_BLENDOPERATION_REV_SUBTRACT => 0x3 ],
91             [ SDL_BLENDOPERATION_MINIMUM => 0x4 ],
92             [ SDL_BLENDOPERATION_MAXIMUM => 0x5 ]
93             ],
94             SDL_BlendFactor => [
95             [ SDL_BLENDFACTOR_ZERO => 0x1 ],
96             [ SDL_BLENDFACTOR_ONE => 0x2 ],
97             [ SDL_BLENDFACTOR_SRC_COLOR => 0x3 ],
98             [ SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR => 0x4 ],
99             [ SDL_BLENDFACTOR_SRC_ALPHA => 0x5 ],
100             [ SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA => 0x6 ],
101             [ SDL_BLENDFACTOR_DST_COLOR => 0x7 ],
102             [ SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR => 0x8 ],
103             [ SDL_BLENDFACTOR_DST_ALPHA => 0x9 ],
104             [ SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA => 0xA ]
105             ],
106             SDL_errorcode => [
107             qw[
108             SDL_ENOMEM
109             SDL_EFREAD
110             SDL_EFWRITE
111             SDL_EFSEEK
112             SDL_UNSUPPORTED
113             SDL_LASTERROR
114             ]
115             ];
116             define eventstate => [ [ SDL_RELEASED => 0 ], [ SDL_PRESSED => 1 ] ];
117             enum SDL_EventType => [
118             [ SDL_FIRSTEVENT => 0 ], [ SDL_QUIT => 0x100 ],
119              
120             # These application events have special meaning on iOS, see README-ios.md for details
121             qw[SDL_APP_TERMINATING
122             SDL_APP_LOWMEMORY
123             SDL_APP_WILLENTERBACKGROUND
124             SDL_APP_DIDENTERBACKGROUND
125             SDL_APP_WILLENTERFOREGROUND
126             SDL_APP_DIDENTERFOREGROUND],
127             #
128             'SDL_LOCALECHANGED',
129              
130             #Display events
131             [ SDL_DISPLAYEVENT => 0x150 ],
132              
133             # Window events
134             [ SDL_WINDOWEVENT => 0x200 ], 'SDL_SYSWMEVENT',
135              
136             # Keyboard events
137             [ SDL_KEYDOWN => 0x300 ], qw[SDL_KEYUP
138             SDL_TEXTEDITING
139             SDL_TEXTINPUT
140             SDL_KEYMAPCHANGED],
141              
142             # Mouse events
143             [ SDL_MOUSEMOTION => 0x400 ], qw[SDL_MOUSEBUTTONDOWN
144             SDL_MOUSEBUTTONUP
145             SDL_MOUSEWHEEL],
146              
147             # Joystick events
148             [ SDL_JOYAXISMOTION => 0x600 ], qw[SDL_JOYBALLMOTION
149             SDL_JOYHATMOTION
150             SDL_JOYBUTTONDOWN
151             SDL_JOYBUTTONUP
152             SDL_JOYDEVICEADDED
153             SDL_JOYDEVICEREMOVED],
154              
155             # Game controller events
156             [ SDL_CONTROLLERAXISMOTION => 0x650 ], qw[SDL_CONTROLLERBUTTONDOWN
157             SDL_CONTROLLERBUTTONUP
158             SDL_CONTROLLERDEVICEADDED
159             SDL_CONTROLLERDEVICEREMOVED
160             SDL_CONTROLLERDEVICEREMAPPED
161             SDL_CONTROLLERTOUCHPADDOWN
162             SDL_CONTROLLERTOUCHPADMOTION
163             SDL_CONTROLLERTOUCHPADUP
164             SDL_CONTROLLERSENSORUPDATE],
165              
166             # Touch events
167             [ SDL_FINGERDOWN => 0x700 ], qw[SDL_FINGERUP
168             SDL_FINGERMOTION],
169              
170             # Gesture events
171             [ SDL_DOLLARGESTURE => 0x800 ], qw[SDL_DOLLARRECORD
172             SDL_MULTIGESTURE],
173              
174             # Clipboard events
175             [ SDL_CLIPBOARDUPDATE => 0x900 ],
176              
177             # Drag and drop events
178             [ SDL_DROPFILE => 0x1000 ], qw[SDL_DROPTEXT
179             SDL_DROPBEGIN
180             SDL_DROPCOMPLETE],
181              
182             # Audio hotplug events
183             [ SDL_AUDIODEVICEADDED => 0x1100 ], 'SDL_AUDIODEVICEREMOVED',
184              
185             # Sensor events
186             [ SDL_SENSORUPDATE => 0x1200 ],
187              
188             # Render events
189             [ SDL_RENDER_TARGETS_RESET => 0x2000 ], 'SDL_RENDER_DEVICE_RESET',
190              
191             # Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use,
192             # and should be allocated with SDL_RegisterEvents()
193             [ SDL_USEREVENT => 0x8000 ],
194              
195             # This last event is only for bounding internal arrays
196             [ SDL_LASTEVENT => 0xFFFF ]
197             ];
198             define SDL_EventState =>
199             [ [ SDL_QUERY => -1 ], [ SDL_IGNORE => 0 ], [ SDL_DISABLE => 0 ], [ SDL_ENABLE => 1 ] ];
200             enum SDL_GameControllerType => [
201             [ SDL_CONTROLLER_TYPE_UNKNOWN => 0 ], qw[
202             SDL_CONTROLLER_TYPE_XBOX360
203             SDL_CONTROLLER_TYPE_XBOXONE
204             SDL_CONTROLLER_TYPE_PS3
205             SDL_CONTROLLER_TYPE_PS4
206             SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO
207             SDL_CONTROLLER_TYPE_VIRTUAL
208             SDL_CONTROLLER_TYPE_PS5
209             ]
210             ],
211             SDL_GameControllerBindType => [
212             [ SDL_CONTROLLER_BINDTYPE_NONE => 0 ], qw[ SDL_CONTROLLER_BINDTYPE_BUTTON
213             SDL_CONTROLLER_BINDTYPE_AXIS
214             SDL_CONTROLLER_BINDTYPE_HAT]
215             ],
216             SDL_GameControllerAxis => [
217             [ SDL_CONTROLLER_AXIS_INVALID => -1 ], qw[SDL_CONTROLLER_AXIS_LEFTX
218             SDL_CONTROLLER_AXIS_LEFTY
219             SDL_CONTROLLER_AXIS_RIGHTX
220             SDL_CONTROLLER_AXIS_RIGHTY
221             SDL_CONTROLLER_AXIS_TRIGGERLEFT
222             SDL_CONTROLLER_AXIS_TRIGGERRIGHT
223             SDL_CONTROLLER_AXIS_MAX]
224             ],
225             SDL_GameControllerButton => [
226             [ SDL_CONTROLLER_BUTTON_INVALID => -1 ], qw[SDL_CONTROLLER_BUTTON_A
227             SDL_CONTROLLER_BUTTON_B
228             SDL_CONTROLLER_BUTTON_X
229             SDL_CONTROLLER_BUTTON_Y
230             SDL_CONTROLLER_BUTTON_BACK
231             SDL_CONTROLLER_BUTTON_GUIDE
232             SDL_CONTROLLER_BUTTON_START
233             SDL_CONTROLLER_BUTTON_LEFTSTICK
234             SDL_CONTROLLER_BUTTON_RIGHTSTICK
235             SDL_CONTROLLER_BUTTON_LEFTSHOULDER
236             SDL_CONTROLLER_BUTTON_RIGHTSHOULDER
237             SDL_CONTROLLER_BUTTON_DPAD_UP
238             SDL_CONTROLLER_BUTTON_DPAD_DOWN
239             SDL_CONTROLLER_BUTTON_DPAD_LEFT
240             SDL_CONTROLLER_BUTTON_DPAD_RIGHT
241             SDL_CONTROLLER_BUTTON_MISC1
242             SDL_CONTROLLER_BUTTON_PADDLE1
243             SDL_CONTROLLER_BUTTON_PADDLE2
244             SDL_CONTROLLER_BUTTON_PADDLE3
245             SDL_CONTROLLER_BUTTON_PADDLE4
246             SDL_CONTROLLER_BUTTON_TOUCHPAD
247             SDL_CONTROLLER_BUTTON_MAX]
248             ];
249             define SDL_Haptic => [
250             [ SDL_HAPTIC_CONSTANT => ( 1 << 0 ) ],
251             [ SDL_HAPTIC_SINE => ( 1 << 1 ) ],
252             [ SDL_HAPTIC_LEFTRIGHT => ( 1 << 2 ) ],
253             [ SDL_HAPTIC_TRIANGLE => ( 1 << 3 ) ],
254             [ SDL_HAPTIC_SAWTOOTHUP => ( 1 << 4 ) ],
255             [ SDL_HAPTIC_SAWTOOTHDOWN => ( 1 << 5 ) ],
256             [ SDL_HAPTIC_RAMP => ( 1 << 6 ) ],
257             [ SDL_HAPTIC_SPRING => ( 1 << 7 ) ],
258             [ SDL_HAPTIC_DAMPER => ( 1 << 8 ) ],
259             [ SDL_HAPTIC_INERTIA => ( 1 << 9 ) ],
260             [ SDL_HAPTIC_FRICTION => ( 1 << 10 ) ],
261             [ SDL_HAPTIC_CUSTOM => ( 1 << 11 ) ],
262             [ SDL_HAPTIC_GAIN => ( 1 << 12 ) ],
263             [ SDL_HAPTIC_AUTOCENTER => ( 1 << 13 ) ],
264             [ SDL_HAPTIC_STATUS => ( 1 << 14 ) ],
265             [ SDL_HAPTIC_PAUSE => ( 1 << 15 ) ],
266             [ SDL_HAPTIC_POLAR => 0 ],
267             [ SDL_HAPTIC_CARTESIAN => 1 ],
268             [ SDL_HAPTIC_SPHERICAL => 2 ],
269             [ SDL_HAPTIC_STEERING_AXIS => 3 ],
270             [ SDL_HAPTIC_INFINITY => 4294967295 ]
271             ];
272              
273             # https://github.com/libsdl-org/SDL/blob/main/include/SDL_hints.h
274             enum SDL_HintPriority => [qw[SDL_HINT_DEFAULT SDL_HINT_NORMAL SDL_HINT_OVERRIDE]];
275             define SDL_Hint => [
276             [ SDL_HINT_ACCELEROMETER_AS_JOYSTICK => 'SDL_ACCELEROMETER_AS_JOYSTICK' ],
277             [ SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED => 'SDL_ALLOW_ALT_TAB_WHILE_GRABBED' ],
278             [ SDL_HINT_ALLOW_TOPMOST => 'SDL_ALLOW_TOPMOST' ],
279             [ SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION =>
280             'SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION'
281             ],
282             [ SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION =>
283             'SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION'
284             ],
285             [ SDL_HINT_ANDROID_BLOCK_ON_PAUSE => 'SDL_ANDROID_BLOCK_ON_PAUSE' ],
286             [ SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO => 'SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO' ],
287             [ SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH => 'SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH' ],
288             [ SDL_HINT_ANDROID_TRAP_BACK_BUTTON => 'SDL_ANDROID_TRAP_BACK_BUTTON' ],
289             [ SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS => 'SDL_APPLE_TV_CONTROLLER_UI_EVENTS' ],
290             [ SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION => 'SDL_APPLE_TV_REMOTE_ALLOW_ROTATION' ],
291             [ SDL_HINT_AUDIO_CATEGORY => 'SDL_AUDIO_CATEGORY' ],
292             [ SDL_HINT_AUDIO_DEVICE_APP_NAME => 'SDL_AUDIO_DEVICE_APP_NAME' ],
293             [ SDL_HINT_AUDIO_DEVICE_STREAM_NAME => 'SDL_AUDIO_DEVICE_STREAM_NAME' ],
294             [ SDL_HINT_AUDIO_DEVICE_STREAM_ROLE => 'SDL_AUDIO_DEVICE_STREAM_ROLE' ],
295             [ SDL_HINT_AUDIO_RESAMPLING_MODE => 'SDL_AUDIO_RESAMPLING_MODE' ],
296             [ SDL_HINT_AUTO_UPDATE_JOYSTICKS => 'SDL_AUTO_UPDATE_JOYSTICKS' ],
297             [ SDL_HINT_AUTO_UPDATE_SENSORS => 'SDL_AUTO_UPDATE_SENSORS' ],
298             [ SDL_HINT_BMP_SAVE_LEGACY_FORMAT => 'SDL_BMP_SAVE_LEGACY_FORMAT' ],
299             [ SDL_HINT_DISPLAY_USABLE_BOUNDS => 'SDL_DISPLAY_USABLE_BOUNDS' ],
300             [ SDL_HINT_EMSCRIPTEN_ASYNCIFY => 'SDL_EMSCRIPTEN_ASYNCIFY' ],
301             [ SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT => 'SDL_EMSCRIPTEN_KEYBOARD_ELEMENT' ],
302             [ SDL_HINT_ENABLE_STEAM_CONTROLLERS => 'SDL_ENABLE_STEAM_CONTROLLERS' ],
303             [ SDL_HINT_EVENT_LOGGING => 'SDL_EVENT_LOGGING' ],
304             [ SDL_HINT_FRAMEBUFFER_ACCELERATION => 'SDL_FRAMEBUFFER_ACCELERATION' ],
305             [ SDL_HINT_GAMECONTROLLERCONFIG => 'SDL_GAMECONTROLLERCONFIG' ],
306             [ SDL_HINT_GAMECONTROLLERCONFIG_FILE => 'SDL_GAMECONTROLLERCONFIG_FILE' ],
307             [ SDL_HINT_GAMECONTROLLERTYPE => 'SDL_GAMECONTROLLERTYPE' ],
308             [ SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES => 'SDL_GAMECONTROLLER_IGNORE_DEVICES' ],
309             [ SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT =>
310             'SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT'
311             ],
312             [ SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS => 'SDL_GAMECONTROLLER_USE_BUTTON_LABELS' ],
313             [ SDL_HINT_GRAB_KEYBOARD => 'SDL_GRAB_KEYBOARD' ],
314             [ SDL_HINT_IDLE_TIMER_DISABLED => 'SDL_IDLE_TIMER_DISABLED' ],
315             [ SDL_HINT_IME_INTERNAL_EDITING => 'SDL_IME_INTERNAL_EDITING' ],
316             [ SDL_HINT_IOS_HIDE_HOME_INDICATOR => 'SDL_IOS_HIDE_HOME_INDICATOR' ],
317             [ SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS => 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS' ],
318             [ SDL_HINT_JOYSTICK_HIDAPI => 'SDL_JOYSTICK_HIDAPI' ],
319             [ SDL_HINT_JOYSTICK_HIDAPI_CORRELATE_XINPUT => 'SDL_JOYSTICK_HIDAPI_CORRELATE_XINPUT' ],
320             [ SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE => 'SDL_JOYSTICK_HIDAPI_GAMECUBE' ],
321             [ SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS => 'SDL_JOYSTICK_HIDAPI_JOY_CONS' ],
322             [ SDL_HINT_JOYSTICK_HIDAPI_PS4 => 'SDL_JOYSTICK_HIDAPI_PS4' ],
323             [ SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE => 'SDL_JOYSTICK_HIDAPI_PS4_RUMBLE' ],
324             [ SDL_HINT_JOYSTICK_HIDAPI_PS5 => 'SDL_JOYSTICK_HIDAPI_PS5' ],
325             [ SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED => 'SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED' ],
326             [ SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE => 'SDL_JOYSTICK_HIDAPI_PS5_RUMBLE' ],
327             [ SDL_HINT_JOYSTICK_HIDAPI_STADIA => 'SDL_JOYSTICK_HIDAPI_STADIA' ],
328             [ SDL_HINT_JOYSTICK_HIDAPI_STEAM => 'SDL_JOYSTICK_HIDAPI_STEAM' ],
329             [ SDL_HINT_JOYSTICK_HIDAPI_SWITCH => 'SDL_JOYSTICK_HIDAPI_SWITCH' ],
330             [ SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED => 'SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED' ],
331             [ SDL_HINT_JOYSTICK_HIDAPI_XBOX => 'SDL_JOYSTICK_HIDAPI_XBOX' ],
332             [ SDL_HINT_JOYSTICK_RAWINPUT => 'SDL_JOYSTICK_RAWINPUT' ],
333             [ SDL_HINT_JOYSTICK_THREAD => 'SDL_JOYSTICK_THREAD' ],
334             [ SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER => 'SDL_KMSDRM_REQUIRE_DRM_MASTER' ],
335             [ SDL_HINT_LINUX_JOYSTICK_DEADZONES => 'SDL_LINUX_JOYSTICK_DEADZONES' ],
336             [ SDL_HINT_MAC_BACKGROUND_APP => 'SDL_MAC_BACKGROUND_APP' ],
337             [ SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK => 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK' ],
338             [ SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS => 'SDL_MOUSE_DOUBLE_CLICK_RADIUS' ],
339             [ SDL_HINT_MOUSE_DOUBLE_CLICK_TIME => 'SDL_MOUSE_DOUBLE_CLICK_TIME' ],
340             [ SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH => 'SDL_MOUSE_FOCUS_CLICKTHROUGH' ],
341             [ SDL_HINT_MOUSE_NORMAL_SPEED_SCALE => 'SDL_MOUSE_NORMAL_SPEED_SCALE' ],
342             [ SDL_HINT_MOUSE_RELATIVE_MODE_WARP => 'SDL_MOUSE_RELATIVE_MODE_WARP' ],
343             [ SDL_HINT_MOUSE_RELATIVE_SCALING => 'SDL_MOUSE_RELATIVE_SCALING' ],
344             [ SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE => 'SDL_MOUSE_RELATIVE_SPEED_SCALE' ],
345             [ SDL_HINT_MOUSE_TOUCH_EVENTS => 'SDL_MOUSE_TOUCH_EVENTS' ],
346             [ SDL_HINT_NO_SIGNAL_HANDLERS => 'SDL_NO_SIGNAL_HANDLERS' ],
347             [ SDL_HINT_OPENGL_ES_DRIVER => 'SDL_OPENGL_ES_DRIVER' ],
348             [ SDL_HINT_ORIENTATIONS => 'SDL_ORIENTATIONS' ],
349             [ SDL_HINT_PREFERRED_LOCALES => 'SDL_PREFERRED_LOCALES' ],
350             [ SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION => 'SDL_QTWAYLAND_CONTENT_ORIENTATION' ],
351             [ SDL_HINT_QTWAYLAND_WINDOW_FLAGS => 'SDL_QTWAYLAND_WINDOW_FLAGS' ],
352             [ SDL_HINT_RENDER_BATCHING => 'SDL_RENDER_BATCHING' ],
353             [ SDL_HINT_RENDER_DIRECT3D11_DEBUG => 'SDL_RENDER_DIRECT3D11_DEBUG' ],
354             [ SDL_HINT_RENDER_DIRECT3D_THREADSAFE => 'SDL_RENDER_DIRECT3D_THREADSAFE' ],
355             [ SDL_HINT_RENDER_DRIVER => 'SDL_RENDER_DRIVER' ],
356             [ SDL_HINT_RENDER_LOGICAL_SIZE_MODE => 'SDL_RENDER_LOGICAL_SIZE_MODE' ],
357             [ SDL_HINT_RENDER_OPENGL_SHADERS => 'SDL_RENDER_OPENGL_SHADERS' ],
358             [ SDL_HINT_RENDER_SCALE_QUALITY => 'SDL_RENDER_SCALE_QUALITY' ],
359             [ SDL_HINT_RENDER_VSYNC => 'SDL_RENDER_VSYNC' ],
360             [ SDL_HINT_RETURN_KEY_HIDES_IME => 'SDL_RETURN_KEY_HIDES_IME' ],
361             [ SDL_HINT_RPI_VIDEO_LAYER => 'SDL_RPI_VIDEO_LAYER' ],
362             [ SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL =>
363             'SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL'
364             ],
365             [ SDL_HINT_THREAD_PRIORITY_POLICY => 'SDL_THREAD_PRIORITY_POLICY' ],
366             [ SDL_HINT_THREAD_STACK_SIZE => 'SDL_THREAD_STACK_SIZE' ],
367             [ SDL_HINT_TIMER_RESOLUTION => 'SDL_TIMER_RESOLUTION' ],
368             [ SDL_HINT_TOUCH_MOUSE_EVENTS => 'SDL_TOUCH_MOUSE_EVENTS' ],
369             [ SDL_HINT_TV_REMOTE_AS_JOYSTICK => 'SDL_TV_REMOTE_AS_JOYSTICK' ],
370             [ SDL_HINT_VIDEO_ALLOW_SCREENSAVER => 'SDL_VIDEO_ALLOW_SCREENSAVER' ],
371             [ SDL_HINT_VIDEO_DOUBLE_BUFFER => 'SDL_VIDEO_DOUBLE_BUFFER' ],
372             [ SDL_HINT_VIDEO_EXTERNAL_CONTEXT => 'SDL_VIDEO_EXTERNAL_CONTEXT' ],
373             [ SDL_HINT_VIDEO_HIGHDPI_DISABLED => 'SDL_VIDEO_HIGHDPI_DISABLED' ],
374             [ SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES => 'SDL_VIDEO_MAC_FULLSCREEN_SPACES' ],
375             [ SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS => 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS' ],
376             [ SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT => 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT' ],
377             [ SDL_HINT_VIDEO_WIN_D3DCOMPILE => 'SDL_VIDEO_WIN_D3DCOMPILE' ],
378             [ SDL_HINT_VIDEO_WIN_D3DCOMPILER => 'SDL_VIDEO_WIN_D3DCOMPILER' ],
379             [ SDL_HINT_VIDEO_X11_FORCE_EGL => 'SDL_VIDEO_X11_FORCE_EGL' ],
380             [ SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR => 'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR' ],
381             [ SDL_HINT_VIDEO_X11_NET_WM_PING => 'SDL_VIDEO_X11_NET_WM_PING' ],
382             [ SDL_HINT_VIDEO_X11_WINDOW_VISUALID => 'SDL_VIDEO_X11_WINDOW_VISUALID' ],
383             [ SDL_HINT_VIDEO_X11_XINERAMA => 'SDL_VIDEO_X11_XINERAMA' ],
384             [ SDL_HINT_VIDEO_X11_XRANDR => 'SDL_VIDEO_X11_XRANDR' ],
385             [ SDL_HINT_VIDEO_X11_XVIDMODE => 'SDL_VIDEO_X11_XVIDMODE' ],
386             [ SDL_HINT_WAVE_FACT_CHUNK => 'SDL_WAVE_FACT_CHUNK' ],
387             [ SDL_HINT_WAVE_RIFF_CHUNK_SIZE => 'SDL_WAVE_RIFF_CHUNK_SIZE' ],
388             [ SDL_HINT_WAVE_TRUNCATION => 'SDL_WAVE_TRUNCATION' ],
389             [ SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING => 'SDL_WINDOWS_DISABLE_THREAD_NAMING' ],
390             [ SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP => 'SDL_WINDOWS_ENABLE_MESSAGELOOP' ],
391             [ SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS =>
392             'SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS'
393             ],
394             [ SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL => 'SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL' ],
395             [ SDL_HINT_WINDOWS_INTRESOURCE_ICON => 'SDL_WINDOWS_INTRESOURCE_ICON' ],
396             [ SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL => 'SDL_WINDOWS_INTRESOURCE_ICON_SMALL' ],
397             [ SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 => 'SDL_WINDOWS_NO_CLOSE_ON_ALT_F4' ],
398             [ SDL_HINT_WINDOWS_USE_D3D9EX => 'SDL_WINDOWS_USE_D3D9EX' ],
399             [ SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN =>
400             'SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN'
401             ],
402             [ SDL_HINT_WINRT_HANDLE_BACK_BUTTON => 'SDL_WINRT_HANDLE_BACK_BUTTON' ],
403             [ SDL_HINT_WINRT_PRIVACY_POLICY_LABEL => 'SDL_WINRT_PRIVACY_POLICY_LABEL' ],
404             [ SDL_HINT_WINRT_PRIVACY_POLICY_URL => 'SDL_WINRT_PRIVACY_POLICY_URL' ],
405             [ SDL_HINT_XINPUT_ENABLED => 'SDL_XINPUT_ENABLED' ],
406             [ SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING => 'SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING' ]
407             ];
408             enum SDL_JoystickType => [
409             qw[
410             SDL_JOYSTICK_TYPE_UNKNOWN
411             SDL_JOYSTICK_TYPE_GAMECONTROLLER
412             SDL_JOYSTICK_TYPE_WHEEL
413             SDL_JOYSTICK_TYPE_ARCADE_STICK
414             SDL_JOYSTICK_TYPE_FLIGHT_STICK
415             SDL_JOYSTICK_TYPE_DANCE_PAD
416             SDL_JOYSTICK_TYPE_GUITAR
417             SDL_JOYSTICK_TYPE_DRUM_KIT
418             SDL_JOYSTICK_TYPE_ARCADE_PAD
419             SDL_JOYSTICK_TYPE_THROTTLE
420             ]
421             ],
422             SDL_JoystickPowerLevel => [
423             [ SDL_JOYSTICK_POWER_UNKNOWN => -1 ], qw[SDL_JOYSTICK_POWER_EMPTY
424             SDL_JOYSTICK_POWER_LOW
425             SDL_JOYSTICK_POWER_MEDIUM
426             SDL_JOYSTICK_POWER_FULL
427             SDL_JOYSTICK_POWER_WIRED
428             SDL_JOYSTICK_POWER_MAX]
429             ];
430 0     0     define hatPositoin => [
431             [ SDL_HAT_CENTERED => 0x00 ],
432             [ SDL_HAT_UP => 0x01 ],
433             [ SDL_HAT_RIGHT => 0x02 ],
434             [ SDL_HAT_DOWN => 0x04 ],
435             [ SDL_HAT_LEFT => 0x08 ],
436 0     0     [ SDL_HAT_RIGHTUP => sub () { ( SDL_HAT_RIGHT() | SDL_HAT_UP() ) } ],
  0            
  0            
437 0     0     [ SDL_HAT_RIGHTDOWN => sub () { ( SDL_HAT_RIGHT() | SDL_HAT_DOWN() ) } ],
  0            
  0            
438 0     0     [ SDL_HAT_LEFTUP => sub () { ( SDL_HAT_LEFT() | SDL_HAT_UP() ) } ],
  0            
  0            
439 0           [ SDL_HAT_LEFTDOWN => sub () { ( SDL_HAT_LEFT() | SDL_HAT_DOWN() ) } ]
  0            
440             ];
441 0           define SDL_KeyCode => [
442             [ SDLK_SCANCODE_MASK => ( 1 << 30 ) ],
443 0     0     [ SDL_SCANCODE_TO_KEYCODE => sub ($X) { ( $X | SDLK_SCANCODE_MASK() ) } ],
  0            
  0            
  0            
444             [ SDLK_UNKNOWN => 0 ], [ SDLK_RETURN => ord "\r" ], [ SDLK_ESCAPE => ord "\x1B" ],
445             [ SDLK_BACKSPACE => ord "\b" ], [ SDLK_TAB => ord "\t" ], [ SDLK_SPACE => ord ' ' ],
446             [ SDLK_EXCLAIM => ord '!' ], [ SDLK_QUOTEDBL => ord '"' ], [ SDLK_HASH => ord '#' ],
447             [ SDLK_PERCENT => ord '%' ], [ SDLK_DOLLAR => ord '$' ], [ SDLK_AMPERSAND => ord '&' ],
448             [ SDLK_QUOTE => ord "'" ], [ SDLK_LEFTPAREN => ord '(' ], [ SDLK_RIGHTPAREN => ord ')' ],
449             [ SDLK_ASTERISK => ord '*' ], [ SDLK_PLUS => ord '+' ], [ SDLK_COMMA => ord ',' ],
450             [ SDLK_MINUS => ord '-' ], [ SDLK_PERIOD => ord '.' ], [ SDLK_SLASH => ord '/' ],
451             [ SDLK_0 => ord '0' ], [ SDLK_1 => ord '1' ], [ SDLK_2 => ord '2' ], [ SDLK_3 => ord '3' ],
452             [ SDLK_4 => ord '4' ], [ SDLK_5 => ord '5' ], [ SDLK_6 => ord '6' ], [ SDLK_7 => ord '7' ],
453             [ SDLK_8 => ord '8' ], [ SDLK_9 => ord '9' ], [ SDLK_COLON => ord ':' ],
454             [ SDLK_SEMICOLON => ord ';' ], [ SDLK_LESS => ord '<' ], [ SDLK_EQUALS => ord '=' ],
455             [ SDLK_GREATER => ord '>' ], [ SDLK_QUESTION => ord '?' ], [ SDLK_AT => ord '@' ],
456              
457             # Skip uppercase letters
458             [ SDLK_LEFTBRACKET => ord '[' ],
459             [ SDLK_BACKSLASH => ord "\\" ],
460             [ SDLK_RIGHTBRACKET => ord ']' ],
461             [ SDLK_CARET => ord '^' ],
462             [ SDLK_UNDERSCORE => ord '_' ],
463             [ SDLK_BACKQUOTE => ord '`' ],
464             [ SDLK_a => ord 'a' ],
465             [ SDLK_b => ord 'b' ],
466             [ SDLK_c => ord 'c' ],
467             [ SDLK_d => ord 'd' ],
468             [ SDLK_e => ord 'e' ],
469             [ SDLK_f => ord 'f' ],
470             [ SDLK_g => ord 'g' ],
471             [ SDLK_h => ord 'h' ],
472             [ SDLK_i => ord 'i' ],
473             [ SDLK_j => ord 'j' ],
474             [ SDLK_k => ord 'k' ],
475             [ SDLK_l => ord 'l' ],
476             [ SDLK_m => ord 'm' ],
477             [ SDLK_n => ord 'n' ],
478             [ SDLK_o => ord 'o' ],
479             [ SDLK_p => ord 'p' ],
480             [ SDLK_q => ord 'q' ],
481             [ SDLK_r => ord 'r' ],
482             [ SDLK_s => ord 's' ],
483             [ SDLK_t => ord 't' ],
484             [ SDLK_u => ord 'u' ],
485             [ SDLK_v => ord 'v' ],
486             [ SDLK_w => ord 'w' ],
487             [ SDLK_x => ord 'x' ],
488             [ SDLK_y => ord 'y' ],
489             [ SDLK_z => ord 'z' ],
490 0     0     [ SDLK_CAPSLOCK => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CAPSLOCK() ) } ],
  0            
  0            
491 0     0     [ SDLK_F1 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F1() ) } ],
  0            
  0            
492 0     0     [ SDLK_F2 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F2() ) } ],
  0            
  0            
493 0     0     [ SDLK_F3 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F3() ) } ],
  0            
  0            
494 0     0     [ SDLK_F4 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F4() ) } ],
  0            
  0            
495 0     0     [ SDLK_F5 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F5() ) } ],
  0            
  0            
496 0     0     [ SDLK_F6 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F6() ) } ],
  0            
  0            
497 0     0     [ SDLK_F7 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F7() ) } ],
  0            
  0            
498 0     0     [ SDLK_F8 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F8() ) } ],
  0            
  0            
499 0     0     [ SDLK_F9 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F9() ) } ],
  0            
  0            
500 0     0     [ SDLK_F10 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F10() ) } ],
  0            
  0            
501 0     0     [ SDLK_F11 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F11() ) } ],
  0            
  0            
502 0     0     [ SDLK_F12 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F12() ) } ],
  0            
  0            
503 0           [ SDLK_PRINTSCREEN => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_PRINTSCREEN() ) }
  0            
504 0     0     ],
505 0     0     [ SDLK_SCROLLLOCK => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_SCROLLLOCK() ) } ],
  0            
  0            
506 0     0     [ SDLK_PAUSE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_PAUSE() ) } ],
  0            
  0            
507 0     0     [ SDLK_INSERT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_INSERT() ) } ],
  0            
  0            
508 0     0     [ SDLK_HOME => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_HOME() ) } ],
  0            
  0            
509 0     0     [ SDLK_PAGEUP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_PAGEUP() ) } ],
  0            
  0            
510             [ SDLK_DELETE => ord "\x7F" ],
511 0     0     [ SDLK_END => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_END() ) } ],
  0            
  0            
512 0     0     [ SDLK_PAGEDOWN => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_PAGEDOWN() ) } ],
  0            
  0            
513 0     0     [ SDLK_RIGHT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RIGHT() ) } ],
  0            
  0            
514 0     0     [ SDLK_LEFT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LEFT() ) } ],
  0            
  0            
515 0     0     [ SDLK_DOWN => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_DOWN() ) } ],
  0            
  0            
516 0     0     [ SDLK_UP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_UP() ) } ],
  0            
  0            
517             [ SDLK_NUMLOCKCLEAR =>
518 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_NUMLOCKCLEAR() ) }
  0            
519 0     0     ],
520 0     0     [ SDLK_KP_DIVIDE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_DIVIDE() ) } ],
  0            
  0            
521 0           [ SDLK_KP_MULTIPLY => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MULTIPLY() ) }
  0            
522 0     0     ],
523 0     0     [ SDLK_KP_MINUS => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MINUS() ) } ],
  0            
  0            
524 0     0     [ SDLK_KP_PLUS => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_PLUS() ) } ],
  0            
  0            
525 0     0     [ SDLK_KP_ENTER => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_ENTER() ) } ],
  0            
  0            
526 0     0     [ SDLK_KP_1 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_1() ) } ],
  0            
  0            
527 0     0     [ SDLK_KP_2 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_2() ) } ],
  0            
  0            
528 0     0     [ SDLK_KP_3 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_3() ) } ],
  0            
  0            
529 0     0     [ SDLK_KP_4 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_4() ) } ],
  0            
  0            
530 0     0     [ SDLK_KP_5 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_5() ) } ],
  0            
  0            
531 0     0     [ SDLK_KP_6 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_6() ) } ],
  0            
  0            
532 0     0     [ SDLK_KP_7 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_7() ) } ],
  0            
  0            
533 0     0     [ SDLK_KP_8 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_8() ) } ],
  0            
  0            
534 0     0     [ SDLK_KP_9 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_9() ) } ],
  0            
  0            
535 0     0     [ SDLK_KP_0 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_0() ) } ],
  0            
  0            
536 0     0     [ SDLK_KP_PERIOD => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_PERIOD() ) } ],
  0            
  0            
537 0           [ SDLK_APPLICATION => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_APPLICATION() ) }
  0            
538 0     0     ],
539 0     0     [ SDLK_POWER => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_POWER() ) } ],
  0            
  0            
540 0     0     [ SDLK_KP_EQUALS => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_EQUALS() ) } ],
  0            
  0            
541 0     0     [ SDLK_F13 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F13() ) } ],
  0            
  0            
542 0     0     [ SDLK_F14 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F14() ) } ],
  0            
  0            
543 0     0     [ SDLK_F15 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F15() ) } ],
  0            
  0            
544 0     0     [ SDLK_F16 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F16() ) } ],
  0            
  0            
545 0     0     [ SDLK_F17 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F17() ) } ],
  0            
  0            
546 0     0     [ SDLK_F18 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F18() ) } ],
  0            
  0            
547 0     0     [ SDLK_F19 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F19() ) } ],
  0            
  0            
548 0     0     [ SDLK_F20 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F20() ) } ],
  0            
  0            
549 0     0     [ SDLK_F21 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F21() ) } ],
  0            
  0            
550 0     0     [ SDLK_F22 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F22() ) } ],
  0            
  0            
551 0     0     [ SDLK_F23 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F23() ) } ],
  0            
  0            
552 0     0     [ SDLK_F24 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_F24() ) } ],
  0            
  0            
553 0     0     [ SDLK_EXECUTE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_EXECUTE() ) } ],
  0            
  0            
554 0     0     [ SDLK_HELP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_HELP() ) } ],
  0            
  0            
555 0     0     [ SDLK_MENU => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_MENU() ) } ],
  0            
  0            
556 0     0     [ SDLK_SELECT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_SELECT() ) } ],
  0            
  0            
557 0     0     [ SDLK_STOP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_STOP() ) } ],
  0            
  0            
558 0     0     [ SDLK_AGAIN => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AGAIN() ) } ],
  0            
  0            
559 0     0     [ SDLK_UNDO => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_UNDO() ) } ],
  0            
  0            
560 0     0     [ SDLK_CUT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CUT() ) } ],
  0            
  0            
561 0     0     [ SDLK_COPY => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_COPY() ) } ],
  0            
  0            
562 0     0     [ SDLK_PASTE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_PASTE() ) } ],
  0            
  0            
563 0     0     [ SDLK_FIND => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_FIND() ) } ],
  0            
  0            
564 0     0     [ SDLK_MUTE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_MUTE() ) } ],
  0            
  0            
565 0     0     [ SDLK_VOLUMEUP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_VOLUMEUP() ) } ],
  0            
  0            
566 0     0     [ SDLK_VOLUMEDOWN => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_VOLUMEDOWN() ) } ],
  0            
  0            
567 0     0     [ SDLK_KP_COMMA => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_COMMA() ) } ],
  0            
  0            
568 0           [ SDLK_KP_EQUALSAS400 => sub () {
569 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_EQUALSAS400() );
570             }
571 0     0     ],
572 0     0     [ SDLK_ALTERASE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_ALTERASE() ) } ],
  0            
  0            
573 0     0     [ SDLK_SYSREQ => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_SYSREQ() ) } ],
  0            
  0            
574 0     0     [ SDLK_CANCEL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CANCEL() ) } ],
  0            
  0            
575 0     0     [ SDLK_CLEAR => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CLEAR() ) } ],
  0            
  0            
576 0     0     [ SDLK_PRIOR => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_PRIOR() ) } ],
  0            
  0            
577 0     0     [ SDLK_RETURN2 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RETURN2() ) } ],
  0            
  0            
578 0     0     [ SDLK_SEPARATOR => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_SEPARATOR() ) } ],
  0            
  0            
579 0     0     [ SDLK_OUT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_OUT() ) } ],
  0            
  0            
580 0     0     [ SDLK_OPER => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_OPER() ) } ],
  0            
  0            
581 0     0     [ SDLK_CLEARAGAIN => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CLEARAGAIN() ) } ],
  0            
  0            
582 0     0     [ SDLK_CRSEL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CRSEL() ) } ],
  0            
  0            
583 0     0     [ SDLK_EXSEL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_EXSEL() ) } ],
  0            
  0            
584 0     0     [ SDLK_KP_00 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_00() ) } ],
  0            
  0            
585 0     0     [ SDLK_KP_000 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_000() ) } ],
  0            
  0            
586 0           [ SDLK_THOUSANDSSEPARATOR => sub () {
587 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_THOUSANDSSEPARATOR() );
588             }
589 0     0     ],
590 0           [ SDLK_DECIMALSEPARATOR => sub () {
591 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_DECIMALSEPARATOR() );
592             }
593 0     0     ],
594             [ SDLK_CURRENCYUNIT =>
595 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CURRENCYUNIT() ) }
  0            
596 0     0     ],
597 0           [ SDLK_CURRENCYSUBUNIT => sub () {
598 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CURRENCYSUBUNIT() );
599             }
600 0     0     ],
601             [ SDLK_KP_LEFTPAREN =>
602 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_LEFTPAREN() ) }
  0            
603 0     0     ],
604             [ SDLK_KP_RIGHTPAREN =>
605 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_RIGHTPAREN() ) }
  0            
606 0     0     ],
607             [ SDLK_KP_LEFTBRACE =>
608 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_LEFTBRACE() ) }
  0            
609 0     0     ],
610             [ SDLK_KP_RIGHTBRACE =>
611 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_RIGHTBRACE() ) }
  0            
612 0     0     ],
613 0     0     [ SDLK_KP_TAB => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_TAB() ) } ],
  0            
  0            
614             [ SDLK_KP_BACKSPACE =>
615 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_BACKSPACE() ) }
  0            
616 0     0     ],
617 0     0     [ SDLK_KP_A => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_A() ) } ],
  0            
  0            
618 0     0     [ SDLK_KP_B => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_B() ) } ],
  0            
  0            
619 0     0     [ SDLK_KP_C => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_C() ) } ],
  0            
  0            
620 0     0     [ SDLK_KP_D => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_D() ) } ],
  0            
  0            
621 0     0     [ SDLK_KP_E => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_E() ) } ],
  0            
  0            
622 0     0     [ SDLK_KP_F => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_F() ) } ],
  0            
  0            
623 0     0     [ SDLK_KP_XOR => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_XOR() ) } ],
  0            
  0            
624 0     0     [ SDLK_KP_POWER => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_POWER() ) } ],
  0            
  0            
625 0     0     [ SDLK_KP_PERCENT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_PERCENT() ) } ],
  0            
  0            
626 0     0     [ SDLK_KP_LESS => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_LESS() ) } ],
  0            
  0            
627 0     0     [ SDLK_KP_GREATER => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_GREATER() ) } ],
  0            
  0            
628             [ SDLK_KP_AMPERSAND =>
629 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_AMPERSAND() ) }
  0            
630 0     0     ],
631 0           [ SDLK_KP_DBLAMPERSAND => sub () {
632 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_DBLAMPERSAND() );
633             }
634 0     0     ],
635 0           [ SDLK_KP_VERTICALBAR => sub () {
636 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_VERTICALBAR() );
637             }
638 0     0     ],
639 0           [ SDLK_KP_DBLVERTICALBAR => sub () {
640 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_DBLVERTICALBAR() );
641             }
642 0     0     ],
643 0     0     [ SDLK_KP_COLON => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_COLON() ) } ],
  0            
  0            
644 0     0     [ SDLK_KP_HASH => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_HASH() ) } ],
  0            
  0            
645 0     0     [ SDLK_KP_SPACE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_SPACE() ) } ],
  0            
  0            
646 0     0     [ SDLK_KP_AT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_AT() ) } ],
  0            
  0            
647 0     0     [ SDLK_KP_EXCLAM => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_EXCLAM() ) } ],
  0            
  0            
648 0           [ SDLK_KP_MEMSTORE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MEMSTORE() ) }
  0            
649 0     0     ],
650             [ SDLK_KP_MEMRECALL =>
651 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MEMRECALL() ) }
  0            
652 0     0     ],
653 0           [ SDLK_KP_MEMCLEAR => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MEMCLEAR() ) }
  0            
654 0     0     ],
655 0     0     [ SDLK_KP_MEMADD => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MEMADD() ) } ],
  0            
  0            
656 0           [ SDLK_KP_MEMSUBTRACT => sub () {
657 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MEMSUBTRACT() );
658             }
659 0     0     ],
660 0           [ SDLK_KP_MEMMULTIPLY => sub () {
661 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MEMMULTIPLY() );
662             }
663 0     0     ],
664             [ SDLK_KP_MEMDIVIDE =>
665 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_MEMDIVIDE() ) }
  0            
666 0     0     ],
667             [ SDLK_KP_PLUSMINUS =>
668 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_PLUSMINUS() ) }
  0            
669 0     0     ],
670 0     0     [ SDLK_KP_CLEAR => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_CLEAR() ) } ],
  0            
  0            
671             [ SDLK_KP_CLEARENTRY =>
672 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_CLEARENTRY() ) }
  0            
673 0     0     ],
674 0     0     [ SDLK_KP_BINARY => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_BINARY() ) } ],
  0            
  0            
675 0     0     [ SDLK_KP_OCTAL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_OCTAL() ) } ],
  0            
  0            
676 0     0     [ SDLK_KP_DECIMAL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_DECIMAL() ) } ],
  0            
  0            
677 0           [ SDLK_KP_HEXADECIMAL => sub () {
678 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_HEXADECIMAL() );
679             }
680 0     0     ],
681 0     0     [ SDLK_LCTRL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LCTRL() ) } ],
  0            
  0            
682 0     0     [ SDLK_LSHIFT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LSHIFT() ) } ],
  0            
  0            
683 0     0     [ SDLK_LALT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LALT() ) } ],
  0            
  0            
684 0     0     [ SDLK_LGUI => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LGUI() ) } ],
  0            
  0            
685 0     0     [ SDLK_RCTRL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RCTRL() ) } ],
  0            
  0            
686 0     0     [ SDLK_RSHIFT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RSHIFT() ) } ],
  0            
  0            
687 0     0     [ SDLK_RALT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RALT() ) } ],
  0            
  0            
688 0     0     [ SDLK_RGUI => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RGUI() ) } ],
  0            
  0            
689 0     0     [ SDLK_MODE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_MODE() ) } ],
  0            
  0            
690 0     0     [ SDLK_AUDIONEXT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AUDIONEXT() ) } ],
  0            
  0            
691 0     0     [ SDLK_AUDIOPREV => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AUDIOPREV() ) } ],
  0            
  0            
692 0     0     [ SDLK_AUDIOSTOP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AUDIOSTOP() ) } ],
  0            
  0            
693 0     0     [ SDLK_AUDIOPLAY => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AUDIOPLAY() ) } ],
  0            
  0            
694 0     0     [ SDLK_AUDIOMUTE => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AUDIOMUTE() ) } ],
  0            
  0            
695 0           [ SDLK_MEDIASELECT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_MEDIASELECT() ) }
  0            
696 0     0     ],
697 0     0     [ SDLK_WWW => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_WWW() ) } ],
  0            
  0            
698 0     0     [ SDLK_MAIL => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_MAIL() ) } ],
  0            
  0            
699 0     0     [ SDLK_CALCULATOR => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_CALCULATOR() ) } ],
  0            
  0            
700 0     0     [ SDLK_COMPUTER => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_COMPUTER() ) } ],
  0            
  0            
701 0     0     [ SDLK_AC_SEARCH => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AC_SEARCH() ) } ],
  0            
  0            
702 0     0     [ SDLK_AC_HOME => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AC_HOME() ) } ],
  0            
  0            
703 0     0     [ SDLK_AC_BACK => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AC_BACK() ) } ],
  0            
  0            
704 0     0     [ SDLK_AC_FORWARD => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AC_FORWARD() ) } ],
  0            
  0            
705 0     0     [ SDLK_AC_STOP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AC_STOP() ) } ],
  0            
  0            
706 0     0     [ SDLK_AC_REFRESH => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AC_REFRESH() ) } ],
  0            
  0            
707             [ SDLK_AC_BOOKMARKS =>
708 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AC_BOOKMARKS() ) }
  0            
709 0     0     ],
710 0           [ SDLK_BRIGHTNESSDOWN => sub () {
711 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_BRIGHTNESSDOWN() );
712             }
713 0     0     ],
714             [ SDLK_BRIGHTNESSUP =>
715 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_BRIGHTNESSUP() ) }
  0            
716 0     0     ],
717             [ SDLK_DISPLAYSWITCH =>
718 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_DISPLAYSWITCH() ) }
  0            
719 0     0     ],
720 0           [ SDLK_KBDILLUMTOGGLE => sub () {
721 0           ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KBDILLUMTOGGLE() );
722             }
723 0     0     ],
724             [ SDLK_KBDILLUMDOWN =>
725 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KBDILLUMDOWN() ) }
  0            
726 0     0     ],
727 0     0     [ SDLK_KBDILLUMUP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KBDILLUMUP() ) } ],
  0            
  0            
728 0     0     [ SDLK_EJECT => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_EJECT() ) } ],
  0            
  0            
729 0     0     [ SDLK_SLEEP => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_SLEEP() ) } ],
  0            
  0            
730 0     0     [ SDLK_APP1 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_APP1() ) } ],
  0            
  0            
731 0     0     [ SDLK_APP2 => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_APP2() ) } ],
  0            
  0            
732 0           [ SDLK_AUDIOREWIND => sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AUDIOREWIND() ) }
  0            
733 0     0     ],
734             [ SDLK_AUDIOFASTFORWARD =>
735 0           sub () { ord SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_AUDIOFASTFORWARD() ) }
  0            
736             ]
737             ];
738             enum SDL_Keymod => [
739             [ KMOD_NONE => 0x0000 ],
740             [ KMOD_LSHIFT => 0x0001 ],
741             [ KMOD_RSHIFT => 0x0002 ],
742             [ KMOD_LCTRL => 0x0040 ],
743             [ KMOD_RCTRL => 0x0080 ],
744             [ KMOD_LALT => 0x0100 ],
745             [ KMOD_RALT => 0x0200 ],
746             [ KMOD_LGUI => 0x0400 ],
747             [ KMOD_RGUI => 0x0800 ],
748             [ KMOD_NUM => 0x1000 ],
749             [ KMOD_CAPS => 0x2000 ],
750             [ KMOD_MODE => 0x4000 ],
751             [ KMOD_RESERVED => 0x8000 ],
752             [ KMOD_CTRL => sub () { KMOD_LCTRL() | KMOD_RCTRL() } ],
753             [ KMOD_SHIFT => sub () { KMOD_LSHIFT() | KMOD_RSHIFT() } ],
754             [ KMOD_ALT => sub () { KMOD_LALT() | KMOD_RALT() } ],
755             [ KMOD_GUI => sub () { KMOD_LGUI() | KMOD_RGUI() } ]
756             ];
757             enum SDL_LogCategory => [
758             qw[
759             SDL_LOG_CATEGORY_APPLICATION SDL_LOG_CATEGORY_ERROR SDL_LOG_CATEGORY_ASSERT
760             SDL_LOG_CATEGORY_SYSTEM SDL_LOG_CATEGORY_AUDIO SDL_LOG_CATEGORY_VIDEO
761             SDL_LOG_CATEGORY_RENDER SDL_LOG_CATEGORY_INPUT SDL_LOG_CATEGORY_TEST
762             SDL_LOG_CATEGORY_RESERVED1 SDL_LOG_CATEGORY_RESERVED2
763             SDL_LOG_CATEGORY_RESERVED3 SDL_LOG_CATEGORY_RESERVED4
764             SDL_LOG_CATEGORY_RESERVED5 SDL_LOG_CATEGORY_RESERVED6
765             SDL_LOG_CATEGORY_RESERVED7 SDL_LOG_CATEGORY_RESERVED8
766             SDL_LOG_CATEGORY_RESERVED9 SDL_LOG_CATEGORY_RESERVED10
767             SDL_LOG_CATEGORY_CUSTOM
768             ]
769             ],
770             SDL_LogPriority => [
771             [ SDL_LOG_PRIORITY_VERBOSE => 1 ], qw[SDL_LOG_PRIORITY_DEBUG SDL_LOG_PRIORITY_INFO
772             SDL_LOG_PRIORITY_WARN SDL_LOG_PRIORITY_ERROR SDL_LOG_PRIORITY_CRITICAL
773             SDL_NUM_LOG_PRIORITIES]
774             ];
775             enum
776             SDL_MessageBoxFlags => [
777             [ SDL_MESSAGEBOX_ERROR => 0x00000010 ],
778             [ SDL_MESSAGEBOX_WARNING => 0x00000020 ],
779             [ SDL_MESSAGEBOX_INFORMATION => 0x00000040 ],
780             [ SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT => 0x00000080 ],
781             [ SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT => 0x00000100 ]
782             ],
783             SDL_MessageBoxButtonFlags => [
784             [ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT => 0x00000001 ],
785             [ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT => 0x00000002 ]
786             ],
787             SDL_MessageBoxColorType => [
788             qw[SDL_MESSAGEBOX_COLOR_BACKGROUND
789             SDL_MESSAGEBOX_COLOR_TEXT
790             SDL_MESSAGEBOX_COLOR_BUTTON_BORDER
791             SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND
792             SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED
793             SDL_MESSAGEBOX_COLOR_MAX]
794             ],
795             SDL_SystemCursor => [
796             qw[SDL_SYSTEM_CURSOR_ARROW
797             SDL_SYSTEM_CURSOR_IBEAM
798             SDL_SYSTEM_CURSOR_WAIT
799             SDL_SYSTEM_CURSOR_CROSSHAIR
800             SDL_SYSTEM_CURSOR_WAITARROW
801             SDL_SYSTEM_CURSOR_SIZENWSE
802             SDL_SYSTEM_CURSOR_SIZENESW
803             SDL_SYSTEM_CURSOR_SIZEWE
804             SDL_SYSTEM_CURSOR_SIZENS
805             SDL_SYSTEM_CURSOR_SIZEALL
806             SDL_SYSTEM_CURSOR_NO
807             SDL_SYSTEM_CURSOR_HAND
808             SDL_NUM_SYSTEM_CURSORS]
809             ],
810             SDL_MouseWheelDirection => [
811             qw[
812             SDL_MOUSEWHEEL_NORMAL
813             SDL_MOUSEWHEEL_FLIPPED
814             ]
815             ];
816 0           define mouseButton => [
817 0     0     [ SDL_BUTTON => sub ($x) { 1 << ( ($x) - 1 ) } ],
  0            
  0            
  0            
818             [ SDL_BUTTON_LEFT => 1 ],
819             [ SDL_BUTTON_MIDDLE => 2 ],
820             [ SDL_BUTTON_RIGHT => 3 ],
821             [ SDL_BUTTON_X1 => 4 ],
822             [ SDL_BUTTON_X2 => 5 ],
823 0     0     [ SDL_BUTTON_LMASK => sub () { SDL_BUTTON( SDL_BUTTON_LEFT() ); } ],
  0            
  0            
824 0     0     [ SDL_BUTTON_MMASK => sub () { SDL_BUTTON( SDL_BUTTON_MIDDLE() ); } ],
  0            
  0            
825 0     0     [ SDL_BUTTON_RMASK => sub () { SDL_BUTTON( SDL_BUTTON_RIGHT() ); } ],
  0            
  0            
826 0     0     [ SDL_BUTTON_X1MASK => sub () { SDL_BUTTON( SDL_BUTTON_X1() ); } ],
  0            
  0            
827 0           [ SDL_BUTTON_X2MASK => sub () { SDL_BUTTON( SDL_BUTTON_X2() ); } ]
  0            
828             ];
829             define alpha => [ [ SDL_ALPHA_OPAQUE => 255 ], [ SDL_ALPHA_TRANSPARENT => 0 ] ];
830             enum SDL_PixelType => [
831             qw[SDL_PIXELTYPE_UNKNOWN
832             SDL_PIXELTYPE_INDEX1
833             SDL_PIXELTYPE_INDEX4
834             SDL_PIXELTYPE_INDEX8
835             SDL_PIXELTYPE_PACKED8
836             SDL_PIXELTYPE_PACKED16
837             SDL_PIXELTYPE_PACKED32
838             SDL_PIXELTYPE_ARRAYU8
839             SDL_PIXELTYPE_ARRAYU16
840             SDL_PIXELTYPE_ARRAYU32
841             SDL_PIXELTYPE_ARRAYF16
842             SDL_PIXELTYPE_ARRAYF32]
843             ],
844             SDL_BitmapOrder => [
845             qw[
846             SDL_BITMAPORDER_NONE
847             SDL_BITMAPORDER_4321
848             SDL_BITMAPORDER_1234]
849             ],
850             SDL_PackedOrder => [
851             qw[
852             SDL_PACKEDORDER_NONE
853             SDL_PACKEDORDER_XRGB
854             SDL_PACKEDORDER_RGBX
855             SDL_PACKEDORDER_ARGB
856             SDL_PACKEDORDER_RGBA
857             SDL_PACKEDORDER_XBGR
858             SDL_PACKEDORDER_BGRX
859             SDL_PACKEDORDER_ABGR
860             SDL_PACKEDORDER_BGRA
861             ]
862             ],
863             SDL_ArrayOrder => [
864             qw[SDL_ARRAYORDER_NONE
865             SDL_ARRAYORDER_RGB
866             SDL_ARRAYORDER_RGBA
867             SDL_ARRAYORDER_ARGB
868             SDL_ARRAYORDER_BGR
869             SDL_ARRAYORDER_BGRA
870             SDL_ARRAYORDER_ABGR]
871             ],
872             SDL_PackedLayout => [
873             qw[SDL_PACKEDLAYOUT_NONE
874             SDL_PACKEDLAYOUT_332
875             SDL_PACKEDLAYOUT_4444
876             SDL_PACKEDLAYOUT_1555
877             SDL_PACKEDLAYOUT_5551
878             SDL_PACKEDLAYOUT_565
879             SDL_PACKEDLAYOUT_8888
880             SDL_PACKEDLAYOUT_2101010
881             SDL_PACKEDLAYOUT_1010102]
882             ];
883 0           define pixels => [
884 0     0     [ SDL_DEFINE_PIXELFOURCC => sub ( $A, $B, $C, $D ) { SDL_FOURCC( $A, $B, $C, $D ) } ],
  0            
  0            
  0            
  0            
  0            
  0            
885 0     0     [ SDL_DEFINE_PIXELFORMAT => sub ( $type, $order, $layout, $bits, $bytes ) {
  0            
  0            
  0            
  0            
  0            
886 0           ( ( 1 << 28 ) | ( ($type) << 24 ) | ( ($order) << 20 ) | ( ($layout) << 16 )
887             | ( ($bits) << 8 ) | ( ($bytes) << 0 ) )
888             }
889 0           ],
890 0     0     [ SDL_PIXELFLAG => sub ($X) { ( ( ($X) >> 28 ) & 0x0F ) } ],
  0            
  0            
  0            
891 0     0     [ SDL_PIXELTYPE => sub ($X) { ( ( ($X) >> 24 ) & 0x0F ) } ],
  0            
  0            
  0            
892 0     0     [ SDL_PIXELORDER => sub ($X) { ( ( ($X) >> 20 ) & 0x0F ) } ],
  0            
  0            
  0            
893 0     0     [ SDL_PIXELLAYOUT => sub ($X) { ( ( ($X) >> 16 ) & 0x0F ) } ],
  0            
  0            
  0            
894 0     0     [ SDL_BITSPERPIXEL => sub ($X) { ( ( ($X) >> 8 ) & 0xFF ) } ],
  0            
  0            
  0            
895 0     0     [ SDL_BYTESPERPIXEL => sub ($X) {
  0            
896             (
897 0 0 0       SDL_ISPIXELFORMAT_FOURCC($X) ? (
    0          
898             (
899             ( ($X) == SDL_PIXELFORMAT_YUY2() ) ||
900             ( ($X) == SDL_PIXELFORMAT_UYVY() ) ||
901             ( ($X) == SDL_PIXELFORMAT_YVYU() )
902             ) ? 2 : 1
903             ) :
904             ( ( ($X) >> 0 ) & 0xFF )
905             )
906             }
907 0           ],
908 0     0     [ SDL_ISPIXELFORMAT_INDEXED => sub ($format) {
  0            
909             (
910 0 0 0       !SDL_ISPIXELFORMAT_FOURCC($format) &&
      0        
911             ( ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_INDEX1() ) ||
912             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_INDEX4() ) ||
913             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_INDEX8() ) )
914             )
915             }
916 0           ],
917 0     0     [ SDL_ISPIXELFORMAT_PACKED => sub ($format) {
  0            
918             (
919 0 0 0       !SDL_ISPIXELFORMAT_FOURCC($format) &&
      0        
920             ( ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_PACKED8() ) ||
921             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_PACKED16() ) ||
922             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_PACKED32() ) )
923             )
924             }
925 0           ],
926 0     0     [ SDL_ISPIXELFORMAT_ARRAY => sub ($format) {
  0            
927             (
928 0 0 0       !SDL_ISPIXELFORMAT_FOURCC($format) &&
      0        
      0        
      0        
929             ( ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_ARRAYU8() ) ||
930             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_ARRAYU16() ) ||
931             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_ARRAYU32() ) ||
932             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_ARRAYF16() ) ||
933             ( SDL_PIXELTYPE($format) == SDL_PIXELTYPE_ARRAYF32() ) )
934             )
935             }
936 0           ],
937 0     0     [ SDL_ISPIXELFORMAT_ALPHA => sub ($format) {
  0            
938             (
939             (
940 0 0 0       SDL_ISPIXELFORMAT_PACKED($format) &&
      0        
      0        
      0        
941             ( ( SDL_PIXELORDER($format) == SDL_PACKEDORDER_ARGB() ) ||
942             ( SDL_PIXELORDER($format) == SDL_PACKEDORDER_RGBA() ) ||
943             ( SDL_PIXELORDER($format) == SDL_PACKEDORDER_ABGR() ) ||
944             ( SDL_PIXELORDER($format) == SDL_PACKEDORDER_BGRA() ) )
945             ) ||
946             (
947             SDL_ISPIXELFORMAT_ARRAY($format) &&
948             ( ( SDL_PIXELORDER($format) == SDL_ARRAYORDER_ARGB() ) ||
949             ( SDL_PIXELORDER($format) == SDL_ARRAYORDER_RGBA() ) ||
950             ( SDL_PIXELORDER($format) == SDL_ARRAYORDER_ABGR() ) ||
951             ( SDL_PIXELORDER($format) == SDL_ARRAYORDER_BGRA() ) )
952             )
953             )
954             }
955 0           ],
956              
957             # The flag is set to 1 because 0x1? is not in the printable ASCII range
958             [ SDL_ISPIXELFORMAT_FOURCC =>
959 0 0   0     sub ($format) { ( ($format) && ( SDL_PIXELFLAG($format) != 1 ) ) }
  0            
  0            
960             ]
961             ];
962             enum SDL_PixelFormatEnum => [
963             'SDL_PIXELFORMAT_UNKNOWN',
964             [ SDL_PIXELFORMAT_INDEX1LSB => sub () {
965             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_INDEX1(), SDL_BITMAPORDER_4321(), 0, 1, 0 );
966             }
967             ],
968             [ SDL_PIXELFORMAT_INDEX1MSB => sub () {
969             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_INDEX1(), SDL_BITMAPORDER_1234(), 0, 1, 0 );
970             }
971             ],
972             [ SDL_PIXELFORMAT_INDEX4LSB => sub () {
973             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_INDEX4(), SDL_BITMAPORDER_4321(), 0, 4, 0 );
974             }
975             ],
976             [ SDL_PIXELFORMAT_INDEX4MSB => sub () {
977             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_INDEX4(), SDL_BITMAPORDER_1234(), 0, 4, 0 );
978             }
979             ],
980             [ SDL_PIXELFORMAT_INDEX8 =>
981             sub () { SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_INDEX8(), 0, 0, 8, 1 ) }
982             ],
983             [ SDL_PIXELFORMAT_RGB332 => sub () {
984             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED8(), SDL_PACKEDORDER_XRGB(),
985             SDL_PACKEDLAYOUT_332(), 8, 1 );
986             }
987             ],
988             [ SDL_PIXELFORMAT_XRGB4444 => sub () {
989             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_XRGB(),
990             SDL_PACKEDLAYOUT_4444(), 12, 2 );
991             }
992             ],
993             [ SDL_PIXELFORMAT_RGB444 => sub () { SDL_PIXELFORMAT_XRGB4444() } ],
994             [ SDL_PIXELFORMAT_XBGR4444 => sub () {
995             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_XBGR(),
996             SDL_PACKEDLAYOUT_4444(), 12, 2 );
997             }
998             ],
999             [ SDL_PIXELFORMAT_BGR444 => sub () { SDL_PIXELFORMAT_XBGR4444() } ],
1000             [ SDL_PIXELFORMAT_XRGB1555 => sub () {
1001             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_XRGB(),
1002             SDL_PACKEDLAYOUT_1555(), 15, 2 );
1003             }
1004             ],
1005             [ SDL_PIXELFORMAT_RGB555 => sub () { SDL_PIXELFORMAT_XRGB1555() } ],
1006             [ SDL_PIXELFORMAT_XBGR1555 => sub () {
1007             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_XBGR(),
1008             SDL_PACKEDLAYOUT_1555(), 15, 2 );
1009             }
1010             ],
1011             [ SDL_PIXELFORMAT_BGR555 => sub () { SDL_PIXELFORMAT_XBGR1555() } ],
1012             [ SDL_PIXELFORMAT_ARGB4444 => sub () {
1013             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_ARGB(),
1014             SDL_PACKEDLAYOUT_4444(), 16, 2 );
1015             }
1016             ],
1017             [ SDL_PIXELFORMAT_RGBA4444 => sub () {
1018             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_RGBA(),
1019             SDL_PACKEDLAYOUT_4444(), 16, 2 );
1020             }
1021             ],
1022             [ SDL_PIXELFORMAT_ABGR4444 => sub () {
1023             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_ABGR(),
1024             SDL_PACKEDLAYOUT_4444(), 16, 2 );
1025             }
1026             ],
1027             [ SDL_PIXELFORMAT_BGRA4444 => sub () {
1028             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_BGRA(),
1029             SDL_PACKEDLAYOUT_4444(), 16, 2 );
1030             }
1031             ],
1032             [ SDL_PIXELFORMAT_ARGB1555 => sub () {
1033             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_ARGB(),
1034             SDL_PACKEDLAYOUT_1555(), 16, 2 );
1035             }
1036             ],
1037             [ SDL_PIXELFORMAT_RGBA5551 => sub () {
1038             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_RGBA(),
1039             SDL_PACKEDLAYOUT_5551(), 16, 2 );
1040             }
1041             ],
1042             [ SDL_PIXELFORMAT_ABGR1555 => sub () {
1043             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_ABGR(),
1044             SDL_PACKEDLAYOUT_1555(), 16, 2 );
1045             }
1046             ],
1047             [ SDL_PIXELFORMAT_BGRA5551 => sub () {
1048             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_BGRA(),
1049             SDL_PACKEDLAYOUT_5551(), 16, 2 );
1050             }
1051             ],
1052             [ SDL_PIXELFORMAT_RGB565 => sub () {
1053             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_XRGB(),
1054             SDL_PACKEDLAYOUT_565(), 16, 2 );
1055             }
1056             ],
1057             [ SDL_PIXELFORMAT_BGR565 => sub () {
1058             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED16(), SDL_PACKEDORDER_XBGR(),
1059             SDL_PACKEDLAYOUT_565(), 16, 2 );
1060             }
1061             ],
1062             [ SDL_PIXELFORMAT_RGB24 => sub () {
1063             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_ARRAYU8(), SDL_ARRAYORDER_RGB(), 0, 24, 3 );
1064             }
1065             ],
1066             [ SDL_PIXELFORMAT_BGR24 => sub () {
1067             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_ARRAYU8(), SDL_ARRAYORDER_BGR(), 0, 24, 3 );
1068             }
1069             ],
1070             [ SDL_PIXELFORMAT_XRGB8888 => sub () {
1071             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_XRGB(),
1072             SDL_PACKEDLAYOUT_8888(), 24, 4 );
1073             }
1074             ],
1075             [ SDL_PIXELFORMAT_RGB888 => sub () { SDL_PIXELFORMAT_XRGB8888() } ],
1076             [ SDL_PIXELFORMAT_RGBX8888 => sub () {
1077             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_RGBX(),
1078             SDL_PACKEDLAYOUT_8888(), 24, 4 );
1079             }
1080             ],
1081             [ SDL_PIXELFORMAT_XBGR8888 => sub () {
1082             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_XBGR(),
1083             SDL_PACKEDLAYOUT_8888(), 24, 4 );
1084             }
1085             ],
1086             [ SDL_PIXELFORMAT_BGR888 => sub () { SDL_PIXELFORMAT_XBGR8888() } ],
1087             [ SDL_PIXELFORMAT_BGRX8888 => sub () {
1088             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_BGRX(),
1089             SDL_PACKEDLAYOUT_8888(), 24, 4 );
1090             }
1091             ],
1092             [ SDL_PIXELFORMAT_ARGB8888 => sub () {
1093             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_ARGB(),
1094             SDL_PACKEDLAYOUT_8888(), 32, 4 );
1095             }
1096             ],
1097             [ SDL_PIXELFORMAT_RGBA8888 => sub () {
1098             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_RGBA(),
1099             SDL_PACKEDLAYOUT_8888(), 32, 4 );
1100             }
1101             ],
1102             [ SDL_PIXELFORMAT_ABGR8888 => sub () {
1103             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_ABGR(),
1104             SDL_PACKEDLAYOUT_8888(), 32, 4 );
1105             }
1106             ],
1107             [ SDL_PIXELFORMAT_BGRA8888 => sub () {
1108             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_BGRA(),
1109             SDL_PACKEDLAYOUT_8888(), 32, 4 );
1110             }
1111             ],
1112             [ SDL_PIXELFORMAT_ARGB2101010 => sub () {
1113             SDL_DEFINE_PIXELFORMAT( SDL_PIXELTYPE_PACKED32(), SDL_PACKEDORDER_ARGB(),
1114             SDL_PACKEDLAYOUT_2101010(),
1115             32, 4 );
1116             }
1117             ], ( # Aliases for RGBA byte arrays of color data, for the current platform
1118             SDL2::FFI::bigendian() ? (
1119             [ SDL_PIXELFORMAT_RGBA32 => sub() { SDL_PIXELFORMAT_RGBA8888() } ],
1120             [ SDL_PIXELFORMAT_ARGB32 => sub() { SDL_PIXELFORMAT_ARGB8888() } ],
1121             [ SDL_PIXELFORMAT_BGRA32 => sub() { SDL_PIXELFORMAT_BGRA8888() } ],
1122             [ SDL_PIXELFORMAT_ABGR32 => sub() { SDL_PIXELFORMAT_ABGR8888() } ]
1123             ) : (
1124             [ SDL_PIXELFORMAT_RGBA32 => sub() { SDL_PIXELFORMAT_ABGR8888() } ],
1125             [ SDL_PIXELFORMAT_ARGB32 => sub() { SDL_PIXELFORMAT_BGRA8888() } ],
1126             [ SDL_PIXELFORMAT_BGRA32 => sub() { SDL_PIXELFORMAT_ARGB8888() } ],
1127             [ SDL_PIXELFORMAT_ABGR32 => sub() { SDL_PIXELFORMAT_RGBA8888() } ],
1128             )
1129             ),
1130             [ SDL_PIXELFORMAT_YV12 => sub () { SDL_DEFINE_PIXELFOURCC( 'Y', 'V', '1', '2' ) } ],
1131             [ SDL_PIXELFORMAT_IYUV => sub () { SDL_DEFINE_PIXELFOURCC( 'I', 'Y', 'U', 'V' ) } ],
1132             [ SDL_PIXELFORMAT_YUY2 => sub () { SDL_DEFINE_PIXELFOURCC( 'Y', 'U', 'Y', '2' ) } ],
1133             [ SDL_PIXELFORMAT_UYVY => sub () { SDL_DEFINE_PIXELFOURCC( 'U', 'Y', 'V', 'Y' ) } ],
1134             [ SDL_PIXELFORMAT_YVYU => sub () { SDL_DEFINE_PIXELFOURCC( 'Y', 'V', 'Y', 'U' ) } ],
1135             [ SDL_PIXELFORMAT_NV12 => sub () { SDL_DEFINE_PIXELFOURCC( 'N', 'V', '1', '2' ) } ],
1136             [ SDL_PIXELFORMAT_NV21 => sub () { SDL_DEFINE_PIXELFOURCC( 'N', 'V', '2', '1' ) } ],
1137             [ SDL_PIXELFORMAT_EXTERNAL_OES => sub () { SDL_DEFINE_PIXELFOURCC( 'O', 'E', 'S', ' ' ) } ]
1138             ];
1139             enum SDL_PowerState => [
1140             qw[
1141             SDL_POWERSTATE_UNKNOWN
1142             SDL_POWERSTATE_ON_BATTERY SDL_POWERSTATE_NO_BATTERY
1143             SDL_POWERSTATE_CHARGING SDL_POWERSTATE_CHARGED]
1144             ];
1145              
1146             # START HERE!!!!!!!!!!!!!
1147             enum SDL_AssertState => [
1148             qw[ SDL_ASSERTION_RETRY
1149             SDL_ASSERTION_BREAK
1150             SDL_ASSERTION_ABORT
1151             SDL_ASSERTION_IGNORE
1152             SDL_ASSERTION_ALWAYS_IGNORE
1153             ]
1154             ];
1155             enum SDL_WindowFlags => [
1156             [ SDL_WINDOW_FULLSCREEN => 0x00000001 ], [ SDL_WINDOW_OPENGL => 0x00000002 ],
1157             [ SDL_WINDOW_SHOWN => 0x00000004 ], [ SDL_WINDOW_HIDDEN => 0x00000008 ],
1158             [ SDL_WINDOW_BORDERLESS => 0x00000010 ], [ SDL_WINDOW_RESIZABLE => 0x00000020 ],
1159             [ SDL_WINDOW_MINIMIZED => 0x00000040 ], [ SDL_WINDOW_MAXIMIZED => 0x00000080 ],
1160             [ SDL_WINDOW_MOUSE_GRABBED => 0x00000100 ], [ SDL_WINDOW_INPUT_FOCUS => 0x00000200 ],
1161             [ SDL_WINDOW_MOUSE_FOCUS => 0x00000400 ],
1162             [ SDL_WINDOW_FULLSCREEN_DESKTOP => sub { ( SDL_WINDOW_FULLSCREEN() | 0x00001000 ) } ],
1163             [ SDL_WINDOW_FOREIGN => 0x00000800 ], [ SDL_WINDOW_ALLOW_HIGHDPI => 0x00002000 ],
1164             [ SDL_WINDOW_MOUSE_CAPTURE => 0x00004000 ], [ SDL_WINDOW_ALWAYS_ON_TOP => 0x00008000 ],
1165             [ SDL_WINDOW_SKIP_TASKBAR => 0x00010000 ], [ SDL_WINDOW_UTILITY => 0x00020000 ],
1166             [ SDL_WINDOW_TOOLTIP => 0x00040000 ], [ SDL_WINDOW_POPUP_MENU => 0x00080000 ],
1167             [ SDL_WINDOW_KEYBOARD_GRABBED => 0x00100000 ], [ SDL_WINDOW_VULKAN => 0x10000000 ],
1168             [ SDL_WINDOW_METAL => 0x20000000 ],
1169             [ SDL_WINDOW_INPUT_GRABBED => sub { SDL_WINDOW_MOUSE_GRABBED() } ],, qw[
1170             SDL_WINDOWEVENT_NONE
1171             SDL_WINDOWEVENT_SHOWN
1172             SDL_WINDOWEVENT_HIDDEN
1173             SDL_WINDOWEVENT_EXPOSED
1174             SDL_WINDOWEVENT_MOVED
1175             SDL_WINDOWEVENT_RESIZED
1176             SDL_WINDOWEVENT_SIZE_CHANGED
1177             SDL_WINDOWEVENT_MINIMIZED
1178             SDL_WINDOWEVENT_MAXIMIZED
1179             SDL_WINDOWEVENT_RESTORED
1180             SDL_WINDOWEVENT_ENTER
1181             SDL_WINDOWEVENT_LEAVE
1182             SDL_WINDOWEVENT_FOCUS_GAINED
1183             SDL_WINDOWEVENT_FOCUS_LOST
1184             SDL_WINDOWEVENT_CLOSE
1185             SDL_WINDOWEVENT_TAKE_FOCUS
1186             SDL_WINDOWEVENT_HIT_TEST
1187             ]
1188             ],
1189             SDL_DisplayEventID => [
1190             qw[SDL_DISPLAYEVENT_NONE SDL_DISPLAYEVENT_ORIENTATION
1191             SDL_DISPLAYEVENT_CONNECTED SDL_DISPLAYEVENT_DISCONNECTED
1192             ]
1193             ],
1194             SDL_DisplayOrientation => [
1195             qw[SDL_ORIENTATION_UNKNOWN
1196             SDL_ORIENTATION_LANDSCAPE SDL_ORIENTATION_LANDSCAPE_FLIPPED
1197             SDL_ORIENTATION_PORTRAIT SDL_ORIENTATION_PORTRAIT_FLIPPED
1198             ]
1199             ],
1200             SDL_GLattr => [
1201             qw[
1202             SDL_GL_RED_SIZE
1203             SDL_GL_GREEN_SIZE
1204             SDL_GL_BLUE_SIZE
1205             SDL_GL_ALPHA_SIZE
1206             SDL_GL_BUFFER_SIZE
1207             SDL_GL_DOUBLEBUFFER
1208             SDL_GL_DEPTH_SIZE
1209             SDL_GL_STENCIL_SIZE
1210             SDL_GL_ACCUM_RED_SIZE
1211             SDL_GL_ACCUM_GREEN_SIZE
1212             SDL_GL_ACCUM_BLUE_SIZE
1213             SDL_GL_ACCUM_ALPHA_SIZE
1214             SDL_GL_STEREO
1215             SDL_GL_MULTISAMPLEBUFFERS
1216             SDL_GL_MULTISAMPLESAMPLES
1217             SDL_GL_ACCELERATED_VISUAL
1218             SDL_GL_RETAINED_BACKING
1219             SDL_GL_CONTEXT_MAJOR_VERSION
1220             SDL_GL_CONTEXT_MINOR_VERSION
1221             SDL_GL_CONTEXT_EGL
1222             SDL_GL_CONTEXT_FLAGS
1223             SDL_GL_CONTEXT_PROFILE_MASK
1224             SDL_GL_SHARE_WITH_CURRENT_CONTEXT
1225             SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
1226             SDL_GL_CONTEXT_RELEASE_BEHAVIOR
1227             SDL_GL_CONTEXT_RESET_NOTIFICATION
1228             SDL_GL_CONTEXT_NO_ERROR
1229             ]
1230             ],
1231             SDL_GLprofile => [
1232             [ SDL_GL_CONTEXT_PROFILE_CORE => 0x0001 ],
1233             [ SDL_GL_CONTEXT_PROFILE_COMPATIBILITY => 0x0002 ],
1234             [ SDL_GL_CONTEXT_PROFILE_ES => 0x0004 ]
1235             ],
1236             SDL_GLcontextFlag => [
1237             [ SDL_GL_CONTEXT_DEBUG_FLAG => 0x0001 ],
1238             [ SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG => 0x0002 ],
1239             [ SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG => 0x0004 ],
1240             [ SDL_GL_CONTEXT_RESET_ISOLATION_FLAG => 0x0008 ]
1241             ],
1242             SDL_GLcontextReleaseFlag => [
1243             [ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE => 0x0000 ],
1244             [ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH => 0x0001 ]
1245             ],
1246             SDL_GLContextResetNotification => [
1247             [ SDL_GL_CONTEXT_RESET_NO_NOTIFICATION => 0x0000 ],
1248             [ SDL_GL_CONTEXT_RESET_LOSE_CONTEXT => 0x0001 ]
1249             ],
1250             SDL_RendererFlags => [
1251             [ SDL_RENDERER_SOFTWARE => 0x00000001 ],
1252             [ SDL_RENDERER_ACCELERATED => 0x00000002 ],
1253             [ SDL_RENDERER_PRESENTVSYNC => 0x00000004 ],
1254             [ SDL_RENDERER_TARGETTEXTURE => 0x00000008 ]
1255             ],
1256             SDL_ScaleMode => [qw[SDL_SCALEMODENEAREST SDL_SCALEMODELINEAR SDL_SCALEMODEBEST]],
1257             SDL_TextureAccess =>
1258             [qw[SDL_TEXTUREACCESS_STATIC SDL_TEXTUREACCESS_STREAMING SDL_TEXTUREACCESS_TARGET]],
1259             SDL_TextureModulate => [
1260             [ SDL_TEXTUREMODULATE_NONE => 0x00000000 ],
1261             [ SDL_TEXTUREMODULATE_COLOR => 0x00000001 ],
1262             [ SDL_TEXTUREMODULATE_ALPHA => 0x00000002 ]
1263             ],
1264             SDL_RendererFlip => [
1265             [ SDL_FLIP_NONE => 0x00000000 ],
1266             [ SDL_FLIP_HORIZONTAL => 0x00000001 ],
1267             [ SDL_FLIP_VERTICAL => 0x00000002 ]
1268             ],
1269             SDL_EventAction => [
1270             qw[
1271             SDL_ADDEVENT
1272             SDL_PEEKEVENT
1273             SDL_GETEVENT]
1274             ],
1275             pixel_type => [
1276             qw[
1277             SDL_PIXELTYPE_UNKNOWN
1278             SDL_PIXELTYPE_INDEX1
1279             SDL_PIXELTYPE_INDEX4
1280             SDL_PIXELTYPE_INDEX8
1281             SDL_PIXELTYPE_PACKED8
1282             SDL_PIXELTYPE_PACKED16
1283             SDL_PIXELTYPE_PACKED32
1284             SDL_PIXELTYPE_ARRAYU8
1285             SDL_PIXELTYPE_ARRAYU16
1286             SDL_PIXELTYPE_ARRAYU32
1287             SDL_PIXELTYPE_ARRAYF16
1288             SDL_PIXELTYPE_ARRAYF32
1289             ]
1290             ],
1291             bitmap_order => [
1292             qw[
1293             SDL_BITMAPORDER_NONE
1294             SDL_BITMAPORDER_4321
1295             SDL_BITMAPORDER_1234
1296             ]
1297             ],
1298             packed_order => [
1299             qw[
1300             SDL_PACKEDORDER_NONE
1301             SDL_PACKEDORDER_XRGB
1302             SDL_PACKEDORDER_RGBX
1303             SDL_PACKEDORDER_ARGB
1304             SDL_PACKEDORDER_RGBA
1305             SDL_PACKEDORDER_XBGR
1306             SDL_PACKEDORDER_BGRX
1307             SDL_PACKEDORDER_ABGR
1308             SDL_PACKEDORDER_BGRA
1309             ]
1310             ],
1311             array_order => [
1312             qw[
1313             SDL_ARRAYORDER_NONE
1314             SDL_ARRAYORDER_RGB
1315             SDL_ARRAYORDER_RGBA
1316             SDL_ARRAYORDER_ARGB
1317             SDL_ARRAYORDER_BGR
1318             SDL_ARRAYORDER_BGRA
1319             SDL_ARRAYORDER_ABGR
1320             ]
1321             ],
1322             packed_layout => [
1323             qw[
1324             SDL_PACKEDLAYOUT_NONE
1325             SDL_PACKEDLAYOUT_332
1326             SDL_PACKEDLAYOUT_4444
1327             SDL_PACKEDLAYOUT_1555
1328             SDL_PACKEDLAYOUT_5551
1329             SDL_PACKEDLAYOUT_565
1330             SDL_PACKEDLAYOUT_8888
1331             SDL_PACKEDLAYOUT_2101010
1332             SDL_PACKEDLAYOUT_1010102
1333             ]
1334             ],
1335             ;
1336              
1337             # Keyboard codes
1338 0     0 0   sub SDLK_SCANCODE_MASK { 1 << 30 }
1339 0     0 0   sub SDL_SCANCODE_TO_KEYCODE ($X) { $X | SDLK_SCANCODE_MASK }
  0            
  0            
  0            
1340             enum SDL_Scancode =>
1341             [ [ SDL_SCANCODE_UNKNOWN => 0 ], [ SDL_SCANCODE_A => 4 ], [ SDL_SCANCODE_ESCAPE => 41 ] ];
1342              
1343             =pod
1344              
1345             /**
1346             * \name Usage page 0x07
1347             *
1348             * These values are from usage page 0x07 (USB keyboard page).
1349             */
1350             /* @{ */
1351              
1352             SDL_SCANCODE_A = 4,
1353             SDL_SCANCODE_B = 5,
1354             SDL_SCANCODE_C = 6,
1355             SDL_SCANCODE_D = 7,
1356             SDL_SCANCODE_E = 8,
1357             SDL_SCANCODE_F = 9,
1358             SDL_SCANCODE_G = 10,
1359             SDL_SCANCODE_H = 11,
1360             SDL_SCANCODE_I = 12,
1361             SDL_SCANCODE_J = 13,
1362             SDL_SCANCODE_K = 14,
1363             SDL_SCANCODE_L = 15,
1364             SDL_SCANCODE_M = 16,
1365             SDL_SCANCODE_N = 17,
1366             SDL_SCANCODE_O = 18,
1367             SDL_SCANCODE_P = 19,
1368             SDL_SCANCODE_Q = 20,
1369             SDL_SCANCODE_R = 21,
1370             SDL_SCANCODE_S = 22,
1371             SDL_SCANCODE_T = 23,
1372             SDL_SCANCODE_U = 24,
1373             SDL_SCANCODE_V = 25,
1374             SDL_SCANCODE_W = 26,
1375             SDL_SCANCODE_X = 27,
1376             SDL_SCANCODE_Y = 28,
1377             SDL_SCANCODE_Z = 29,
1378              
1379             SDL_SCANCODE_1 = 30,
1380             SDL_SCANCODE_2 = 31,
1381             SDL_SCANCODE_3 = 32,
1382             SDL_SCANCODE_4 = 33,
1383             SDL_SCANCODE_5 = 34,
1384             SDL_SCANCODE_6 = 35,
1385             SDL_SCANCODE_7 = 36,
1386             SDL_SCANCODE_8 = 37,
1387             SDL_SCANCODE_9 = 38,
1388             SDL_SCANCODE_0 = 39,
1389              
1390             SDL_SCANCODE_RETURN = 40,
1391             SDL_SCANCODE_ESCAPE = 41,
1392             SDL_SCANCODE_BACKSPACE = 42,
1393             SDL_SCANCODE_TAB = 43,
1394             SDL_SCANCODE_SPACE = 44,
1395              
1396             SDL_SCANCODE_MINUS = 45,
1397             SDL_SCANCODE_EQUALS = 46,
1398             SDL_SCANCODE_LEFTBRACKET = 47,
1399             SDL_SCANCODE_RIGHTBRACKET = 48,
1400             SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return
1401             * key on ISO keyboards and at the right end
1402             * of the QWERTY row on ANSI keyboards.
1403             * Produces REVERSE SOLIDUS (backslash) and
1404             * VERTICAL LINE in a US layout, REVERSE
1405             * SOLIDUS and VERTICAL LINE in a UK Mac
1406             * layout, NUMBER SIGN and TILDE in a UK
1407             * Windows layout, DOLLAR SIGN and POUND SIGN
1408             * in a Swiss German layout, NUMBER SIGN and
1409             * APOSTROPHE in a German layout, GRAVE
1410             * ACCENT and POUND SIGN in a French Mac
1411             * layout, and ASTERISK and MICRO SIGN in a
1412             * French Windows layout.
1413             */
1414             SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code
1415             * instead of 49 for the same key, but all
1416             * OSes I've seen treat the two codes
1417             * identically. So, as an implementor, unless
1418             * your keyboard generates both of those
1419             * codes and your OS treats them differently,
1420             * you should generate SDL_SCANCODE_BACKSLASH
1421             * instead of this code. As a user, you
1422             * should not rely on this code because SDL
1423             * will never generate it with most (all?)
1424             * keyboards.
1425             */
1426             SDL_SCANCODE_SEMICOLON = 51,
1427             SDL_SCANCODE_APOSTROPHE = 52,
1428             SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI
1429             * and ISO keyboards). Produces GRAVE ACCENT and
1430             * TILDE in a US Windows layout and in US and UK
1431             * Mac layouts on ANSI keyboards, GRAVE ACCENT
1432             * and NOT SIGN in a UK Windows layout, SECTION
1433             * SIGN and PLUS-MINUS SIGN in US and UK Mac
1434             * layouts on ISO keyboards, SECTION SIGN and
1435             * DEGREE SIGN in a Swiss German layout (Mac:
1436             * only on ISO keyboards), CIRCUMFLEX ACCENT and
1437             * DEGREE SIGN in a German layout (Mac: only on
1438             * ISO keyboards), SUPERSCRIPT TWO and TILDE in a
1439             * French Windows layout, COMMERCIAL AT and
1440             * NUMBER SIGN in a French Mac layout on ISO
1441             * keyboards, and LESS-THAN SIGN and GREATER-THAN
1442             * SIGN in a Swiss German, German, or French Mac
1443             * layout on ANSI keyboards.
1444             */
1445             SDL_SCANCODE_COMMA = 54,
1446             SDL_SCANCODE_PERIOD = 55,
1447             SDL_SCANCODE_SLASH = 56,
1448              
1449             SDL_SCANCODE_CAPSLOCK = 57,
1450              
1451             SDL_SCANCODE_F1 = 58,
1452             SDL_SCANCODE_F2 = 59,
1453             SDL_SCANCODE_F3 = 60,
1454             SDL_SCANCODE_F4 = 61,
1455             SDL_SCANCODE_F5 = 62,
1456             SDL_SCANCODE_F6 = 63,
1457             SDL_SCANCODE_F7 = 64,
1458             SDL_SCANCODE_F8 = 65,
1459             SDL_SCANCODE_F9 = 66,
1460             SDL_SCANCODE_F10 = 67,
1461             SDL_SCANCODE_F11 = 68,
1462             SDL_SCANCODE_F12 = 69,
1463              
1464             SDL_SCANCODE_PRINTSCREEN = 70,
1465             SDL_SCANCODE_SCROLLLOCK = 71,
1466             SDL_SCANCODE_PAUSE = 72,
1467             SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
1468             does send code 73, not 117) */
1469             SDL_SCANCODE_HOME = 74,
1470             SDL_SCANCODE_PAGEUP = 75,
1471             SDL_SCANCODE_DELETE = 76,
1472             SDL_SCANCODE_END = 77,
1473             SDL_SCANCODE_PAGEDOWN = 78,
1474             SDL_SCANCODE_RIGHT = 79,
1475             SDL_SCANCODE_LEFT = 80,
1476             SDL_SCANCODE_DOWN = 81,
1477             SDL_SCANCODE_UP = 82,
1478              
1479             SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
1480             */
1481             SDL_SCANCODE_KP_DIVIDE = 84,
1482             SDL_SCANCODE_KP_MULTIPLY = 85,
1483             SDL_SCANCODE_KP_MINUS = 86,
1484             SDL_SCANCODE_KP_PLUS = 87,
1485             SDL_SCANCODE_KP_ENTER = 88,
1486             SDL_SCANCODE_KP_1 = 89,
1487             SDL_SCANCODE_KP_2 = 90,
1488             SDL_SCANCODE_KP_3 = 91,
1489             SDL_SCANCODE_KP_4 = 92,
1490             SDL_SCANCODE_KP_5 = 93,
1491             SDL_SCANCODE_KP_6 = 94,
1492             SDL_SCANCODE_KP_7 = 95,
1493             SDL_SCANCODE_KP_8 = 96,
1494             SDL_SCANCODE_KP_9 = 97,
1495             SDL_SCANCODE_KP_0 = 98,
1496             SDL_SCANCODE_KP_PERIOD = 99,
1497              
1498             SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO
1499             * keyboards have over ANSI ones,
1500             * located between left shift and Y.
1501             * Produces GRAVE ACCENT and TILDE in a
1502             * US or UK Mac layout, REVERSE SOLIDUS
1503             * (backslash) and VERTICAL LINE in a
1504             * US or UK Windows layout, and
1505             * LESS-THAN SIGN and GREATER-THAN SIGN
1506             * in a Swiss German, German, or French
1507             * layout. */
1508             SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */
1509             SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag,
1510             * not a physical key - but some Mac keyboards
1511             * do have a power key. */
1512             SDL_SCANCODE_KP_EQUALS = 103,
1513             SDL_SCANCODE_F13 = 104,
1514             SDL_SCANCODE_F14 = 105,
1515             SDL_SCANCODE_F15 = 106,
1516             SDL_SCANCODE_F16 = 107,
1517             SDL_SCANCODE_F17 = 108,
1518             SDL_SCANCODE_F18 = 109,
1519             SDL_SCANCODE_F19 = 110,
1520             SDL_SCANCODE_F20 = 111,
1521             SDL_SCANCODE_F21 = 112,
1522             SDL_SCANCODE_F22 = 113,
1523             SDL_SCANCODE_F23 = 114,
1524             SDL_SCANCODE_F24 = 115,
1525             SDL_SCANCODE_EXECUTE = 116,
1526             SDL_SCANCODE_HELP = 117,
1527             SDL_SCANCODE_MENU = 118,
1528             SDL_SCANCODE_SELECT = 119,
1529             SDL_SCANCODE_STOP = 120,
1530             SDL_SCANCODE_AGAIN = 121, /**< redo */
1531             SDL_SCANCODE_UNDO = 122,
1532             SDL_SCANCODE_CUT = 123,
1533             SDL_SCANCODE_COPY = 124,
1534             SDL_SCANCODE_PASTE = 125,
1535             SDL_SCANCODE_FIND = 126,
1536             SDL_SCANCODE_MUTE = 127,
1537             SDL_SCANCODE_VOLUMEUP = 128,
1538             SDL_SCANCODE_VOLUMEDOWN = 129,
1539             /* not sure whether there's a reason to enable these */
1540             /* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
1541             /* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
1542             /* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
1543             SDL_SCANCODE_KP_COMMA = 133,
1544             SDL_SCANCODE_KP_EQUALSAS400 = 134,
1545              
1546             SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
1547             footnotes in USB doc */
1548             SDL_SCANCODE_INTERNATIONAL2 = 136,
1549             SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */
1550             SDL_SCANCODE_INTERNATIONAL4 = 138,
1551             SDL_SCANCODE_INTERNATIONAL5 = 139,
1552             SDL_SCANCODE_INTERNATIONAL6 = 140,
1553             SDL_SCANCODE_INTERNATIONAL7 = 141,
1554             SDL_SCANCODE_INTERNATIONAL8 = 142,
1555             SDL_SCANCODE_INTERNATIONAL9 = 143,
1556             SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */
1557             SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */
1558             SDL_SCANCODE_LANG3 = 146, /**< Katakana */
1559             SDL_SCANCODE_LANG4 = 147, /**< Hiragana */
1560             SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */
1561             SDL_SCANCODE_LANG6 = 149, /**< reserved */
1562             SDL_SCANCODE_LANG7 = 150, /**< reserved */
1563             SDL_SCANCODE_LANG8 = 151, /**< reserved */
1564             SDL_SCANCODE_LANG9 = 152, /**< reserved */
1565              
1566             SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */
1567             SDL_SCANCODE_SYSREQ = 154,
1568             SDL_SCANCODE_CANCEL = 155,
1569             SDL_SCANCODE_CLEAR = 156,
1570             SDL_SCANCODE_PRIOR = 157,
1571             SDL_SCANCODE_RETURN2 = 158,
1572             SDL_SCANCODE_SEPARATOR = 159,
1573             SDL_SCANCODE_OUT = 160,
1574             SDL_SCANCODE_OPER = 161,
1575             SDL_SCANCODE_CLEARAGAIN = 162,
1576             SDL_SCANCODE_CRSEL = 163,
1577             SDL_SCANCODE_EXSEL = 164,
1578              
1579             SDL_SCANCODE_KP_00 = 176,
1580             SDL_SCANCODE_KP_000 = 177,
1581             SDL_SCANCODE_THOUSANDSSEPARATOR = 178,
1582             SDL_SCANCODE_DECIMALSEPARATOR = 179,
1583             SDL_SCANCODE_CURRENCYUNIT = 180,
1584             SDL_SCANCODE_CURRENCYSUBUNIT = 181,
1585             SDL_SCANCODE_KP_LEFTPAREN = 182,
1586             SDL_SCANCODE_KP_RIGHTPAREN = 183,
1587             SDL_SCANCODE_KP_LEFTBRACE = 184,
1588             SDL_SCANCODE_KP_RIGHTBRACE = 185,
1589             SDL_SCANCODE_KP_TAB = 186,
1590             SDL_SCANCODE_KP_BACKSPACE = 187,
1591             SDL_SCANCODE_KP_A = 188,
1592             SDL_SCANCODE_KP_B = 189,
1593             SDL_SCANCODE_KP_C = 190,
1594             SDL_SCANCODE_KP_D = 191,
1595             SDL_SCANCODE_KP_E = 192,
1596             SDL_SCANCODE_KP_F = 193,
1597             SDL_SCANCODE_KP_XOR = 194,
1598             SDL_SCANCODE_KP_POWER = 195,
1599             SDL_SCANCODE_KP_PERCENT = 196,
1600             SDL_SCANCODE_KP_LESS = 197,
1601             SDL_SCANCODE_KP_GREATER = 198,
1602             SDL_SCANCODE_KP_AMPERSAND = 199,
1603             SDL_SCANCODE_KP_DBLAMPERSAND = 200,
1604             SDL_SCANCODE_KP_VERTICALBAR = 201,
1605             SDL_SCANCODE_KP_DBLVERTICALBAR = 202,
1606             SDL_SCANCODE_KP_COLON = 203,
1607             SDL_SCANCODE_KP_HASH = 204,
1608             SDL_SCANCODE_KP_SPACE = 205,
1609             SDL_SCANCODE_KP_AT = 206,
1610             SDL_SCANCODE_KP_EXCLAM = 207,
1611             SDL_SCANCODE_KP_MEMSTORE = 208,
1612             SDL_SCANCODE_KP_MEMRECALL = 209,
1613             SDL_SCANCODE_KP_MEMCLEAR = 210,
1614             SDL_SCANCODE_KP_MEMADD = 211,
1615             SDL_SCANCODE_KP_MEMSUBTRACT = 212,
1616             SDL_SCANCODE_KP_MEMMULTIPLY = 213,
1617             SDL_SCANCODE_KP_MEMDIVIDE = 214,
1618             SDL_SCANCODE_KP_PLUSMINUS = 215,
1619             SDL_SCANCODE_KP_CLEAR = 216,
1620             SDL_SCANCODE_KP_CLEARENTRY = 217,
1621             SDL_SCANCODE_KP_BINARY = 218,
1622             SDL_SCANCODE_KP_OCTAL = 219,
1623             SDL_SCANCODE_KP_DECIMAL = 220,
1624             SDL_SCANCODE_KP_HEXADECIMAL = 221,
1625              
1626             SDL_SCANCODE_LCTRL = 224,
1627             SDL_SCANCODE_LSHIFT = 225,
1628             SDL_SCANCODE_LALT = 226, /**< alt, option */
1629             SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */
1630             SDL_SCANCODE_RCTRL = 228,
1631             SDL_SCANCODE_RSHIFT = 229,
1632             SDL_SCANCODE_RALT = 230, /**< alt gr, option */
1633             SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */
1634              
1635             SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered
1636             * by any of the above, but since there's a
1637             * special KMOD_MODE for it I'm adding it here
1638             */
1639              
1640             /* @} *//* Usage page 0x07 */
1641              
1642             /**
1643             * \name Usage page 0x0C
1644             *
1645             * These values are mapped from usage page 0x0C (USB consumer page).
1646             */
1647             /* @{ */
1648              
1649             SDL_SCANCODE_AUDIONEXT = 258,
1650             SDL_SCANCODE_AUDIOPREV = 259,
1651             SDL_SCANCODE_AUDIOSTOP = 260,
1652             SDL_SCANCODE_AUDIOPLAY = 261,
1653             SDL_SCANCODE_AUDIOMUTE = 262,
1654             SDL_SCANCODE_MEDIASELECT = 263,
1655             SDL_SCANCODE_WWW = 264,
1656             SDL_SCANCODE_MAIL = 265,
1657             SDL_SCANCODE_CALCULATOR = 266,
1658             SDL_SCANCODE_COMPUTER = 267,
1659             SDL_SCANCODE_AC_SEARCH = 268,
1660             SDL_SCANCODE_AC_HOME = 269,
1661             SDL_SCANCODE_AC_BACK = 270,
1662             SDL_SCANCODE_AC_FORWARD = 271,
1663             SDL_SCANCODE_AC_STOP = 272,
1664             SDL_SCANCODE_AC_REFRESH = 273,
1665             SDL_SCANCODE_AC_BOOKMARKS = 274,
1666              
1667             /* @} *//* Usage page 0x0C */
1668              
1669             /**
1670             * \name Walther keys
1671             *
1672             * These are values that Christian Walther added (for mac keyboard?).
1673             */
1674             /* @{ */
1675              
1676             SDL_SCANCODE_BRIGHTNESSDOWN = 275,
1677             SDL_SCANCODE_BRIGHTNESSUP = 276,
1678             SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display
1679             switch, video mode switch */
1680             SDL_SCANCODE_KBDILLUMTOGGLE = 278,
1681             SDL_SCANCODE_KBDILLUMDOWN = 279,
1682             SDL_SCANCODE_KBDILLUMUP = 280,
1683             SDL_SCANCODE_EJECT = 281,
1684             SDL_SCANCODE_SLEEP = 282,
1685              
1686             SDL_SCANCODE_APP1 = 283,
1687             SDL_SCANCODE_APP2 = 284,
1688              
1689             /* @} *//* Walther keys */
1690              
1691             /**
1692             * \name Usage page 0x0C (additional media keys)
1693             *
1694             * These values are mapped from usage page 0x0C (USB consumer page).
1695             */
1696             /* @{ */
1697              
1698             SDL_SCANCODE_AUDIOREWIND = 285,
1699             SDL_SCANCODE_AUDIOFASTFORWARD = 286,
1700              
1701             /* @} *//* Usage page 0x0C (additional media keys) */
1702              
1703             /* Add any other keys here. */
1704              
1705             SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes
1706             for array bounds */
1707             =cut
1708              
1709             =encoding utf-8
1710              
1711             =head1 NAME
1712              
1713             SDL2::Enum - Enumerations and Defined Constants Related to SDL
1714              
1715             =head1 SYNOPSIS
1716              
1717             use SDL2::FFI qw[:all]; # Yep, you import from SDL2::FFI
1718              
1719             =head1 DESCRIPTION
1720              
1721              
1722             =head1 C<:init>
1723              
1724             These are the flags which may be passed to L<< C
1725             )>|SDL2::FFI/C >>. You should specify the subsystems which you
1726             will be using in your application.
1727              
1728             =over
1729              
1730             =item C - Timer subsystem
1731              
1732             =item C - Audio subsystem
1733              
1734             =item C - Video subsystem. Automatically initializes the events subsystem
1735              
1736             =item C - Joystick subsystem. Automatically initializes the events subsystem
1737              
1738             =item C - Haptic (force feedback) subsystem
1739              
1740             =item C - Controller subsystem. Automatically initializes the joystick subsystem
1741              
1742             =item C - Events subsystem
1743              
1744             =item C - Sensor subsystem
1745              
1746             =item C - All of the above subsystems
1747              
1748             =item C - Compatibility; this flag is ignored
1749              
1750             =back
1751              
1752             =cut
1753              
1754             =head1 C<:audioformat>
1755              
1756             Audio format flags.
1757              
1758             These are what the 16 bits in SDL_AudioFormat currently mean... (Unspecified
1759             bits are always zero).
1760              
1761             ++-----------------------sample is signed if set
1762             ||
1763             || ++-----------sample is bigendian if set
1764             || ||
1765             || || ++---sample is float if set
1766             || || ||
1767             || || || +---sample bit size---+
1768             || || || | |
1769             15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1770              
1771             =over
1772              
1773             =item C
1774              
1775             =item C
1776              
1777             =item C
1778              
1779             =item C
1780              
1781             =item C
1782              
1783             =item C
1784              
1785             =item C
1786              
1787             =item C
1788              
1789             =item C
1790              
1791             =item C
1792              
1793             =item C
1794              
1795             =back
1796              
1797             Defaults to LSB byte order.
1798              
1799             =over
1800              
1801             =item C - Unsigned 8-bit samples
1802              
1803             =item C - Signed 8-bit samples
1804              
1805             =item C - Unsigned 16-bit samples
1806              
1807             =item C - Signed 16-bit samples
1808              
1809             =item C - As above, but big-endian byte order
1810              
1811             =item C - As above, but big-endian byte order
1812              
1813             =item C - C
1814              
1815             =item C - C
1816              
1817             =back
1818              
1819             int32 support.
1820              
1821             =over
1822              
1823             =item C - 32-bit integer samples
1824              
1825             =item C - As above, but big-endian byte order
1826              
1827             =item C - C
1828              
1829             =back
1830              
1831             float 32 support.
1832              
1833             =over
1834              
1835             =item C - 32-bit floating point samples
1836              
1837             =item C - As above, but big-endian byte order
1838              
1839             =item C - C
1840              
1841             =back
1842              
1843             Native audio byte ordering.
1844              
1845             =over
1846              
1847             =item C
1848              
1849             =item C
1850              
1851             =item C
1852              
1853             =item C
1854              
1855             =back
1856              
1857             Which audio format changes are allowed when opening a device.
1858              
1859             =over
1860              
1861             =item C
1862              
1863             =item C
1864              
1865             =item C
1866              
1867             =item C
1868              
1869             =item C
1870              
1871             =back
1872              
1873             Upper limit of filters in SDL_AudioCVT
1874              
1875             =over
1876              
1877             C - The maximum number of SDL_AudioFilter functions
1878             in SDL_AudioCVT is currently limited to 9. The Cfilters( )>
1879             array has 10 pointers, one of which is the terminating NULL pointer.
1880              
1881             =back
1882              
1883             =head1 C<:audiostatus>
1884              
1885             Get the current audio state.
1886              
1887             =over
1888              
1889             =item C
1890              
1891             =item C
1892              
1893             =item C
1894              
1895             =back
1896              
1897             =head1 C<:blendmode>
1898              
1899             The blend mode used in L<< C|SDL::FFI/C
1900             ... )> >> and drawing operations.
1901              
1902             =over
1903              
1904             =item C - no blending
1905              
1906             dstRGBA = srcRGBA
1907              
1908             =item C - alpha blending
1909              
1910             dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA))
1911             dstA = srcA + (dstA * (1-srcA))
1912              
1913             =item C - additive blending
1914              
1915             dstRGB = (srcRGB * srcA) + dstRGB
1916             dstA = dstA
1917              
1918             =item C - color modulate
1919              
1920             dstRGB = srcRGB * dstRGB
1921             dstA = dstA
1922              
1923             =item C - color multiply
1924              
1925             dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA))
1926             dstA = (srcA * dstA) + (dstA * (1-srcA))
1927              
1928             =item C
1929              
1930             =back
1931              
1932             Additional custom blend modes can be returned by L<<
1933             C|SDL2::FFI/C
1934             ... )> >>.
1935              
1936             =head2 C<:blendoperation>
1937              
1938             The blend operation used when combining source and destination pixel
1939             components.
1940              
1941             =over
1942              
1943             =item C - supported by all renderers
1944              
1945             dst + src
1946              
1947             =item C - supported by D3D9, D3D11, OpenGL, OpenGLES
1948              
1949             dst - src
1950              
1951             =item C - supported by D3D9, D3D11, OpenGL, OpenGLES
1952              
1953             src - dst
1954              
1955             =item C - supported by D3D11
1956              
1957             min(dst, src)
1958              
1959             =item C - supported by D3D11
1960              
1961             max(dst, src)
1962              
1963             =back
1964              
1965             =head1 C<:blendfactor>
1966              
1967             The normalized factor used to multiply pixel components.
1968              
1969             =over
1970              
1971             =item C - C< 0, 0, 0, 0 >
1972              
1973             =item C - C< 1, 1, 1, 1 >
1974              
1975             =item C - C< srcR, srcG, srcB, srcA >
1976              
1977             =item C - C< 1-srcR, 1-srcG, 1-srcB, 1-srcA >
1978              
1979             =item C - C< srcA, srcA, srcA, srcA >
1980              
1981             =item C - C< 1-srcA, 1-srcA, 1-srcA, 1-srcA >
1982              
1983             =item C - C< dstR, dstG, dstB, dstA >
1984              
1985             =item C - C< 1-dstR, 1-dstG, 1-dstB, 1-dstA >
1986              
1987             =item C - C< dstA, dstA, dstA, dstA >
1988              
1989             =item C - C< 1-dstA, 1-dstA, 1-dstA, 1-dstA >
1990              
1991             =back
1992              
1993             =head1 C<:errorcode>
1994              
1995             =over
1996              
1997             =item C - Out of memory
1998              
1999             =item C - Error reading file
2000              
2001             =item C - Error writing file
2002              
2003             =item C - Error seeking in file
2004              
2005             =item C
2006              
2007             =item C
2008              
2009             =back
2010              
2011             =head1 C<:eventstate>
2012              
2013             General keyboard/mouse state definitions
2014              
2015             =over
2016              
2017             =item C
2018              
2019             =item C
2020              
2021             =back
2022              
2023             =head1 C<:eventtype>
2024              
2025             The types of events that can be delivered.
2026              
2027             =over
2028              
2029             =item C - Unused
2030              
2031             =item C - User-requested quit
2032              
2033             =item C - The application is being terminated by the OS
2034              
2035             Called on iOS in C
2036              
2037             Called on Android in C
2038              
2039             =item C - The application is low on memory, free memory if possible
2040              
2041             Called on iOS in C
2042              
2043             Called on Android in C
2044              
2045             =item C - The application is about to enter the background
2046              
2047             Called on iOS in C
2048              
2049             Called on Android in C
2050              
2051             =item C - The application did enter the background and may not get CPU for some time
2052              
2053             Called on iOS in C
2054              
2055             Called on Android in C
2056              
2057             =item C - The application is about to enter the foreground
2058              
2059             Called on iOS in C
2060              
2061             Called on Android in C
2062              
2063             =item C - The application is now interactive
2064              
2065             Called on iOS in C
2066              
2067             Called on Android in C
2068              
2069             =item C - The user's locale preferences have changed
2070              
2071             =item C - Display state change
2072              
2073             =item C - Window state change
2074              
2075             =item C - System specific event
2076              
2077             =item C - Key pressed
2078              
2079             =item C - Key released
2080              
2081             =item C - Keyboard text editing (composition)
2082              
2083             =item C - Keyboard text input
2084              
2085             =item C - Keymap changed due to a system event such as an input language or keyboard layout change
2086              
2087             =item C - Mouse moved
2088              
2089             =item C - Mouse button pressed
2090              
2091             =item C - Mouse button released
2092              
2093             =item C - Mouse wheel motion
2094              
2095             =item C - Joystick axis motion
2096              
2097             =item C - Joystick trackball motion
2098              
2099             =item C - Joystick hat position change
2100              
2101             =item C - Joystick button pressed
2102              
2103             =item C - Joystick button released
2104              
2105             =item C - A new joystick has been inserted into the system
2106              
2107             =item C - An opened joystick has been removed
2108              
2109             =item C - Game controller axis motion
2110              
2111             =item C - Game controller button pressed
2112              
2113             =item C - Game controller button released
2114              
2115             =item C - A new Game controller has been inserted into the system
2116              
2117             =item C - An opened Game controller has been removed
2118              
2119             =item C - The controller mapping was updated
2120              
2121             =item C - Game controller touchpad was touched
2122              
2123             =item C - Game controller touchpad finger was moved
2124              
2125             =item C - Game controller touchpad finger was lifted
2126              
2127             =item C - Game controller sensor was updated
2128              
2129             =item C
2130              
2131             =item C
2132              
2133             =item C
2134              
2135             =item C
2136              
2137             =item C
2138              
2139             =item C
2140              
2141             =item C - The clipboard changed
2142              
2143             =item C - The system requests a file open
2144              
2145             =item C - text/plain drag-and-drop event
2146              
2147             =item C - A new set of drops is beginning (NULL filename)
2148              
2149             =item C - Current set of drops is now complete (NULL filename)
2150              
2151             =item C - A new audio device is available
2152              
2153             =item C - An audio device has been removed
2154              
2155             =item C - A sensor was updated
2156              
2157             =item C - The render targets have been reset and their contents need to be updated
2158              
2159             =item C - The device has been reset and all textures need to be recreated
2160              
2161             =item C
2162              
2163             =item C - This last event is only for bounding internal arrays
2164              
2165             =back
2166              
2167             Events C through C are for your use and should be
2168             allocated with L<< C
2169             )>|SDL2::FFI/C >>.
2170              
2171             =head1 C<:eventState>
2172              
2173             =over
2174              
2175             =item C
2176              
2177             =item C
2178              
2179             =item C
2180              
2181             =item C
2182              
2183             =back
2184              
2185             =head1 C<:gameControllerType>
2186              
2187             =over
2188              
2189             =item C
2190              
2191             =item C
2192              
2193             =item C
2194              
2195             =item C
2196              
2197             =item C
2198              
2199             =item C
2200              
2201             =item C
2202              
2203             =item C
2204              
2205             =back
2206              
2207             =head1 C<:gameControllerBindType>
2208              
2209             =over
2210              
2211             =item C
2212              
2213             =item C
2214              
2215             =item C
2216              
2217             =item C
2218              
2219             =back
2220              
2221             =head2 C<:gameControllerAxis>
2222              
2223             The list of axes available from a controller
2224              
2225             Thumbstick axis values range from C to
2226             C, and are centered within ~8000 of zero, though
2227             advanced UI will allow users to set or autodetect the dead zone, which varies
2228             between controllers.
2229              
2230             Trigger axis values range from C<0> to C.
2231              
2232             =over
2233              
2234             =item C
2235              
2236             =item C
2237              
2238             =item C
2239              
2240             =item C
2241              
2242             =item C
2243              
2244             =item C
2245              
2246             =item C
2247              
2248             =item C
2249              
2250             =back
2251              
2252             =head1 C<:gameControllerButton>
2253              
2254             The list of buttons available from a controller
2255              
2256             =over
2257              
2258             =item C
2259              
2260             =item C
2261              
2262             =item C
2263              
2264             =item C
2265              
2266             =item C
2267              
2268             =item C
2269              
2270             =item C
2271              
2272             =item C
2273              
2274             =item C
2275              
2276             =item C
2277              
2278             =item C
2279              
2280             =item C
2281              
2282             =item C
2283              
2284             =item C
2285              
2286             =item C
2287              
2288             =item C
2289              
2290             =item C - Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button
2291              
2292             =item C - Xbox Elite paddle P1
2293              
2294             =item C - Xbox Elite paddle P3
2295              
2296             =item C - Xbox Elite paddle P2
2297              
2298             =item C - Xbox Elite paddle P4
2299              
2300             =item C - PS4/PS5 touchpad button
2301              
2302             =item C
2303              
2304             =back
2305              
2306             =head1 C<:haptic>
2307              
2308             Different haptic features a device can have.
2309              
2310             =over
2311              
2312             =item C - Constant haptic effect
2313              
2314             =item C - Periodic haptic effect that simulates sine waves
2315              
2316             =item C - Haptic effect for direct control over high/low frequency motors
2317              
2318             =item C - Periodic haptic effect that simulates triangular waves
2319              
2320             =item C - Periodic haptic effect that simulates saw tooth up waves
2321              
2322             =item C - Periodic haptic effect that simulates saw tooth down waves
2323              
2324             =item C - Ramp haptic effect
2325              
2326             =item C - Condition haptic effect that simulates a spring. Effect is based on the axes position
2327              
2328             =item C - Condition haptic effect that simulates dampening. Effect is based on the axes velocity
2329              
2330             =item C - Condition haptic effect that simulates inertia. Effect is based on the axes acceleration
2331              
2332             =item C - Condition haptic effect that simulates friction. Effect is based on the axes movement
2333              
2334             =item C - User defined custom haptic effect
2335              
2336             =back
2337              
2338             These last few are features the device has, not effects.
2339              
2340             =over
2341              
2342             =item C - Device supports setting the global gain.
2343              
2344             =item C - Device supports setting autocenter
2345              
2346             =item C - Device supports querying effect status
2347              
2348             =item C - Devices supports being paused
2349              
2350             =back
2351              
2352             Direction encodings
2353              
2354             =over
2355              
2356             =item C - Uses polar coordinates for the direction
2357              
2358             =item C - Uses cartesian coordinates for the direction
2359              
2360             =item C - Uses spherical coordinates for the direction
2361              
2362             =item C - 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
2363              
2364             =back
2365              
2366             Misc defines.
2367              
2368             =over
2369              
2370             =item C - Used to play a device an infinite number of times
2371              
2372             =back
2373              
2374             =head1 C<:hints>
2375              
2376             An enumeration of hint priorities as C.
2377              
2378             =over
2379              
2380             =item C - low priority, used for default values
2381              
2382             =item C - medium priority
2383              
2384             =item C - high priority
2385              
2386             =back
2387              
2388             The following enum values can be passed to L
2389             Variable|SDL2::FFI/Configuration Variables> related functions.
2390              
2391             =over
2392              
2393             =item C
2394              
2395             A hint that specifies whether the Android / iOS built-in accelerometer should
2396             be listed as a joystick device, rather than listing actual joysticks only.
2397              
2398             Values:
2399              
2400             0 list only real joysticks and accept input from them
2401             1 list real joysticks along with the accelorometer as if it were a 3 axis joystick (the default)
2402              
2403             Example:
2404              
2405             # This disables the use of gyroscopes as axis device
2406             SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0");
2407              
2408             =item C
2409              
2410             A hint that specifies the Android APK expansion main file version.
2411              
2412             Values:
2413              
2414             X the Android APK expansion main file version (should be a string number like "1", "2" etc.)
2415              
2416             This hint must be set together with the hint
2417             C.
2418              
2419             If both hints were set then C will look into expansion files
2420             after a given relative path was not found in the internal storage and assets.
2421              
2422             By default this hint is not set and the APK expansion files are not searched.
2423              
2424             =item C
2425              
2426             A hint that specifies the Android APK expansion patch file version.
2427              
2428             Values:
2429              
2430             X the Android APK expansion patch file version (should be a string number like "1", "2" etc.)
2431              
2432             This hint must be set together with the hint
2433             C.
2434              
2435             If both hints were set then C will look into expansion files
2436             after a given relative path was not found in the internal storage and assets.
2437              
2438             By default this hint is not set and the APK expansion files are not searched.
2439              
2440             =item C
2441              
2442             A hint that specifies a variable to control whether mouse and touch events are
2443             to be treated together or separately.
2444              
2445             Values:
2446              
2447             0 mouse events will be handled as touch events and touch will raise fake mouse events (default)
2448             1 mouse events will be handled separately from pure touch events
2449              
2450             By default mouse events will be handled as touch events and touch will raise
2451             fake mouse events.
2452              
2453             The value of this hint is used at runtime, so it can be changed at any time.
2454              
2455             =item C
2456              
2457             A hint that specifies whether controllers used with the Apple TV generate UI
2458             events.
2459              
2460             Values:
2461              
2462             0 controller input does not gnerate UI events (default)
2463             1 controller input generates UI events
2464              
2465             When UI events are generated by controller input, the app will be backgrounded
2466             when the Apple TV remote's menu button is pressed, and when the pause or B
2467             buttons on gamepads are pressed.
2468              
2469             More information about properly making use of controllers for the Apple TV can
2470             be found here:
2471             https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
2472              
2473             =item C
2474              
2475             A hint that specifies whether the Apple TV remote's joystick axes will
2476             automatically match the rotation of the remote.
2477              
2478              
2479             Values:
2480              
2481             0 remote orientation does not affect joystick axes (default)
2482             1 joystick axes are based on the orientation of the remote
2483              
2484             =item C
2485              
2486             A hint that specifies whether SDL should not use version 4 of the bitmap header
2487             when saving BMPs.
2488              
2489             Values:
2490              
2491             0 version 4 of the bitmap header will be used when saving BMPs (default)
2492             1 version 4 of the bitmap header will not be used when saving BMPs
2493              
2494             The bitmap header version 4 is required for proper alpha channel support and
2495             SDL will use it when required. Should this not be desired, this hint can force
2496             the use of the 40 byte header version which is supported everywhere.
2497              
2498             If the hint is not set then surfaces with a colorkey or an alpha channel are
2499             saved to a 32-bit BMP file with an alpha mask. SDL will use the bitmap header
2500             version 4 and set the alpha mask accordingly. This is the default behavior
2501             since SDL 2.0.5.
2502              
2503             If the hint is set then surfaces with a colorkey or an alpha channel are saved
2504             to a 32-bit BMP file without an alpha mask. The alpha channel data will be in
2505             the file, but applications are going to ignore it. This was the default
2506             behavior before SDL 2.0.5.
2507              
2508             =item C
2509              
2510             A hint that specifies if SDL should give back control to the browser
2511             automatically when running with asyncify.
2512              
2513             Values:
2514              
2515             0 disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
2516             1 enable emscripten_sleep calls (default)
2517              
2518             This hint only applies to the Emscripten platform.
2519              
2520             =item C
2521              
2522             A hint that specifies a value to override the binding element for keyboard
2523             inputs for Emscripten builds.
2524              
2525             Values:
2526              
2527             #window the JavaScript window object (default)
2528             #document the JavaScript document object
2529             #screen the JavaScript window.screen object
2530             #canvas the default WebGL canvas element
2531              
2532             Any other string without a leading # sign applies to the element on the page
2533             with that ID.
2534              
2535             This hint only applies to the Emscripten platform.
2536              
2537             =item C
2538              
2539             A hint that specifies how 3D acceleration is used with L
2540             ... )|SDL2/SDL_GetWindowSurface( ... )>.
2541              
2542             Values:
2543              
2544             0 disable 3D acceleration
2545             1 enable 3D acceleration, using the default renderer
2546             X enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.)
2547              
2548             By default SDL tries to make a best guess whether to use acceleration or not on
2549             each platform.
2550              
2551             SDL can try to accelerate the screen surface returned by
2552             L by using
2553             streaming textures with a 3D rendering engine. This variable controls whether
2554             and how this is done.
2555              
2556             =item C
2557              
2558             A variable that lets you provide a file with extra gamecontroller db entries.
2559              
2560             This hint must be set before calling C.
2561              
2562             You can update mappings after the system is initialized with
2563             C and C.
2564              
2565             =item C
2566              
2567             A variable setting the double click time, in milliseconds.
2568              
2569             =item C
2570              
2571             A hint that specifies a variable controlling whether the idle timer is disabled
2572             on iOS.
2573              
2574             Values:
2575              
2576             0 enable idle timer (default)
2577             1 disable idle timer
2578              
2579             When an iOS application does not receive touches for some time, the screen is
2580             dimmed automatically. For games where the accelerometer is the only input this
2581             is problematic. This functionality can be disabled by setting this hint.
2582              
2583             As of SDL 2.0.4, C and C
2584             accomplish the same thing on iOS. They should be preferred over this hint.
2585              
2586             =item C
2587              
2588             A variable to control whether we trap the Android back button to handle it
2589             manually. This is necessary for the right mouse button to work on some Android
2590             devices, or to be able to trap the back button for use in your code reliably.
2591             If set to true, the back button will show up as an C /
2592             C pair with a keycode of C.
2593              
2594             The variable can be set to the following values:
2595              
2596             0 Back button will be handled as usual for system. (default)
2597             1 Back button will be trapped, allowing you to handle the key press
2598             manually. (This will also let right mouse click work on systems
2599             where the right mouse button functions as back.)
2600              
2601             The value of this hint is used at runtime, so it can be changed at any time.
2602              
2603             =item C
2604              
2605             A variable controlling whether the HIDAPI joystick drivers should be used.
2606              
2607             This variable can be set to the following values:
2608              
2609             0 HIDAPI drivers are not used
2610             1 HIDAPI drivers are used (default)
2611              
2612             This variable is the default for all drivers, but can be overridden by the
2613             hints for specific drivers below.
2614              
2615             =item C
2616              
2617             A hint that specifies if the SDL app should not be forced to become a
2618             foreground process on Mac OS X.
2619              
2620             Values:
2621              
2622             0 force the SDL app to become a foreground process (default)
2623             1 do not force the SDL app to become a foreground process
2624              
2625             This hint only applies to Mac OSX.
2626              
2627             =item C
2628              
2629             A hint that specifies whether ctrl+click should generate a right-click event on
2630             Mac.
2631              
2632             Values:
2633              
2634             0 disable emulating right click (default)
2635             1 enable emulating right click
2636              
2637             =item C
2638              
2639             A hint that specifies if mouse click events are sent when clicking to focus an
2640             SDL window.
2641              
2642             Values:
2643              
2644             0 no mouse click events are sent when clicking to focus (default)
2645             1 mouse click events are sent when clicking to focus
2646              
2647             =item C
2648              
2649             A hint that specifies whether relative mouse mode is implemented using mouse
2650             warping.
2651              
2652             Values:
2653              
2654             0 relative mouse mode uses the raw input (default)
2655             1 relative mouse mode uses mouse warping
2656              
2657             =item C
2658              
2659             A hint that specifies not to catch the C or C signals.
2660              
2661             Values:
2662              
2663             0 SDL will install a SIGINT and SIGTERM handler, and when it
2664             catches a signal, convert it into an SDL_QUIT event
2665             1 SDL will not install a signal handler at all
2666              
2667             =item C
2668              
2669             A variable controlling which orientations are allowed on iOS/Android.
2670              
2671             In some circumstances it is necessary to be able to explicitly control which UI
2672             orientations are allowed.
2673              
2674             This variable is a space delimited list of the following values:
2675              
2676             =over
2677              
2678             =item C
2679              
2680             =item C
2681              
2682             =item C
2683              
2684             =item C
2685              
2686             =back
2687              
2688             =item C
2689              
2690             A variable controlling whether to enable Direct3D 11+'s Debug Layer.
2691              
2692             This variable does not have any effect on the Direct3D 9 based renderer.
2693              
2694             This variable can be set to the following values:
2695              
2696             0 Disable Debug Layer use (default)
2697             1 Enable Debug Layer use
2698              
2699             =item C
2700              
2701             A variable controlling whether the Direct3D device is initialized for
2702             thread-safe operations.
2703              
2704             This variable can be set to the following values:
2705              
2706             0 Thread-safety is not enabled (faster; default)
2707             1 Thread-safety is enabled
2708              
2709             =item C
2710              
2711             A variable specifying which render driver to use.
2712              
2713             If the application doesn't pick a specific renderer to use, this variable
2714             specifies the name of the preferred renderer. If the preferred renderer can't
2715             be initialized, the normal default renderer is used.
2716              
2717             This variable is case insensitive and can be set to the following values:
2718              
2719             =over
2720              
2721             =item C
2722              
2723             =item C
2724              
2725             =item C
2726              
2727             =item C
2728              
2729             =item C
2730              
2731             =item C
2732              
2733             =back
2734              
2735             The default varies by platform, but it's the first one in the list that is
2736             available on the current platform.
2737              
2738             =item C
2739              
2740             A variable controlling whether the OpenGL render driver uses shaders if they
2741             are available.
2742              
2743             This variable can be set to the following values:
2744              
2745             0 Disable shaders
2746             1 Enable shaders (default)
2747              
2748             =item C
2749              
2750             A variable controlling the scaling quality
2751              
2752             This variable can be set to the following values: 0 or nearest Nearest
2753             pixel sampling (default) 1 or linear Linear filtering (supported by
2754             OpenGL and Direct3D) 2 or best Currently this is the same as linear
2755              
2756             =item C
2757              
2758             A variable controlling whether updates to the SDL screen surface should be
2759             synchronized with the vertical refresh, to avoid tearing.
2760              
2761             This variable can be set to the following values:
2762              
2763             0 Disable vsync
2764             1 Enable vsync
2765              
2766             By default SDL does not sync screen surface updates with vertical refresh.
2767              
2768             =item C
2769              
2770             Tell SDL which Dispmanx layer to use on a Raspberry PI
2771              
2772             Also known as Z-order. The variable can take a negative or positive value.
2773              
2774             The default is C<10000>.
2775              
2776             =item C
2777              
2778             A string specifying SDL's threads stack size in bytes or C<0> for the backend's
2779             default size
2780              
2781             Use this hint in case you need to set SDL's threads stack size to other than
2782             the default. This is specially useful if you build SDL against a non glibc libc
2783             library (such as musl) which provides a relatively small default thread stack
2784             size (a few kilobytes versus the default 8MB glibc uses). Support for this hint
2785             is currently available only in the pthread, Windows, and PSP backend.
2786              
2787             Instead of this hint, in 2.0.9 and later, you can use
2788             C. This hint only works with the classic
2789             C.
2790              
2791             =item C
2792              
2793             A variable that controls the timer resolution, in milliseconds.
2794              
2795             he higher resolution the timer, the more frequently the CPU services timer
2796             interrupts, and the more precise delays are, but this takes up power and CPU
2797             time. This hint is only used on Windows.
2798              
2799             See this blog post for more information:
2800             L
2801              
2802             If this variable is set to C<0>, the system timer resolution is not set.
2803              
2804             The default value is C<1>. This hint may be set at any time.
2805              
2806             =item C
2807              
2808             A variable controlling whether the screensaver is enabled.
2809              
2810             This variable can be set to the following values:
2811              
2812             0 Disable screensaver
2813             1 Enable screensaver
2814              
2815             By default SDL will disable the screensaver.
2816              
2817             =item C
2818              
2819             If set to C<1>, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
2820              
2821             =item C
2822              
2823             A variable that dictates policy for fullscreen Spaces on Mac OS X.
2824              
2825             This hint only applies to Mac OS X.
2826              
2827             The variable can be set to the following values:
2828              
2829             0 Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
2830             SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
2831             button on their titlebars).
2832             1 Enable Spaces support (FULLSCREEN_DESKTOP will use them and
2833             SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
2834             button on their titlebars).
2835              
2836             The default value is C<1>. Spaces are disabled regardless of this hint if the
2837             OS isn't at least Mac OS X Lion (10.7). This hint must be set before any
2838             windows are created.
2839              
2840             =item C
2841              
2842             Minimize your C if it loses key focus when in fullscreen mode.
2843             Defaults to false.
2844              
2845             Warning: Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're seeing if
2846             "true" causes more problems than it solves in modern times.
2847              
2848             =item C
2849              
2850             A variable specifying which shader compiler to preload when using the Chrome
2851             ANGLE binaries
2852              
2853             SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It can use
2854             two different sets of binaries, those compiled by the user from source or those
2855             provided by the Chrome browser. In the later case, these binaries require that
2856             SDL loads a DLL providing the shader compiler.
2857              
2858             This variable can be set to the following values:
2859              
2860             =over
2861              
2862             =item C
2863              
2864             default, best for Vista or later.
2865              
2866             =item C
2867              
2868             for XP support.
2869              
2870             =item C
2871              
2872             do not load any library, useful if you compiled ANGLE from source and included
2873             the compiler in your binaries.
2874              
2875             =back
2876              
2877             =item C
2878              
2879             A variable that is the address of another C (as a hex string
2880             formatted with C<%p>).
2881              
2882             If this hint is set before C and the C it
2883             is set to has C set (and running on WGL only, currently),
2884             then two things will occur on the newly created C:
2885              
2886             =over
2887              
2888             =item 1. Its pixel format will be set to the same pixel format as this C. This is needed for example when sharing an OpenGL context across multiple windows.
2889              
2890             =item 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for OpenGL rendering.
2891              
2892             =back
2893              
2894             This variable can be set to the address (as a string C<%p>) of the
2895             C that new windows created with L<< C
2896             )>|/C >>should share a pixel format with.
2897              
2898             =item C
2899              
2900             A variable controlling whether the X11 _NET_WM_PING protocol should be
2901             supported.
2902              
2903             This variable can be set to the following values:
2904              
2905             0 Disable _NET_WM_PING
2906             1 Enable _NET_WM_PING
2907              
2908             By default SDL will use _NET_WM_PING, but for applications that know they will
2909             not always be able to respond to ping requests in a timely manner they can turn
2910             it off to avoid the window manager thinking the app is hung. The hint is
2911             checked in CreateWindow.
2912              
2913             =item C
2914              
2915             A variable controlling whether the X11 Xinerama extension should be used.
2916              
2917             This variable can be set to the following values:
2918              
2919             0 Disable Xinerama
2920             1 Enable Xinerama
2921              
2922             By default SDL will use Xinerama if it is available.
2923              
2924             =item C
2925              
2926             A variable controlling whether the X11 XRandR extension should be used.
2927              
2928             This variable can be set to the following values:
2929              
2930             0 Disable XRandR
2931             1 Enable XRandR
2932              
2933             By default SDL will not use XRandR because of window manager issues.
2934              
2935             =item C
2936              
2937             A variable controlling whether the X11 VidMode extension should be used.
2938              
2939             This variable can be set to the following values:
2940              
2941             0 Disable XVidMode
2942             1 Enable XVidMode
2943              
2944             By default SDL will use XVidMode if it is available.
2945              
2946             =item C
2947              
2948             A variable controlling whether the window frame and title bar are interactive
2949             when the cursor is hidden.
2950              
2951             This variable can be set to the following values:
2952              
2953             0 The window frame is not interactive when the cursor is hidden (no move, resize, etc)
2954             1 The window frame is interactive when the cursor is hidden
2955              
2956             By default SDL will allow interaction with the window frame when the cursor is
2957             hidden.
2958              
2959             =item C
2960              
2961             Tell SDL not to name threads on Windows with the 0x406D1388 Exception. The
2962             0x406D1388 Exception is a trick used to inform Visual Studio of a thread's
2963             name, but it tends to cause problems with other debuggers, and the .NET
2964             runtime. Note that SDL 2.0.6 and later will still use the (safer)
2965             SetThreadDescription API, introduced in the Windows 10 Creators Update, if
2966             available.
2967              
2968             The variable can be set to the following values:
2969              
2970             0 SDL will raise the 0x406D1388 Exception to name threads.
2971             This is the default behavior of SDL <= 2.0.4.
2972             1 SDL will not raise this exception, and threads will be unnamed. (default)
2973             This is necessary with .NET languages or debuggers that aren't Visual Studio.
2974              
2975             =item C
2976              
2977             A variable to specify custom icon resource id from RC file on Windows platform.
2978              
2979             =item C
2980              
2981             A variable to specify custom icon resource id from RC file on Windows platform.
2982              
2983             =item C
2984              
2985             A variable controlling whether the windows message loop is processed by SDL .
2986              
2987             This variable can be set to the following values:
2988              
2989             0 The window message loop is not run
2990             1 The window message loop is processed in SDL_PumpEvents( )
2991              
2992             By default SDL will process the windows message loop.
2993              
2994             =item C
2995              
2996             Tell SDL not to generate window-close events for Alt+F4 on Windows.
2997              
2998             The variable can be set to the following values:
2999              
3000             0 SDL will generate a window-close event when it sees Alt+F4.
3001             1 SDL will only do normal key handling for Alt+F4.
3002              
3003             =item C
3004              
3005             Allows back-button-press events on Windows Phone to be marked as handled.
3006              
3007             Windows Phone devices typically feature a Back button. When pressed, the OS
3008             will emit back-button-press events, which apps are expected to handle in an
3009             appropriate manner. If apps do not explicitly mark these events as 'Handled',
3010             then the OS will invoke its default behavior for unhandled back-button-press
3011             events, which on Windows Phone 8 and 8.1 is to terminate the app (and attempt
3012             to switch to the previous app, or to the device's home screen).
3013              
3014             Setting the C hint to "1" will cause SDL to
3015             mark back-button-press events as Handled, if and when one is sent to the app.
3016              
3017             Internally, Windows Phone sends back button events as parameters to special
3018             back-button-press callback functions. Apps that need to respond to
3019             back-button-press events are expected to register one or more callback
3020             functions for such, shortly after being launched (during the app's
3021             initialization phase). After the back button is pressed, the OS will invoke
3022             these callbacks. If the app's callback(s) do not explicitly mark the event as
3023             handled by the time they return, or if the app never registers one of these
3024             callback, the OS will consider the event un-handled, and it will apply its
3025             default back button behavior (terminate the app).
3026              
3027             SDL registers its own back-button-press callback with the Windows Phone OS.
3028             This callback will emit a pair of SDL key-press events (C and
3029             C), each with a scancode of SDL_SCANCODE_AC_BACK, after which it
3030             will check the contents of the hint, C. If
3031             the hint's value is set to C<1>, the back button event's Handled property will
3032             get set to a C value. If the hint's value is set to something else, or if
3033             it is unset, SDL will leave the event's Handled property alone. (By default,
3034             the OS sets this property to 'false', to note.)
3035              
3036             SDL apps can either set C well before a back
3037             button is pressed, or can set it in direct-response to a back button being
3038             pressed.
3039              
3040             In order to get notified when a back button is pressed, SDL apps should
3041             register a callback function with C, and have it listen
3042             for C events that have a scancode of C.
3043             (Alternatively, C events can be listened-for. Listening for either
3044             event type is suitable.) Any value of C set
3045             by such a callback, will be applied to the OS' current back-button-press event.
3046              
3047             More details on back button behavior in Windows Phone apps can be found at the
3048             following page, on Microsoft's developer site:
3049             L
3050              
3051             =item C
3052              
3053             Label text for a WinRT app's privacy policy link.
3054              
3055             Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1,
3056             and RT, Microsoft mandates that this policy be available via the Windows
3057             Settings charm. SDL provides code to add a link there, with its label text
3058             being set via the optional hint, C.
3059              
3060             Please note that a privacy policy's contents are not set via this hint. A
3061             separate hint, C, is used to link to the
3062             actual text of the policy.
3063              
3064             The contents of this hint should be encoded as a UTF8 string.
3065              
3066             The default value is "Privacy Policy". This hint should only be set during app
3067             initialization, preferably before any calls to L<< C
3068             )>|/C >>.
3069              
3070             For additional information on linking to a privacy policy, see the
3071             documentation for C.
3072              
3073             =item C
3074              
3075             A URL to a WinRT app's privacy policy.
3076              
3077             All network-enabled WinRT apps must make a privacy policy available to its
3078             users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be be
3079             available in the Windows Settings charm, as accessed from within the app. SDL
3080             provides code to add a URL-based link there, which can point to the app's
3081             privacy policy.
3082              
3083             To setup a URL to an app's privacy policy, set
3084             C before calling any L<< C
3085             )>|/C >> functions. The contents of the hint should be a
3086             valid URL. For example, L.
3087              
3088             The default value is an empty string (C<>), which will prevent SDL from adding
3089             a privacy policy link to the Settings charm. This hint should only be set
3090             during app init.
3091              
3092             The label text of an app's "Privacy Policy" link may be customized via another
3093             hint, C.
3094              
3095             Please note that on Windows Phone, Microsoft does not provide standard UI for
3096             displaying a privacy policy link, and as such,
3097             SDL_HINT_WINRT_PRIVACY_POLICY_URL will not get used on that platform.
3098             Network-enabled phone apps should display their privacy policy through some
3099             other, in-app means.
3100              
3101             =item C
3102              
3103             A variable that lets you disable the detection and use of Xinput gamepad
3104             devices
3105              
3106             The variable can be set to the following values:
3107              
3108             0 Disable XInput detection (only uses direct input)
3109             1 Enable XInput detection (default)
3110              
3111             =item C
3112              
3113             A variable that causes SDL to use the old axis and button mapping for XInput
3114             devices.
3115              
3116             This hint is for backwards compatibility only and will be removed in SDL 2.1
3117              
3118             The default value is C<0>. This hint must be set before L<< C
3119             )>|/C >>
3120              
3121             =item C
3122              
3123             Flags to set on QtWayland windows to integrate with the native window manager.
3124              
3125             On QtWayland platforms, this hint controls the flags to set on the windows. For
3126             example, on Sailfish OS, C disables swipe gestures.
3127              
3128             This variable is a space-separated list of the following values (empty = no
3129             flags):
3130              
3131             =over
3132              
3133             =item C
3134              
3135             =item C
3136              
3137             =item C
3138              
3139             =back
3140              
3141             =item C
3142              
3143             A variable describing the content orientation on QtWayland-based platforms.
3144              
3145             On QtWayland platforms, windows are rotated client-side to allow for custom
3146             transitions. In order to correctly position overlays (e.g. volume bar) and
3147             gestures (e.g. events view, close/minimize gestures), the system needs to know
3148             in which orientation the application is currently drawing its contents.
3149              
3150             This does not cause the window to be rotated or resized, the application needs
3151             to take care of drawing the content in the right orientation (the framebuffer
3152             is always in portrait mode).
3153              
3154             This variable can be one of the following values:
3155              
3156             =over
3157              
3158             =item C (default)
3159              
3160             =item C
3161              
3162             =item C
3163              
3164             =item C
3165              
3166             =item C
3167              
3168             =back
3169              
3170             =item C
3171              
3172             A variable controlling the scaling policy for C.
3173              
3174             This variable can be set to the following values:
3175              
3176             =over
3177              
3178             =item C<0> or C
3179              
3180             Uses letterbox/sidebars to fit the entire rendering on screen.
3181              
3182             =item C<1> or C
3183              
3184             Will zoom the rendering so it fills the entire screen, allowing edges to be
3185             drawn offscreen.
3186              
3187             =back
3188              
3189             By default letterbox is used.
3190              
3191             =item C
3192              
3193             A variable controlling whether the graphics context is externally managed.
3194              
3195             This variable can be set to the following values:
3196              
3197             0 SDL will manage graphics contexts that are attached to windows.
3198             1 Disable graphics context management on windows.
3199              
3200             By default SDL will manage OpenGL contexts in certain situations. For example,
3201             on Android the context will be automatically saved and restored when pausing
3202             the application. Additionally, some platforms will assume usage of OpenGL if
3203             Vulkan isn't used. Setting this to C<1> will prevent this behavior, which is
3204             desirable when the application manages the graphics context, such as an
3205             externally managed OpenGL context or attaching a Vulkan surface to the window.
3206              
3207             =item
3208              
3209             A variable forcing the visual ID chosen for new X11 windows.
3210              
3211             =item C
3212              
3213             A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be
3214             used.
3215              
3216             This variable can be set to the following values:
3217              
3218             0 Disable _NET_WM_BYPASS_COMPOSITOR
3219             1 Enable _NET_WM_BYPASS_COMPOSITOR
3220              
3221             By default SDL will use _NET_WM_BYPASS_COMPOSITOR.
3222              
3223             =item C
3224              
3225             A variable controlling whether X11 should use GLX or EGL by default
3226              
3227             This variable can be set to the following values:
3228              
3229             0 Use GLX
3230             1 Use EGL
3231              
3232             By default SDL will use GLX when both are present.
3233              
3234             =item C
3235              
3236             A variable setting the double click time, in milliseconds.
3237              
3238             =item C
3239              
3240             A variable setting the double click radius, in pixels.
3241              
3242             =item C
3243              
3244             A variable setting the speed scale for mouse motion, in floating point, when
3245             the mouse is not in relative mode.
3246              
3247             =item C
3248              
3249             A variable setting the scale for mouse motion, in floating point, when the
3250             mouse is in relative mode.
3251              
3252             =item C
3253              
3254             A variable controlling whether relative mouse motion is affected by renderer
3255             scaling
3256              
3257             This variable can be set to the following values:
3258              
3259             0 Relative motion is unaffected by DPI or renderer's logical size
3260             1 Relative motion is scaled according to DPI scaling and logical size
3261              
3262             By default relative mouse deltas are affected by DPI and renderer scaling.
3263              
3264             =item C
3265              
3266             A variable controlling whether touch events should generate synthetic mouse
3267             events
3268              
3269             This variable can be set to the following values:
3270              
3271             0 Touch events will not generate mouse events
3272             1 Touch events will generate mouse events
3273              
3274             By default SDL will generate mouse events for touch events.
3275              
3276             =item C
3277              
3278             A variable controlling whether mouse events should generate synthetic touch
3279             events
3280              
3281             This variable can be set to the following values:
3282              
3283             0 Mouse events will not generate touch events (default for desktop platforms)
3284             1 Mouse events will generate touch events (default for mobile platforms, such as Android and iOS)
3285              
3286             =item C
3287              
3288             A variable controlling whether the home indicator bar on iPhone X should be
3289             hidden.
3290              
3291             This variable can be set to the following values:
3292              
3293             0 The indicator bar is not hidden (default for windowed applications)
3294             1 The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications)
3295             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)
3296              
3297             =item C
3298              
3299             A variable controlling whether the Android / tvOS remotes should be listed as
3300             joystick devices, instead of sending keyboard events.
3301              
3302             This variable can be set to the following values:
3303              
3304             0 Remotes send enter/escape/arrow key events
3305             1 Remotes are available as 2 axis, 2 button joysticks (the default).
3306              
3307             =item C
3308              
3309             A variable that overrides the automatic controller type detection
3310              
3311             The variable should be comma separated entries, in the form: VID/PID=type
3312              
3313             The VID and PID should be hexadecimal with exactly 4 digits, e.g. C<0x00fd>
3314              
3315             The type should be one of:
3316              
3317             =over
3318              
3319             =item C
3320              
3321             =item C
3322              
3323             =item C
3324              
3325             =item C
3326              
3327             =item C
3328              
3329             =item C
3330              
3331             This hint affects what driver is used, and must be set before calling
3332             C.
3333              
3334             =item C
3335              
3336             A variable that lets you provide a file with extra gamecontroller db entries.
3337              
3338             The file should contain lines of gamecontroller config data, see
3339             SDL_gamecontroller.h
3340              
3341             This hint must be set before calling C
3342              
3343             You can update mappings after the system is initialized with
3344             C and C.
3345              
3346             =item C
3347              
3348             A variable containing a list of devices to skip when scanning for game
3349             controllers.
3350              
3351             The format of the string is a comma separated list of USB VID/PID pairs in
3352             hexadecimal form, e.g.
3353              
3354             0xAAAA/0xBBBB,0xCCCC/0xDDDD
3355              
3356             The variable can also take the form of @file, in which case the named file will
3357             be loaded and interpreted as the value of the variable.
3358              
3359             =item C
3360              
3361             If set, all devices will be skipped when scanning for game controllers except
3362             for the ones listed in this variable.
3363              
3364             The format of the string is a comma separated list of USB VID/PID pairs in
3365             hexadecimal form, e.g.
3366              
3367             0xAAAA/0xBBBB,0xCCCC/0xDDDD
3368              
3369             The variable can also take the form of @file, in which case the named file will
3370             be loaded and interpreted as the value of the variable.
3371              
3372             =item C
3373              
3374             If set, game controller face buttons report their values according to their
3375             labels instead of their positional layout.
3376              
3377             For example, on Nintendo Switch controllers, normally you'd get:
3378              
3379             (Y)
3380             (X) (B)
3381             (A)
3382              
3383             but if this hint is set, you'll get:
3384              
3385             (X)
3386             (Y) (A)
3387             (B)
3388              
3389             The variable can be set to the following values:
3390              
3391             0 Report the face buttons by position, as though they were on an Xbox controller.
3392             1 Report the face buttons by label instead of position
3393              
3394             The default value is C<1>. This hint may be set at any time.
3395              
3396             =item C
3397              
3398             A variable controlling whether the HIDAPI joystick drivers should be used.
3399              
3400             This variable can be set to the following values:
3401              
3402             0 HIDAPI drivers are not used
3403             1 HIDAPI drivers are used (the default)
3404              
3405             This variable is the default for all drivers, but can be overridden by the
3406             hints for specific drivers below.
3407              
3408             =item C
3409              
3410             A variable controlling whether the HIDAPI driver for PS4 controllers should be
3411             used.
3412              
3413             This variable can be set to the following values:
3414              
3415             0 HIDAPI driver is not used
3416             1 HIDAPI driver is used
3417              
3418             The default is the value of C
3419              
3420             =item C
3421              
3422             A variable controlling whether extended input reports should be used for PS4
3423             controllers when using the HIDAPI driver.
3424              
3425             This variable can be set to the following values:
3426              
3427             0 extended reports are not enabled (default)
3428             1 extended reports
3429              
3430             Extended input reports allow rumble on Bluetooth PS4 controllers, but break
3431             DirectInput handling for applications that don't use SDL.
3432              
3433             Once extended reports are enabled, they can not be disabled without power
3434             cycling the controller.
3435              
3436             For compatibility with applications written for versions of SDL prior to the
3437             introduction of PS5 controller support, this value will also control the state
3438             of extended reports on PS5 controllers when the
3439             C hint is not explicitly set.
3440              
3441             =item C
3442              
3443             A variable controlling whether the HIDAPI driver for PS5 controllers should be
3444             used.
3445              
3446             This variable can be set to the following values:
3447              
3448             0 HIDAPI driver is not used
3449             1 HIDAPI driver is used
3450              
3451             The default is the value of C.
3452              
3453             =item C
3454              
3455             A variable controlling whether extended input reports should be used for PS5
3456             controllers when using the HIDAPI driver.
3457              
3458             This variable can be set to the following values:
3459              
3460             0 extended reports are not enabled (default)
3461             1 extended reports
3462              
3463             Extended input reports allow rumble on Bluetooth PS5 controllers, but break
3464             DirectInput handling for applications that don't use SDL.
3465              
3466             Once extended reports are enabled, they can not be disabled without power
3467             cycling the controller.
3468              
3469             For compatibility with applications written for versions of SDL prior to the
3470             introduction of PS5 controller support, this value defaults to the value of
3471             C.
3472              
3473             =item C
3474              
3475             A variable controlling whether the player LEDs should be lit to indicate which
3476             player is associated with a PS5 controller.
3477              
3478             This variable can be set to the following values:
3479              
3480             0 player LEDs are not enabled
3481             1 player LEDs are enabled (default)
3482              
3483             =item C
3484              
3485             A variable controlling whether the HIDAPI driver for Google Stadia controllers
3486             should be used.
3487              
3488             This variable can be set to the following values:
3489              
3490             0 HIDAPI driver is not used
3491             1 HIDAPI driver is used
3492              
3493             The default is the value of C.
3494              
3495             =item C
3496              
3497             A variable controlling whether the HIDAPI driver for Steam Controllers should
3498             be used.
3499              
3500             This variable can be set to the following values:
3501              
3502             0 HIDAPI driver is not used
3503             1 HIDAPI driver is used
3504              
3505             The default is the value of C.
3506              
3507             =item C
3508              
3509             A variable controlling whether the HIDAPI driver for Nintendo Switch
3510             controllers should be used.
3511              
3512             This variable can be set to the following values:
3513              
3514             0 HIDAPI driver is not used
3515             1 HIDAPI driver is used
3516              
3517             The default is the value of C.
3518              
3519             =item C
3520              
3521             A variable controlling whether the Home button LED should be turned on when a
3522             Nintendo Switch controller is opened
3523              
3524             This variable can be set to the following values:
3525              
3526             0 home button LED is left off
3527             1 home button LED is turned on (default)
3528              
3529             =item C
3530              
3531             A variable controlling whether Switch Joy-Cons should be treated the same as
3532             Switch Pro Controllers when using the HIDAPI driver.
3533              
3534             This variable can be set to the following values:
3535              
3536             0 basic Joy-Con support with no analog input (default)
3537             1 Joy-Cons treated as half full Pro Controllers with analog inputs and sensors
3538              
3539             This does not combine Joy-Cons into a single controller. That's up to the user.
3540              
3541             =item C
3542              
3543             A variable controlling whether the HIDAPI driver for XBox controllers should be
3544             used.
3545              
3546             This variable can be set to the following values:
3547              
3548             0 HIDAPI driver is not used
3549             1 HIDAPI driver is used
3550              
3551             The default is C<0> on Windows, otherwise the value of
3552             C.
3553              
3554             =item C
3555              
3556             A variable controlling whether the HIDAPI driver for XBox controllers on
3557             Windows should pull correlated data from XInput.
3558              
3559             This variable can be set to the following values:
3560              
3561             0 HIDAPI Xbox driver will only use HIDAPI data
3562             1 HIDAPI Xbox driver will also pull data from XInput, providing better trigger axes, guide button
3563             presses, and rumble support
3564              
3565             The default is C<1>. This hint applies to any joysticks opened after setting
3566             the hint.
3567              
3568             =item C
3569              
3570             A variable controlling whether the HIDAPI driver for Nintendo GameCube
3571             controllers should be used.
3572              
3573             This variable can be set to the following values:
3574              
3575             0 HIDAPI driver is not used
3576             1 HIDAPI driver is used
3577              
3578             The default is the value of C.
3579              
3580             =item C
3581              
3582             A variable that controls whether Steam Controllers should be exposed using the
3583             SDL joystick and game controller APIs
3584              
3585             The variable can be set to the following values:
3586              
3587             0 Do not scan for Steam Controllers
3588             1 Scan for Steam Controllers (default)
3589              
3590             The default value is C<1>. This hint must be set before initializing the
3591             joystick subsystem.
3592              
3593             =item C
3594              
3595             A variable controlling whether the RAWINPUT joystick drivers should be used for
3596             better handling XInput-capable devices.
3597              
3598             This variable can be set to the following values:
3599              
3600             0 RAWINPUT drivers are not used
3601             1 RAWINPUT drivers are used (default)
3602              
3603             =item C
3604              
3605             A variable controlling whether a separate thread should be used for handling
3606             joystick detection and raw input messages on Windows
3607              
3608             This variable can be set to the following values:
3609              
3610             0 A separate thread is not used (default)
3611             1 A separate thread is used for handling raw input messages
3612              
3613             =item C
3614              
3615             A variable controlling whether joysticks on Linux adhere to their HID-defined
3616             deadzones or return unfiltered values.
3617              
3618             This variable can be set to the following values:
3619              
3620             0 Return unfiltered joystick axis values (default)
3621             1 Return axis values with deadzones taken into account
3622              
3623             =item C
3624              
3625             If set to C<0> then never set the top most bit on a SDL Window, even if the
3626             video mode expects it. This is a debugging aid for developers and not expected
3627             to be used by end users. The default is C<1>.
3628              
3629             This variable can be set to the following values:
3630              
3631             0 don't allow topmost
3632             1 allow topmost (default)
3633              
3634             =item C
3635              
3636             A string specifying additional information to use with
3637             C.
3638              
3639             By default C will make appropriate system changes in
3640             order to apply a thread priority. For example on systems using pthreads the
3641             scheduler policy is changed automatically to a policy that works well with a
3642             given priority. Code which has specific requirements can override SDL's default
3643             behavior with this hint.
3644              
3645             pthread hint values are C, C, C and C. Currently no
3646             other platform hint values are defined but may be in the future.
3647              
3648             Note:
3649              
3650             On Linux, the kernel may send C to realtime tasks which exceed the
3651             distro configured execution budget for rtkit. This budget can be queried
3652             through C after calling C.
3653              
3654             =item C
3655              
3656             Specifies whether C should be treated as
3657             realtime.
3658              
3659             On some platforms, like Linux, a realtime priority thread may be subject to
3660             restrictions that require special handling by the application. This hint exists
3661             to let SDL know that the app is prepared to handle said restrictions.
3662              
3663             On Linux, SDL will apply the following configuration to any thread that becomes
3664             realtime:
3665              
3666             =over
3667              
3668             =item * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy,
3669              
3670             =item * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
3671              
3672             Exceeding this limit will result in the kernel sending C to the app,
3673              
3674             Refer to the man pages for more information.
3675              
3676             =back
3677              
3678             This variable can be set to the following values:
3679              
3680             0 default platform specific behaviour
3681             1 Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy
3682              
3683             =item C
3684              
3685             A variable that is the address of another SDL_Window* (as a hex string
3686             formatted with C<%p>).
3687              
3688             If this hint is set before C and the C it
3689             is set to has C set (and running on WGL only, currently),
3690             then two things will occur on the newly created C:
3691              
3692             =over
3693              
3694             =item 1. Its pixel format will be set to the same pixel format as this C. This is needed for example when sharing an OpenGL context across multiple windows.
3695              
3696             =item 2. The flag C will be set on the new window so it can be used for OpenGL rendering.
3697              
3698             This variable can be set to the following values:
3699              
3700             =over
3701              
3702             =item The address (as a string C<%p>) of the C that new windows created with L<< C|/C >> should share a pixel format with.
3703              
3704             =back
3705              
3706             =item C
3707              
3708             A variable to control whether we trap the Android back button to handle it
3709             manually. This is necessary for the right mouse button to work on some Android
3710             devices, or to be able to trap the back button for use in your code reliably.
3711             If set to true, the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair
3712             with a keycode of C.
3713              
3714             The variable can be set to the following values:
3715              
3716             =over
3717              
3718             =item C<0>
3719              
3720             Back button will be handled as usual for system. (default)
3721              
3722             =item C<1>
3723              
3724             Back button will be trapped, allowing you to handle the key press manually.
3725             (This will also let right mouse click work on systems where the right mouse
3726             button functions as back.)
3727              
3728             =back
3729              
3730             The value of this hint is used at runtime, so it can be changed at any time.
3731              
3732             =back
3733              
3734             =item C
3735              
3736             A variable to control whether the event loop will block itself when the app is
3737             paused.
3738              
3739             The variable can be set to the following values:
3740              
3741             =over
3742              
3743             =item C<0>
3744              
3745             Non blocking.
3746              
3747             =item C<1>
3748              
3749             Blocking. (default)
3750              
3751             =back
3752              
3753             The value should be set before SDL is initialized.
3754              
3755             =back
3756              
3757             =item C
3758              
3759             A variable to control whether SDL will pause audio in background (Requires
3760             C as "Non blocking")
3761              
3762             The variable can be set to the following values:
3763              
3764             =over
3765              
3766             =item C<0>
3767              
3768             Non paused.
3769              
3770              
3771             =item C<1>
3772              
3773             Paused. (default)
3774              
3775             =back
3776              
3777             The value should be set before SDL is initialized.
3778              
3779             =item C
3780              
3781             A variable to control whether the return key on the soft keyboard should hide
3782             the soft keyboard on Android and iOS.
3783              
3784             The variable can be set to the following values:
3785              
3786             =over
3787              
3788             =item C<0>
3789              
3790             The return key will be handled as a key event. This is the behaviour of SDL <=
3791             2.0.3. (default)
3792              
3793             =item C<1>
3794              
3795             The return key will hide the keyboard.
3796              
3797             =back
3798              
3799             The value of this hint is used at runtime, so it can be changed at any time.
3800              
3801             =item C
3802              
3803             Force SDL to use Critical Sections for mutexes on Windows. On Windows 7 and
3804             newer, Slim Reader/Writer Locks are available. They offer better performance,
3805             allocate no kernel resources and use less memory. SDL will fall back to
3806             Critical Sections on older OS versions or if forced to by this hint.
3807              
3808             This also affects Condition Variables. When SRW mutexes are used, SDL will use
3809             Windows Condition Variables as well. Else, a generic SDL_cond implementation
3810             will be used that works with all mutexes.
3811              
3812             This variable can be set to the following values:
3813              
3814             =over
3815              
3816             =item C<0>
3817              
3818             Use SRW Locks when available. If not, fall back to Critical Sections. (default)
3819              
3820             =item C<1>
3821              
3822             Force the use of Critical Sections in all cases.
3823              
3824             =back
3825              
3826             =item C
3827              
3828             Force SDL to use Kernel Semaphores on Windows. Kernel Semaphores are
3829             inter-process and require a context switch on every interaction. On Windows 8
3830             and newer, the WaitOnAddress API is available. Using that and atomics to
3831             implement semaphores increases performance. SDL will fall back to Kernel
3832             Objects on older OS versions or if forced to by this hint.
3833              
3834             This variable can be set to the following values:
3835              
3836             =over
3837              
3838             =item C<0>
3839              
3840             Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel
3841             Objects. (default)
3842              
3843             =item C<1>
3844              
3845             Force the use of Kernel Objects in all cases.
3846              
3847             =back
3848              
3849             =item C
3850              
3851             Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
3852             Direct3D 9Ex contains changes to state management that can eliminate device
3853             loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require
3854             some changes to your application to cope with the new behavior, so this is
3855             disabled by default.
3856              
3857             This hint must be set before initializing the video subsystem.
3858              
3859             For more information on Direct3D 9Ex, see:
3860              
3861             =over
3862              
3863             =item L
3864              
3865             =item L
3866              
3867             =back
3868              
3869             This variable can be set to the following values:
3870              
3871             =over
3872              
3873             =item C<0>
3874              
3875             Use the original Direct3D 9 API (default)
3876              
3877             =item C<1>
3878              
3879             Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is
3880             unavailable)
3881              
3882             =back
3883              
3884             =item C
3885              
3886             Tell the video driver that we only want a double buffer.
3887              
3888             By default, most lowlevel 2D APIs will use a triple buffer scheme that wastes
3889             no CPU time on waiting for vsync after issuing a flip, but introduces a frame
3890             of latency. On the other hand, using a double buffer scheme instead is
3891             recommended for cases where low latency is an important factor because we save
3892             a whole frame of latency. We do so by waiting for vsync immediately after
3893             issuing a flip, usually just after eglSwapBuffers call in the backend's
3894             *_SwapWindow function.
3895              
3896             Since it's driver-specific, it's only supported where possible and implemented.
3897             Currently supported the following drivers:
3898              
3899             =over
3900              
3901             =item KMSDRM (kmsdrm)
3902              
3903             =item Raspberry Pi (raspberrypi)
3904              
3905             =back
3906              
3907             =item C
3908              
3909             Determines whether SDL enforces that DRM master is required in order to
3910             initialize the KMSDRM video backend.
3911              
3912             The DRM subsystem has a concept of a "DRM master" which is a DRM client that
3913             has the ability to set planes, set cursor, etc. When SDL is DRM master, it can
3914             draw to the screen using the SDL rendering APIs. Without DRM master, SDL is
3915             still able to process input and query attributes of attached displays, but it
3916             cannot change display state or draw to the screen directly.
3917              
3918             In some cases, it can be useful to have the KMSDRM backend even if it cannot be
3919             used for rendering. An app may want to use SDL for input processing while using
3920             another rendering API (such as an MMAL overlay on Raspberry Pi) or using its
3921             own code to render to DRM overlays that SDL doesn't support.
3922              
3923             This hint must be set before initializing the video subsystem.
3924              
3925             This variable can be set to the following values:
3926              
3927             =over
3928              
3929             =item C<0>
3930              
3931             SDL will allow usage of the KMSDRM backend without DRM master
3932              
3933             =item C<1>
3934              
3935             SDL Will require DRM master to use the KMSDRM backend (default)
3936              
3937             =back
3938              
3939             =item C
3940              
3941             A variable controlling what driver to use for OpenGL ES contexts.
3942              
3943             On some platforms, currently Windows and X11, OpenGL drivers may support
3944             creating contexts with an OpenGL ES profile. By default SDL uses these
3945             profiles, when available, otherwise it attempts to load an OpenGL ES library,
3946             e.g. that provided by the ANGLE project. This variable controls whether SDL
3947             follows this default behaviour or will always load an OpenGL ES library.
3948              
3949             Circumstances where this is useful include
3950              
3951             =over
3952              
3953             =item - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, or emulator, e.g. those from ARM, Imagination or Qualcomm.
3954              
3955             =item Resolving OpenGL ES function addresses at link time by linking with the OpenGL ES library instead of querying them at run time with C.
3956              
3957             =back
3958              
3959             Caution: for an application to work with the default behaviour across different
3960             OpenGL drivers it must query the OpenGL ES function addresses at run time using
3961             C.
3962              
3963             This variable is ignored on most platforms because OpenGL ES is native or not
3964             supported.
3965              
3966             This variable can be set to the following values:
3967              
3968             =over
3969              
3970             =item C<0>
3971              
3972             Use ES profile of OpenGL, if available. (Default when not set.)
3973              
3974             =item C<1>
3975              
3976             Load OpenGL ES library using the default library names.
3977              
3978             =back
3979              
3980             =item C
3981              
3982             A variable controlling speed/quality tradeoff of audio resampling.
3983              
3984             If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) to
3985             handle audio resampling. There are different resampling modes available that
3986             produce different levels of quality, using more CPU.
3987              
3988             If this hint isn't specified to a valid setting, or libsamplerate isn't
3989             available, SDL will use the default, internal resampling algorithm.
3990              
3991             Note that this is currently only applicable to resampling audio that is being
3992             written to a device for playback or audio being read from a device for capture.
3993             SDL_AudioCVT always uses the default resampler (although this might change for
3994             SDL 2.1).
3995              
3996             This hint is currently only checked at audio subsystem initialization.
3997              
3998             This variable can be set to the following values:
3999              
4000             =over
4001              
4002             =item C<0> or C
4003              
4004             Use SDL's internal resampling (Default when not set - low quality, fast)
4005              
4006             =item C<1> or C
4007              
4008             Use fast, slightly higher quality resampling, if available
4009              
4010             =item C<2> or C
4011              
4012             Use medium quality resampling, if available
4013              
4014             =item C<3> or C
4015              
4016             Use high quality resampling, if available
4017              
4018             =back
4019              
4020             =item C
4021              
4022             A variable controlling the audio category on iOS and Mac OS X.
4023              
4024             This variable can be set to the following values:
4025              
4026             =over
4027              
4028             =item C
4029              
4030             Use the AVAudioSessionCategoryAmbient audio category, will be muted by the
4031             phone mute switch (default)
4032              
4033             =item C
4034              
4035             Use the AVAudioSessionCategoryPlayback category
4036              
4037             =back
4038              
4039             For more information, see Apple's documentation:
4040             L
4041              
4042             =item C
4043              
4044             A variable controlling whether the 2D render API is compatible or efficient.
4045              
4046             This variable can be set to the following values:
4047              
4048             =over
4049              
4050             =item C<0>
4051              
4052             Don't use batching to make rendering more efficient.
4053              
4054             =item C<1>
4055              
4056             Use batching, but might cause problems if app makes its own direct OpenGL
4057             calls.
4058              
4059             =back
4060              
4061             Up to SDL 2.0.9, the render API would draw immediately when requested. Now it
4062             batches up draw requests and sends them all to the GPU only when forced to
4063             (during SDL_RenderPresent, when changing render targets, by updating a texture
4064             that the batch needs, etc). This is significantly more efficient, but it can
4065             cause problems for apps that expect to render on top of the render API's
4066             output. As such, SDL will disable batching if a specific render backend is
4067             requested (since this might indicate that the app is planning to use the
4068             underlying graphics API directly). This hint can be used to explicitly request
4069             batching in this instance. It is a contract that you will either never use the
4070             underlying graphics API directly, or if you do, you will call
4071             C before you do so any current batch goes to the GPU before
4072             your work begins. Not following this contract will result in undefined
4073             behavior.
4074              
4075             =item C
4076              
4077             A variable controlling whether SDL updates joystick state when getting input
4078             events
4079              
4080             This variable can be set to the following values:
4081              
4082             =over
4083              
4084             =item C<0>
4085              
4086             You'll call C manually
4087              
4088             =item C<1>
4089              
4090             SDL will automatically call C (default)
4091              
4092             =back
4093              
4094             This hint can be toggled on and off at runtime.
4095              
4096             =item C
4097              
4098             A variable controlling whether SDL updates sensor state when getting input
4099             events
4100              
4101             This variable can be set to the following values:
4102              
4103             =over
4104              
4105             =item C<0>
4106              
4107             You'll call C manually
4108              
4109             =item C<1>
4110              
4111             SDL will automatically call C (default)
4112              
4113             =back
4114              
4115             This hint can be toggled on and off at runtime.
4116              
4117             =item C
4118              
4119             A variable controlling whether SDL logs all events pushed onto its internal
4120             queue.
4121              
4122             This variable can be set to the following values:
4123              
4124             =over
4125              
4126             =item C<0>
4127              
4128             Don't log any events (default)
4129              
4130             =item C<1>
4131              
4132             Log all events except mouse and finger motion, which are pretty spammy.
4133              
4134             =item C<2>
4135              
4136             Log all events.
4137              
4138             =back
4139              
4140             This is generally meant to be used to debug SDL itself, but can be useful for
4141             application developers that need better visibility into what is going on in the
4142             event queue. Logged events are sent through C, which means by
4143             default they appear on stdout on most platforms or maybe C
4144             )> on Windows, and can be funneled by the app with C
4145             )>, etc.
4146              
4147             This hint can be toggled on and off at runtime, if you only need to log events
4148             for a small subset of program execution.
4149              
4150             =item C
4151              
4152             Controls how the size of the RIFF chunk affects the loading of a WAVE file.
4153              
4154             The size of the RIFF chunk (which includes all the sub-chunks of the WAVE file)
4155             is not always reliable. In case the size is wrong, it's possible to just ignore
4156             it and step through the chunks until a fixed limit is reached.
4157              
4158             Note that files that have trailing data unrelated to the WAVE file or corrupt
4159             files may slow down the loading process without a reliable boundary. By
4160             default, SDL stops after 10000 chunks to prevent wasting time. Use the
4161             environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.
4162              
4163             This variable can be set to the following values:
4164              
4165             =over
4166              
4167             =item C
4168              
4169             Always use the RIFF chunk size as a boundary for the chunk search
4170              
4171             =item C
4172              
4173             Like "force", but a zero size searches up to 4 GiB (default)
4174              
4175             =item C
4176              
4177             Ignore the RIFF chunk size and always search up to 4 GiB
4178              
4179             =item C
4180              
4181             Search for chunks until the end of file (not recommended)
4182              
4183             =back
4184              
4185             =item C
4186              
4187             Controls how a truncated WAVE file is handled.
4188              
4189             A WAVE file is considered truncated if any of the chunks are incomplete or the
4190             data chunk size is not a multiple of the block size. By default, SDL decodes
4191             until the first incomplete block, as most applications seem to do.
4192              
4193             This variable can be set to the following values:
4194              
4195             =over
4196              
4197             =item C
4198              
4199             Raise an error if the file is truncated
4200              
4201             =item C
4202              
4203             Like "verystrict", but the size of the RIFF chunk is ignored
4204              
4205             =item C
4206              
4207             Decode until the first incomplete sample frame
4208              
4209             =item C
4210              
4211             Decode until the first incomplete block (default)
4212              
4213             =back
4214              
4215             =item C
4216              
4217             Controls how the fact chunk affects the loading of a WAVE file.
4218              
4219             The fact chunk stores information about the number of samples of a WAVE file.
4220             The Standards Update from Microsoft notes that this value can be used to
4221             'determine the length of the data in seconds'. This is especially useful for
4222             compressed formats (for which this is a mandatory chunk) if they produce
4223             multiple sample frames per block and truncating the block is not allowed. The
4224             fact chunk can exactly specify how many sample frames there should be in this
4225             case.
4226              
4227             Unfortunately, most application seem to ignore the fact chunk and so SDL
4228             ignores it by default as well.
4229              
4230             This variable can be set to the following values:
4231              
4232             =over
4233              
4234             =item C
4235              
4236             Use the number of samples to truncate the wave data if the fact chunk is
4237             present and valid
4238              
4239             =item C
4240              
4241             Like "truncate", but raise an error if the fact chunk is invalid, not present
4242             for non-PCM formats, or if the data chunk doesn't have that many samples
4243              
4244             =item C
4245              
4246             Like "truncate", but ignore fact chunk if the number of samples is zero
4247              
4248             =item C
4249              
4250             Ignore fact chunk entirely (default)
4251              
4252             =back
4253              
4254             =item C
4255              
4256             Override for C
4257              
4258             If set, this hint will override the expected results for
4259             C for display index 0. Generally you don't want
4260             to do this, but this allows an embedded system to request that some of the
4261             screen be reserved for other uses when paired with a well-behaved application.
4262              
4263             The contents of this hint must be 4 comma-separated integers, the first is the
4264             bounds x, then y, width and height, in that order.
4265              
4266             =item C
4267              
4268             Specify an application name for an audio device.
4269              
4270             Some audio backends (such as PulseAudio) allow you to describe your audio
4271             stream. Among other things, this description might show up in a system control
4272             panel that lets the user adjust the volume on specific audio streams instead of
4273             using one giant master volume slider.
4274              
4275             This hints lets you transmit that information to the OS. The contents of this
4276             hint are used while opening an audio device. You should use a string that
4277             describes your program ("My Game 2: The Revenge")
4278              
4279             Setting this to "" or leaving it unset will have SDL use a reasonable default:
4280             probably the application's name or "SDL Application" if SDL doesn't have any
4281             better information.
4282              
4283             On targets where this is not supported, this hint does nothing.
4284              
4285             =item C
4286              
4287             Specify an application name for an audio device.
4288              
4289             Some audio backends (such as PulseAudio) allow you to describe your audio
4290             stream. Among other things, this description might show up in a system control
4291             panel that lets the user adjust the volume on specific audio streams instead of
4292             using one giant master volume slider.
4293              
4294             This hints lets you transmit that information to the OS. The contents of this
4295             hint are used while opening an audio device. You should use a string that
4296             describes your what your program is playing ("audio stream" is probably
4297             sufficient in many cases, but this could be useful for something like "team
4298             chat" if you have a headset playing VoIP audio separately).
4299              
4300             Setting this to "" or leaving it unset will have SDL use a reasonable default:
4301             "audio stream" or something similar.
4302              
4303             On targets where this is not supported, this hint does nothing.
4304              
4305             =item C
4306              
4307             Specify an application role for an audio device.
4308              
4309             Some audio backends (such as Pipewire) allow you to describe the role of your
4310             audio stream. Among other things, this description might show up in a system
4311             control panel or software for displaying and manipulating media
4312             playback/capture graphs.
4313              
4314             This hints lets you transmit that information to the OS. The contents of this
4315             hint are used while opening an audio device. You should use a string that
4316             describes your what your program is playing (Game, Music, Movie, etc...).
4317              
4318             Setting this to "" or leaving it unset will have SDL use a reasonable default:
4319             "Game" or something similar.
4320              
4321             On targets where this is not supported, this hint does nothing.
4322              
4323             =item C
4324              
4325             Specify the behavior of Alt+Tab while the keyboard is grabbed.
4326              
4327             By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed
4328             and your window is full-screen. This prevents the user from getting stuck in
4329             your application if you've enabled keyboard grab.
4330              
4331             The variable can be set to the following values:
4332              
4333             =over
4334              
4335             =item C<0>
4336              
4337             SDL will not handle Alt+Tab. Your application is responsible for handling
4338             Alt+Tab while the keyboard is grabbed.
4339              
4340             =item C<1>
4341              
4342             SDL will minimize your window when Alt+Tab is pressed (default)
4343              
4344             =back
4345              
4346             =item C
4347              
4348             Override for SDL_GetPreferredLocales( )
4349              
4350             If set, this will be favored over anything the OS might report for the user's
4351             preferred locales. Changing this hint at runtime will not generate a
4352             SDL_LOCALECHANGED event (but if you can change the hint, you can push your own
4353             event, if you want).
4354              
4355             The format of this hint is a comma-separated list of language and locale,
4356             combined with an underscore, as is a common format: "en_GB". Locale is
4357             optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
4358              
4359             =back
4360              
4361             =head1 C<:joystickType>
4362              
4363             =over
4364              
4365             =item C
4366              
4367             =item C
4368              
4369             =item C
4370              
4371             =item C
4372              
4373             =item C
4374              
4375             =item C
4376              
4377             =item C
4378              
4379             =item C
4380              
4381             =item C
4382              
4383             =item C
4384              
4385             =back
4386              
4387             =head1 C<:joystickPowerLevel>
4388              
4389             =over
4390              
4391             =item C
4392              
4393             =item C - C<< <= 5% >>
4394              
4395             =item C - C<< <= 20% >>
4396              
4397             =item C - C<< <= 70% >>
4398              
4399             =item C - C<< <= 100% >>
4400              
4401             =item C
4402              
4403             =item C
4404              
4405             =back
4406              
4407             =head1 C<:hatPosition>
4408              
4409             Hat positions.
4410              
4411             =over
4412              
4413             =item C
4414              
4415             =item C
4416              
4417             =item C
4418              
4419             =item C
4420              
4421             =item C
4422              
4423             =item C
4424              
4425             =item C
4426              
4427             =item C
4428              
4429             =item C
4430              
4431             =back
4432              
4433             =head1 C<:keyCode>
4434              
4435             The SDL virtual key representation.
4436              
4437             Values of this type are used to represent keyboard keys using the current
4438             layout of the keyboard. These values include Unicode values representing the
4439             unmodified character that would be generated by pressing the key, or an
4440             C constant for those keys that do not generate characters.
4441              
4442             A special exception is the number keys at the top of the keyboard which always
4443             map to C, regardless of layout.
4444              
4445             =over
4446              
4447             =item C
4448              
4449             =item C
4450              
4451             =item C
4452              
4453             =item C
4454              
4455             =item C
4456              
4457             =item C
4458              
4459             =item C
4460              
4461             =item C
4462              
4463             =item C
4464              
4465             =item C
4466              
4467             =item C
4468              
4469             =item C
4470              
4471             =item C
4472              
4473             =item C
4474              
4475             =item C
4476              
4477             =item C
4478              
4479             =item C
4480              
4481             =item C
4482              
4483             =item C
4484              
4485             =item C
4486              
4487             =item C
4488              
4489             =item C
4490              
4491             =item C
4492              
4493             =item C
4494              
4495             =item C
4496              
4497             =item C
4498              
4499             =item C
4500              
4501             =item C
4502              
4503             =item C
4504              
4505             =item C
4506              
4507             =item C
4508              
4509             =item C
4510              
4511             =item C
4512              
4513             =item C
4514              
4515             =item C
4516              
4517             =item C
4518              
4519             =item C
4520              
4521             =item C
4522              
4523             =item C
4524              
4525             =item C
4526              
4527             =item C
4528              
4529             =item C
4530              
4531             =item C
4532              
4533             =item C
4534              
4535             =item C
4536              
4537             =item C
4538              
4539             =item C
4540              
4541             =item C
4542              
4543             =item C
4544              
4545             =item C
4546              
4547             =item C
4548              
4549             =item C
4550              
4551             =item C
4552              
4553             =item C
4554              
4555             =item C
4556              
4557             =item C
4558              
4559             =item C
4560              
4561             =item C
4562              
4563             =item C
4564              
4565             =item C
4566              
4567             =item C
4568              
4569             =item C
4570              
4571             =item C
4572              
4573             =item C
4574              
4575             =item C
4576              
4577             =item C
4578              
4579             =item C
4580              
4581             =item C
4582              
4583             =item C
4584              
4585             =item C
4586              
4587             =item C
4588              
4589             =item C
4590              
4591             =item C
4592              
4593             =item C
4594              
4595             =item C
4596              
4597             =item C
4598              
4599             =item C
4600              
4601             =item C
4602              
4603             =item C
4604              
4605             =item C
4606              
4607             =item C
4608              
4609             =item C
4610              
4611             =item C
4612              
4613             =item C
4614              
4615             =item C
4616              
4617             =item C
4618              
4619             =item C
4620              
4621             =item C
4622              
4623             =item C
4624              
4625             =item C
4626              
4627             =item C
4628              
4629             =item C
4630              
4631             =item C
4632              
4633             =item C
4634              
4635             =item C
4636              
4637             =item C
4638              
4639             =item C
4640              
4641             =item C
4642              
4643             =item C
4644              
4645             =item C
4646              
4647             =item C
4648              
4649             =item C
4650              
4651             =item C
4652              
4653             =item C
4654              
4655             =item C
4656              
4657             =item C
4658              
4659             =item C
4660              
4661             =item C
4662              
4663             =item C
4664              
4665             =item C
4666              
4667             =item C
4668              
4669             =item C
4670              
4671             =item C
4672              
4673             =item C
4674              
4675             =item C
4676              
4677             =item C
4678              
4679             =item C
4680              
4681             =item C
4682              
4683             =item C
4684              
4685             =item C
4686              
4687             =item C
4688              
4689             =item C
4690              
4691             =item C
4692              
4693             =item C
4694              
4695             =item C
4696              
4697             =item C
4698              
4699             =item C
4700              
4701             =item C
4702              
4703             =item C
4704              
4705             =item C
4706              
4707             =item C
4708              
4709             =item C
4710              
4711             =item C
4712              
4713             =item C
4714              
4715             =item C
4716              
4717             =item C
4718              
4719             =item C
4720              
4721             =item C
4722              
4723             =item C
4724              
4725             =item C
4726              
4727             =item C
4728              
4729             =item C
4730              
4731             =item C
4732              
4733             =item C
4734              
4735             =item C
4736              
4737             =item C
4738              
4739             =item C
4740              
4741             =item C
4742              
4743             =item C
4744              
4745             =item C
4746              
4747             =item C
4748              
4749             =item C
4750              
4751             =item C
4752              
4753             =item C
4754              
4755             =item C
4756              
4757             =item C
4758              
4759             =item C
4760              
4761             =item C
4762              
4763             =item C
4764              
4765             =item C
4766              
4767             =item C
4768              
4769             =item C
4770              
4771             =item C
4772              
4773             =item C
4774              
4775             =item C
4776              
4777             =item C
4778              
4779             =item C
4780              
4781             =item C
4782              
4783             =item C
4784              
4785             =item C
4786              
4787             =item C
4788              
4789             =item C
4790              
4791             =item C
4792              
4793             =item C
4794              
4795             =item C
4796              
4797             =item C
4798              
4799             =item C
4800              
4801             =item C
4802              
4803             =item C
4804              
4805             =item C
4806              
4807             =item C
4808              
4809             =item C
4810              
4811             =item C
4812              
4813             =item C
4814              
4815             =item C
4816              
4817             =item C
4818              
4819             =item C
4820              
4821             =item C
4822              
4823             =item C
4824              
4825             =item C
4826              
4827             =item C
4828              
4829             =item C
4830              
4831             =item C
4832              
4833             =item C
4834              
4835             =item C
4836              
4837             =item C
4838              
4839             =item C
4840              
4841             =item C
4842              
4843             =item C
4844              
4845             =item C
4846              
4847             =item C
4848              
4849             =item C
4850              
4851             =item C
4852              
4853             =item C
4854              
4855             =item C
4856              
4857             =item C
4858              
4859             =item C
4860              
4861             =item C
4862              
4863             =item C
4864              
4865             =item C
4866              
4867             =item C
4868              
4869             =item C
4870              
4871             =item C
4872              
4873             =item C
4874              
4875             =item C
4876              
4877             =item C
4878              
4879             =item C
4880              
4881             =item C
4882              
4883             =item C
4884              
4885             =item C
4886              
4887             =item C
4888              
4889             =item C
4890              
4891             =item C
4892              
4893             =item C
4894              
4895             =item C
4896              
4897             =item C
4898              
4899             =item C
4900              
4901             =item C
4902              
4903             =item C
4904              
4905             =item C
4906              
4907             =item C
4908              
4909             =item C
4910              
4911             =item C
4912              
4913             =item C
4914              
4915             =item C
4916              
4917             =item C
4918              
4919             =item C
4920              
4921             =item C
4922              
4923             =item C
4924              
4925             =item C
4926              
4927             =back
4928              
4929             =head1 C<:keymod>
4930              
4931             Enumeration of valid key mods (possibly OR'd together)
4932              
4933             =over
4934              
4935             =item C
4936              
4937             =item C
4938              
4939             =item C
4940              
4941             =item C
4942              
4943             =item C
4944              
4945             =item C
4946              
4947             =item C
4948              
4949             =item C
4950              
4951             =item C
4952              
4953             =item C
4954              
4955             =item C
4956              
4957             =item C
4958              
4959             =item C
4960              
4961             =item C
4962              
4963             =item C
4964              
4965             =item C
4966              
4967             =item C
4968              
4969             =back
4970              
4971             =head2 C<:logcategory>
4972              
4973             The predefined log categories
4974              
4975             By default the application category is enabled at the INFO level, the assert
4976             category is enabled at the WARN level, test is enabled at the VERBOSE level and
4977             all other categories are enabled at the CRITICAL level.
4978              
4979             =over
4980              
4981             =item C
4982              
4983             =item C
4984              
4985             =item C
4986              
4987             =item C
4988              
4989             =item C
4990              
4991             =item C
4992              
4993             =item C
4994              
4995             =item C
4996              
4997             =item C
4998              
4999             =item C
5000              
5001             =item C
5002              
5003             =item C
5004              
5005             =item C
5006              
5007             =item C
5008              
5009             =item C
5010              
5011             =item C
5012              
5013             =item C
5014              
5015             =item C
5016              
5017             =item C
5018              
5019             =item C
5020              
5021             =back
5022              
5023             =head2 C<:logpriority>
5024              
5025             The predefined log priorities.
5026              
5027             =over
5028              
5029             =item C
5030              
5031             =item C
5032              
5033             =item C
5034              
5035             =item C
5036              
5037             =item C
5038              
5039             =item C
5040              
5041             =item C
5042              
5043             =back
5044              
5045             =head1 C<:messageBoxFlags>
5046              
5047             If supported, display warning icon, etc.
5048              
5049             =over
5050              
5051             =item C - error dialog
5052              
5053             =item C - warning dialog
5054              
5055             =item C - informational dialog
5056              
5057             =item C - buttons placed left to right
5058              
5059             =item C - buttons placed right to left
5060              
5061             =back
5062              
5063             =head1 C<:messageBoxButtonData>
5064              
5065             =over
5066              
5067             =item C - Marks the default button when return is hit
5068              
5069             =item C - Marks the default button when escape is hit
5070              
5071             =back
5072              
5073             =head1 C<:messageBoxColorType>
5074              
5075             =over
5076              
5077             =item C
5078              
5079             =item C
5080              
5081             =item C
5082              
5083             =item C
5084              
5085             =item C
5086              
5087             =item C
5088              
5089             =back
5090              
5091             =head1 C<:systemCursor>
5092              
5093             Cursor types for L<< C
5094             )>|SDL2::FFI/C >>.
5095              
5096             =over
5097              
5098             =item C - Arrow
5099              
5100             =item C - I-beam
5101              
5102             =item C - Wait
5103              
5104             =item C - Crosshair
5105              
5106             =item C - Small wait cursor (or Wait if not available)
5107              
5108             =item C - Double arrow pointing northwest and southeast
5109              
5110             =item C - Double arrow pointing northeast and southwest
5111              
5112             =item C - Double arrow pointing west and east
5113              
5114             =item C - Double arrow pointing north and south
5115              
5116             =item C - Four pointed arrow pointing north, south, east, and west
5117              
5118             =item C - Slashed circle or crossbones
5119              
5120             =item C - Hand
5121              
5122             =item C
5123              
5124             =back
5125              
5126             =head1 C<:mouseWheelDirection>
5127              
5128             Scroll direction types for the Scroll event.
5129              
5130             =over
5131              
5132             =item C
5133              
5134             =item C
5135              
5136             =back
5137              
5138             =head1 C<:mouseButton>
5139              
5140             Used as a mask when testing buttons in buttonstate.
5141              
5142             =over
5143              
5144             =item Button 1: Left mouse button
5145              
5146             =item Button 2: Middle mouse button
5147              
5148             =item Button 3: Right mouse button
5149              
5150             =back
5151              
5152             =over
5153              
5154             =item C
5155              
5156             =item C
5157              
5158             =item C
5159              
5160             =item C
5161              
5162             =item C
5163              
5164             =item C
5165              
5166             =item C
5167              
5168             =item C
5169              
5170             =item C
5171              
5172             =item C
5173              
5174             =item C
5175              
5176             =back
5177              
5178             =head1 C<:alpha>
5179              
5180             Transparency definitions. These define alpha as the opacity of a surface.
5181              
5182             =over
5183              
5184             =item C
5185              
5186             =item C
5187              
5188             =back
5189              
5190             =head1 C<:pixelType>
5191              
5192             =over
5193              
5194             =item C
5195              
5196             =item C
5197              
5198             =item C
5199              
5200             =item C
5201              
5202             =item C
5203              
5204             =item C
5205              
5206             =item C
5207              
5208             =item C
5209              
5210             =item C
5211              
5212             =item C
5213              
5214             =item C
5215              
5216             =item C
5217              
5218             =back
5219              
5220             =head1 C<:bitmapOrder>
5221              
5222             Bitmap pixel order, high bit -> low bit.
5223              
5224             =over
5225              
5226             =item C
5227              
5228             =item C
5229              
5230             =item C
5231              
5232             =back
5233              
5234             =head1 C<:packedOrder>
5235              
5236             Packed component order, high bit -> low bit.
5237              
5238             =over
5239              
5240             =item C
5241              
5242             =item C
5243              
5244             =item C
5245              
5246             =item C
5247              
5248             =item C
5249              
5250             =item C
5251              
5252             =item C
5253              
5254             =item C
5255              
5256             =item C
5257              
5258             =back
5259              
5260             =head1 C<:arrayOrder>
5261              
5262             Array component order, low byte -> high byte.
5263              
5264             =over
5265              
5266             =item C
5267              
5268             =item C
5269              
5270             =item C
5271              
5272             =item C
5273              
5274             =item C
5275              
5276             =item C
5277              
5278             =item C
5279              
5280             =back
5281              
5282             =head1 C<:packedLayout>
5283              
5284             Packed component layout.
5285              
5286             =over
5287              
5288             =item C
5289              
5290             =item C
5291              
5292             =item C
5293              
5294             =item C
5295              
5296             =item C
5297              
5298             =item C
5299              
5300             =item C
5301              
5302             =item C
5303              
5304             =item C
5305              
5306             =back
5307              
5308             =head1 C<:pixels>
5309              
5310             =over
5311              
5312             =item C
5313              
5314             =item C
5315              
5316             =item C
5317              
5318             =item C
5319              
5320             =item C
5321              
5322             =item C
5323              
5324             =item C
5325              
5326             =item C
5327              
5328             =item C
5329              
5330             =item C
5331              
5332             =item C
5333              
5334             =item C
5335              
5336             =item C
5337              
5338             =back
5339              
5340             =head1 C<:pixelFormatEnum>
5341              
5342             =over
5343              
5344             =item C
5345              
5346             =item C
5347              
5348             =item C
5349              
5350             =item C
5351              
5352             =item C
5353              
5354             =item C
5355              
5356             =item C
5357              
5358             =item C
5359              
5360             =item C
5361              
5362             =item C
5363              
5364             =item C
5365              
5366             =item C
5367              
5368             =item C
5369              
5370             =item C
5371              
5372             =item C
5373              
5374             =item C
5375              
5376             =item C
5377              
5378             =item C
5379              
5380             =item C
5381              
5382             =item C
5383              
5384             =item C
5385              
5386             =item C
5387              
5388             =item C
5389              
5390             =item C
5391              
5392             =item C
5393              
5394             =item C
5395              
5396             =item C
5397              
5398             =item C
5399              
5400             =item C
5401              
5402             =item C
5403              
5404             =item C
5405              
5406             =item C
5407              
5408             =item C
5409              
5410             =item C
5411              
5412             =item C
5413              
5414             =item C
5415              
5416             =item C
5417              
5418             =item C
5419              
5420             =item C
5421              
5422             =item C
5423              
5424             =item C
5425              
5426             =item C
5427              
5428             =item C - Planar mode: Y + V + U (3 planes)
5429              
5430             =item C - Planar mode: Y + U + V (3 planes)
5431              
5432             =item C - Packed mode: Y0+U0+Y1+V0 (1 plane)
5433              
5434             =item C - Packed mode: U0+Y0+V0+Y1 (1 plane)
5435              
5436             =item C - Packed mode: Y0+V0+Y1+U0 (1 plane)
5437              
5438             =item C - Planar mode: Y + U/V interleaved (2 planes)
5439              
5440             =item C - Planar mode: Y + V/U interleaved (2 planes)
5441              
5442             =item C - Android video texture format
5443              
5444             =back
5445              
5446             =head1 C<:powerState>
5447              
5448             The basic state for the system's power supply.
5449              
5450             =over
5451              
5452             =item C - Cannot determine power status
5453              
5454             =item C - Not plugged in, running on the battery
5455              
5456             =item C - Plugged in, no battery available
5457              
5458             =item C - Plugged in, charging battery
5459              
5460             =item C - Plugged in, battery charged
5461              
5462             =back
5463              
5464              
5465              
5466              
5467              
5468              
5469              
5470              
5471              
5472              
5473              
5474             =head1 C<:assertState>
5475              
5476              
5477              
5478             =over
5479              
5480             =item C - Retry the assert immediately
5481              
5482             =item C - Make the debugger trigger a breakpoint
5483              
5484             =item C - Terminate the program
5485              
5486             =item C - Ignore the assert
5487              
5488             =item C - Ignore the assert from now on
5489              
5490             =back
5491              
5492             =head2 C<:windowflags>
5493              
5494             The flags on a window.
5495              
5496             =over
5497              
5498             =item C - Fullscreen window
5499              
5500             =item C - Window usable with OpenGL context
5501              
5502             =item C - Window is visible
5503              
5504             =item C - Window is not visible
5505              
5506             =item C - No window decoration
5507              
5508             =item C - Window can be resized
5509              
5510             =item C - Window is minimized
5511              
5512             =item C - Window is maximized
5513              
5514             =item C - Window has grabbed mouse input
5515              
5516             =item C - Window has input focus
5517              
5518             =item C - Window has mouse focus
5519              
5520             =item C - Fullscreen window without frame
5521              
5522             =item C - Window not created by SDL
5523              
5524             =item C - Window should be created in high-DPI mode if supported.
5525              
5526             On macOS NSHighResolutionCapable must be set true in the application's
5527             Info.plist for this to have any effect.
5528              
5529             =item C - Window has mouse captured (unrelated to C)
5530              
5531             =item C - Window should always be above others
5532              
5533             =item C - Window should not be added to the taskbar
5534              
5535             =item C - Window should be treated as a utility window
5536              
5537             =item C - Window should be treated as a tooltip
5538              
5539             =item C - Window should be treated as a popup menu
5540              
5541             =item C - Window has grabbed keyboard input
5542              
5543             =item C - Window usable for Vulkan surface
5544              
5545             =item C - Window usable for Metal view
5546              
5547             =item C - Equivalent to C for compatibility
5548              
5549             =back
5550              
5551             =head2 C<:windowEventID>
5552              
5553             Event subtype for window events.
5554              
5555             =over
5556              
5557             =item C - Never used
5558              
5559             =item C - Window has been shown
5560              
5561             =item C - Window has been hidden
5562              
5563             =item C - Window has been exposed and should be redrawn
5564              
5565             =item C - Window has been moved to C
5566              
5567             =item C - Window has been resized to C
5568              
5569             =item C - The window size has changed, either as a result of an API call or through the system or user changing the window size.
5570              
5571             =item C - Window has been minimized
5572              
5573             =item C - Window has been maximized
5574              
5575             =item C - Window has been restored to normal size and position
5576              
5577             =item C - Window has gained mouse focus
5578              
5579             =item C - Window has lost mouse focus
5580              
5581             =item C - Window has gained keyboard focus
5582              
5583             =item C - Window has lost keyboard focus
5584              
5585             =item C - The window manager requests that the window be closed
5586              
5587             =item C - Window is being offered a focus (should C on itself or a subwindow, or ignore)
5588              
5589             =item C - Window had a hit test that wasn't C.
5590              
5591             =back
5592              
5593             =head2 C<:displayEventID>
5594              
5595             Event subtype for display events.
5596              
5597             =over
5598              
5599             =item C - Never used
5600              
5601             =item C - Display orientation has changed to data1
5602              
5603             =item C - Display has been added to the system
5604              
5605             =item C - Display has been removed from the system
5606              
5607             =back
5608              
5609             =head2 C<:displayOrientation>
5610              
5611             =over
5612              
5613             =item C - The display orientation can't be determined
5614              
5615             =item C - The display is in landscape mode, with the right side up, relative to portrait mode
5616              
5617             =item C - The display is in landscape mode, with the left side up, relative to portrait mode
5618              
5619             =item C - The display is in portrait mode
5620              
5621             =item C - The display is in portrait mode, upside down
5622              
5623             =back
5624              
5625             =head2 C<:glAttr>
5626              
5627             OpenGL configuration attributes.
5628              
5629             =over
5630              
5631             =item C
5632              
5633             =item C
5634              
5635             =item C
5636              
5637             =item C
5638              
5639             =item C
5640              
5641             =item C
5642              
5643             =item C
5644              
5645             =item C
5646              
5647             =item C
5648              
5649             =item C
5650              
5651             =item C
5652              
5653             =item C
5654              
5655             =item C
5656              
5657             =item C
5658              
5659             =item C
5660              
5661             =item C
5662              
5663             =item C
5664              
5665             =item C
5666              
5667             =item C
5668              
5669             =item C
5670              
5671             =item C
5672              
5673             =item C
5674              
5675             =item C
5676              
5677             =item C
5678              
5679             =item C
5680              
5681             =item C
5682              
5683             =item C
5684              
5685             =back
5686              
5687             =head2 C<:glProfile>
5688              
5689             =over
5690              
5691             =item C
5692              
5693             =item C
5694              
5695             =item C
5696              
5697             =back
5698              
5699             =head2 C<:glContextFlag>
5700              
5701             =over
5702              
5703             =item C
5704              
5705             =item C
5706              
5707             =item C
5708              
5709             =item C
5710              
5711             =back
5712              
5713             =head2 C<:glContextReleaseFlag>
5714              
5715             =over
5716              
5717             =item C
5718              
5719             =item C
5720              
5721             =back
5722              
5723             =head2 C<:glContextResetNotification>
5724              
5725             =over
5726              
5727             =item C
5728              
5729             =item C
5730              
5731             =back
5732              
5733             =head2 C<:rendererFlags>
5734              
5735             Flags used when creating a rendering context.
5736              
5737             =over
5738              
5739             =item C - The renderer is a software fallback
5740              
5741             =item C - The renderer uses hardware acceleration
5742              
5743             =item C - Present is synchronized with the refresh rate
5744              
5745             =item C - The renderer supports rendering to texture
5746              
5747             =back
5748              
5749             =head2 C<:scaleMode>
5750              
5751             The scaling mode for a texture.
5752              
5753             =over
5754              
5755             =item C - nearest pixel sampling
5756              
5757             =item C - linear filtering
5758              
5759             =item C - anisotropic filtering
5760              
5761             =back
5762              
5763             =head2 C<:textureAccess>
5764              
5765             The access pattern allowed for a texture.
5766              
5767             =over
5768              
5769             =item C - Changes rarely, not lockable
5770              
5771             =item C - Changes frequently, lockable
5772              
5773             =item C - Texture can be used as a render target
5774              
5775             =back
5776              
5777             =head2 C<:textureModulate>
5778              
5779             The texture channel modulation used in L<< C
5780             )>|/C >>.
5781              
5782             =over
5783              
5784             =item C - No modulation
5785              
5786             =item C - srcC = srcC * color
5787              
5788             =item C - srcA = srcA * alpha
5789              
5790             =back
5791              
5792             =head2 C<:renderFlip>
5793              
5794             Flip constants for L<< C|/C
5795             >>.
5796              
5797             =over
5798              
5799             =item C - do not flip
5800              
5801             =item C - flip horizontally
5802              
5803             =item C - flip vertically
5804              
5805             =back
5806              
5807             =head2 C<:blendMode>
5808              
5809             The blend mode used in L<< C|/C
5810             >> and drawing operations.
5811              
5812             =over
5813              
5814             =item C - no blending
5815              
5816             dstRGBA = srcRGBA
5817              
5818             =item C - alpha blending
5819              
5820             dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA))
5821             dstA = srcA + (dstA * (1-srcA))
5822              
5823             =item C - additive blending
5824              
5825             dstRGB = (srcRGB * srcA) + dstRGB
5826             dstA = dstA
5827              
5828             =item C - color modulate
5829              
5830             dstRGB = srcRGB * dstRGB
5831             dstA = dstA
5832              
5833             =item C - color multiply
5834              
5835             dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA))
5836             dstA = (srcA * dstA) + (dstA * (1-srcA))
5837              
5838             =item C -
5839              
5840             =back
5841              
5842             Additional custom blend modes can be returned by L<<
5843             C|/C >>
5844              
5845             =head2 C<:blendOperation>
5846              
5847             The blend operation used when combining source and destination pixel
5848             components.
5849              
5850             =over
5851              
5852             =item C - C: supported by all renderers
5853              
5854             =item C - C: supported by D3D9, D3D11, OpenGL, OpenGLES
5855              
5856             =item C - C: supported by D3D9, D3D11, OpenGL, OpenGLES
5857              
5858             =item C - C: supported by D3D11
5859              
5860             =item C - C: supported by D3D11
5861              
5862             =back
5863              
5864             =head2 C<:blendFactor>
5865              
5866             The normalized factor used to multiply pixel components.
5867              
5868             =over
5869              
5870             =item C - C<0, 0, 0, 0>
5871              
5872             =item C - C<1, 1, 1, 1>
5873              
5874             =item C - C
5875              
5876             =item C - C<1-srcR, 1-srcG, 1-srcB, 1-srcA>
5877              
5878             =item C - C
5879              
5880             =item C - C<1-srcA, 1-srcA, 1-srcA, 1-srcA>
5881              
5882             =item C - C
5883              
5884             =item C - C<1-dstR, 1-dstG, 1-dstB, 1-dstA>
5885              
5886             =item C - C
5887              
5888             =item C - C<1-dstA, 1-dstA, 1-dstA, 1-dstA>
5889              
5890             =back
5891              
5892             =head2 C<:audio>
5893              
5894             Audio format flags.
5895              
5896             These are what the 16 bits in SDL_AudioFormat currently mean... (Unspecified
5897             bits are always zero).
5898              
5899             ++-----------------------sample is signed if set
5900             ||
5901             || ++-----------sample is bigendian if set
5902             || ||
5903             || || ++---sample is float if set
5904             || || ||
5905             || || || +---sample bit size---+
5906             || || || | |
5907             15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
5908              
5909             There are macros in SDL 2.0 and later to query these bits.
5910              
5911             =head3 Audio flags
5912              
5913             =over
5914              
5915             =item C
5916              
5917             =item C
5918              
5919             =item C
5920              
5921             =item C
5922              
5923             =item C
5924              
5925             =item C
5926              
5927             =item C
5928              
5929             =item C
5930              
5931             =item C
5932              
5933             =item C
5934              
5935             =item C
5936              
5937             =back
5938              
5939             =head3 Audio format flags
5940              
5941             Defaults to LSB byte order.
5942              
5943             =over
5944              
5945             =item C - Unsigned 8-bit samples
5946              
5947             =item C - Signed 8-bit samples
5948              
5949             =item C - Unsigned 16-bit samples
5950              
5951             =item C - Signed 16-bit samples
5952              
5953             =item C - As above, but big-endian byte order
5954              
5955             =item C - As above, but big-endian byte order
5956              
5957             =item C - C
5958              
5959             =item C - C
5960              
5961             =back
5962              
5963             =head3 C support
5964              
5965             =over
5966              
5967             =item C - 32-bit integer samples
5968              
5969             =item C - As above, but big-endian byte order
5970              
5971             =item C - C
5972              
5973             =back
5974              
5975             =head3 C support
5976              
5977             =over
5978              
5979             =item C - 32-bit floating point samples
5980              
5981             =item C - As above, but big-endian byte order
5982              
5983             =item C - C
5984              
5985             =back
5986              
5987             =head3 Native audio byte ordering
5988              
5989             =over
5990              
5991             =item C
5992              
5993             =item C
5994              
5995             =item C
5996              
5997             =item C
5998              
5999             =back
6000              
6001             =head3 Allow change flags
6002              
6003             Which audio format changes are allowed when opening a device.
6004              
6005             =over
6006              
6007             =item C
6008              
6009             =item C
6010              
6011             =item C
6012              
6013             =item C
6014              
6015             =item C
6016              
6017             =back
6018              
6019             =head1 Development
6020              
6021             SDL2 is still in early development: the majority of SDL's functions have yet to
6022             be implemented and the interface may also grow to be less sugary leading up to
6023             an eventual 1.0 release. If you like stable, well tested software that performs
6024             as documented, you should hold off on trying to use SDL2 for a bit.
6025              
6026             =head1 LICENSE
6027              
6028             Copyright (C) Sanko Robinson.
6029              
6030             This library is free software; you can redistribute it and/or modify it under
6031             the terms found in the Artistic License 2. Other copyrights, terms, and
6032             conditions may apply to data transmitted through this module.
6033              
6034             =head1 AUTHOR
6035              
6036             Sanko Robinson Esanko@cpan.orgE
6037              
6038             =begin stopwords
6039              
6040             libSDL enum iOS iPhone tvOS gamepad gamepads bitmap colorkey asyncify keycode
6041             ctrl+click OpenGL glibc pthread screensaver fullscreen SDL_gamecontroller.h
6042             XBox XInput pthread pthreads realtime rtkit Keycode mutexes resources imple
6043             irectMedia ayer errstr coderef patchlevel distro WinRT raspberrypi psp macOS
6044             NSHighResolutionCapable lowlevel vsync gamecontroller framebuffer XRandR
6045             XVidMode libc musl non letterbox libsamplerate AVAudioSessionCategoryAmbient
6046             AVAudioSessionCategoryPlayback VoIP OpenGLES opengl opengles opengles2 spammy
6047             popup tooltip taskbar subwindow high-dpi subpixel borderless draggable viewport
6048             user-resizable resizable srcA srcC GiB dstrect rect subrectangle pseudocode ms
6049             verystrict resampler eglSwapBuffers backbuffer scancode unhandled lifespan wgl
6050             glX framerate deadzones vice-versa kmsdrm jp CAMetalLayer touchpad autodetect
6051             autocenter encodings artesian buttonstate
6052              
6053             =end stopwords
6054              
6055             =cut
6056              
6057             };
6058             1;