File Coverage

lib/SDL2/Enum.pm
Criterion Covered Total %
statement 17 85 20.0
branch n/a
condition n/a
subroutine 6 26 23.0
pod 0 2 0.0
total 23 113 20.3


line stmt bran cond sub pod time code
1             package SDL2::Enum {
2 2     2   16 use lib '../../lib';
  2         3  
  2         18  
3 2     2   305 use strictures 2;
  2         20  
  2         107  
4 2     2   527 use experimental 'signatures';
  2         4  
  2         18  
5 2     2   259 use SDL2::Utils;
  2         4  
  2         19  
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   0 SDL_INIT_TIMER() | SDL_INIT_AUDIO() | SDL_INIT_VIDEO() | SDL_INIT_EVENTS()
20             | SDL_INIT_JOYSTICK() | SDL_INIT_HAPTIC() | SDL_INIT_GAMECONTROLLER()
21             | SDL_INIT_SENSOR();
22             }
23             ]
24             ];
25              
26             # https://github.com/libsdl-org/SDL/blob/main/include/SDL_audio.h
27 0         0 define audioformat => [
28             [ SDL_AUDIO_MASK_BITSIZE => 0xFF ],
29             [ SDL_AUDIO_MASK_DATATYPE => ( 1 << 8 ) ],
30             [ SDL_AUDIO_MASK_ENDIAN => ( 1 << 12 ) ],
31             [ SDL_AUDIO_MASK_SIGNED => ( 1 << 15 ) ],
32 0     0   0 [ SDL_AUDIO_BITSIZE => sub ($x) { $x & SDL_AUDIO_MASK_BITSIZE() } ],
  0         0  
  0         0  
  0         0  
33 0     0   0 [ SDL_AUDIO_ISFLOAT => sub ($x) { $x & SDL_AUDIO_MASK_DATATYPE() } ],
  0         0  
  0         0  
  0         0  
34 0     0   0 [ SDL_AUDIO_ISBIGENDIAN => sub ($x) { $x & SDL_AUDIO_MASK_ENDIAN() } ],
  0         0  
  0         0  
  0         0  
35 0     0   0 [ SDL_AUDIO_ISSIGNED => sub ($x) { $x & SDL_AUDIO_MASK_SIGNED() } ],
  0         0  
  0         0  
  0         0  
36 0     0   0 [ SDL_AUDIO_ISINT => sub ($x) { !SDL_AUDIO_ISFLOAT($x) } ],
  0         0  
  0         0  
  0         0  
37 0     0   0 [ SDL_AUDIO_ISLITTLEENDIAN => sub ($x) { !SDL_AUDIO_ISBIGENDIAN($x) } ],
  0         0  
  0         0  
  0         0  
38 0     0   0 [ SDL_AUDIO_ISUNSIGNED => sub ($x) { !SDL_AUDIO_ISSIGNED($x) } ],
  0         0  
  0         0  
  0         0  
39             [ AUDIO_U8 => 0x0008 ],
40             [ AUDIO_S8 => 0x8008 ],
41             [ AUDIO_U16LSB => 0x0010 ],
42             [ AUDIO_S16LSB => 0x8010 ],
43             [ AUDIO_U16MSB => 0x1010 ],
44             [ AUDIO_S16MSB => 0x9010 ],
45 0     0   0 [ AUDIO_U16 => sub () { AUDIO_U16LSB() } ],
  0         0  
  0         0  
46 0     0   0 [ AUDIO_S16 => sub () { AUDIO_S16LSB() } ],
  0         0  
  0         0  
47             [ AUDIO_S32LSB => 0x8020 ],
48             [ AUDIO_S32MSB => 0x9020 ],
49 0     0   0 [ AUDIO_S32 => sub () { AUDIO_S32LSB() } ],
  0         0  
  0         0  
50             [ AUDIO_F32LSB => 0x8120 ],
51             [ AUDIO_F32MSB => 0x9120 ],
52 0     0   0 [ AUDIO_F32 => sub () { AUDIO_F32LSB() } ], (
  0         0  
  0         0  
53             SDL2::FFI::bigendian() ? (
54 0     0   0 [ AUDIO_U16SYS => sub () { AUDIO_U16MSB() } ],
  0         0  
  0         0  
55 0     0   0 [ AUDIO_S16SYS => sub () { AUDIO_S16MSB() } ],
  0         0  
  0         0  
56 0     0   0 [ AUDIO_S32SYS => sub () { AUDIO_S32MSB() } ],
  0         0  
  0         0  
57 0         0 [ AUDIO_F32SYS => sub () { AUDIO_F32MSB() } ]
  0         0  
58             ) : (
59             [ AUDIO_U16SYS => sub () { AUDIO_U16LSB() } ],
60             [ AUDIO_S16SYS => sub () { AUDIO_S16LSB() } ],
61             [ AUDIO_S32SYS => sub () { AUDIO_S32LSB() } ],
62 0     0   0 [ AUDIO_F32SYS => sub () { AUDIO_F32LSB() } ],
63             )
64             ),
65 0     0   0 [ SDL_AUDIO_ALLOW_FREQUENCY_CHANGE => sub () {0x00000001} ],
  0         0  
  0         0  
66 0     0   0 [ SDL_AUDIO_ALLOW_FORMAT_CHANGE => sub () {0x00000002} ],
  0         0  
  0         0  
67 0     0   0 [ SDL_AUDIO_ALLOW_CHANNELS_CHANGE => sub () {0x00000004} ],
  0         0  
  0         0  
68 0     0   0 [ SDL_AUDIO_ALLOW_SAMPLES_CHANGE => sub () {0x00000008} ],
  0         0  
  0         0  
69 0         0 [ SDL_AUDIO_ALLOW_ANY_CHANGE => sub () {
70 0         0 ( SDL_AUDIO_ALLOW_FREQUENCY_CHANGE() | SDL_AUDIO_ALLOW_FORMAT_CHANGE()
71             | SDL_AUDIO_ALLOW_CHANNELS_CHANGE() | SDL_AUDIO_ALLOW_SAMPLES_CHANGE() )
72             }
73             ],
74             [ SDL_AUDIOCVT_MAX_FILTERS => 9 ]
75             ];
76             enum
77             SDL_AudioStatus => [ [ SDL_AUDIO_STOPPED => 0 ], qw[SDL_AUDIO_PLAYING SDL_AUDIO_PAUSED] ],
78             SDL_BlendMode => [
79             [ SDL_BLENDMODE_NONE => 0x00000000 ],
80             [ SDL_BLENDMODE_BLEND => 0x00000001 ],
81             [ SDL_BLENDMODE_ADD => 0x00000002, ],
82             [ SDL_BLENDMODE_MOD => 0x00000004, ],
83             [ SDL_BLENDMODE_MUL => 0x00000008, ],
84             [ SDL_BLENDMODE_INVALID => 0x7FFFFFFF ]
85             ],
86             SDL_BlendOperation => [
87             [ SDL_BLENDOPERATION_ADD => 0x1 ],
88             [ SDL_BLENDOPERATION_SUBTRACT => 0x2 ],
89             [ SDL_BLENDOPERATION_REV_SUBTRACT => 0x3 ],
90             [ SDL_BLENDOPERATION_MINIMUM => 0x4 ],
91             [ SDL_BLENDOPERATION_MAXIMUM => 0x5 ]
92             ],
93             SDL_BlendFactor => [
94             [ SDL_BLENDFACTOR_ZERO => 0x1 ],
95             [ SDL_BLENDFACTOR_ONE => 0x2 ],
96             [ SDL_BLENDFACTOR_SRC_COLOR => 0x3 ],
97             [ SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR => 0x4 ],
98             [ SDL_BLENDFACTOR_SRC_ALPHA => 0x5 ],
99             [ SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA => 0x6 ],
100             [ SDL_BLENDFACTOR_DST_COLOR => 0x7 ],
101             [ SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR => 0x8 ],
102             [ SDL_BLENDFACTOR_DST_ALPHA => 0x9 ],
103             [ SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA => 0xA ]
104             ],
105             SDL_errorcode => [
106             qw[
107             SDL_ENOMEM
108             SDL_EFREAD
109             SDL_EFWRITE
110             SDL_EFSEEK
111             SDL_UNSUPPORTED
112             SDL_LASTERROR
113             ]
114             ];
115             define eventstate => [ [ SDL_RELEASED => 0 ], [ SDL_PRESSED => 1 ] ];
116             enum SDL_EventType => [
117             [ SDL_FIRSTEVENT => 0 ], [ SDL_QUIT => 0x100 ],
118              
119             # These application events have special meaning on iOS, see README-ios.md for details
120             qw[SDL_APP_TERMINATING
121             SDL_APP_LOWMEMORY
122             SDL_APP_WILLENTERBACKGROUND
123             SDL_APP_DIDENTERBACKGROUND
124             SDL_APP_WILLENTERFOREGROUND
125             SDL_APP_DIDENTERFOREGROUND],
126             #
127             'SDL_LOCALECHANGED',
128              
129             #Display events
130             [ SDL_DISPLAYEVENT => 0x150 ],
131              
132             # Window events
133             [ SDL_WINDOWEVENT => 0x200 ], 'SDL_SYSWMEVENT',
134              
135             # Keyboard events
136             [ SDL_KEYDOWN => 0x300 ], qw[SDL_KEYUP
137             SDL_TEXTEDITING
138             SDL_TEXTINPUT
139             SDL_KEYMAPCHANGED],
140              
141             # Mouse events
142             [ SDL_MOUSEMOTION => 0x400 ], qw[SDL_MOUSEBUTTONDOWN
143             SDL_MOUSEBUTTONUP
144             SDL_MOUSEWHEEL],
145              
146             # Joystick events
147             [ SDL_JOYAXISMOTION => 0x600 ], qw[SDL_JOYBALLMOTION
148             SDL_JOYHATMOTION
149             SDL_JOYBUTTONDOWN
150             SDL_JOYBUTTONUP
151             SDL_JOYDEVICEADDED
152             SDL_JOYDEVICEREMOVED],
153              
154             # Game controller events
155             [ SDL_CONTROLLERAXISMOTION => 0x650 ], qw[SDL_CONTROLLERBUTTONDOWN
156             SDL_CONTROLLERBUTTONUP
157             SDL_CONTROLLERDEVICEADDED
158             SDL_CONTROLLERDEVICEREMOVED
159             SDL_CONTROLLERDEVICEREMAPPED
160             SDL_CONTROLLERTOUCHPADDOWN
161             SDL_CONTROLLERTOUCHPADMOTION
162             SDL_CONTROLLERTOUCHPADUP
163             SDL_CONTROLLERSENSORUPDATE],
164              
165             # Touch events
166             [ SDL_FINGERDOWN => 0x700 ], qw[SDL_FINGERUP
167             SDL_FINGERMOTION],
168              
169             # Gesture events
170             [ SDL_DOLLARGESTURE => 0x800 ], qw[SDL_DOLLARRECORD
171             SDL_MULTIGESTURE],
172              
173             # Clipboard events
174             [ SDL_CLIPBOARDUPDATE => 0x900 ],
175              
176             # Drag and drop events
177             [ SDL_DROPFILE => 0x1000 ], qw[SDL_DROPTEXT
178             SDL_DROPBEGIN
179             SDL_DROPCOMPLETE],
180              
181             # Audio hotplug events
182             [ SDL_AUDIODEVICEADDED => 0x1100 ], 'SDL_AUDIODEVICEREMOVED',
183              
184             # Sensor events
185             [ SDL_SENSORUPDATE => 0x1200 ],
186              
187             # Render events
188             [ SDL_RENDER_TARGETS_RESET => 0x2000 ], 'SDL_RENDER_DEVICE_RESET',
189              
190             # Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use,
191             # and should be allocated with SDL_RegisterEvents()
192             [ SDL_USEREVENT => 0x8000 ],
193              
194             # This last event is only for bounding internal arrays
195             [ SDL_LASTEVENT => 0xFFFF ]
196             ];
197              
198             # START HERE
199             enum SDL_HintPriority => [qw[SDL_HINT_DEFAULT SDL_HINT_NORMAL SDL_HINT_OVERRIDE]];
200             define
201              
202             # https://github.com/libsdl-org/SDL/blob/main/include/SDL_hints.h
203             SDL_Hint => [
204             [ SDL_HINT_ACCELEROMETER_AS_JOYSTICK => 'SDL_ACCELEROMETER_AS_JOYSTICK' ],
205             [ SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED => 'SDL_ALLOW_ALT_TAB_WHILE_GRABBED' ],
206             [ SDL_HINT_ALLOW_TOPMOST => 'SDL_ALLOW_TOPMOST' ],
207             [ SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION =>
208             'SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION'
209             ],
210             [ SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION =>
211             'SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION'
212             ],
213             [ SDL_HINT_ANDROID_BLOCK_ON_PAUSE => 'SDL_ANDROID_BLOCK_ON_PAUSE' ],
214             [ SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO => 'SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO' ],
215             [ SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH => 'SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH' ],
216             [ SDL_HINT_ANDROID_TRAP_BACK_BUTTON => 'SDL_ANDROID_TRAP_BACK_BUTTON' ],
217             [ SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS => 'SDL_APPLE_TV_CONTROLLER_UI_EVENTS' ],
218             [ SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION => 'SDL_APPLE_TV_REMOTE_ALLOW_ROTATION' ],
219             [ SDL_HINT_AUDIO_CATEGORY => 'SDL_AUDIO_CATEGORY' ],
220             [ SDL_HINT_AUDIO_DEVICE_APP_NAME => 'SDL_AUDIO_DEVICE_APP_NAME' ],
221             [ SDL_HINT_AUDIO_DEVICE_STREAM_NAME => 'SDL_AUDIO_DEVICE_STREAM_NAME' ],
222             [ SDL_HINT_AUDIO_DEVICE_STREAM_ROLE => 'SDL_AUDIO_DEVICE_STREAM_ROLE' ],
223             [ SDL_HINT_AUDIO_RESAMPLING_MODE => 'SDL_AUDIO_RESAMPLING_MODE' ],
224             [ SDL_HINT_AUTO_UPDATE_JOYSTICKS => 'SDL_AUTO_UPDATE_JOYSTICKS' ],
225             [ SDL_HINT_AUTO_UPDATE_SENSORS => 'SDL_AUTO_UPDATE_SENSORS' ],
226             [ SDL_HINT_BMP_SAVE_LEGACY_FORMAT => 'SDL_BMP_SAVE_LEGACY_FORMAT' ],
227             [ SDL_HINT_DISPLAY_USABLE_BOUNDS => 'SDL_DISPLAY_USABLE_BOUNDS' ],
228             [ SDL_HINT_EMSCRIPTEN_ASYNCIFY => 'SDL_EMSCRIPTEN_ASYNCIFY' ],
229             [ SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT => 'SDL_EMSCRIPTEN_KEYBOARD_ELEMENT' ],
230             [ SDL_HINT_ENABLE_STEAM_CONTROLLERS => 'SDL_ENABLE_STEAM_CONTROLLERS' ],
231             [ SDL_HINT_EVENT_LOGGING => 'SDL_EVENT_LOGGING' ],
232             [ SDL_HINT_FRAMEBUFFER_ACCELERATION => 'SDL_FRAMEBUFFER_ACCELERATION' ],
233             [ SDL_HINT_GAMECONTROLLERCONFIG => 'SDL_GAMECONTROLLERCONFIG' ],
234             [ SDL_HINT_GAMECONTROLLERCONFIG_FILE => 'SDL_GAMECONTROLLERCONFIG_FILE' ],
235             [ SDL_HINT_GAMECONTROLLERTYPE => 'SDL_GAMECONTROLLERTYPE' ],
236             [ SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES => 'SDL_GAMECONTROLLER_IGNORE_DEVICES' ],
237             [ SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT =>
238             'SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT'
239             ],
240             [ SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS => 'SDL_GAMECONTROLLER_USE_BUTTON_LABELS' ],
241             [ SDL_HINT_GRAB_KEYBOARD => 'SDL_GRAB_KEYBOARD' ],
242             [ SDL_HINT_IDLE_TIMER_DISABLED => 'SDL_IDLE_TIMER_DISABLED' ],
243             [ SDL_HINT_IME_INTERNAL_EDITING => 'SDL_IME_INTERNAL_EDITING' ],
244             [ SDL_HINT_IOS_HIDE_HOME_INDICATOR => 'SDL_IOS_HIDE_HOME_INDICATOR' ],
245             [ SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS => 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS' ],
246             [ SDL_HINT_JOYSTICK_HIDAPI => 'SDL_JOYSTICK_HIDAPI' ],
247             [ SDL_HINT_JOYSTICK_HIDAPI_CORRELATE_XINPUT => 'SDL_JOYSTICK_HIDAPI_CORRELATE_XINPUT' ],
248             [ SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE => 'SDL_JOYSTICK_HIDAPI_GAMECUBE' ],
249             [ SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS => 'SDL_JOYSTICK_HIDAPI_JOY_CONS' ],
250             [ SDL_HINT_JOYSTICK_HIDAPI_PS4 => 'SDL_JOYSTICK_HIDAPI_PS4' ],
251             [ SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE => 'SDL_JOYSTICK_HIDAPI_PS4_RUMBLE' ],
252             [ SDL_HINT_JOYSTICK_HIDAPI_PS5 => 'SDL_JOYSTICK_HIDAPI_PS5' ],
253             [ SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED => 'SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED' ],
254             [ SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE => 'SDL_JOYSTICK_HIDAPI_PS5_RUMBLE' ],
255             [ SDL_HINT_JOYSTICK_HIDAPI_STADIA => 'SDL_JOYSTICK_HIDAPI_STADIA' ],
256             [ SDL_HINT_JOYSTICK_HIDAPI_STEAM => 'SDL_JOYSTICK_HIDAPI_STEAM' ],
257             [ SDL_HINT_JOYSTICK_HIDAPI_SWITCH => 'SDL_JOYSTICK_HIDAPI_SWITCH' ],
258             [ SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED => 'SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED' ],
259             [ SDL_HINT_JOYSTICK_HIDAPI_XBOX => 'SDL_JOYSTICK_HIDAPI_XBOX' ],
260             [ SDL_HINT_JOYSTICK_RAWINPUT => 'SDL_JOYSTICK_RAWINPUT' ],
261             [ SDL_HINT_JOYSTICK_THREAD => 'SDL_JOYSTICK_THREAD' ],
262             [ SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER => 'SDL_KMSDRM_REQUIRE_DRM_MASTER' ],
263             [ SDL_HINT_LINUX_JOYSTICK_DEADZONES => 'SDL_LINUX_JOYSTICK_DEADZONES' ],
264             [ SDL_HINT_MAC_BACKGROUND_APP => 'SDL_MAC_BACKGROUND_APP' ],
265             [ SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK => 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK' ],
266             [ SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS => 'SDL_MOUSE_DOUBLE_CLICK_RADIUS' ],
267             [ SDL_HINT_MOUSE_DOUBLE_CLICK_TIME => 'SDL_MOUSE_DOUBLE_CLICK_TIME' ],
268             [ SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH => 'SDL_MOUSE_FOCUS_CLICKTHROUGH' ],
269             [ SDL_HINT_MOUSE_NORMAL_SPEED_SCALE => 'SDL_MOUSE_NORMAL_SPEED_SCALE' ],
270             [ SDL_HINT_MOUSE_RELATIVE_MODE_WARP => 'SDL_MOUSE_RELATIVE_MODE_WARP' ],
271             [ SDL_HINT_MOUSE_RELATIVE_SCALING => 'SDL_MOUSE_RELATIVE_SCALING' ],
272             [ SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE => 'SDL_MOUSE_RELATIVE_SPEED_SCALE' ],
273             [ SDL_HINT_MOUSE_TOUCH_EVENTS => 'SDL_MOUSE_TOUCH_EVENTS' ],
274             [ SDL_HINT_NO_SIGNAL_HANDLERS => 'SDL_NO_SIGNAL_HANDLERS' ],
275             [ SDL_HINT_OPENGL_ES_DRIVER => 'SDL_OPENGL_ES_DRIVER' ],
276             [ SDL_HINT_ORIENTATIONS => 'SDL_ORIENTATIONS' ],
277             [ SDL_HINT_PREFERRED_LOCALES => 'SDL_PREFERRED_LOCALES' ],
278             [ SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION => 'SDL_QTWAYLAND_CONTENT_ORIENTATION' ],
279             [ SDL_HINT_QTWAYLAND_WINDOW_FLAGS => 'SDL_QTWAYLAND_WINDOW_FLAGS' ],
280             [ SDL_HINT_RENDER_BATCHING => 'SDL_RENDER_BATCHING' ],
281             [ SDL_HINT_RENDER_DIRECT3D11_DEBUG => 'SDL_RENDER_DIRECT3D11_DEBUG' ],
282             [ SDL_HINT_RENDER_DIRECT3D_THREADSAFE => 'SDL_RENDER_DIRECT3D_THREADSAFE' ],
283             [ SDL_HINT_RENDER_DRIVER => 'SDL_RENDER_DRIVER' ],
284             [ SDL_HINT_RENDER_LOGICAL_SIZE_MODE => 'SDL_RENDER_LOGICAL_SIZE_MODE' ],
285             [ SDL_HINT_RENDER_OPENGL_SHADERS => 'SDL_RENDER_OPENGL_SHADERS' ],
286             [ SDL_HINT_RENDER_SCALE_QUALITY => 'SDL_RENDER_SCALE_QUALITY' ],
287             [ SDL_HINT_RENDER_VSYNC => 'SDL_RENDER_VSYNC' ],
288             [ SDL_HINT_RETURN_KEY_HIDES_IME => 'SDL_RETURN_KEY_HIDES_IME' ],
289             [ SDL_HINT_RPI_VIDEO_LAYER => 'SDL_RPI_VIDEO_LAYER' ],
290             [ SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL =>
291             'SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL'
292             ],
293             [ SDL_HINT_THREAD_PRIORITY_POLICY => 'SDL_THREAD_PRIORITY_POLICY' ],
294             [ SDL_HINT_THREAD_STACK_SIZE => 'SDL_THREAD_STACK_SIZE' ],
295             [ SDL_HINT_TIMER_RESOLUTION => 'SDL_TIMER_RESOLUTION' ],
296             [ SDL_HINT_TOUCH_MOUSE_EVENTS => 'SDL_TOUCH_MOUSE_EVENTS' ],
297             [ SDL_HINT_TV_REMOTE_AS_JOYSTICK => 'SDL_TV_REMOTE_AS_JOYSTICK' ],
298             [ SDL_HINT_VIDEO_ALLOW_SCREENSAVER => 'SDL_VIDEO_ALLOW_SCREENSAVER' ],
299             [ SDL_HINT_VIDEO_DOUBLE_BUFFER => 'SDL_VIDEO_DOUBLE_BUFFER' ],
300             [ SDL_HINT_VIDEO_EXTERNAL_CONTEXT => 'SDL_VIDEO_EXTERNAL_CONTEXT' ],
301             [ SDL_HINT_VIDEO_HIGHDPI_DISABLED => 'SDL_VIDEO_HIGHDPI_DISABLED' ],
302             [ SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES => 'SDL_VIDEO_MAC_FULLSCREEN_SPACES' ],
303             [ SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS => 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS' ],
304             [ SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT => 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT' ],
305             [ SDL_HINT_VIDEO_WIN_D3DCOMPILE => 'SDL_VIDEO_WIN_D3DCOMPILE' ],
306             [ SDL_HINT_VIDEO_WIN_D3DCOMPILER => 'SDL_VIDEO_WIN_D3DCOMPILER' ],
307             [ SDL_HINT_VIDEO_X11_FORCE_EGL => 'SDL_VIDEO_X11_FORCE_EGL' ],
308             [ SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR => 'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR' ],
309             [ SDL_HINT_VIDEO_X11_NET_WM_PING => 'SDL_VIDEO_X11_NET_WM_PING' ],
310             [ SDL_HINT_VIDEO_X11_WINDOW_VISUALID => 'SDL_VIDEO_X11_WINDOW_VISUALID' ],
311             [ SDL_HINT_VIDEO_X11_XINERAMA => 'SDL_VIDEO_X11_XINERAMA' ],
312             [ SDL_HINT_VIDEO_X11_XRANDR => 'SDL_VIDEO_X11_XRANDR' ],
313             [ SDL_HINT_VIDEO_X11_XVIDMODE => 'SDL_VIDEO_X11_XVIDMODE' ],
314             [ SDL_HINT_WAVE_FACT_CHUNK => 'SDL_WAVE_FACT_CHUNK' ],
315             [ SDL_HINT_WAVE_RIFF_CHUNK_SIZE => 'SDL_WAVE_RIFF_CHUNK_SIZE' ],
316             [ SDL_HINT_WAVE_TRUNCATION => 'SDL_WAVE_TRUNCATION' ],
317             [ SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING => 'SDL_WINDOWS_DISABLE_THREAD_NAMING' ],
318             [ SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP => 'SDL_WINDOWS_ENABLE_MESSAGELOOP' ],
319             [ SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS =>
320             'SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS'
321             ],
322             [ SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL => 'SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL' ],
323             [ SDL_HINT_WINDOWS_INTRESOURCE_ICON => 'SDL_WINDOWS_INTRESOURCE_ICON' ],
324             [ SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL => 'SDL_WINDOWS_INTRESOURCE_ICON_SMALL' ],
325             [ SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 => 'SDL_WINDOWS_NO_CLOSE_ON_ALT_F4' ],
326             [ SDL_HINT_WINDOWS_USE_D3D9EX => 'SDL_WINDOWS_USE_D3D9EX' ],
327             [ SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN =>
328             'SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN'
329             ],
330             [ SDL_HINT_WINRT_HANDLE_BACK_BUTTON => 'SDL_WINRT_HANDLE_BACK_BUTTON' ],
331             [ SDL_HINT_WINRT_PRIVACY_POLICY_LABEL => 'SDL_WINRT_PRIVACY_POLICY_LABEL' ],
332             [ SDL_HINT_WINRT_PRIVACY_POLICY_URL => 'SDL_WINRT_PRIVACY_POLICY_URL' ],
333             [ SDL_HINT_XINPUT_ENABLED => 'SDL_XINPUT_ENABLED' ],
334             [ SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING => 'SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING' ]
335             ];
336             enum SDL_LogCategory => [
337             qw[
338             SDL_LOG_CATEGORY_APPLICATION SDL_LOG_CATEGORY_ERROR SDL_LOG_CATEGORY_ASSERT
339             SDL_LOG_CATEGORY_SYSTEM SDL_LOG_CATEGORY_AUDIO SDL_LOG_CATEGORY_VIDEO
340             SDL_LOG_CATEGORY_RENDER SDL_LOG_CATEGORY_INPUT SDL_LOG_CATEGORY_TEST
341             SDL_LOG_CATEGORY_RESERVED1 SDL_LOG_CATEGORY_RESERVED2
342             SDL_LOG_CATEGORY_RESERVED3 SDL_LOG_CATEGORY_RESERVED4
343             SDL_LOG_CATEGORY_RESERVED5 SDL_LOG_CATEGORY_RESERVED6
344             SDL_LOG_CATEGORY_RESERVED7 SDL_LOG_CATEGORY_RESERVED8
345             SDL_LOG_CATEGORY_RESERVED9 SDL_LOG_CATEGORY_RESERVED10
346             SDL_LOG_CATEGORY_CUSTOM
347             ]
348             ],
349             SDL_LogPriority => [
350             [ SDL_LOG_PRIORITY_VERBOSE => 1 ], qw[SDL_LOG_PRIORITY_DEBUG SDL_LOG_PRIORITY_INFO
351             SDL_LOG_PRIORITY_WARN SDL_LOG_PRIORITY_ERROR SDL_LOG_PRIORITY_CRITICAL
352             SDL_NUM_LOG_PRIORITIES]
353             ],
354             SDL_WindowFlags => [
355             [ SDL_WINDOW_FULLSCREEN => 0x00000001 ],
356             [ SDL_WINDOW_OPENGL => 0x00000002 ],
357             [ SDL_WINDOW_SHOWN => 0x00000004 ],
358             [ SDL_WINDOW_HIDDEN => 0x00000008 ],
359             [ SDL_WINDOW_BORDERLESS => 0x00000010 ],
360             [ SDL_WINDOW_RESIZABLE => 0x00000020 ],
361             [ SDL_WINDOW_MINIMIZED => 0x00000040 ],
362             [ SDL_WINDOW_MAXIMIZED => 0x00000080 ],
363             [ SDL_WINDOW_MOUSE_GRABBED => 0x00000100 ],
364             [ SDL_WINDOW_INPUT_FOCUS => 0x00000200 ],
365             [ SDL_WINDOW_MOUSE_FOCUS => 0x00000400 ],
366             [ SDL_WINDOW_FULLSCREEN_DESKTOP => sub { ( SDL_WINDOW_FULLSCREEN() | 0x00001000 ) } ],
367             [ SDL_WINDOW_FOREIGN => 0x00000800 ],
368             [ SDL_WINDOW_ALLOW_HIGHDPI => 0x00002000 ],
369             [ SDL_WINDOW_MOUSE_CAPTURE => 0x00004000 ],
370             [ SDL_WINDOW_ALWAYS_ON_TOP => 0x00008000 ],
371             [ SDL_WINDOW_SKIP_TASKBAR => 0x00010000 ],
372             [ SDL_WINDOW_UTILITY => 0x00020000 ],
373             [ SDL_WINDOW_TOOLTIP => 0x00040000 ],
374             [ SDL_WINDOW_POPUP_MENU => 0x00080000 ],
375             [ SDL_WINDOW_KEYBOARD_GRABBED => 0x00100000 ],
376             [ SDL_WINDOW_VULKAN => 0x10000000 ],
377             [ SDL_WINDOW_METAL => 0x20000000 ],
378             [ SDL_WINDOW_INPUT_GRABBED => sub { SDL_WINDOW_MOUSE_GRABBED() } ],
379             ],
380             SDL_WindowFlags => [
381             qw[
382             SDL_WINDOWEVENT_NONE
383             SDL_WINDOWEVENT_SHOWN
384             SDL_WINDOWEVENT_HIDDEN
385             SDL_WINDOWEVENT_EXPOSED
386             SDL_WINDOWEVENT_MOVED
387             SDL_WINDOWEVENT_RESIZED
388             SDL_WINDOWEVENT_SIZE_CHANGED
389             SDL_WINDOWEVENT_MINIMIZED
390             SDL_WINDOWEVENT_MAXIMIZED
391             SDL_WINDOWEVENT_RESTORED
392             SDL_WINDOWEVENT_ENTER
393             SDL_WINDOWEVENT_LEAVE
394             SDL_WINDOWEVENT_FOCUS_GAINED
395             SDL_WINDOWEVENT_FOCUS_LOST
396             SDL_WINDOWEVENT_CLOSE
397             SDL_WINDOWEVENT_TAKE_FOCUS
398             SDL_WINDOWEVENT_HIT_TEST
399             ]
400             ],
401             SDL_DisplayEventID => [
402             qw[SDL_DISPLAYEVENT_NONE SDL_DISPLAYEVENT_ORIENTATION
403             SDL_DISPLAYEVENT_CONNECTED SDL_DISPLAYEVENT_DISCONNECTED
404             ]
405             ],
406             SDL_DisplayOrientation => [
407             qw[SDL_ORIENTATION_UNKNOWN
408             SDL_ORIENTATION_LANDSCAPE SDL_ORIENTATION_LANDSCAPE_FLIPPED
409             SDL_ORIENTATION_PORTRAIT SDL_ORIENTATION_PORTRAIT_FLIPPED
410             ]
411             ],
412             SDL_GLattr => [
413             qw[
414             SDL_GL_RED_SIZE
415             SDL_GL_GREEN_SIZE
416             SDL_GL_BLUE_SIZE
417             SDL_GL_ALPHA_SIZE
418             SDL_GL_BUFFER_SIZE
419             SDL_GL_DOUBLEBUFFER
420             SDL_GL_DEPTH_SIZE
421             SDL_GL_STENCIL_SIZE
422             SDL_GL_ACCUM_RED_SIZE
423             SDL_GL_ACCUM_GREEN_SIZE
424             SDL_GL_ACCUM_BLUE_SIZE
425             SDL_GL_ACCUM_ALPHA_SIZE
426             SDL_GL_STEREO
427             SDL_GL_MULTISAMPLEBUFFERS
428             SDL_GL_MULTISAMPLESAMPLES
429             SDL_GL_ACCELERATED_VISUAL
430             SDL_GL_RETAINED_BACKING
431             SDL_GL_CONTEXT_MAJOR_VERSION
432             SDL_GL_CONTEXT_MINOR_VERSION
433             SDL_GL_CONTEXT_EGL
434             SDL_GL_CONTEXT_FLAGS
435             SDL_GL_CONTEXT_PROFILE_MASK
436             SDL_GL_SHARE_WITH_CURRENT_CONTEXT
437             SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
438             SDL_GL_CONTEXT_RELEASE_BEHAVIOR
439             SDL_GL_CONTEXT_RESET_NOTIFICATION
440             SDL_GL_CONTEXT_NO_ERROR
441             ]
442             ],
443             SDL_GLprofile => [
444             [ SDL_GL_CONTEXT_PROFILE_CORE => 0x0001 ],
445             [ SDL_GL_CONTEXT_PROFILE_COMPATIBILITY => 0x0002 ],
446             [ SDL_GL_CONTEXT_PROFILE_ES => 0x0004 ]
447             ],
448             SDL_GLcontextFlag => [
449             [ SDL_GL_CONTEXT_DEBUG_FLAG => 0x0001 ],
450             [ SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG => 0x0002 ],
451             [ SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG => 0x0004 ],
452             [ SDL_GL_CONTEXT_RESET_ISOLATION_FLAG => 0x0008 ]
453             ],
454             SDL_GLcontextReleaseFlag => [
455             [ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE => 0x0000 ],
456             [ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH => 0x0001 ]
457             ],
458             SDL_GLContextResetNotification => [
459             [ SDL_GL_CONTEXT_RESET_NO_NOTIFICATION => 0x0000 ],
460             [ SDL_GL_CONTEXT_RESET_LOSE_CONTEXT => 0x0001 ]
461             ],
462             SDL_RendererFlags => [
463             [ SDL_RENDERER_SOFTWARE => 0x00000001 ],
464             [ SDL_RENDERER_ACCELERATED => 0x00000002 ],
465             [ SDL_RENDERER_PRESENTVSYNC => 0x00000004 ],
466             [ SDL_RENDERER_TARGETTEXTURE => 0x00000008 ]
467             ],
468             SDL_ScaleMode => [qw[SDL_SCALEMODENEAREST SDL_SCALEMODELINEAR SDL_SCALEMODEBEST]],
469             SDL_TextureAccess =>
470             [qw[SDL_TEXTUREACCESS_STATIC SDL_TEXTUREACCESS_STREAMING SDL_TEXTUREACCESS_TARGET]],
471             SDL_TextureModulate => [
472             [ SDL_TEXTUREMODULATE_NONE => 0x00000000 ],
473             [ SDL_TEXTUREMODULATE_COLOR => 0x00000001 ],
474             [ SDL_TEXTUREMODULATE_ALPHA => 0x00000002 ]
475             ],
476             SDL_RendererFlip => [
477             [ SDL_FLIP_NONE => 0x00000000 ],
478             [ SDL_FLIP_HORIZONTAL => 0x00000001 ],
479             [ SDL_FLIP_VERTICAL => 0x00000002 ]
480             ],
481             SDL_PowerState => [
482             qw[
483             SDL_POWERSTATE_UNKNOWN
484             SDL_POWERSTATE_ON_BATTERY SDL_POWERSTATE_NO_BATTERY
485             SDL_POWERSTATE_CHARGING SDL_POWERSTATE_CHARGED]
486             ],
487             SDL_EventAction => [
488             qw[
489             SDL_ADDEVENT
490             SDL_PEEKEVENT
491             SDL_GETEVENT]
492             ],
493             SDL_SystemCursor => [
494             qw[
495             SDL_SYSTEM_CURSOR_ARROW
496             SDL_SYSTEM_CURSOR_IBEAM
497             SDL_SYSTEM_CURSOR_WAIT
498             SDL_SYSTEM_CURSOR_CROSSHAIR
499             SDL_SYSTEM_CURSOR_WAITARROW
500             SDL_SYSTEM_CURSOR_SIZENWSE
501             SDL_SYSTEM_CURSOR_SIZENESW
502             SDL_SYSTEM_CURSOR_SIZEWE
503             SDL_SYSTEM_CURSOR_SIZENS
504             SDL_SYSTEM_CURSOR_SIZEALL
505             SDL_SYSTEM_CURSOR_NO
506             SDL_SYSTEM_CURSOR_HAND
507             SDL_NUM_SYSTEM_CURSORS]
508             ],
509             SDL_MouseWheelDirection => [
510             qw[
511             SDL_MOUSEWHEEL_NORMAL
512             SDL_MOUSEWHEEL_FLIPPED
513             ]
514             ],
515             pixel_type => [
516             qw[
517             SDL_PIXELTYPE_UNKNOWN
518             SDL_PIXELTYPE_INDEX1
519             SDL_PIXELTYPE_INDEX4
520             SDL_PIXELTYPE_INDEX8
521             SDL_PIXELTYPE_PACKED8
522             SDL_PIXELTYPE_PACKED16
523             SDL_PIXELTYPE_PACKED32
524             SDL_PIXELTYPE_ARRAYU8
525             SDL_PIXELTYPE_ARRAYU16
526             SDL_PIXELTYPE_ARRAYU32
527             SDL_PIXELTYPE_ARRAYF16
528             SDL_PIXELTYPE_ARRAYF32
529             ]
530             ],
531             bitmap_order => [
532             qw[
533             SDL_BITMAPORDER_NONE
534             SDL_BITMAPORDER_4321
535             SDL_BITMAPORDER_1234
536             ]
537             ],
538             packed_order => [
539             qw[
540             SDL_PACKEDORDER_NONE
541             SDL_PACKEDORDER_XRGB
542             SDL_PACKEDORDER_RGBX
543             SDL_PACKEDORDER_ARGB
544             SDL_PACKEDORDER_RGBA
545             SDL_PACKEDORDER_XBGR
546             SDL_PACKEDORDER_BGRX
547             SDL_PACKEDORDER_ABGR
548             SDL_PACKEDORDER_BGRA
549             ]
550             ],
551             array_order => [
552             qw[
553             SDL_ARRAYORDER_NONE
554             SDL_ARRAYORDER_RGB
555             SDL_ARRAYORDER_RGBA
556             SDL_ARRAYORDER_ARGB
557             SDL_ARRAYORDER_BGR
558             SDL_ARRAYORDER_BGRA
559             SDL_ARRAYORDER_ABGR
560             ]
561             ],
562             packed_layout => [
563             qw[
564             SDL_PACKEDLAYOUT_NONE
565             SDL_PACKEDLAYOUT_332
566             SDL_PACKEDLAYOUT_4444
567             SDL_PACKEDLAYOUT_1555
568             SDL_PACKEDLAYOUT_5551
569             SDL_PACKEDLAYOUT_565
570             SDL_PACKEDLAYOUT_8888
571             SDL_PACKEDLAYOUT_2101010
572             SDL_PACKEDLAYOUT_1010102
573             ]
574             ],
575             SDL_Keycode => [
576             [ SDLK_UP => SDL_SCANCODE_TO_KEYCODE(82) ], # 82 comes from include/SDL_scancode.h
577              
578             # The following are incorrect!!!!!!!!!!!!!!!!!!!
579             qw[SDLK_DOWN
580             SDLK_LEFT
581             SDLK_RIGHT]
582             ];
583              
584             # Keyboard codes
585 2     2 0 30 sub SDLK_SCANCODE_MASK { 1 << 30 }
586 2     2 0 6 sub SDL_SCANCODE_TO_KEYCODE ($X) { $X | SDLK_SCANCODE_MASK }
  2         4  
  2         3  
  2         7  
587              
588             =encoding utf-8
589              
590             =head1 NAME
591              
592             SDL2::Enum - Enumerations and Defined Constants Related to SDL
593              
594             =head1 SYNOPSIS
595              
596             use SDL2::FFI qw[:all]; # Yep, you import from SDL2::FFI
597              
598             =head1 DESCRIPTION
599              
600              
601             =head1 C<:init>
602              
603             These are the flags which may be passed to L<< C
604             )>|SDL2::FFI/C >>. You should specify the subsystems which you
605             will be using in your application.
606              
607             =over
608              
609             =item C - Timer subsystem
610              
611             =item C - Audio subsystem
612              
613             =item C - Video subsystem. Automatically initializes the events subsystem
614              
615             =item C - Joystick subsystem. Automatically initializes the events subsystem
616              
617             =item C - Haptic (force feedback) subsystem
618              
619             =item C - Controller subsystem. Automatically initializes the joystick subsystem
620              
621             =item C - Events subsystem
622              
623             =item C - Sensor subsystem
624              
625             =item C - All of the above subsystems
626              
627             =item C - Compatibility; this flag is ignored
628              
629             =back
630              
631             =cut
632              
633             =head1 C<:audioformat>
634              
635             Audio format flags.
636              
637             These are what the 16 bits in SDL_AudioFormat currently mean... (Unspecified
638             bits are always zero).
639              
640             ++-----------------------sample is signed if set
641             ||
642             || ++-----------sample is bigendian if set
643             || ||
644             || || ++---sample is float if set
645             || || ||
646             || || || +---sample bit size---+
647             || || || | |
648             15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
649              
650             =over
651              
652             =item C
653              
654             =item C
655              
656             =item C
657              
658             =item C
659              
660             =item C
661              
662             =item C
663              
664             =item C
665              
666             =item C
667              
668             =item C
669              
670             =item C
671              
672             =item C
673              
674             =back
675              
676             Defaults to LSB byte order.
677              
678             =over
679              
680             =item C - Unsigned 8-bit samples
681              
682             =item C - Signed 8-bit samples
683              
684             =item C - Unsigned 16-bit samples
685              
686             =item C - Signed 16-bit samples
687              
688             =item C - As above, but big-endian byte order
689              
690             =item C - As above, but big-endian byte order
691              
692             =item C - C
693              
694             =item C - C
695              
696             =back
697              
698             int32 support.
699              
700             =over
701              
702             =item C - 32-bit integer samples
703              
704             =item C - As above, but big-endian byte order
705              
706             =item C - C
707              
708             =back
709              
710             float 32 support.
711              
712             =over
713              
714             =item C - 32-bit floating point samples
715              
716             =item C - As above, but big-endian byte order
717              
718             =item C - C
719              
720             =back
721              
722             Native audio byte ordering.
723              
724             =over
725              
726             =item C
727              
728             =item C
729              
730             =item C
731              
732             =item C
733              
734             =back
735              
736             Which audio format changes are allowed when opening a device.
737              
738             =over
739              
740             =item C
741              
742             =item C
743              
744             =item C
745              
746             =item C
747              
748             =item C
749              
750             =back
751              
752             Upper limit of filters in SDL_AudioCVT
753              
754             =over
755              
756             C - The maximum number of SDL_AudioFilter functions
757             in SDL_AudioCVT is currently limited to 9. The Cfilters( )>
758             array has 10 pointers, one of which is the terminating NULL pointer.
759              
760             =back
761              
762             =head1 C<:audiostatus>
763              
764             Get the current audio state.
765              
766             =over
767              
768             =item C
769              
770             =item C
771              
772             =item C
773              
774             =back
775              
776             =head1 C<:blendmode>
777              
778             The blend mode used in L<< C|SDL::FFI/C
779             ... )> >> and drawing operations.
780              
781             =over
782              
783             =item C - no blending
784              
785             dstRGBA = srcRGBA
786              
787             =item C - alpha blending
788            
789             dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA))
790             dstA = srcA + (dstA * (1-srcA))
791              
792             =item C - additive blending
793              
794             dstRGB = (srcRGB * srcA) + dstRGB
795             dstA = dstA
796              
797             =item C - color modulate
798              
799             dstRGB = srcRGB * dstRGB
800             dstA = dstA
801              
802             =item C - color multiply
803              
804             dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA))
805             dstA = (srcA * dstA) + (dstA * (1-srcA))
806              
807             =item C
808              
809             =back
810              
811             Additional custom blend modes can be returned by L<<
812             C|SDL2::FFI/C
813             ... )> >>.
814              
815             =head2 C<:blendoperation>
816              
817             The blend operation used when combining source and destination pixel
818             components.
819              
820             =over
821              
822             =item C - supported by all renderers
823              
824             dst + src
825              
826             =item C - supported by D3D9, D3D11, OpenGL, OpenGLES
827              
828             dst - src
829              
830             =item C - supported by D3D9, D3D11, OpenGL, OpenGLES
831              
832             src - dst
833              
834             =item C - supported by D3D11
835              
836             min(dst, src)
837              
838             =item C - supported by D3D11
839              
840             max(dst, src)
841              
842             =back
843              
844             =head1 C<:blendfactor>
845              
846             The normalized factor used to multiply pixel components.
847              
848             =over
849              
850             =item C - C< 0, 0, 0, 0 >
851              
852             =item C - C< 1, 1, 1, 1 >
853              
854             =item C - C< srcR, srcG, srcB, srcA >
855              
856             =item C - C< 1-srcR, 1-srcG, 1-srcB, 1-srcA >
857              
858             =item C - C< srcA, srcA, srcA, srcA >
859              
860             =item C - C< 1-srcA, 1-srcA, 1-srcA, 1-srcA >
861              
862             =item C - C< dstR, dstG, dstB, dstA >
863              
864             =item C - C< 1-dstR, 1-dstG, 1-dstB, 1-dstA >
865              
866             =item C - C< dstA, dstA, dstA, dstA >
867              
868             =item C - C< 1-dstA, 1-dstA, 1-dstA, 1-dstA >
869              
870             =back
871              
872             =head1 C<:errorcode>
873              
874             =over
875              
876             =item C - Out of memory
877              
878             =item C - Error reading file
879              
880             =item C - Error writing file
881              
882             =item C - Error seeking in file
883              
884             =item C
885              
886             =item C
887              
888             =back
889              
890             =head1 C<:eventstate>
891              
892             General keyboard/mouse state definitions
893              
894             =over
895              
896             =item C
897              
898             =item C
899              
900             =back
901              
902             =head1 C<:eventtype>
903              
904             The types of events that can be delivered.
905              
906             =over
907              
908             =item C - Unused
909              
910             =item C - User-requested quit
911              
912             =item C - The application is being terminated by the OS
913              
914             Called on iOS in C
915              
916             Called on Android in C
917              
918             =item C - The application is low on memory, free memory if possible
919              
920             Called on iOS in C
921              
922             Called on Android in C
923              
924             =item C - The application is about to enter the background
925              
926             Called on iOS in C
927              
928             Called on Android in C
929              
930             =item C - The application did enter the background and may not get CPU for some time
931              
932             Called on iOS in C
933              
934             Called on Android in C
935              
936             =item C - The application is about to enter the foreground
937              
938             Called on iOS in C
939              
940             Called on Android in C
941              
942             =item C - The application is now interactive
943              
944             Called on iOS in C
945              
946             Called on Android in C
947              
948             =item C - The user's locale preferences have changed
949              
950             =item C - Display state change
951              
952             =item C - Window state change
953              
954             =item C - System specific event
955              
956             =item C - Key pressed
957              
958             =item C - Key released
959              
960             =item C - Keyboard text editing (composition)
961              
962             =item C - Keyboard text input
963              
964             =item C - Keymap changed due to a system event such as an input language or keyboard layout change
965              
966             =item C - Mouse moved
967              
968             =item C - Mouse button pressed
969              
970             =item C - Mouse button released
971              
972             =item C - Mouse wheel motion
973              
974             =item C - Joystick axis motion
975              
976             =item C - Joystick trackball motion
977              
978             =item C - Joystick hat position change
979              
980             =item C - Joystick button pressed
981              
982             =item C - Joystick button released
983              
984             =item C - A new joystick has been inserted into the system
985              
986             =item C - An opened joystick has been removed
987              
988             =item C - Game controller axis motion
989              
990             =item C - Game controller button pressed
991              
992             =item C - Game controller button released
993              
994             =item C - A new Game controller has been inserted into the system
995              
996             =item C - An opened Game controller has been removed
997              
998             =item C - The controller mapping was updated
999              
1000             =item C - Game controller touchpad was touched
1001              
1002             =item C - Game controller touchpad finger was moved
1003              
1004             =item C - Game controller touchpad finger was lifted
1005              
1006             =item C - Game controller sensor was updated
1007              
1008             =item C
1009              
1010             =item C
1011              
1012             =item C
1013              
1014             =item C
1015              
1016             =item C
1017              
1018             =item C
1019              
1020             =item C - The clipboard changed
1021              
1022             =item C - The system requests a file open
1023              
1024             =item C - text/plain drag-and-drop event
1025              
1026             =item C - A new set of drops is beginning (NULL filename)
1027              
1028             =item C - Current set of drops is now complete (NULL filename)
1029              
1030             =item C - A new audio device is available
1031              
1032             =item C - An audio device has been removed
1033              
1034             =item C - A sensor was updated
1035              
1036             =item C - The render targets have been reset and their contents need to be updated
1037              
1038             =item C - The device has been reset and all textures need to be recreated
1039              
1040             =item C
1041              
1042             =item C - This last event is only for bounding internal arrays
1043              
1044             =back
1045              
1046             Events C through C are for your use and should be
1047             allocated with L<< C
1048             )>|SDL2::FFI/C >>.
1049              
1050              
1051              
1052              
1053              
1054              
1055              
1056              
1057              
1058              
1059             =head1 C<:hints>
1060              
1061             =over
1062              
1063             =item C - low priority, used for default values
1064              
1065             =item C - medium priority
1066              
1067             =item C - high priority
1068              
1069             =back
1070              
1071             =head2 SDL_Hint
1072              
1073             These enum values can be passed to L
1074             Variables> related functions.
1075              
1076             =over
1077              
1078             =item C
1079              
1080             A hint that specifies whether the Android / iOS built-in accelerometer should
1081             be listed as a joystick device, rather than listing actual joysticks only.
1082              
1083             Values:
1084              
1085             0 list only real joysticks and accept input from them
1086             1 list real joysticks along with the accelorometer as if it were a 3 axis joystick (the default)
1087              
1088             Example:
1089              
1090             # This disables the use of gyroscopes as axis device
1091             SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0");
1092              
1093             =item C
1094              
1095             A hint that specifies the Android APK expansion main file version.
1096              
1097             Values:
1098              
1099             X the Android APK expansion main file version (should be a string number like "1", "2" etc.)
1100              
1101             This hint must be set together with the hint
1102             C.
1103              
1104             If both hints were set then C will look into expansion files
1105             after a given relative path was not found in the internal storage and assets.
1106              
1107             By default this hint is not set and the APK expansion files are not searched.
1108              
1109             =item C
1110              
1111             A hint that specifies the Android APK expansion patch file version.
1112              
1113             Values:
1114              
1115             X the Android APK expansion patch file version (should be a string number like "1", "2" etc.)
1116              
1117             This hint must be set together with the hint
1118             C.
1119              
1120             If both hints were set then C will look into expansion files
1121             after a given relative path was not found in the internal storage and assets.
1122              
1123             By default this hint is not set and the APK expansion files are not searched.
1124              
1125             =item C
1126              
1127             A hint that specifies a variable to control whether mouse and touch events are
1128             to be treated together or separately.
1129              
1130             Values:
1131              
1132             0 mouse events will be handled as touch events and touch will raise fake mouse events (default)
1133             1 mouse events will be handled separately from pure touch events
1134              
1135             By default mouse events will be handled as touch events and touch will raise
1136             fake mouse events.
1137              
1138             The value of this hint is used at runtime, so it can be changed at any time.
1139              
1140             =item C
1141              
1142             A hint that specifies whether controllers used with the Apple TV generate UI
1143             events.
1144              
1145             Values:
1146              
1147             0 controller input does not gnerate UI events (default)
1148             1 controller input generates UI events
1149              
1150             When UI events are generated by controller input, the app will be backgrounded
1151             when the Apple TV remote's menu button is pressed, and when the pause or B
1152             buttons on gamepads are pressed.
1153              
1154             More information about properly making use of controllers for the Apple TV can
1155             be found here:
1156             https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
1157              
1158             =item C
1159              
1160             A hint that specifies whether the Apple TV remote's joystick axes will
1161             automatically match the rotation of the remote.
1162              
1163              
1164             Values:
1165              
1166             0 remote orientation does not affect joystick axes (default)
1167             1 joystick axes are based on the orientation of the remote
1168              
1169             =item C
1170              
1171             A hint that specifies whether SDL should not use version 4 of the bitmap header
1172             when saving BMPs.
1173              
1174             Values:
1175              
1176             0 version 4 of the bitmap header will be used when saving BMPs (default)
1177             1 version 4 of the bitmap header will not be used when saving BMPs
1178              
1179             The bitmap header version 4 is required for proper alpha channel support and
1180             SDL will use it when required. Should this not be desired, this hint can force
1181             the use of the 40 byte header version which is supported everywhere.
1182              
1183             If the hint is not set then surfaces with a colorkey or an alpha channel are
1184             saved to a 32-bit BMP file with an alpha mask. SDL will use the bitmap header
1185             version 4 and set the alpha mask accordingly. This is the default behavior
1186             since SDL 2.0.5.
1187              
1188             If the hint is set then surfaces with a colorkey or an alpha channel are saved
1189             to a 32-bit BMP file without an alpha mask. The alpha channel data will be in
1190             the file, but applications are going to ignore it. This was the default
1191             behavior before SDL 2.0.5.
1192              
1193             =item C
1194              
1195             A hint that specifies if SDL should give back control to the browser
1196             automatically when running with asyncify.
1197              
1198             Values:
1199              
1200             0 disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
1201             1 enable emscripten_sleep calls (default)
1202              
1203             This hint only applies to the Emscripten platform.
1204              
1205             =item C
1206              
1207             A hint that specifies a value to override the binding element for keyboard
1208             inputs for Emscripten builds.
1209              
1210             Values:
1211              
1212             #window the JavaScript window object (default)
1213             #document the JavaScript document object
1214             #screen the JavaScript window.screen object
1215             #canvas the default WebGL canvas element
1216              
1217             Any other string without a leading # sign applies to the element on the page
1218             with that ID.
1219              
1220             This hint only applies to the Emscripten platform.
1221              
1222             =item C
1223              
1224             A hint that specifies how 3D acceleration is used with L
1225             ... )|SDL2/SDL_GetWindowSurface( ... )>.
1226              
1227             Values:
1228              
1229             0 disable 3D acceleration
1230             1 enable 3D acceleration, using the default renderer
1231             X enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.)
1232              
1233             By default SDL tries to make a best guess whether to use acceleration or not on
1234             each platform.
1235              
1236             SDL can try to accelerate the screen surface returned by
1237             L by using
1238             streaming textures with a 3D rendering engine. This variable controls whether
1239             and how this is done.
1240              
1241             =item C
1242              
1243             A variable that lets you provide a file with extra gamecontroller db entries.
1244              
1245             This hint must be set before calling C.
1246              
1247             You can update mappings after the system is initialized with
1248             C and C.
1249              
1250             =item C
1251              
1252             A variable setting the double click time, in milliseconds.
1253              
1254             =item C
1255              
1256             A hint that specifies a variable controlling whether the idle timer is disabled
1257             on iOS.
1258              
1259             Values:
1260              
1261             0 enable idle timer (default)
1262             1 disable idle timer
1263              
1264             When an iOS application does not receive touches for some time, the screen is
1265             dimmed automatically. For games where the accelerometer is the only input this
1266             is problematic. This functionality can be disabled by setting this hint.
1267              
1268             As of SDL 2.0.4, C and C
1269             accomplish the same thing on iOS. They should be preferred over this hint.
1270              
1271             =item C
1272              
1273             A variable to control whether we trap the Android back button to handle it
1274             manually. This is necessary for the right mouse button to work on some Android
1275             devices, or to be able to trap the back button for use in your code reliably.
1276             If set to true, the back button will show up as an C /
1277             C pair with a keycode of C.
1278              
1279             The variable can be set to the following values:
1280              
1281             0 Back button will be handled as usual for system. (default)
1282             1 Back button will be trapped, allowing you to handle the key press
1283             manually. (This will also let right mouse click work on systems
1284             where the right mouse button functions as back.)
1285              
1286             The value of this hint is used at runtime, so it can be changed at any time.
1287              
1288             =item C
1289              
1290             A variable controlling whether the HIDAPI joystick drivers should be used.
1291              
1292             This variable can be set to the following values:
1293              
1294             0 HIDAPI drivers are not used
1295             1 HIDAPI drivers are used (default)
1296              
1297             This variable is the default for all drivers, but can be overridden by the
1298             hints for specific drivers below.
1299              
1300             =item C
1301              
1302             A hint that specifies if the SDL app should not be forced to become a
1303             foreground process on Mac OS X.
1304              
1305             Values:
1306              
1307             0 force the SDL app to become a foreground process (default)
1308             1 do not force the SDL app to become a foreground process
1309              
1310             This hint only applies to Mac OSX.
1311              
1312             =item C
1313              
1314             A hint that specifies whether ctrl+click should generate a right-click event on
1315             Mac.
1316              
1317             Values:
1318              
1319             0 disable emulating right click (default)
1320             1 enable emulating right click
1321              
1322             =item C
1323              
1324             A hint that specifies if mouse click events are sent when clicking to focus an
1325             SDL window.
1326              
1327             Values:
1328              
1329             0 no mouse click events are sent when clicking to focus (default)
1330             1 mouse click events are sent when clicking to focus
1331              
1332             =item C
1333              
1334             A hint that specifies whether relative mouse mode is implemented using mouse
1335             warping.
1336              
1337             Values:
1338              
1339             0 relative mouse mode uses the raw input (default)
1340             1 relative mouse mode uses mouse warping
1341              
1342             =item C
1343              
1344             A hint that specifies not to catch the C or C signals.
1345              
1346             Values:
1347              
1348             0 SDL will install a SIGINT and SIGTERM handler, and when it
1349             catches a signal, convert it into an SDL_QUIT event
1350             1 SDL will not install a signal handler at all
1351              
1352             =item C
1353              
1354             A variable controlling which orientations are allowed on iOS/Android.
1355              
1356             In some circumstances it is necessary to be able to explicitly control which UI
1357             orientations are allowed.
1358              
1359             This variable is a space delimited list of the following values:
1360              
1361             =over
1362              
1363             =item C
1364              
1365             =item C
1366              
1367             =item C
1368              
1369             =item C
1370              
1371             =back
1372              
1373             =item C
1374              
1375             A variable controlling whether to enable Direct3D 11+'s Debug Layer.
1376              
1377             This variable does not have any effect on the Direct3D 9 based renderer.
1378              
1379             This variable can be set to the following values:
1380              
1381             0 Disable Debug Layer use (default)
1382             1 Enable Debug Layer use
1383              
1384             =item C
1385              
1386             A variable controlling whether the Direct3D device is initialized for
1387             thread-safe operations.
1388              
1389             This variable can be set to the following values:
1390              
1391             0 Thread-safety is not enabled (faster; default)
1392             1 Thread-safety is enabled
1393              
1394             =item C
1395              
1396             A variable specifying which render driver to use.
1397              
1398             If the application doesn't pick a specific renderer to use, this variable
1399             specifies the name of the preferred renderer. If the preferred renderer can't
1400             be initialized, the normal default renderer is used.
1401              
1402             This variable is case insensitive and can be set to the following values:
1403              
1404             =over
1405              
1406             =item C
1407              
1408             =item C
1409              
1410             =item C
1411              
1412             =item C
1413              
1414             =item C
1415              
1416             =item C
1417              
1418             =back
1419              
1420             The default varies by platform, but it's the first one in the list that is
1421             available on the current platform.
1422              
1423             =item C
1424              
1425             A variable controlling whether the OpenGL render driver uses shaders if they
1426             are available.
1427              
1428             This variable can be set to the following values:
1429              
1430             0 Disable shaders
1431             1 Enable shaders (default)
1432              
1433             =item C
1434              
1435             A variable controlling the scaling quality
1436              
1437             This variable can be set to the following values: 0 or nearest Nearest
1438             pixel sampling (default) 1 or linear Linear filtering (supported by
1439             OpenGL and Direct3D) 2 or best Currently this is the same as linear
1440              
1441             =item C
1442              
1443             A variable controlling whether updates to the SDL screen surface should be
1444             synchronized with the vertical refresh, to avoid tearing.
1445              
1446             This variable can be set to the following values:
1447              
1448             0 Disable vsync
1449             1 Enable vsync
1450              
1451             By default SDL does not sync screen surface updates with vertical refresh.
1452              
1453             =item C
1454              
1455             Tell SDL which Dispmanx layer to use on a Raspberry PI
1456              
1457             Also known as Z-order. The variable can take a negative or positive value.
1458              
1459             The default is C<10000>.
1460              
1461             =item C
1462              
1463             A string specifying SDL's threads stack size in bytes or C<0> for the backend's
1464             default size
1465              
1466             Use this hint in case you need to set SDL's threads stack size to other than
1467             the default. This is specially useful if you build SDL against a non glibc libc
1468             library (such as musl) which provides a relatively small default thread stack
1469             size (a few kilobytes versus the default 8MB glibc uses). Support for this hint
1470             is currently available only in the pthread, Windows, and PSP backend.
1471              
1472             Instead of this hint, in 2.0.9 and later, you can use
1473             C. This hint only works with the classic
1474             C.
1475              
1476             =item C
1477              
1478             A variable that controls the timer resolution, in milliseconds.
1479              
1480             he higher resolution the timer, the more frequently the CPU services timer
1481             interrupts, and the more precise delays are, but this takes up power and CPU
1482             time. This hint is only used on Windows.
1483              
1484             See this blog post for more information:
1485             L
1486              
1487             If this variable is set to C<0>, the system timer resolution is not set.
1488              
1489             The default value is C<1>. This hint may be set at any time.
1490              
1491             =item C
1492              
1493             A variable controlling whether the screensaver is enabled.
1494              
1495             This variable can be set to the following values:
1496              
1497             0 Disable screensaver
1498             1 Enable screensaver
1499              
1500             By default SDL will disable the screensaver.
1501              
1502             =item C
1503              
1504             If set to C<1>, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
1505              
1506             =item C
1507              
1508             A variable that dictates policy for fullscreen Spaces on Mac OS X.
1509              
1510             This hint only applies to Mac OS X.
1511              
1512             The variable can be set to the following values:
1513              
1514             0 Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
1515             SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
1516             button on their titlebars).
1517             1 Enable Spaces support (FULLSCREEN_DESKTOP will use them and
1518             SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
1519             button on their titlebars).
1520              
1521             The default value is C<1>. Spaces are disabled regardless of this hint if the
1522             OS isn't at least Mac OS X Lion (10.7). This hint must be set before any
1523             windows are created.
1524              
1525             =item C
1526              
1527             Minimize your C if it loses key focus when in fullscreen mode.
1528             Defaults to false.
1529              
1530             Warning: Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're seeing if
1531             "true" causes more problems than it solves in modern times.
1532              
1533             =item C
1534              
1535             A variable specifying which shader compiler to preload when using the Chrome
1536             ANGLE binaries
1537              
1538             SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It can use
1539             two different sets of binaries, those compiled by the user from source or those
1540             provided by the Chrome browser. In the later case, these binaries require that
1541             SDL loads a DLL providing the shader compiler.
1542              
1543             This variable can be set to the following values:
1544              
1545             =over
1546              
1547             =item C
1548              
1549             default, best for Vista or later.
1550              
1551             =item C
1552              
1553             for XP support.
1554              
1555             =item C
1556              
1557             do not load any library, useful if you compiled ANGLE from source and included
1558             the compiler in your binaries.
1559              
1560             =back
1561              
1562             =item C
1563              
1564             A variable that is the address of another C (as a hex string
1565             formatted with C<%p>).
1566              
1567             If this hint is set before C and the C it
1568             is set to has C set (and running on WGL only, currently),
1569             then two things will occur on the newly created C:
1570              
1571             =over
1572              
1573             =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.
1574              
1575             =item 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for OpenGL rendering.
1576              
1577             =back
1578              
1579             This variable can be set to the address (as a string C<%p>) of the
1580             C that new windows created with L<< C
1581             )>|/C >>should share a pixel format with.
1582              
1583             =item C
1584              
1585             A variable controlling whether the X11 _NET_WM_PING protocol should be
1586             supported.
1587              
1588             This variable can be set to the following values:
1589              
1590             0 Disable _NET_WM_PING
1591             1 Enable _NET_WM_PING
1592              
1593             By default SDL will use _NET_WM_PING, but for applications that know they will
1594             not always be able to respond to ping requests in a timely manner they can turn
1595             it off to avoid the window manager thinking the app is hung. The hint is
1596             checked in CreateWindow.
1597              
1598             =item C
1599              
1600             A variable controlling whether the X11 Xinerama extension should be used.
1601              
1602             This variable can be set to the following values:
1603              
1604             0 Disable Xinerama
1605             1 Enable Xinerama
1606              
1607             By default SDL will use Xinerama if it is available.
1608              
1609             =item C
1610              
1611             A variable controlling whether the X11 XRandR extension should be used.
1612              
1613             This variable can be set to the following values:
1614              
1615             0 Disable XRandR
1616             1 Enable XRandR
1617              
1618             By default SDL will not use XRandR because of window manager issues.
1619              
1620             =item C
1621              
1622             A variable controlling whether the X11 VidMode extension should be used.
1623              
1624             This variable can be set to the following values:
1625              
1626             0 Disable XVidMode
1627             1 Enable XVidMode
1628              
1629             By default SDL will use XVidMode if it is available.
1630              
1631             =item C
1632              
1633             A variable controlling whether the window frame and title bar are interactive
1634             when the cursor is hidden.
1635              
1636             This variable can be set to the following values:
1637              
1638             0 The window frame is not interactive when the cursor is hidden (no move, resize, etc)
1639             1 The window frame is interactive when the cursor is hidden
1640              
1641             By default SDL will allow interaction with the window frame when the cursor is
1642             hidden.
1643              
1644             =item C
1645              
1646             Tell SDL not to name threads on Windows with the 0x406D1388 Exception. The
1647             0x406D1388 Exception is a trick used to inform Visual Studio of a thread's
1648             name, but it tends to cause problems with other debuggers, and the .NET
1649             runtime. Note that SDL 2.0.6 and later will still use the (safer)
1650             SetThreadDescription API, introduced in the Windows 10 Creators Update, if
1651             available.
1652              
1653             The variable can be set to the following values:
1654              
1655             0 SDL will raise the 0x406D1388 Exception to name threads.
1656             This is the default behavior of SDL <= 2.0.4.
1657             1 SDL will not raise this exception, and threads will be unnamed. (default)
1658             This is necessary with .NET languages or debuggers that aren't Visual Studio.
1659              
1660             =item C
1661              
1662             A variable to specify custom icon resource id from RC file on Windows platform.
1663              
1664             =item C
1665              
1666             A variable to specify custom icon resource id from RC file on Windows platform.
1667              
1668             =item C
1669              
1670             A variable controlling whether the windows message loop is processed by SDL .
1671              
1672             This variable can be set to the following values:
1673              
1674             0 The window message loop is not run
1675             1 The window message loop is processed in SDL_PumpEvents( )
1676              
1677             By default SDL will process the windows message loop.
1678              
1679             =item C
1680              
1681             Tell SDL not to generate window-close events for Alt+F4 on Windows.
1682              
1683             The variable can be set to the following values:
1684              
1685             0 SDL will generate a window-close event when it sees Alt+F4.
1686             1 SDL will only do normal key handling for Alt+F4.
1687              
1688             =item C
1689              
1690             Allows back-button-press events on Windows Phone to be marked as handled.
1691              
1692             Windows Phone devices typically feature a Back button. When pressed, the OS
1693             will emit back-button-press events, which apps are expected to handle in an
1694             appropriate manner. If apps do not explicitly mark these events as 'Handled',
1695             then the OS will invoke its default behavior for unhandled back-button-press
1696             events, which on Windows Phone 8 and 8.1 is to terminate the app (and attempt
1697             to switch to the previous app, or to the device's home screen).
1698              
1699             Setting the C hint to "1" will cause SDL to
1700             mark back-button-press events as Handled, if and when one is sent to the app.
1701              
1702             Internally, Windows Phone sends back button events as parameters to special
1703             back-button-press callback functions. Apps that need to respond to
1704             back-button-press events are expected to register one or more callback
1705             functions for such, shortly after being launched (during the app's
1706             initialization phase). After the back button is pressed, the OS will invoke
1707             these callbacks. If the app's callback(s) do not explicitly mark the event as
1708             handled by the time they return, or if the app never registers one of these
1709             callback, the OS will consider the event un-handled, and it will apply its
1710             default back button behavior (terminate the app).
1711              
1712             SDL registers its own back-button-press callback with the Windows Phone OS.
1713             This callback will emit a pair of SDL key-press events (C and
1714             C), each with a scancode of SDL_SCANCODE_AC_BACK, after which it
1715             will check the contents of the hint, C. If
1716             the hint's value is set to C<1>, the back button event's Handled property will
1717             get set to a C value. If the hint's value is set to something else, or if
1718             it is unset, SDL will leave the event's Handled property alone. (By default,
1719             the OS sets this property to 'false', to note.)
1720              
1721             SDL apps can either set C well before a back
1722             button is pressed, or can set it in direct-response to a back button being
1723             pressed.
1724              
1725             In order to get notified when a back button is pressed, SDL apps should
1726             register a callback function with C, and have it listen
1727             for C events that have a scancode of C.
1728             (Alternatively, C events can be listened-for. Listening for either
1729             event type is suitable.) Any value of C set
1730             by such a callback, will be applied to the OS' current back-button-press event.
1731              
1732             More details on back button behavior in Windows Phone apps can be found at the
1733             following page, on Microsoft's developer site:
1734             L
1735              
1736             =item C
1737              
1738             Label text for a WinRT app's privacy policy link.
1739              
1740             Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1,
1741             and RT, Microsoft mandates that this policy be available via the Windows
1742             Settings charm. SDL provides code to add a link there, with its label text
1743             being set via the optional hint, C.
1744              
1745             Please note that a privacy policy's contents are not set via this hint. A
1746             separate hint, C, is used to link to the
1747             actual text of the policy.
1748              
1749             The contents of this hint should be encoded as a UTF8 string.
1750              
1751             The default value is "Privacy Policy". This hint should only be set during app
1752             initialization, preferably before any calls to L<< C
1753             )>|/C >>.
1754              
1755             For additional information on linking to a privacy policy, see the
1756             documentation for C.
1757              
1758             =item C
1759              
1760             A URL to a WinRT app's privacy policy.
1761              
1762             All network-enabled WinRT apps must make a privacy policy available to its
1763             users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be be
1764             available in the Windows Settings charm, as accessed from within the app. SDL
1765             provides code to add a URL-based link there, which can point to the app's
1766             privacy policy.
1767              
1768             To setup a URL to an app's privacy policy, set
1769             C before calling any L<< C
1770             )>|/C >> functions. The contents of the hint should be a
1771             valid URL. For example, L.
1772              
1773             The default value is an empty string (C<>), which will prevent SDL from adding
1774             a privacy policy link to the Settings charm. This hint should only be set
1775             during app init.
1776              
1777             The label text of an app's "Privacy Policy" link may be customized via another
1778             hint, C.
1779              
1780             Please note that on Windows Phone, Microsoft does not provide standard UI for
1781             displaying a privacy policy link, and as such,
1782             SDL_HINT_WINRT_PRIVACY_POLICY_URL will not get used on that platform.
1783             Network-enabled phone apps should display their privacy policy through some
1784             other, in-app means.
1785              
1786             =item C
1787              
1788             A variable that lets you disable the detection and use of Xinput gamepad
1789             devices
1790              
1791             The variable can be set to the following values:
1792              
1793             0 Disable XInput detection (only uses direct input)
1794             1 Enable XInput detection (default)
1795              
1796             =item C
1797              
1798             A variable that causes SDL to use the old axis and button mapping for XInput
1799             devices.
1800              
1801             This hint is for backwards compatibility only and will be removed in SDL 2.1
1802              
1803             The default value is C<0>. This hint must be set before L<< C
1804             )>|/C >>
1805              
1806             =item C
1807              
1808             Flags to set on QtWayland windows to integrate with the native window manager.
1809              
1810             On QtWayland platforms, this hint controls the flags to set on the windows. For
1811             example, on Sailfish OS, C disables swipe gestures.
1812              
1813             This variable is a space-separated list of the following values (empty = no
1814             flags):
1815              
1816             =over
1817              
1818             =item C
1819              
1820             =item C
1821              
1822             =item C
1823              
1824             =back
1825              
1826             =item C
1827              
1828             A variable describing the content orientation on QtWayland-based platforms.
1829              
1830             On QtWayland platforms, windows are rotated client-side to allow for custom
1831             transitions. In order to correctly position overlays (e.g. volume bar) and
1832             gestures (e.g. events view, close/minimize gestures), the system needs to know
1833             in which orientation the application is currently drawing its contents.
1834              
1835             This does not cause the window to be rotated or resized, the application needs
1836             to take care of drawing the content in the right orientation (the framebuffer
1837             is always in portrait mode).
1838              
1839             This variable can be one of the following values:
1840              
1841             =over
1842              
1843             =item C (default)
1844              
1845             =item C
1846              
1847             =item C
1848              
1849             =item C
1850              
1851             =item C
1852              
1853             =back
1854              
1855             =item C
1856              
1857             A variable controlling the scaling policy for C.
1858              
1859             This variable can be set to the following values:
1860              
1861             =over
1862              
1863             =item C<0> or C
1864              
1865             Uses letterbox/sidebars to fit the entire rendering on screen.
1866              
1867             =item C<1> or C
1868              
1869             Will zoom the rendering so it fills the entire screen, allowing edges to be
1870             drawn offscreen.
1871              
1872             =back
1873              
1874             By default letterbox is used.
1875              
1876             =item C
1877              
1878             A variable controlling whether the graphics context is externally managed.
1879              
1880             This variable can be set to the following values:
1881              
1882             0 SDL will manage graphics contexts that are attached to windows.
1883             1 Disable graphics context management on windows.
1884              
1885             By default SDL will manage OpenGL contexts in certain situations. For example,
1886             on Android the context will be automatically saved and restored when pausing
1887             the application. Additionally, some platforms will assume usage of OpenGL if
1888             Vulkan isn't used. Setting this to C<1> will prevent this behavior, which is
1889             desirable when the application manages the graphics context, such as an
1890             externally managed OpenGL context or attaching a Vulkan surface to the window.
1891              
1892             =item
1893              
1894             A variable forcing the visual ID chosen for new X11 windows.
1895              
1896             =item C
1897              
1898             A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be
1899             used.
1900              
1901             This variable can be set to the following values:
1902              
1903             0 Disable _NET_WM_BYPASS_COMPOSITOR
1904             1 Enable _NET_WM_BYPASS_COMPOSITOR
1905              
1906             By default SDL will use _NET_WM_BYPASS_COMPOSITOR.
1907              
1908             =item C
1909              
1910             A variable controlling whether X11 should use GLX or EGL by default
1911              
1912             This variable can be set to the following values:
1913              
1914             0 Use GLX
1915             1 Use EGL
1916              
1917             By default SDL will use GLX when both are present.
1918              
1919             =item C
1920              
1921             A variable setting the double click time, in milliseconds.
1922              
1923             =item C
1924              
1925             A variable setting the double click radius, in pixels.
1926              
1927             =item C
1928              
1929             A variable setting the speed scale for mouse motion, in floating point, when
1930             the mouse is not in relative mode.
1931              
1932             =item C
1933              
1934             A variable setting the scale for mouse motion, in floating point, when the
1935             mouse is in relative mode.
1936              
1937             =item C
1938              
1939             A variable controlling whether relative mouse motion is affected by renderer
1940             scaling
1941              
1942             This variable can be set to the following values:
1943              
1944             0 Relative motion is unaffected by DPI or renderer's logical size
1945             1 Relative motion is scaled according to DPI scaling and logical size
1946              
1947             By default relative mouse deltas are affected by DPI and renderer scaling.
1948              
1949             =item C
1950              
1951             A variable controlling whether touch events should generate synthetic mouse
1952             events
1953              
1954             This variable can be set to the following values:
1955              
1956             0 Touch events will not generate mouse events
1957             1 Touch events will generate mouse events
1958              
1959             By default SDL will generate mouse events for touch events.
1960              
1961             =item C
1962              
1963             A variable controlling whether mouse events should generate synthetic touch
1964             events
1965              
1966             This variable can be set to the following values:
1967              
1968             0 Mouse events will not generate touch events (default for desktop platforms)
1969             1 Mouse events will generate touch events (default for mobile platforms, such as Android and iOS)
1970              
1971             =item C
1972              
1973             A variable controlling whether the home indicator bar on iPhone X should be
1974             hidden.
1975              
1976             This variable can be set to the following values:
1977              
1978             0 The indicator bar is not hidden (default for windowed applications)
1979             1 The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications)
1980             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)
1981              
1982             =item C
1983              
1984             A variable controlling whether the Android / tvOS remotes should be listed as
1985             joystick devices, instead of sending keyboard events.
1986              
1987             This variable can be set to the following values:
1988              
1989             0 Remotes send enter/escape/arrow key events
1990             1 Remotes are available as 2 axis, 2 button joysticks (the default).
1991              
1992             =item C
1993              
1994             A variable that overrides the automatic controller type detection
1995              
1996             The variable should be comma separated entries, in the form: VID/PID=type
1997              
1998             The VID and PID should be hexadecimal with exactly 4 digits, e.g. C<0x00fd>
1999              
2000             The type should be one of:
2001              
2002             =over
2003              
2004             =item C
2005              
2006             =item C
2007              
2008             =item C
2009              
2010             =item C
2011              
2012             =item C
2013              
2014             =item C
2015              
2016             This hint affects what driver is used, and must be set before calling
2017             C.
2018              
2019             =item C
2020              
2021             A variable that lets you provide a file with extra gamecontroller db entries.
2022              
2023             The file should contain lines of gamecontroller config data, see
2024             SDL_gamecontroller.h
2025              
2026             This hint must be set before calling C
2027              
2028             You can update mappings after the system is initialized with
2029             C and C.
2030              
2031             =item C
2032              
2033             A variable containing a list of devices to skip when scanning for game
2034             controllers.
2035              
2036             The format of the string is a comma separated list of USB VID/PID pairs in
2037             hexadecimal form, e.g.
2038              
2039             0xAAAA/0xBBBB,0xCCCC/0xDDDD
2040              
2041             The variable can also take the form of @file, in which case the named file will
2042             be loaded and interpreted as the value of the variable.
2043              
2044             =item C
2045              
2046             If set, all devices will be skipped when scanning for game controllers except
2047             for the ones listed in this variable.
2048              
2049             The format of the string is a comma separated list of USB VID/PID pairs in
2050             hexadecimal form, e.g.
2051              
2052             0xAAAA/0xBBBB,0xCCCC/0xDDDD
2053              
2054             The variable can also take the form of @file, in which case the named file will
2055             be loaded and interpreted as the value of the variable.
2056              
2057             =item C
2058              
2059             If set, game controller face buttons report their values according to their
2060             labels instead of their positional layout.
2061              
2062             For example, on Nintendo Switch controllers, normally you'd get:
2063              
2064             (Y)
2065             (X) (B)
2066             (A)
2067              
2068             but if this hint is set, you'll get:
2069              
2070             (X)
2071             (Y) (A)
2072             (B)
2073              
2074             The variable can be set to the following values:
2075              
2076             0 Report the face buttons by position, as though they were on an Xbox controller.
2077             1 Report the face buttons by label instead of position
2078              
2079             The default value is C<1>. This hint may be set at any time.
2080              
2081             =item C
2082              
2083             A variable controlling whether the HIDAPI joystick drivers should be used.
2084              
2085             This variable can be set to the following values:
2086              
2087             0 HIDAPI drivers are not used
2088             1 HIDAPI drivers are used (the default)
2089              
2090             This variable is the default for all drivers, but can be overridden by the
2091             hints for specific drivers below.
2092              
2093             =item C
2094              
2095             A variable controlling whether the HIDAPI driver for PS4 controllers should be
2096             used.
2097              
2098             This variable can be set to the following values:
2099              
2100             0 HIDAPI driver is not used
2101             1 HIDAPI driver is used
2102              
2103             The default is the value of C
2104              
2105             =item C
2106              
2107             A variable controlling whether extended input reports should be used for PS4
2108             controllers when using the HIDAPI driver.
2109              
2110             This variable can be set to the following values:
2111              
2112             0 extended reports are not enabled (default)
2113             1 extended reports
2114              
2115             Extended input reports allow rumble on Bluetooth PS4 controllers, but break
2116             DirectInput handling for applications that don't use SDL.
2117              
2118             Once extended reports are enabled, they can not be disabled without power
2119             cycling the controller.
2120              
2121             For compatibility with applications written for versions of SDL prior to the
2122             introduction of PS5 controller support, this value will also control the state
2123             of extended reports on PS5 controllers when the
2124             C hint is not explicitly set.
2125              
2126             =item C
2127              
2128             A variable controlling whether the HIDAPI driver for PS5 controllers should be
2129             used.
2130              
2131             This variable can be set to the following values:
2132              
2133             0 HIDAPI driver is not used
2134             1 HIDAPI driver is used
2135              
2136             The default is the value of C.
2137              
2138             =item C
2139              
2140             A variable controlling whether extended input reports should be used for PS5
2141             controllers when using the HIDAPI driver.
2142              
2143             This variable can be set to the following values:
2144              
2145             0 extended reports are not enabled (default)
2146             1 extended reports
2147              
2148             Extended input reports allow rumble on Bluetooth PS5 controllers, but break
2149             DirectInput handling for applications that don't use SDL.
2150              
2151             Once extended reports are enabled, they can not be disabled without power
2152             cycling the controller.
2153              
2154             For compatibility with applications written for versions of SDL prior to the
2155             introduction of PS5 controller support, this value defaults to the value of
2156             C.
2157              
2158             =item C
2159              
2160             A variable controlling whether the player LEDs should be lit to indicate which
2161             player is associated with a PS5 controller.
2162              
2163             This variable can be set to the following values:
2164              
2165             0 player LEDs are not enabled
2166             1 player LEDs are enabled (default)
2167              
2168             =item C
2169              
2170             A variable controlling whether the HIDAPI driver for Google Stadia controllers
2171             should be used.
2172              
2173             This variable can be set to the following values:
2174              
2175             0 HIDAPI driver is not used
2176             1 HIDAPI driver is used
2177              
2178             The default is the value of C.
2179              
2180             =item C
2181              
2182             A variable controlling whether the HIDAPI driver for Steam Controllers should
2183             be used.
2184              
2185             This variable can be set to the following values:
2186              
2187             0 HIDAPI driver is not used
2188             1 HIDAPI driver is used
2189              
2190             The default is the value of C.
2191              
2192             =item C
2193              
2194             A variable controlling whether the HIDAPI driver for Nintendo Switch
2195             controllers should be used.
2196              
2197             This variable can be set to the following values:
2198              
2199             0 HIDAPI driver is not used
2200             1 HIDAPI driver is used
2201              
2202             The default is the value of C.
2203              
2204             =item C
2205              
2206             A variable controlling whether the Home button LED should be turned on when a
2207             Nintendo Switch controller is opened
2208              
2209             This variable can be set to the following values:
2210              
2211             0 home button LED is left off
2212             1 home button LED is turned on (default)
2213              
2214             =item C
2215              
2216             A variable controlling whether Switch Joy-Cons should be treated the same as
2217             Switch Pro Controllers when using the HIDAPI driver.
2218              
2219             This variable can be set to the following values:
2220              
2221             0 basic Joy-Con support with no analog input (default)
2222             1 Joy-Cons treated as half full Pro Controllers with analog inputs and sensors
2223              
2224             This does not combine Joy-Cons into a single controller. That's up to the user.
2225              
2226             =item C
2227              
2228             A variable controlling whether the HIDAPI driver for XBox controllers should be
2229             used.
2230              
2231             This variable can be set to the following values:
2232              
2233             0 HIDAPI driver is not used
2234             1 HIDAPI driver is used
2235              
2236             The default is C<0> on Windows, otherwise the value of
2237             C.
2238              
2239             =item C
2240              
2241             A variable controlling whether the HIDAPI driver for XBox controllers on
2242             Windows should pull correlated data from XInput.
2243              
2244             This variable can be set to the following values:
2245              
2246             0 HIDAPI Xbox driver will only use HIDAPI data
2247             1 HIDAPI Xbox driver will also pull data from XInput, providing better trigger axes, guide button
2248             presses, and rumble support
2249              
2250             The default is C<1>. This hint applies to any joysticks opened after setting
2251             the hint.
2252              
2253             =item C
2254              
2255             A variable controlling whether the HIDAPI driver for Nintendo GameCube
2256             controllers should be used.
2257              
2258             This variable can be set to the following values:
2259              
2260             0 HIDAPI driver is not used
2261             1 HIDAPI driver is used
2262              
2263             The default is the value of C.
2264              
2265             =item C
2266              
2267             A variable that controls whether Steam Controllers should be exposed using the
2268             SDL joystick and game controller APIs
2269              
2270             The variable can be set to the following values:
2271              
2272             0 Do not scan for Steam Controllers
2273             1 Scan for Steam Controllers (default)
2274              
2275             The default value is C<1>. This hint must be set before initializing the
2276             joystick subsystem.
2277              
2278             =item C
2279              
2280             A variable controlling whether the RAWINPUT joystick drivers should be used for
2281             better handling XInput-capable devices.
2282              
2283             This variable can be set to the following values:
2284              
2285             0 RAWINPUT drivers are not used
2286             1 RAWINPUT drivers are used (default)
2287              
2288             =item C
2289              
2290             A variable controlling whether a separate thread should be used for handling
2291             joystick detection and raw input messages on Windows
2292              
2293             This variable can be set to the following values:
2294              
2295             0 A separate thread is not used (default)
2296             1 A separate thread is used for handling raw input messages
2297              
2298             =item C
2299              
2300             A variable controlling whether joysticks on Linux adhere to their HID-defined
2301             deadzones or return unfiltered values.
2302              
2303             This variable can be set to the following values:
2304              
2305             0 Return unfiltered joystick axis values (default)
2306             1 Return axis values with deadzones taken into account
2307              
2308             =item C
2309              
2310             If set to C<0> then never set the top most bit on a SDL Window, even if the
2311             video mode expects it. This is a debugging aid for developers and not expected
2312             to be used by end users. The default is C<1>.
2313              
2314             This variable can be set to the following values:
2315              
2316             0 don't allow topmost
2317             1 allow topmost (default)
2318              
2319             =item C
2320              
2321             A string specifying additional information to use with
2322             C.
2323              
2324             By default C will make appropriate system changes in
2325             order to apply a thread priority. For example on systems using pthreads the
2326             scheduler policy is changed automatically to a policy that works well with a
2327             given priority. Code which has specific requirements can override SDL's default
2328             behavior with this hint.
2329              
2330             pthread hint values are C, C, C and C. Currently no
2331             other platform hint values are defined but may be in the future.
2332              
2333             Note:
2334              
2335             On Linux, the kernel may send C to realtime tasks which exceed the
2336             distro configured execution budget for rtkit. This budget can be queried
2337             through C after calling C.
2338              
2339             =item C
2340              
2341             Specifies whether C should be treated as
2342             realtime.
2343              
2344             On some platforms, like Linux, a realtime priority thread may be subject to
2345             restrictions that require special handling by the application. This hint exists
2346             to let SDL know that the app is prepared to handle said restrictions.
2347              
2348             On Linux, SDL will apply the following configuration to any thread that becomes
2349             realtime:
2350              
2351             =over
2352              
2353             =item * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy,
2354              
2355             =item * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
2356              
2357             Exceeding this limit will result in the kernel sending C to the app,
2358              
2359             Refer to the man pages for more information.
2360              
2361             =back
2362              
2363             This variable can be set to the following values:
2364              
2365             0 default platform specific behaviour
2366             1 Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy
2367              
2368             =item C
2369              
2370             A variable that is the address of another SDL_Window* (as a hex string
2371             formatted with C<%p>).
2372              
2373             If this hint is set before C and the C it
2374             is set to has C set (and running on WGL only, currently),
2375             then two things will occur on the newly created C:
2376              
2377             =over
2378              
2379             =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.
2380              
2381             =item 2. The flag C will be set on the new window so it can be used for OpenGL rendering.
2382              
2383             This variable can be set to the following values:
2384              
2385             =over
2386              
2387             =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.
2388              
2389             =back
2390              
2391             =item C
2392              
2393             A variable to control whether we trap the Android back button to handle it
2394             manually. This is necessary for the right mouse button to work on some Android
2395             devices, or to be able to trap the back button for use in your code reliably.
2396             If set to true, the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair
2397             with a keycode of C.
2398              
2399             The variable can be set to the following values:
2400              
2401             =over
2402              
2403             =item C<0>
2404              
2405             Back button will be handled as usual for system. (default)
2406              
2407             =item C<1>
2408              
2409             Back button will be trapped, allowing you to handle the key press manually.
2410             (This will also let right mouse click work on systems where the right mouse
2411             button functions as back.)
2412              
2413             =back
2414              
2415             The value of this hint is used at runtime, so it can be changed at any time.
2416              
2417             =back
2418              
2419             =item C
2420              
2421             A variable to control whether the event loop will block itself when the app is
2422             paused.
2423              
2424             The variable can be set to the following values:
2425              
2426             =over
2427              
2428             =item C<0>
2429              
2430             Non blocking.
2431              
2432             =item C<1>
2433              
2434             Blocking. (default)
2435              
2436             =back
2437              
2438             The value should be set before SDL is initialized.
2439              
2440             =back
2441              
2442             =item C
2443              
2444             A variable to control whether SDL will pause audio in background (Requires
2445             C as "Non blocking")
2446              
2447             The variable can be set to the following values:
2448              
2449             =over
2450              
2451             =item C<0>
2452              
2453             Non paused.
2454              
2455              
2456             =item C<1>
2457              
2458             Paused. (default)
2459              
2460             =back
2461              
2462             The value should be set before SDL is initialized.
2463              
2464             =item C
2465              
2466             A variable to control whether the return key on the soft keyboard should hide
2467             the soft keyboard on Android and iOS.
2468              
2469             The variable can be set to the following values:
2470              
2471             =over
2472              
2473             =item C<0>
2474              
2475             The return key will be handled as a key event. This is the behaviour of SDL <=
2476             2.0.3. (default)
2477              
2478             =item C<1>
2479              
2480             The return key will hide the keyboard.
2481              
2482             =back
2483              
2484             The value of this hint is used at runtime, so it can be changed at any time.
2485              
2486             =item C
2487              
2488             Force SDL to use Critical Sections for mutexes on Windows. On Windows 7 and
2489             newer, Slim Reader/Writer Locks are available. They offer better performance,
2490             allocate no kernel resources and use less memory. SDL will fall back to
2491             Critical Sections on older OS versions or if forced to by this hint.
2492              
2493             This also affects Condition Variables. When SRW mutexes are used, SDL will use
2494             Windows Condition Variables as well. Else, a generic SDL_cond implementation
2495             will be used that works with all mutexes.
2496              
2497             This variable can be set to the following values:
2498              
2499             =over
2500              
2501             =item C<0>
2502              
2503             Use SRW Locks when available. If not, fall back to Critical Sections. (default)
2504              
2505             =item C<1>
2506              
2507             Force the use of Critical Sections in all cases.
2508              
2509             =back
2510              
2511             =item C
2512              
2513             Force SDL to use Kernel Semaphores on Windows. Kernel Semaphores are
2514             inter-process and require a context switch on every interaction. On Windows 8
2515             and newer, the WaitOnAddress API is available. Using that and atomics to
2516             implement semaphores increases performance. SDL will fall back to Kernel
2517             Objects on older OS versions or if forced to by this hint.
2518              
2519             This variable can be set to the following values:
2520              
2521             =over
2522              
2523             =item C<0>
2524              
2525             Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel
2526             Objects. (default)
2527              
2528             =item C<1>
2529              
2530             Force the use of Kernel Objects in all cases.
2531              
2532             =back
2533              
2534             =item C
2535              
2536             Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
2537             Direct3D 9Ex contains changes to state management that can eliminate device
2538             loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require
2539             some changes to your application to cope with the new behavior, so this is
2540             disabled by default.
2541              
2542             This hint must be set before initializing the video subsystem.
2543              
2544             For more information on Direct3D 9Ex, see:
2545              
2546             =over
2547              
2548             =item L
2549              
2550             =item L
2551              
2552             =back
2553              
2554             This variable can be set to the following values:
2555              
2556             =over
2557              
2558             =item C<0>
2559              
2560             Use the original Direct3D 9 API (default)
2561              
2562             =item C<1>
2563              
2564             Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is
2565             unavailable)
2566              
2567             =back
2568              
2569             =item C
2570              
2571             Tell the video driver that we only want a double buffer.
2572              
2573             By default, most lowlevel 2D APIs will use a triple buffer scheme that wastes
2574             no CPU time on waiting for vsync after issuing a flip, but introduces a frame
2575             of latency. On the other hand, using a double buffer scheme instead is
2576             recommended for cases where low latency is an important factor because we save
2577             a whole frame of latency. We do so by waiting for vsync immediately after
2578             issuing a flip, usually just after eglSwapBuffers call in the backend's
2579             *_SwapWindow function.
2580              
2581             Since it's driver-specific, it's only supported where possible and implemented.
2582             Currently supported the following drivers:
2583              
2584             =over
2585              
2586             =item KMSDRM (kmsdrm)
2587              
2588             =item Raspberry Pi (raspberrypi)
2589              
2590             =back
2591              
2592             =item C
2593              
2594             Determines whether SDL enforces that DRM master is required in order to
2595             initialize the KMSDRM video backend.
2596              
2597             The DRM subsystem has a concept of a "DRM master" which is a DRM client that
2598             has the ability to set planes, set cursor, etc. When SDL is DRM master, it can
2599             draw to the screen using the SDL rendering APIs. Without DRM master, SDL is
2600             still able to process input and query attributes of attached displays, but it
2601             cannot change display state or draw to the screen directly.
2602              
2603             In some cases, it can be useful to have the KMSDRM backend even if it cannot be
2604             used for rendering. An app may want to use SDL for input processing while using
2605             another rendering API (such as an MMAL overlay on Raspberry Pi) or using its
2606             own code to render to DRM overlays that SDL doesn't support.
2607              
2608             This hint must be set before initializing the video subsystem.
2609              
2610             This variable can be set to the following values:
2611              
2612             =over
2613              
2614             =item C<0>
2615              
2616             SDL will allow usage of the KMSDRM backend without DRM master
2617              
2618             =item C<1>
2619              
2620             SDL Will require DRM master to use the KMSDRM backend (default)
2621              
2622             =back
2623              
2624             =item C
2625              
2626             A variable controlling what driver to use for OpenGL ES contexts.
2627              
2628             On some platforms, currently Windows and X11, OpenGL drivers may support
2629             creating contexts with an OpenGL ES profile. By default SDL uses these
2630             profiles, when available, otherwise it attempts to load an OpenGL ES library,
2631             e.g. that provided by the ANGLE project. This variable controls whether SDL
2632             follows this default behaviour or will always load an OpenGL ES library.
2633              
2634             Circumstances where this is useful include
2635              
2636             =over
2637              
2638             =item - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, or emulator, e.g. those from ARM, Imagination or Qualcomm.
2639              
2640             =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.
2641              
2642             =back
2643              
2644             Caution: for an application to work with the default behaviour across different
2645             OpenGL drivers it must query the OpenGL ES function addresses at run time using
2646             C.
2647              
2648             This variable is ignored on most platforms because OpenGL ES is native or not
2649             supported.
2650              
2651             This variable can be set to the following values:
2652              
2653             =over
2654              
2655             =item C<0>
2656              
2657             Use ES profile of OpenGL, if available. (Default when not set.)
2658              
2659             =item C<1>
2660              
2661             Load OpenGL ES library using the default library names.
2662              
2663             =back
2664              
2665             =item C
2666              
2667             A variable controlling speed/quality tradeoff of audio resampling.
2668              
2669             If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) to
2670             handle audio resampling. There are different resampling modes available that
2671             produce different levels of quality, using more CPU.
2672              
2673             If this hint isn't specified to a valid setting, or libsamplerate isn't
2674             available, SDL will use the default, internal resampling algorithm.
2675              
2676             Note that this is currently only applicable to resampling audio that is being
2677             written to a device for playback or audio being read from a device for capture.
2678             SDL_AudioCVT always uses the default resampler (although this might change for
2679             SDL 2.1).
2680              
2681             This hint is currently only checked at audio subsystem initialization.
2682              
2683             This variable can be set to the following values:
2684              
2685             =over
2686              
2687             =item C<0> or C
2688              
2689             Use SDL's internal resampling (Default when not set - low quality, fast)
2690              
2691             =item C<1> or C
2692              
2693             Use fast, slightly higher quality resampling, if available
2694              
2695             =item C<2> or C
2696              
2697             Use medium quality resampling, if available
2698              
2699             =item C<3> or C
2700              
2701             Use high quality resampling, if available
2702              
2703             =back
2704              
2705             =item C
2706              
2707             A variable controlling the audio category on iOS and Mac OS X.
2708              
2709             This variable can be set to the following values:
2710              
2711             =over
2712              
2713             =item C
2714              
2715             Use the AVAudioSessionCategoryAmbient audio category, will be muted by the
2716             phone mute switch (default)
2717              
2718             =item C
2719              
2720             Use the AVAudioSessionCategoryPlayback category
2721              
2722             =back
2723              
2724             For more information, see Apple's documentation:
2725             L
2726              
2727             =item C
2728              
2729             A variable controlling whether the 2D render API is compatible or efficient.
2730              
2731             This variable can be set to the following values:
2732              
2733             =over
2734              
2735             =item C<0>
2736              
2737             Don't use batching to make rendering more efficient.
2738              
2739             =item C<1>
2740              
2741             Use batching, but might cause problems if app makes its own direct OpenGL
2742             calls.
2743              
2744             =back
2745              
2746             Up to SDL 2.0.9, the render API would draw immediately when requested. Now it
2747             batches up draw requests and sends them all to the GPU only when forced to
2748             (during SDL_RenderPresent, when changing render targets, by updating a texture
2749             that the batch needs, etc). This is significantly more efficient, but it can
2750             cause problems for apps that expect to render on top of the render API's
2751             output. As such, SDL will disable batching if a specific render backend is
2752             requested (since this might indicate that the app is planning to use the
2753             underlying graphics API directly). This hint can be used to explicitly request
2754             batching in this instance. It is a contract that you will either never use the
2755             underlying graphics API directly, or if you do, you will call
2756             C before you do so any current batch goes to the GPU before
2757             your work begins. Not following this contract will result in undefined
2758             behavior.
2759              
2760             =item C
2761              
2762             A variable controlling whether SDL updates joystick state when getting input
2763             events
2764              
2765             This variable can be set to the following values:
2766              
2767             =over
2768              
2769             =item C<0>
2770              
2771             You'll call C manually
2772              
2773             =item C<1>
2774              
2775             SDL will automatically call C (default)
2776              
2777             =back
2778              
2779             This hint can be toggled on and off at runtime.
2780              
2781             =item C
2782              
2783             A variable controlling whether SDL updates sensor state when getting input
2784             events
2785              
2786             This variable can be set to the following values:
2787              
2788             =over
2789              
2790             =item C<0>
2791              
2792             You'll call C manually
2793              
2794             =item C<1>
2795              
2796             SDL will automatically call C (default)
2797              
2798             =back
2799              
2800             This hint can be toggled on and off at runtime.
2801              
2802             =item C
2803              
2804             A variable controlling whether SDL logs all events pushed onto its internal
2805             queue.
2806              
2807             This variable can be set to the following values:
2808              
2809             =over
2810              
2811             =item C<0>
2812              
2813             Don't log any events (default)
2814              
2815             =item C<1>
2816              
2817             Log all events except mouse and finger motion, which are pretty spammy.
2818              
2819             =item C<2>
2820              
2821             Log all events.
2822              
2823             =back
2824              
2825             This is generally meant to be used to debug SDL itself, but can be useful for
2826             application developers that need better visibility into what is going on in the
2827             event queue. Logged events are sent through C, which means by
2828             default they appear on stdout on most platforms or maybe C
2829             )> on Windows, and can be funneled by the app with C
2830             )>, etc.
2831              
2832             This hint can be toggled on and off at runtime, if you only need to log events
2833             for a small subset of program execution.
2834              
2835             =item C
2836              
2837             Controls how the size of the RIFF chunk affects the loading of a WAVE file.
2838              
2839             The size of the RIFF chunk (which includes all the sub-chunks of the WAVE file)
2840             is not always reliable. In case the size is wrong, it's possible to just ignore
2841             it and step through the chunks until a fixed limit is reached.
2842              
2843             Note that files that have trailing data unrelated to the WAVE file or corrupt
2844             files may slow down the loading process without a reliable boundary. By
2845             default, SDL stops after 10000 chunks to prevent wasting time. Use the
2846             environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.
2847              
2848             This variable can be set to the following values:
2849              
2850             =over
2851              
2852             =item C
2853              
2854             Always use the RIFF chunk size as a boundary for the chunk search
2855              
2856             =item C
2857              
2858             Like "force", but a zero size searches up to 4 GiB (default)
2859              
2860             =item C
2861              
2862             Ignore the RIFF chunk size and always search up to 4 GiB
2863              
2864             =item C
2865              
2866             Search for chunks until the end of file (not recommended)
2867              
2868             =back
2869              
2870             =item C
2871              
2872             Controls how a truncated WAVE file is handled.
2873              
2874             A WAVE file is considered truncated if any of the chunks are incomplete or the
2875             data chunk size is not a multiple of the block size. By default, SDL decodes
2876             until the first incomplete block, as most applications seem to do.
2877              
2878             This variable can be set to the following values:
2879              
2880             =over
2881              
2882             =item C
2883              
2884             Raise an error if the file is truncated
2885              
2886             =item C
2887              
2888             Like "verystrict", but the size of the RIFF chunk is ignored
2889              
2890             =item C
2891              
2892             Decode until the first incomplete sample frame
2893              
2894             =item C
2895              
2896             Decode until the first incomplete block (default)
2897              
2898             =back
2899              
2900             =item C
2901              
2902             Controls how the fact chunk affects the loading of a WAVE file.
2903              
2904             The fact chunk stores information about the number of samples of a WAVE file.
2905             The Standards Update from Microsoft notes that this value can be used to
2906             'determine the length of the data in seconds'. This is especially useful for
2907             compressed formats (for which this is a mandatory chunk) if they produce
2908             multiple sample frames per block and truncating the block is not allowed. The
2909             fact chunk can exactly specify how many sample frames there should be in this
2910             case.
2911              
2912             Unfortunately, most application seem to ignore the fact chunk and so SDL
2913             ignores it by default as well.
2914              
2915             This variable can be set to the following values:
2916              
2917             =over
2918              
2919             =item C
2920              
2921             Use the number of samples to truncate the wave data if the fact chunk is
2922             present and valid
2923              
2924             =item C
2925              
2926             Like "truncate", but raise an error if the fact chunk is invalid, not present
2927             for non-PCM formats, or if the data chunk doesn't have that many samples
2928              
2929             =item C
2930              
2931             Like "truncate", but ignore fact chunk if the number of samples is zero
2932              
2933             =item C
2934              
2935             Ignore fact chunk entirely (default)
2936              
2937             =back
2938              
2939             =item C
2940              
2941             Override for C
2942              
2943             If set, this hint will override the expected results for
2944             C for display index 0. Generally you don't want
2945             to do this, but this allows an embedded system to request that some of the
2946             screen be reserved for other uses when paired with a well-behaved application.
2947              
2948             The contents of this hint must be 4 comma-separated integers, the first is the
2949             bounds x, then y, width and height, in that order.
2950              
2951             =item C
2952              
2953             Specify an application name for an audio device.
2954              
2955             Some audio backends (such as PulseAudio) allow you to describe your audio
2956             stream. Among other things, this description might show up in a system control
2957             panel that lets the user adjust the volume on specific audio streams instead of
2958             using one giant master volume slider.
2959              
2960             This hints lets you transmit that information to the OS. The contents of this
2961             hint are used while opening an audio device. You should use a string that
2962             describes your program ("My Game 2: The Revenge")
2963              
2964             Setting this to "" or leaving it unset will have SDL use a reasonable default:
2965             probably the application's name or "SDL Application" if SDL doesn't have any
2966             better information.
2967              
2968             On targets where this is not supported, this hint does nothing.
2969              
2970             =item C
2971              
2972             Specify an application name for an audio device.
2973              
2974             Some audio backends (such as PulseAudio) allow you to describe your audio
2975             stream. Among other things, this description might show up in a system control
2976             panel that lets the user adjust the volume on specific audio streams instead of
2977             using one giant master volume slider.
2978              
2979             This hints lets you transmit that information to the OS. The contents of this
2980             hint are used while opening an audio device. You should use a string that
2981             describes your what your program is playing ("audio stream" is probably
2982             sufficient in many cases, but this could be useful for something like "team
2983             chat" if you have a headset playing VoIP audio separately).
2984              
2985             Setting this to "" or leaving it unset will have SDL use a reasonable default:
2986             "audio stream" or something similar.
2987              
2988             On targets where this is not supported, this hint does nothing.
2989              
2990             =item C
2991              
2992             Specify an application role for an audio device.
2993              
2994             Some audio backends (such as Pipewire) allow you to describe the role of your
2995             audio stream. Among other things, this description might show up in a system
2996             control panel or software for displaying and manipulating media
2997             playback/capture graphs.
2998              
2999             This hints lets you transmit that information to the OS. The contents of this
3000             hint are used while opening an audio device. You should use a string that
3001             describes your what your program is playing (Game, Music, Movie, etc...).
3002              
3003             Setting this to "" or leaving it unset will have SDL use a reasonable default:
3004             "Game" or something similar.
3005              
3006             On targets where this is not supported, this hint does nothing.
3007              
3008             =item C
3009              
3010             Specify the behavior of Alt+Tab while the keyboard is grabbed.
3011              
3012             By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed
3013             and your window is full-screen. This prevents the user from getting stuck in
3014             your application if you've enabled keyboard grab.
3015              
3016             The variable can be set to the following values:
3017              
3018             =over
3019              
3020             =item C<0>
3021              
3022             SDL will not handle Alt+Tab. Your application is responsible for handling
3023             Alt+Tab while the keyboard is grabbed.
3024              
3025             =item C<1>
3026              
3027             SDL will minimize your window when Alt+Tab is pressed (default)
3028              
3029             =back
3030              
3031             =item C
3032              
3033             Override for SDL_GetPreferredLocales( )
3034              
3035             If set, this will be favored over anything the OS might report for the user's
3036             preferred locales. Changing this hint at runtime will not generate a
3037             SDL_LOCALECHANGED event (but if you can change the hint, you can push your own
3038             event, if you want).
3039              
3040             The format of this hint is a comma-separated list of language and locale,
3041             combined with an underscore, as is a common format: "en_GB". Locale is
3042             optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
3043              
3044             =back
3045              
3046             =head2 C<:assertState>
3047              
3048              
3049              
3050             =over
3051              
3052             =item C - Retry the assert immediately
3053              
3054             =item C - Make the debugger trigger a breakpoint
3055              
3056             =item C - Terminate the program
3057              
3058             =item C - Ignore the assert
3059              
3060             =item C - Ignore the assert from now on
3061              
3062             =back
3063              
3064             =cut
3065              
3066             enum SDL_AssertState => [
3067             qw[ SDL_ASSERTION_RETRY
3068             SDL_ASSERTION_BREAK
3069             SDL_ASSERTION_ABORT
3070             SDL_ASSERTION_IGNORE
3071             SDL_ASSERTION_ALWAYS_IGNORE
3072             ]
3073             ];
3074              
3075             =head2 C<:logcategory>
3076              
3077             The predefined log categories
3078              
3079             By default the application category is enabled at the INFO level, the assert
3080             category is enabled at the WARN level, test is enabled at the VERBOSE level and
3081             all other categories are enabled at the CRITICAL level.
3082              
3083             =over
3084              
3085             =item C
3086              
3087             =item C
3088              
3089             =item C
3090              
3091             =item C
3092              
3093             =item C
3094              
3095             =item C
3096              
3097             =item C
3098              
3099             =item C
3100              
3101             =item C
3102              
3103             =item C
3104              
3105             =item C
3106              
3107             =item C
3108              
3109             =item C
3110              
3111             =item C
3112              
3113             =item C
3114              
3115             =item C
3116              
3117             =item C
3118              
3119             =item C
3120              
3121             =item C
3122              
3123             =item C
3124              
3125             =back
3126              
3127             =head2 C<:logpriority>
3128              
3129             The predefined log priorities.
3130              
3131             =over
3132              
3133             =item C
3134              
3135             =item C
3136              
3137             =item C
3138              
3139             =item C
3140              
3141             =item C
3142              
3143             =item C
3144              
3145             =item C
3146              
3147             =back
3148              
3149             =head2 C<:windowflags>
3150              
3151             The flags on a window.
3152              
3153             =over
3154              
3155             =item C - Fullscreen window
3156              
3157             =item C - Window usable with OpenGL context
3158              
3159             =item C - Window is visible
3160              
3161             =item C - Window is not visible
3162              
3163             =item C - No window decoration
3164              
3165             =item C - Window can be resized
3166              
3167             =item C - Window is minimized
3168              
3169             =item C - Window is maximized
3170              
3171             =item C - Window has grabbed mouse input
3172              
3173             =item C - Window has input focus
3174              
3175             =item C - Window has mouse focus
3176              
3177             =item C - Fullscreen window without frame
3178              
3179             =item C - Window not created by SDL
3180              
3181             =item C - Window should be created in high-DPI mode if supported.
3182              
3183             On macOS NSHighResolutionCapable must be set true in the application's
3184             Info.plist for this to have any effect.
3185              
3186             =item C - Window has mouse captured (unrelated to C)
3187              
3188             =item C - Window should always be above others
3189              
3190             =item C - Window should not be added to the taskbar
3191              
3192             =item C - Window should be treated as a utility window
3193              
3194             =item C - Window should be treated as a tooltip
3195              
3196             =item C - Window should be treated as a popup menu
3197              
3198             =item C - Window has grabbed keyboard input
3199              
3200             =item C - Window usable for Vulkan surface
3201              
3202             =item C - Window usable for Metal view
3203              
3204             =item C - Equivalent to C for compatibility
3205              
3206             =back
3207              
3208             =head2 C<:windowEventID>
3209              
3210             Event subtype for window events.
3211              
3212             =over
3213              
3214             =item C - Never used
3215              
3216             =item C - Window has been shown
3217              
3218             =item C - Window has been hidden
3219              
3220             =item C - Window has been exposed and should be redrawn
3221              
3222             =item C - Window has been moved to C
3223              
3224             =item C - Window has been resized to C
3225              
3226             =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.
3227              
3228             =item C - Window has been minimized
3229              
3230             =item C - Window has been maximized
3231              
3232             =item C - Window has been restored to normal size and position
3233              
3234             =item C - Window has gained mouse focus
3235              
3236             =item C - Window has lost mouse focus
3237              
3238             =item C - Window has gained keyboard focus
3239              
3240             =item C - Window has lost keyboard focus
3241              
3242             =item C - The window manager requests that the window be closed
3243              
3244             =item C - Window is being offered a focus (should C on itself or a subwindow, or ignore)
3245              
3246             =item C - Window had a hit test that wasn't C.
3247              
3248             =back
3249              
3250             =head2 C<:displayEventID>
3251              
3252             Event subtype for display events.
3253              
3254             =over
3255              
3256             =item C - Never used
3257              
3258             =item C - Display orientation has changed to data1
3259              
3260             =item C - Display has been added to the system
3261              
3262             =item C - Display has been removed from the system
3263              
3264             =back
3265              
3266             =head2 C<:displayOrientation>
3267              
3268             =over
3269              
3270             =item C - The display orientation can't be determined
3271              
3272             =item C - The display is in landscape mode, with the right side up, relative to portrait mode
3273              
3274             =item C - The display is in landscape mode, with the left side up, relative to portrait mode
3275              
3276             =item C - The display is in portrait mode
3277              
3278             =item C - The display is in portrait mode, upside down
3279              
3280             =back
3281              
3282             =head2 C<:glAttr>
3283              
3284             OpenGL configuration attributes.
3285              
3286             =over
3287              
3288             =item C
3289              
3290             =item C
3291              
3292             =item C
3293              
3294             =item C
3295              
3296             =item C
3297              
3298             =item C
3299              
3300             =item C
3301              
3302             =item C
3303              
3304             =item C
3305              
3306             =item C
3307              
3308             =item C
3309              
3310             =item C
3311              
3312             =item C
3313              
3314             =item C
3315              
3316             =item C
3317              
3318             =item C
3319              
3320             =item C
3321              
3322             =item C
3323              
3324             =item C
3325              
3326             =item C
3327              
3328             =item C
3329              
3330             =item C
3331              
3332             =item C
3333              
3334             =item C
3335              
3336             =item C
3337              
3338             =item C
3339              
3340             =item C
3341              
3342             =back
3343              
3344             =head2 C<:glProfile>
3345              
3346             =over
3347              
3348             =item C
3349              
3350             =item C
3351              
3352             =item C
3353              
3354             =back
3355              
3356             =head2 C<:glContextFlag>
3357              
3358             =over
3359              
3360             =item C
3361              
3362             =item C
3363              
3364             =item C
3365              
3366             =item C
3367              
3368             =back
3369              
3370             =head2 C<:glContextReleaseFlag>
3371              
3372             =over
3373              
3374             =item C
3375              
3376             =item C
3377              
3378             =back
3379              
3380             =head2 C<:glContextResetNotification>
3381              
3382             =over
3383              
3384             =item C
3385              
3386             =item C
3387              
3388             =back
3389              
3390             =head2 C<:rendererFlags>
3391              
3392             Flags used when creating a rendering context.
3393              
3394             =over
3395              
3396             =item C - The renderer is a software fallback
3397              
3398             =item C - The renderer uses hardware acceleration
3399              
3400             =item C - Present is synchronized with the refresh rate
3401              
3402             =item C - The renderer supports rendering to texture
3403              
3404             =back
3405              
3406             =head2 C<:scaleMode>
3407              
3408             The scaling mode for a texture.
3409              
3410             =over
3411              
3412             =item C - nearest pixel sampling
3413              
3414             =item C - linear filtering
3415              
3416             =item C - anisotropic filtering
3417              
3418             =back
3419              
3420             =head2 C<:textureAccess>
3421              
3422             The access pattern allowed for a texture.
3423              
3424             =over
3425              
3426             =item C - Changes rarely, not lockable
3427              
3428             =item C - Changes frequently, lockable
3429              
3430             =item C - Texture can be used as a render target
3431              
3432             =back
3433              
3434             =head2 C<:textureModulate>
3435              
3436             The texture channel modulation used in L<< C
3437             )>|/C >>.
3438              
3439             =over
3440              
3441             =item C - No modulation
3442              
3443             =item C - srcC = srcC * color
3444              
3445             =item C - srcA = srcA * alpha
3446              
3447             =back
3448              
3449             =head2 C<:renderFlip>
3450              
3451             Flip constants for L<< C|/C
3452             >>.
3453              
3454             =over
3455              
3456             =item C - do not flip
3457              
3458             =item C - flip horizontally
3459              
3460             =item C - flip vertically
3461              
3462             =back
3463              
3464             =head2 C<:blendMode>
3465              
3466             The blend mode used in L<< C|/C
3467             >> and drawing operations.
3468              
3469             =over
3470              
3471             =item C - no blending
3472              
3473             dstRGBA = srcRGBA
3474              
3475             =item C - alpha blending
3476              
3477             dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA))
3478             dstA = srcA + (dstA * (1-srcA))
3479              
3480             =item C - additive blending
3481              
3482             dstRGB = (srcRGB * srcA) + dstRGB
3483             dstA = dstA
3484              
3485             =item C - color modulate
3486              
3487             dstRGB = srcRGB * dstRGB
3488             dstA = dstA
3489              
3490             =item C - color multiply
3491              
3492             dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA))
3493             dstA = (srcA * dstA) + (dstA * (1-srcA))
3494              
3495             =item C -
3496              
3497             =back
3498              
3499             Additional custom blend modes can be returned by L<<
3500             C|/C >>
3501              
3502             =head2 C<:blendOperation>
3503              
3504             The blend operation used when combining source and destination pixel
3505             components.
3506              
3507             =over
3508              
3509             =item C - C: supported by all renderers
3510              
3511             =item C - C: supported by D3D9, D3D11, OpenGL, OpenGLES
3512              
3513             =item C - C: supported by D3D9, D3D11, OpenGL, OpenGLES
3514              
3515             =item C - C: supported by D3D11
3516              
3517             =item C - C: supported by D3D11
3518              
3519             =back
3520              
3521             =head2 C<:blendFactor>
3522              
3523             The normalized factor used to multiply pixel components.
3524              
3525             =over
3526              
3527             =item C - C<0, 0, 0, 0>
3528              
3529             =item C - C<1, 1, 1, 1>
3530              
3531             =item C - C
3532              
3533             =item C - C<1-srcR, 1-srcG, 1-srcB, 1-srcA>
3534              
3535             =item C - C
3536              
3537             =item C - C<1-srcA, 1-srcA, 1-srcA, 1-srcA>
3538              
3539             =item C - C
3540              
3541             =item C - C<1-dstR, 1-dstG, 1-dstB, 1-dstA>
3542              
3543             =item C - C
3544              
3545             =item C - C<1-dstA, 1-dstA, 1-dstA, 1-dstA>
3546              
3547             =back
3548              
3549             =head2 C<:audio>
3550              
3551             Audio format flags.
3552              
3553             These are what the 16 bits in SDL_AudioFormat currently mean... (Unspecified
3554             bits are always zero).
3555              
3556             ++-----------------------sample is signed if set
3557             ||
3558             || ++-----------sample is bigendian if set
3559             || ||
3560             || || ++---sample is float if set
3561             || || ||
3562             || || || +---sample bit size---+
3563             || || || | |
3564             15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
3565              
3566             There are macros in SDL 2.0 and later to query these bits.
3567              
3568             =head3 Audio flags
3569              
3570             =over
3571              
3572             =item C
3573              
3574             =item C
3575              
3576             =item C
3577              
3578             =item C
3579              
3580             =item C
3581              
3582             =item C
3583              
3584             =item C
3585              
3586             =item C
3587              
3588             =item C
3589              
3590             =item C
3591              
3592             =item C
3593              
3594             =back
3595              
3596             =head3 Audio format flags
3597              
3598             Defaults to LSB byte order.
3599              
3600             =over
3601              
3602             =item C - Unsigned 8-bit samples
3603              
3604             =item C - Signed 8-bit samples
3605              
3606             =item C - Unsigned 16-bit samples
3607              
3608             =item C - Signed 16-bit samples
3609              
3610             =item C - As above, but big-endian byte order
3611              
3612             =item C - As above, but big-endian byte order
3613              
3614             =item C - C
3615              
3616             =item C - C
3617              
3618             =back
3619              
3620             =head3 C support
3621              
3622             =over
3623              
3624             =item C - 32-bit integer samples
3625              
3626             =item C - As above, but big-endian byte order
3627              
3628             =item C - C
3629              
3630             =back
3631              
3632             =head3 C support
3633              
3634             =over
3635              
3636             =item C - 32-bit floating point samples
3637              
3638             =item C - As above, but big-endian byte order
3639              
3640             =item C - C
3641              
3642             =back
3643              
3644             =head3 Native audio byte ordering
3645              
3646             =over
3647              
3648             =item C
3649              
3650             =item C
3651              
3652             =item C
3653              
3654             =item C
3655              
3656             =back
3657              
3658             =head3 Allow change flags
3659              
3660             Which audio format changes are allowed when opening a device.
3661              
3662             =over
3663              
3664             =item C
3665              
3666             =item C
3667              
3668             =item C
3669              
3670             =item C
3671              
3672             =item C
3673              
3674             =back
3675              
3676             =head1 Development
3677              
3678             SDL2 is still in early development: the majority of SDL's functions have yet to
3679             be implemented and the interface may also grow to be less sugary leading up to
3680             an eventual 1.0 release. If you like stable, well tested software that performs
3681             as documented, you should hold off on trying to use SDL2 for a bit.
3682              
3683             =head1 LICENSE
3684              
3685             Copyright (C) Sanko Robinson.
3686              
3687             This library is free software; you can redistribute it and/or modify it under
3688             the terms found in the Artistic License 2. Other copyrights, terms, and
3689             conditions may apply to data transmitted through this module.
3690              
3691             =head1 AUTHOR
3692              
3693             Sanko Robinson Esanko@cpan.orgE
3694              
3695             =begin stopwords
3696              
3697             libSDL enum iOS iPhone tvOS gamepad gamepads bitmap colorkey asyncify keycode
3698             ctrl+click OpenGL glibc pthread screensaver fullscreen SDL_gamecontroller.h
3699             XBox XInput pthread pthreads realtime rtkit Keycode mutexes resources imple
3700             irectMedia ayer errstr coderef patchlevel distro WinRT raspberrypi psp macOS
3701             NSHighResolutionCapable lowlevel vsync gamecontroller framebuffer XRandR
3702             XVidMode libc musl non letterbox libsamplerate AVAudioSessionCategoryAmbient
3703             AVAudioSessionCategoryPlayback VoIP OpenGLES opengl opengles opengles2 spammy
3704             popup tooltip taskbar subwindow high-dpi subpixel borderless draggable viewport
3705             user-resizable resizable srcA srcC GiB dstrect rect subrectangle pseudocode ms
3706             verystrict resampler eglSwapBuffers backbuffer scancode unhandled lifespan wgl
3707             glX framerate deadzones vice-versa kmsdrm jp CAMetalLayer touchpad
3708              
3709             =end stopwords
3710              
3711             =cut
3712              
3713             };
3714             1;