gosu 1.3.0 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/dependencies/SDL/include/SDL.h +108 -14
  3. data/dependencies/SDL/include/SDL_assert.h +81 -50
  4. data/dependencies/SDL/include/SDL_atomic.h +135 -35
  5. data/dependencies/SDL/include/SDL_audio.h +960 -355
  6. data/dependencies/SDL/include/SDL_bits.h +11 -6
  7. data/dependencies/SDL/include/SDL_blendmode.h +91 -14
  8. data/dependencies/SDL/include/SDL_clipboard.h +30 -7
  9. data/dependencies/SDL/include/SDL_config.h +277 -27
  10. data/dependencies/SDL/include/SDL_config_android.h +13 -38
  11. data/dependencies/SDL/include/SDL_config_iphoneos.h +21 -62
  12. data/dependencies/SDL/include/SDL_config_macosx.h +23 -92
  13. data/dependencies/SDL/include/SDL_config_minimal.h +1 -4
  14. data/dependencies/SDL/include/SDL_config_pandora.h +15 -22
  15. data/dependencies/SDL/include/SDL_config_psp.h +16 -37
  16. data/dependencies/SDL/include/SDL_config_windows.h +28 -91
  17. data/dependencies/SDL/include/SDL_config_winrt.h +33 -61
  18. data/dependencies/SDL/include/SDL_config_wiz.h +28 -56
  19. data/dependencies/SDL/include/SDL_copying.h +1 -1
  20. data/dependencies/SDL/include/SDL_cpuinfo.h +331 -71
  21. data/dependencies/SDL/include/SDL_egl.h +906 -280
  22. data/dependencies/SDL/include/SDL_endian.h +101 -47
  23. data/dependencies/SDL/include/SDL_error.h +70 -19
  24. data/dependencies/SDL/include/SDL_events.h +387 -79
  25. data/dependencies/SDL/include/SDL_filesystem.h +73 -64
  26. data/dependencies/SDL/include/SDL_gamecontroller.h +585 -125
  27. data/dependencies/SDL/include/SDL_gesture.h +36 -6
  28. data/dependencies/SDL/include/SDL_haptic.h +304 -210
  29. data/dependencies/SDL/include/SDL_hidapi.h +451 -0
  30. data/dependencies/SDL/include/SDL_hints.h +1286 -897
  31. data/dependencies/SDL/include/SDL_joystick.h +577 -130
  32. data/dependencies/SDL/include/SDL_keyboard.h +162 -63
  33. data/dependencies/SDL/include/SDL_keycode.h +7 -5
  34. data/dependencies/SDL/include/SDL_loadso.h +42 -8
  35. data/dependencies/SDL/include/SDL_locale.h +34 -32
  36. data/dependencies/SDL/include/SDL_log.h +212 -19
  37. data/dependencies/SDL/include/SDL_main.h +72 -17
  38. data/dependencies/SDL/include/SDL_messagebox.h +70 -23
  39. data/dependencies/SDL/include/SDL_metal.h +27 -32
  40. data/dependencies/SDL/include/SDL_misc.h +19 -15
  41. data/dependencies/SDL/include/SDL_mouse.h +262 -110
  42. data/dependencies/SDL/include/SDL_mutex.h +286 -66
  43. data/dependencies/SDL/include/SDL_name.h +1 -1
  44. data/dependencies/SDL/include/SDL_opengl.h +1 -1
  45. data/dependencies/SDL/include/SDL_opengles.h +1 -1
  46. data/dependencies/SDL/include/SDL_opengles2.h +2 -2
  47. data/dependencies/SDL/include/SDL_pixels.h +199 -34
  48. data/dependencies/SDL/include/SDL_platform.h +39 -2
  49. data/dependencies/SDL/include/SDL_power.h +23 -10
  50. data/dependencies/SDL/include/SDL_quit.h +1 -1
  51. data/dependencies/SDL/include/SDL_rect.h +78 -28
  52. data/dependencies/SDL/include/SDL_render.h +1204 -472
  53. data/dependencies/SDL/include/SDL_revision.h +2 -2
  54. data/dependencies/SDL/include/SDL_rwops.h +605 -33
  55. data/dependencies/SDL/include/SDL_scancode.h +1 -1
  56. data/dependencies/SDL/include/SDL_sensor.h +76 -42
  57. data/dependencies/SDL/include/SDL_shape.h +38 -27
  58. data/dependencies/SDL/include/SDL_stdinc.h +96 -24
  59. data/dependencies/SDL/include/SDL_surface.h +571 -139
  60. data/dependencies/SDL/include/SDL_system.h +339 -101
  61. data/dependencies/SDL/include/SDL_syswm.h +50 -20
  62. data/dependencies/SDL/include/SDL_test.h +1 -1
  63. data/dependencies/SDL/include/SDL_test_assert.h +2 -2
  64. data/dependencies/SDL/include/SDL_test_common.h +23 -6
  65. data/dependencies/SDL/include/SDL_test_compare.h +1 -1
  66. data/dependencies/SDL/include/SDL_test_crc32.h +1 -1
  67. data/dependencies/SDL/include/SDL_test_font.h +3 -3
  68. data/dependencies/SDL/include/SDL_test_fuzzer.h +28 -26
  69. data/dependencies/SDL/include/SDL_test_harness.h +6 -6
  70. data/dependencies/SDL/include/SDL_test_images.h +1 -1
  71. data/dependencies/SDL/include/SDL_test_log.h +1 -1
  72. data/dependencies/SDL/include/SDL_test_md5.h +1 -1
  73. data/dependencies/SDL/include/SDL_test_memory.h +1 -1
  74. data/dependencies/SDL/include/SDL_test_random.h +2 -2
  75. data/dependencies/SDL/include/SDL_thread.h +226 -128
  76. data/dependencies/SDL/include/SDL_timer.h +129 -22
  77. data/dependencies/SDL/include/SDL_touch.h +48 -8
  78. data/dependencies/SDL/include/SDL_types.h +1 -1
  79. data/dependencies/SDL/include/SDL_version.h +72 -46
  80. data/dependencies/SDL/include/SDL_video.h +1266 -460
  81. data/dependencies/SDL/include/SDL_vulkan.h +100 -161
  82. data/dependencies/SDL/include/begin_code.h +22 -1
  83. data/dependencies/SDL/include/close_code.h +1 -1
  84. data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
  85. data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
  86. data/dependencies/SDL_sound/SDL_sound.c +104 -70
  87. data/dependencies/SDL_sound/SDL_sound.h +6 -6
  88. data/dependencies/SDL_sound/SDL_sound_aiff.c +32 -32
  89. data/dependencies/SDL_sound/SDL_sound_au.c +14 -14
  90. data/dependencies/SDL_sound/SDL_sound_coreaudio.c +6 -7
  91. data/dependencies/SDL_sound/SDL_sound_flac.c +28 -30
  92. data/dependencies/SDL_sound/SDL_sound_internal.h +21 -14
  93. data/dependencies/SDL_sound/SDL_sound_modplug.c +26 -28
  94. data/dependencies/SDL_sound/SDL_sound_mp3.c +20 -36
  95. data/dependencies/SDL_sound/SDL_sound_raw.c +15 -16
  96. data/dependencies/SDL_sound/SDL_sound_shn.c +11 -10
  97. data/dependencies/SDL_sound/SDL_sound_voc.c +20 -18
  98. data/dependencies/SDL_sound/SDL_sound_vorbis.c +11 -9
  99. data/dependencies/SDL_sound/SDL_sound_wav.c +49 -43
  100. data/dependencies/SDL_sound/dr_flac.h +10925 -4466
  101. data/dependencies/SDL_sound/dr_mp3.h +2802 -844
  102. data/dependencies/SDL_sound/libmodplug/fastmix.c +63 -64
  103. data/dependencies/SDL_sound/libmodplug/libmodplug.h +25 -103
  104. data/dependencies/SDL_sound/libmodplug/load_669.c +14 -17
  105. data/dependencies/SDL_sound/libmodplug/load_amf.c +12 -7
  106. data/dependencies/SDL_sound/libmodplug/load_ams.c +103 -44
  107. data/dependencies/SDL_sound/libmodplug/load_dbm.c +8 -4
  108. data/dependencies/SDL_sound/libmodplug/load_dmf.c +55 -25
  109. data/dependencies/SDL_sound/libmodplug/load_far.c +9 -13
  110. data/dependencies/SDL_sound/libmodplug/load_gdm.c +448 -0
  111. data/dependencies/SDL_sound/libmodplug/load_it.c +61 -61
  112. data/dependencies/SDL_sound/libmodplug/load_mdl.c +94 -58
  113. data/dependencies/SDL_sound/libmodplug/load_med.c +20 -11
  114. data/dependencies/SDL_sound/libmodplug/load_mod.c +40 -15
  115. data/dependencies/SDL_sound/libmodplug/load_mt2.c +50 -19
  116. data/dependencies/SDL_sound/libmodplug/load_okt.c +59 -28
  117. data/dependencies/SDL_sound/libmodplug/load_psm.c +104 -79
  118. data/dependencies/SDL_sound/libmodplug/load_ptm.c +18 -17
  119. data/dependencies/SDL_sound/libmodplug/load_s3m.c +9 -7
  120. data/dependencies/SDL_sound/libmodplug/load_stm.c +3 -2
  121. data/dependencies/SDL_sound/libmodplug/load_ult.c +4 -3
  122. data/dependencies/SDL_sound/libmodplug/load_umx.c +315 -35
  123. data/dependencies/SDL_sound/libmodplug/load_xm.c +25 -21
  124. data/dependencies/SDL_sound/libmodplug/mmcmp.c +295 -149
  125. data/dependencies/SDL_sound/libmodplug/modplug.c +7 -123
  126. data/dependencies/SDL_sound/libmodplug/modplug.h +32 -29
  127. data/dependencies/SDL_sound/libmodplug/snd_dsp.c +0 -1
  128. data/dependencies/SDL_sound/libmodplug/snd_flt.c +2 -2
  129. data/dependencies/SDL_sound/libmodplug/snd_fx.c +32 -19
  130. data/dependencies/SDL_sound/libmodplug/sndfile.c +76 -160
  131. data/dependencies/SDL_sound/libmodplug/sndmix.c +7 -12
  132. data/dependencies/SDL_sound/libmodplug/tables.h +10 -15
  133. data/dependencies/SDL_sound/stb_vorbis.h +504 -329
  134. data/dependencies/{al_soft → mojoAL}/AL/al.h +38 -30
  135. data/dependencies/{al_soft → mojoAL}/AL/alc.h +27 -56
  136. data/dependencies/mojoAL/mojoal.c +4848 -0
  137. data/dependencies/stb/stb_image.h +208 -73
  138. data/dependencies/stb/stb_image_write.h +57 -23
  139. data/dependencies/stb/stb_truetype.h +345 -279
  140. data/dependencies/utf8proc/utf8proc.c +37 -18
  141. data/dependencies/utf8proc/utf8proc.h +17 -5
  142. data/dependencies/utf8proc/utf8proc_data.h +12012 -10089
  143. data/ext/gosu/extconf.rb +29 -30
  144. data/include/Gosu/Audio.hpp +70 -85
  145. data/include/Gosu/Buttons.hpp +103 -103
  146. data/include/Gosu/Color.hpp +19 -11
  147. data/include/Gosu/Directories.hpp +31 -24
  148. data/include/Gosu/Font.hpp +42 -44
  149. data/include/Gosu/Gosu.hpp +5 -8
  150. data/include/Gosu/Graphics.hpp +58 -71
  151. data/include/Gosu/GraphicsBase.hpp +26 -33
  152. data/include/Gosu/IO.hpp +0 -3
  153. data/include/Gosu/Image.hpp +56 -62
  154. data/include/Gosu/ImageData.hpp +23 -27
  155. data/include/Gosu/Inspection.hpp +1 -4
  156. data/include/Gosu/Math.hpp +0 -3
  157. data/include/Gosu/TextInput.hpp +34 -40
  158. data/include/Gosu/Timing.hpp +2 -8
  159. data/include/Gosu/Version.hpp +2 -2
  160. data/include/Gosu/Window.hpp +71 -70
  161. data/lib/SDL2.dll +0 -0
  162. data/lib/gosu/compat.rb +24 -37
  163. data/lib/gosu.rb +2 -2
  164. data/lib64/SDL2.dll +0 -0
  165. data/src/Audio.cpp +88 -86
  166. data/src/AudioFile.hpp +6 -6
  167. data/src/AudioFileAudioToolbox.cpp +1 -1
  168. data/src/AudioFileSDLSound.cpp +1 -1
  169. data/src/AudioImpl.cpp +0 -7
  170. data/src/AudioImpl.hpp +6 -8
  171. data/src/BitmapIO.cpp +23 -22
  172. data/src/BlockAllocator.cpp +2 -1
  173. data/src/Channel.cpp +22 -20
  174. data/src/Color.cpp +12 -9
  175. data/src/DirectoriesApple.cpp +25 -24
  176. data/src/DirectoriesUnix.cpp +14 -12
  177. data/src/DirectoriesWin.cpp +26 -30
  178. data/src/EmptyImageData.hpp +15 -17
  179. data/src/FileUnix.cpp +1 -1
  180. data/src/FileWin.cpp +1 -1
  181. data/src/Font.cpp +59 -54
  182. data/src/Graphics.cpp +135 -143
  183. data/src/Image.cpp +41 -47
  184. data/src/Input.cpp +1 -1
  185. data/src/InputUIKit.cpp +1 -1
  186. data/src/LargeImageData.cpp +108 -101
  187. data/src/LargeImageData.hpp +17 -15
  188. data/src/Log.hpp +6 -6
  189. data/src/Macro.cpp +35 -37
  190. data/src/Macro.hpp +11 -11
  191. data/src/Math.cpp +8 -1
  192. data/src/Resolution.cpp +12 -7
  193. data/src/RubyGosu.cxx +11 -39
  194. data/src/TexChunk.cpp +50 -41
  195. data/src/TexChunk.hpp +22 -22
  196. data/src/Text.cpp +37 -37
  197. data/src/TextBuilder.cpp +60 -57
  198. data/src/TextBuilder.hpp +20 -20
  199. data/src/TextInput.cpp +127 -135
  200. data/src/TimingApple.cpp +1 -7
  201. data/src/TimingUnix.cpp +0 -6
  202. data/src/TimingWin.cpp +0 -6
  203. data/src/TrueTypeFont.cpp +107 -107
  204. data/src/TrueTypeFont.hpp +39 -38
  205. data/src/TrueTypeFontApple.cpp +19 -22
  206. data/src/TrueTypeFontUnix.cpp +21 -26
  207. data/src/TrueTypeFontWin.cpp +30 -30
  208. data/src/Window.cpp +97 -87
  209. data/src/WindowUIKit.cpp +46 -49
  210. metadata +7 -17
  211. data/dependencies/SDL/include/SDL_config_os2.h +0 -188
  212. data/dependencies/SDL_sound/libmodplug/load_abc.c +0 -4725
  213. data/dependencies/SDL_sound/libmodplug/load_mid.c +0 -1405
  214. data/dependencies/SDL_sound/libmodplug/load_pat.c +0 -1143
  215. data/dependencies/SDL_sound/libmodplug/load_pat.h +0 -25
  216. data/dependencies/al_soft/AL/alext.h +0 -585
  217. data/dependencies/al_soft/AL/efx-creative.h +0 -3
  218. data/dependencies/al_soft/AL/efx-presets.h +0 -402
  219. data/dependencies/al_soft/AL/efx.h +0 -762
  220. data/dependencies/al_soft/x64/libOpenAL32.dll.a +0 -0
  221. data/dependencies/al_soft/x86/libOpenAL32.dll.a +0 -0
  222. data/lib/OpenAL32.dll +0 -0
  223. data/lib64/OpenAL32.dll +0 -0
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  Simple DirectMedia Layer
3
- Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
3
+ Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
4
4
 
5
5
  This software is provided 'as-is', without any express or implied
6
6
  warranty. In no event will the authors be held liable for any damages
@@ -48,333 +48,485 @@ extern "C" {
48
48
  #endif
49
49
 
50
50
  /**
51
- * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
52
- *
53
- * SDL can try to accelerate the SDL screen surface by using streaming
54
- * textures with a 3D rendering engine. This variable controls whether and
55
- * how this is done.
51
+ * \brief A variable controlling whether the Android / iOS built-in
52
+ * accelerometer should be listed as a joystick device.
56
53
  *
57
54
  * This variable can be set to the following values:
58
- * "0" - Disable 3D acceleration
59
- * "1" - Enable 3D acceleration, using the default renderer.
60
- * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.)
61
- *
62
- * By default SDL tries to make a best guess for each platform whether
63
- * to use acceleration or not.
55
+ * "0" - The accelerometer is not listed as a joystick
56
+ * "1" - The accelerometer is available as a 3 axis joystick (the default).
64
57
  */
65
- #define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION"
58
+ #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK"
66
59
 
67
60
  /**
68
- * \brief A variable specifying which render driver to use.
69
- *
70
- * If the application doesn't pick a specific renderer to use, this variable
71
- * specifies the name of the preferred renderer. If the preferred renderer
72
- * can't be initialized, the normal default renderer is used.
61
+ * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed.
73
62
  *
74
- * This variable is case insensitive and can be set to the following values:
75
- * "direct3d"
76
- * "opengl"
77
- * "opengles2"
78
- * "opengles"
79
- * "metal"
80
- * "software"
63
+ * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed
64
+ * and your window is full-screen. This prevents the user from getting stuck in
65
+ * your application if you've enabled keyboard grab.
81
66
  *
82
- * The default varies by platform, but it's the first one in the list that
83
- * is available on the current platform.
84
- */
85
- #define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER"
67
+ * The variable can be set to the following values:
68
+ * "0" - SDL will not handle Alt+Tab. Your application is responsible
69
+ for handling Alt+Tab while the keyboard is grabbed.
70
+ * "1" - SDL will minimize your window when Alt+Tab is pressed (default)
71
+ */
72
+ #define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED"
86
73
 
87
74
  /**
88
- * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available.
75
+ * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it.
76
+ * This is a debugging aid for developers and not expected to be used by end users. The default is "1"
89
77
  *
90
78
  * This variable can be set to the following values:
91
- * "0" - Disable shaders
92
- * "1" - Enable shaders
93
- *
94
- * By default shaders are used if OpenGL supports them.
79
+ * "0" - don't allow topmost
80
+ * "1" - allow topmost
95
81
  */
96
- #define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS"
82
+ #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST"
97
83
 
98
84
  /**
99
- * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations.
85
+ * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc.
100
86
  *
101
- * This variable can be set to the following values:
102
- * "0" - Thread-safety is not enabled (faster)
103
- * "1" - Thread-safety is enabled
87
+ * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
104
88
  *
105
- * By default the Direct3D device is created with thread-safety disabled.
89
+ * If both hints were set then SDL_RWFromFile() will look into expansion files
90
+ * after a given relative path was not found in the internal storage and assets.
91
+ *
92
+ * By default this hint is not set and the APK expansion files are not searched.
106
93
  */
107
- #define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE"
108
-
94
+ #define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION"
95
+
109
96
  /**
110
- * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer.
97
+ * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc.
111
98
  *
112
- * This variable does not have any effect on the Direct3D 9 based renderer.
99
+ * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.
113
100
  *
114
- * This variable can be set to the following values:
115
- * "0" - Disable Debug Layer use
116
- * "1" - Enable Debug Layer use
101
+ * If both hints were set then SDL_RWFromFile() will look into expansion files
102
+ * after a given relative path was not found in the internal storage and assets.
117
103
  *
118
- * By default, SDL does not use Direct3D Debug Layer.
104
+ * By default this hint is not set and the APK expansion files are not searched.
119
105
  */
120
- #define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG"
106
+ #define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION"
121
107
 
122
108
  /**
123
- * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize.
109
+ * \brief A variable to control whether the event loop will block itself when the app is paused.
124
110
  *
125
- * This variable can be set to the following values:
126
- * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen
127
- * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen
111
+ * The variable can be set to the following values:
112
+ * "0" - Non blocking.
113
+ * "1" - Blocking. (default)
128
114
  *
129
- * By default letterbox is used
115
+ * The value should be set before SDL is initialized.
130
116
  */
131
- #define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE"
117
+ #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE"
132
118
 
133
119
  /**
134
- * \brief A variable controlling the scaling quality
120
+ * \brief A variable to control whether SDL will pause audio in background
121
+ * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
135
122
  *
136
- * This variable can be set to the following values:
137
- * "0" or "nearest" - Nearest pixel sampling
138
- * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D)
139
- * "2" or "best" - Currently this is the same as "linear"
123
+ * The variable can be set to the following values:
124
+ * "0" - Non paused.
125
+ * "1" - Paused. (default)
140
126
  *
141
- * By default nearest pixel sampling is used
127
+ * The value should be set before SDL is initialized.
142
128
  */
143
- #define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY"
129
+ #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO"
144
130
 
145
131
  /**
146
- * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing.
132
+ * \brief A variable to control whether we trap the Android back button to handle it manually.
133
+ * This is necessary for the right mouse button to work on some Android devices, or
134
+ * to be able to trap the back button for use in your code reliably. If set to true,
135
+ * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of
136
+ * SDL_SCANCODE_AC_BACK.
147
137
  *
148
- * This variable can be set to the following values:
149
- * "0" - Disable vsync
150
- * "1" - Enable vsync
138
+ * The variable can be set to the following values:
139
+ * "0" - Back button will be handled as usual for system. (default)
140
+ * "1" - Back button will be trapped, allowing you to handle the key press
141
+ * manually. (This will also let right mouse click work on systems
142
+ * where the right mouse button functions as back.)
151
143
  *
152
- * By default SDL does not sync screen surface updates with vertical refresh.
144
+ * The value of this hint is used at runtime, so it can be changed at any time.
153
145
  */
154
- #define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC"
146
+ #define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON"
155
147
 
156
148
  /**
157
- * \brief A variable controlling whether the screensaver is enabled.
149
+ * \brief Specify an application name.
150
+ *
151
+ * This hint lets you specify the application name sent to the OS when
152
+ * required. For example, this will often appear in volume control applets for
153
+ * audio streams, and in lists of applications which are inhibiting the
154
+ * screensaver. You should use a string that describes your program ("My Game
155
+ * 2: The Revenge")
158
156
  *
159
- * This variable can be set to the following values:
160
- * "0" - Disable screensaver
161
- * "1" - Enable screensaver
157
+ * Setting this to "" or leaving it unset will have SDL use a reasonable
158
+ * default: probably the application's name or "SDL Application" if SDL
159
+ * doesn't have any better information.
162
160
  *
163
- * By default SDL will disable the screensaver.
161
+ * Note that, for audio streams, this can be overridden with
162
+ * SDL_HINT_AUDIO_DEVICE_APP_NAME.
163
+ *
164
+ * On targets where this is not supported, this hint does nothing.
164
165
  */
165
- #define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER"
166
+ #define SDL_HINT_APP_NAME "SDL_APP_NAME"
166
167
 
167
168
  /**
168
- * \brief A variable controlling whether the graphics context is externally managed.
169
+ * \brief A variable controlling whether controllers used with the Apple TV
170
+ * generate UI events.
169
171
  *
170
- * This variable can be set to the following values:
171
- * "0" - SDL will manage graphics contexts that are attached to windows.
172
- * "1" - Disable graphics context management on windows.
172
+ * When UI events are generated by controller input, the app will be
173
+ * backgrounded when the Apple TV remote's menu button is pressed, and when the
174
+ * pause or B buttons on gamepads are pressed.
173
175
  *
174
- * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the
175
- * context will be automatically saved and restored when pausing the application. Additionally, some
176
- * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
177
- * behavior, which is desireable when the application manages the graphics context, such as
178
- * an externally managed OpenGL context or attaching a Vulkan surface to the window.
179
- */
180
- #define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT"
181
-
182
- /**
183
- * \brief A variable controlling whether the X11 VidMode extension should be used.
176
+ * More information about properly making use of controllers for the Apple TV
177
+ * can be found here:
178
+ * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
184
179
  *
185
180
  * This variable can be set to the following values:
186
- * "0" - Disable XVidMode
187
- * "1" - Enable XVidMode
188
- *
189
- * By default SDL will use XVidMode if it is available.
181
+ * "0" - Controller input does not generate UI events (the default).
182
+ * "1" - Controller input generates UI events.
190
183
  */
191
- #define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE"
184
+ #define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS"
192
185
 
193
186
  /**
194
- * \brief A variable controlling whether the X11 Xinerama extension should be used.
187
+ * \brief A variable controlling whether the Apple TV remote's joystick axes
188
+ * will automatically match the rotation of the remote.
195
189
  *
196
190
  * This variable can be set to the following values:
197
- * "0" - Disable Xinerama
198
- * "1" - Enable Xinerama
199
- *
200
- * By default SDL will use Xinerama if it is available.
191
+ * "0" - Remote orientation does not affect joystick axes (the default).
192
+ * "1" - Joystick axes are based on the orientation of the remote.
201
193
  */
202
- #define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA"
194
+ #define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION"
203
195
 
204
196
  /**
205
- * \brief A variable controlling whether the X11 XRandR extension should be used.
197
+ * \brief A variable controlling the audio category on iOS and Mac OS X
206
198
  *
207
199
  * This variable can be set to the following values:
208
- * "0" - Disable XRandR
209
- * "1" - Enable XRandR
210
200
  *
211
- * By default SDL will not use XRandR because of window manager issues.
212
- */
213
- #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR"
214
-
215
- /**
216
- * \brief A variable forcing the visual ID chosen for new X11 windows
201
+ * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default)
202
+ * "playback" - Use the AVAudioSessionCategoryPlayback category
217
203
  *
204
+ * For more information, see Apple's documentation:
205
+ * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
218
206
  */
219
- #define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID"
207
+ #define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY"
220
208
 
221
209
  /**
222
- * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported.
210
+ * \brief Specify an application name for an audio device.
223
211
  *
224
- * This variable can be set to the following values:
225
- * "0" - Disable _NET_WM_PING
226
- * "1" - Enable _NET_WM_PING
212
+ * Some audio backends (such as PulseAudio) allow you to describe your audio
213
+ * stream. Among other things, this description might show up in a system
214
+ * control panel that lets the user adjust the volume on specific audio
215
+ * streams instead of using one giant master volume slider.
227
216
  *
228
- * By default SDL will use _NET_WM_PING, but for applications that know they
229
- * will not always be able to respond to ping requests in a timely manner they can
230
- * turn it off to avoid the window manager thinking the app is hung.
231
- * The hint is checked in CreateWindow.
232
- */
233
- #define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING"
234
-
235
- /**
236
- * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used.
237
- *
238
- * This variable can be set to the following values:
239
- * "0" - Disable _NET_WM_BYPASS_COMPOSITOR
240
- * "1" - Enable _NET_WM_BYPASS_COMPOSITOR
241
- *
242
- * By default SDL will use _NET_WM_BYPASS_COMPOSITOR
243
- *
217
+ * This hints lets you transmit that information to the OS. The contents of
218
+ * this hint are used while opening an audio device. You should use a string
219
+ * that describes your program ("My Game 2: The Revenge")
220
+ *
221
+ * Setting this to "" or leaving it unset will have SDL use a reasonable
222
+ * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is
223
+ * set. Otherwise, it'll probably the application's name or "SDL Application"
224
+ * if SDL doesn't have any better information.
225
+ *
226
+ * On targets where this is not supported, this hint does nothing.
244
227
  */
245
- #define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR"
228
+ #define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME"
246
229
 
247
230
  /**
248
- * \brief A variable controlling whether X11 should use GLX or EGL by default
231
+ * \brief Specify an application name for an audio device.
249
232
  *
250
- * This variable can be set to the following values:
251
- * "0" - Use GLX
252
- * "1" - Use EGL
233
+ * Some audio backends (such as PulseAudio) allow you to describe your audio
234
+ * stream. Among other things, this description might show up in a system
235
+ * control panel that lets the user adjust the volume on specific audio
236
+ * streams instead of using one giant master volume slider.
253
237
  *
254
- * By default SDL will use GLX when both are present.
238
+ * This hints lets you transmit that information to the OS. The contents of
239
+ * this hint are used while opening an audio device. You should use a string
240
+ * that describes your what your program is playing ("audio stream" is
241
+ * probably sufficient in many cases, but this could be useful for something
242
+ * like "team chat" if you have a headset playing VoIP audio separately).
243
+ *
244
+ * Setting this to "" or leaving it unset will have SDL use a reasonable
245
+ * default: "audio stream" or something similar.
246
+ *
247
+ * On targets where this is not supported, this hint does nothing.
255
248
  */
256
- #define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL"
249
+ #define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME"
257
250
 
258
251
  /**
259
- * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden
252
+ * \brief Specify an application role for an audio device.
260
253
  *
261
- * This variable can be set to the following values:
262
- * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc)
263
- * "1" - The window frame is interactive when the cursor is hidden
254
+ * Some audio backends (such as Pipewire) allow you to describe the role of
255
+ * your audio stream. Among other things, this description might show up in
256
+ * a system control panel or software for displaying and manipulating media
257
+ * playback/capture graphs.
264
258
  *
265
- * By default SDL will allow interaction with the window frame when the cursor is hidden
259
+ * This hints lets you transmit that information to the OS. The contents of
260
+ * this hint are used while opening an audio device. You should use a string
261
+ * that describes your what your program is playing (Game, Music, Movie,
262
+ * etc...).
263
+ *
264
+ * Setting this to "" or leaving it unset will have SDL use a reasonable
265
+ * default: "Game" or something similar.
266
+ *
267
+ * On targets where this is not supported, this hint does nothing.
266
268
  */
267
- #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
269
+ #define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE"
268
270
 
269
271
  /**
270
- * \brief A variable to specify custom icon resource id from RC file on Windows platform
272
+ * \brief A variable controlling speed/quality tradeoff of audio resampling.
273
+ *
274
+ * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ )
275
+ * to handle audio resampling. There are different resampling modes available
276
+ * that produce different levels of quality, using more CPU.
277
+ *
278
+ * If this hint isn't specified to a valid setting, or libsamplerate isn't
279
+ * available, SDL will use the default, internal resampling algorithm.
280
+ *
281
+ * Note that this is currently only applicable to resampling audio that is
282
+ * being written to a device for playback or audio being read from a device
283
+ * for capture. SDL_AudioCVT always uses the default resampler (although this
284
+ * might change for SDL 2.1).
285
+ *
286
+ * This hint is currently only checked at audio subsystem initialization.
287
+ *
288
+ * This variable can be set to the following values:
289
+ *
290
+ * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast)
291
+ * "1" or "fast" - Use fast, slightly higher quality resampling, if available
292
+ * "2" or "medium" - Use medium quality resampling, if available
293
+ * "3" or "best" - Use high quality resampling, if available
271
294
  */
272
- #define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON"
273
- #define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"
295
+ #define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE"
274
296
 
275
297
  /**
276
- * \brief A variable controlling whether the windows message loop is processed by SDL
298
+ * \brief A variable controlling whether SDL updates joystick state when getting input events
277
299
  *
278
300
  * This variable can be set to the following values:
279
- * "0" - The window message loop is not run
280
- * "1" - The window message loop is processed in SDL_PumpEvents()
281
301
  *
282
- * By default SDL will process the windows message loop
302
+ * "0" - You'll call SDL_JoystickUpdate() manually
303
+ * "1" - SDL will automatically call SDL_JoystickUpdate() (default)
304
+ *
305
+ * This hint can be toggled on and off at runtime.
283
306
  */
284
- #define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP"
307
+ #define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS"
285
308
 
286
309
  /**
287
- * \brief A variable controlling whether grabbing input grabs the keyboard
310
+ * \brief A variable controlling whether SDL updates sensor state when getting input events
288
311
  *
289
312
  * This variable can be set to the following values:
290
- * "0" - Grab will affect only the mouse
291
- * "1" - Grab will affect mouse and keyboard
292
313
  *
293
- * By default SDL will not grab the keyboard so system shortcuts still work.
314
+ * "0" - You'll call SDL_SensorUpdate() manually
315
+ * "1" - SDL will automatically call SDL_SensorUpdate() (default)
316
+ *
317
+ * This hint can be toggled on and off at runtime.
294
318
  */
295
- #define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD"
319
+ #define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS"
296
320
 
297
321
  /**
298
- * \brief A variable setting the double click time, in milliseconds.
322
+ * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
323
+ *
324
+ * The bitmap header version 4 is required for proper alpha channel support and
325
+ * SDL will use it when required. Should this not be desired, this hint can
326
+ * force the use of the 40 byte header version which is supported everywhere.
327
+ *
328
+ * The variable can be set to the following values:
329
+ * "0" - Surfaces with a colorkey or an alpha channel are saved to a
330
+ * 32-bit BMP file with an alpha mask. SDL will use the bitmap
331
+ * header version 4 and set the alpha mask accordingly.
332
+ * "1" - Surfaces with a colorkey or an alpha channel are saved to a
333
+ * 32-bit BMP file without an alpha mask. The alpha channel data
334
+ * will be in the file, but applications are going to ignore it.
335
+ *
336
+ * The default value is "0".
299
337
  */
300
- #define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME"
338
+ #define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT"
301
339
 
302
340
  /**
303
- * \brief A variable setting the double click radius, in pixels.
341
+ * \brief Override for SDL_GetDisplayUsableBounds()
342
+ *
343
+ * If set, this hint will override the expected results for
344
+ * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
345
+ * to do this, but this allows an embedded system to request that some of the
346
+ * screen be reserved for other uses when paired with a well-behaved
347
+ * application.
348
+ *
349
+ * The contents of this hint must be 4 comma-separated integers, the first
350
+ * is the bounds x, then y, width and height, in that order.
304
351
  */
305
- #define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS"
352
+ #define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS"
306
353
 
307
354
  /**
308
- * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode
355
+ * \brief Disable giving back control to the browser automatically
356
+ * when running with asyncify
357
+ *
358
+ * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations
359
+ * such as refreshing the screen or polling events.
360
+ *
361
+ * This hint only applies to the emscripten platform
362
+ *
363
+ * The variable can be set to the following values:
364
+ * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
365
+ * "1" - Enable emscripten_sleep calls (the default)
309
366
  */
310
- #define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE"
367
+ #define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY"
311
368
 
312
369
  /**
313
- * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode
370
+ * \brief override the binding element for keyboard inputs for Emscripten builds
371
+ *
372
+ * This hint only applies to the emscripten platform
373
+ *
374
+ * The variable can be one of
375
+ * "#window" - The javascript window object (this is the default)
376
+ * "#document" - The javascript document object
377
+ * "#screen" - the javascript window.screen object
378
+ * "#canvas" - the WebGL canvas element
379
+ * any other string without a leading # sign applies to the element on the page with that ID.
314
380
  */
315
- #define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE"
381
+ #define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
316
382
 
317
383
  /**
318
- * \brief A variable controlling whether relative mouse motion is affected by renderer scaling
384
+ * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs
319
385
  *
320
- * This variable can be set to the following values:
321
- * "0" - Relative motion is unaffected by DPI or renderer's logical size
322
- * "1" - Relative motion is scaled according to DPI scaling and logical size
386
+ * The variable can be set to the following values:
387
+ * "0" - Do not scan for Steam Controllers
388
+ * "1" - Scan for Steam Controllers (the default)
323
389
  *
324
- * By default relative mouse deltas are affected by DPI and renderer scaling
390
+ * The default value is "1". This hint must be set before initializing the joystick subsystem.
325
391
  */
326
- #define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING"
392
+ #define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS"
327
393
 
328
394
  /**
329
- * \brief A variable controlling whether relative mouse mode is implemented using mouse warping
395
+ * \brief A variable controlling whether SDL logs all events pushed onto its internal queue.
330
396
  *
331
397
  * This variable can be set to the following values:
332
- * "0" - Relative mouse mode uses raw input
333
- * "1" - Relative mouse mode uses mouse warping
334
398
  *
335
- * By default SDL will use raw input for relative mouse mode
399
+ * "0" - Don't log any events (default)
400
+ * "1" - Log all events except mouse and finger motion, which are pretty spammy.
401
+ * "2" - Log all events.
402
+ *
403
+ * This is generally meant to be used to debug SDL itself, but can be useful
404
+ * for application developers that need better visibility into what is going
405
+ * on in the event queue. Logged events are sent through SDL_Log(), which
406
+ * means by default they appear on stdout on most platforms or maybe
407
+ * OutputDebugString() on Windows, and can be funneled by the app with
408
+ * SDL_LogSetOutputFunction(), etc.
409
+ *
410
+ * This hint can be toggled on and off at runtime, if you only need to log
411
+ * events for a small subset of program execution.
336
412
  */
337
- #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP"
413
+ #define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING"
338
414
 
339
415
  /**
340
- * \brief Allow mouse click events when clicking to focus an SDL window
416
+ * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
417
+ *
418
+ * SDL can try to accelerate the SDL screen surface by using streaming
419
+ * textures with a 3D rendering engine. This variable controls whether and
420
+ * how this is done.
341
421
  *
342
422
  * This variable can be set to the following values:
343
- * "0" - Ignore mouse clicks that activate a window
344
- * "1" - Generate events for mouse clicks that activate a window
423
+ * "0" - Disable 3D acceleration
424
+ * "1" - Enable 3D acceleration, using the default renderer.
425
+ * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.)
345
426
  *
346
- * By default SDL will ignore mouse clicks that activate a window
427
+ * By default SDL tries to make a best guess for each platform whether
428
+ * to use acceleration or not.
347
429
  */
348
- #define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH"
430
+ #define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION"
349
431
 
350
432
  /**
351
- * \brief A variable controlling whether touch events should generate synthetic mouse events
433
+ * \brief A variable that lets you manually hint extra gamecontroller db entries.
352
434
  *
353
- * This variable can be set to the following values:
354
- * "0" - Touch events will not generate mouse events
355
- * "1" - Touch events will generate mouse events
435
+ * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h
356
436
  *
357
- * By default SDL will generate mouse events for touch events
437
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
438
+ * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
358
439
  */
359
- #define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS"
440
+ #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG"
360
441
 
361
442
  /**
362
- * \brief A variable controlling whether mouse events should generate synthetic touch events
443
+ * \brief A variable that lets you provide a file with extra gamecontroller db entries.
363
444
  *
364
- * This variable can be set to the following values:
365
- * "0" - Mouse events will not generate touch events (default for desktop platforms)
366
- * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS)
445
+ * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h
446
+ *
447
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
448
+ * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
367
449
  */
450
+ #define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE"
368
451
 
369
- #define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS"
452
+ /**
453
+ * \brief A variable that overrides the automatic controller type detection
454
+ *
455
+ * The variable should be comma separated entries, in the form: VID/PID=type
456
+ *
457
+ * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
458
+ *
459
+ * The type should be one of:
460
+ * Xbox360
461
+ * XboxOne
462
+ * PS3
463
+ * PS4
464
+ * PS5
465
+ * SwitchPro
466
+ *
467
+ * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
468
+ */
469
+ #define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE"
370
470
 
371
471
  /**
372
- * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false.
373
- * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're
374
- * seeing if "true" causes more problems than it solves in modern times.
472
+ * \brief A variable containing a list of devices to skip when scanning for game controllers.
473
+ *
474
+ * The format of the string is a comma separated list of USB VID/PID pairs
475
+ * in hexadecimal form, e.g.
375
476
  *
477
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
478
+ *
479
+ * The variable can also take the form of @file, in which case the named
480
+ * file will be loaded and interpreted as the value of the variable.
376
481
  */
377
- #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS"
482
+ #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES"
483
+
484
+ /**
485
+ * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable.
486
+ *
487
+ * The format of the string is a comma separated list of USB VID/PID pairs
488
+ * in hexadecimal form, e.g.
489
+ *
490
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
491
+ *
492
+ * The variable can also take the form of @file, in which case the named
493
+ * file will be loaded and interpreted as the value of the variable.
494
+ */
495
+ #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT"
496
+
497
+ /**
498
+ * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout.
499
+ *
500
+ * For example, on Nintendo Switch controllers, normally you'd get:
501
+ *
502
+ * (Y)
503
+ * (X) (B)
504
+ * (A)
505
+ *
506
+ * but if this hint is set, you'll get:
507
+ *
508
+ * (X)
509
+ * (Y) (A)
510
+ * (B)
511
+ *
512
+ * The variable can be set to the following values:
513
+ * "0" - Report the face buttons by position, as though they were on an Xbox controller.
514
+ * "1" - Report the face buttons by label instead of position
515
+ *
516
+ * The default value is "1". This hint may be set at any time.
517
+ */
518
+ #define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS"
519
+
520
+ /**
521
+ * \brief A variable controlling whether grabbing input grabs the keyboard
522
+ *
523
+ * This variable can be set to the following values:
524
+ * "0" - Grab will affect only the mouse
525
+ * "1" - Grab will affect mouse and keyboard
526
+ *
527
+ * By default SDL will not grab the keyboard so system shortcuts still work.
528
+ */
529
+ #define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD"
378
530
 
379
531
  /**
380
532
  * \brief A variable controlling whether the idle timer is disabled on iOS.
@@ -394,43 +546,25 @@ extern "C" {
394
546
  #define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED"
395
547
 
396
548
  /**
397
- * \brief A variable controlling which orientations are allowed on iOS/Android.
549
+ * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.
398
550
  *
399
- * In some circumstances it is necessary to be able to explicitly control
400
- * which UI orientations are allowed.
401
- *
402
- * This variable is a space delimited list of the following values:
403
- * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown"
404
- */
405
- #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS"
406
-
407
- /**
408
- * \brief A variable controlling whether controllers used with the Apple TV
409
- * generate UI events.
410
- *
411
- * When UI events are generated by controller input, the app will be
412
- * backgrounded when the Apple TV remote's menu button is pressed, and when the
413
- * pause or B buttons on gamepads are pressed.
414
- *
415
- * More information about properly making use of controllers for the Apple TV
416
- * can be found here:
417
- * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
418
- *
419
- * This variable can be set to the following values:
420
- * "0" - Controller input does not generate UI events (the default).
421
- * "1" - Controller input generates UI events.
551
+ * The variable can be set to the following values:
552
+ * "0" - SDL_TEXTEDITING events are sent, and it is the application's
553
+ * responsibility to render the text from these events and
554
+ * differentiate it somehow from committed text. (default)
555
+ * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent,
556
+ * and text that is being composed will be rendered in its own UI.
422
557
  */
423
- #define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS"
558
+ #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING"
424
559
 
425
560
  /**
426
- * \brief A variable controlling whether the Apple TV remote's joystick axes
427
- * will automatically match the rotation of the remote.
561
+ * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them.
428
562
  *
429
- * This variable can be set to the following values:
430
- * "0" - Remote orientation does not affect joystick axes (the default).
431
- * "1" - Joystick axes are based on the orientation of the remote.
563
+ * The variable can be set to the following values:
564
+ * "0" - Native UI components are not display. (default)
565
+ * "1" - Native UI components are displayed.
432
566
  */
433
- #define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION"
567
+ #define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI"
434
568
 
435
569
  /**
436
570
  * \brief A variable controlling whether the home indicator bar on iPhone X
@@ -443,132 +577,6 @@ extern "C" {
443
577
  */
444
578
  #define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR"
445
579
 
446
- /**
447
- * \brief A variable controlling whether the Android / iOS built-in
448
- * accelerometer should be listed as a joystick device.
449
- *
450
- * This variable can be set to the following values:
451
- * "0" - The accelerometer is not listed as a joystick
452
- * "1" - The accelerometer is available as a 3 axis joystick (the default).
453
- */
454
- #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK"
455
-
456
- /**
457
- * \brief A variable controlling whether the Android / tvOS remotes
458
- * should be listed as joystick devices, instead of sending keyboard events.
459
- *
460
- * This variable can be set to the following values:
461
- * "0" - Remotes send enter/escape/arrow key events
462
- * "1" - Remotes are available as 2 axis, 2 button joysticks (the default).
463
- */
464
- #define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK"
465
-
466
- /**
467
- * \brief A variable that lets you disable the detection and use of Xinput gamepad devices
468
- *
469
- * The variable can be set to the following values:
470
- * "0" - Disable XInput detection (only uses direct input)
471
- * "1" - Enable XInput detection (the default)
472
- */
473
- #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED"
474
-
475
- /**
476
- * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices.
477
- *
478
- * This hint is for backwards compatibility only and will be removed in SDL 2.1
479
- *
480
- * The default value is "0". This hint must be set before SDL_Init()
481
- */
482
- #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING"
483
-
484
- /**
485
- * \brief A variable that overrides the automatic controller type detection
486
- *
487
- * The variable should be comma separated entries, in the form: VID/PID=type
488
- *
489
- * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
490
- *
491
- * The type should be one of:
492
- * Xbox360
493
- * XboxOne
494
- * PS3
495
- * PS4
496
- * PS5
497
- * SwitchPro
498
- *
499
- * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
500
- */
501
- #define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE"
502
-
503
- /**
504
- * \brief A variable that lets you manually hint extra gamecontroller db entries.
505
- *
506
- * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h
507
- *
508
- * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
509
- * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
510
- */
511
- #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG"
512
-
513
- /**
514
- * \brief A variable that lets you provide a file with extra gamecontroller db entries.
515
- *
516
- * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h
517
- *
518
- * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
519
- * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
520
- */
521
- #define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE"
522
-
523
- /**
524
- * \brief A variable containing a list of devices to skip when scanning for game controllers.
525
- *
526
- * The format of the string is a comma separated list of USB VID/PID pairs
527
- * in hexadecimal form, e.g.
528
- *
529
- * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
530
- *
531
- * The variable can also take the form of @file, in which case the named
532
- * file will be loaded and interpreted as the value of the variable.
533
- */
534
- #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES"
535
-
536
- /**
537
- * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable.
538
- *
539
- * The format of the string is a comma separated list of USB VID/PID pairs
540
- * in hexadecimal form, e.g.
541
- *
542
- * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
543
- *
544
- * The variable can also take the form of @file, in which case the named
545
- * file will be loaded and interpreted as the value of the variable.
546
- */
547
- #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT"
548
-
549
- /**
550
- * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout.
551
- *
552
- * For example, on Nintendo Switch controllers, normally you'd get:
553
- *
554
- * (Y)
555
- * (X) (B)
556
- * (A)
557
- *
558
- * but if this hint is set, you'll get:
559
- *
560
- * (X)
561
- * (Y) (A)
562
- * (B)
563
- *
564
- * The variable can be set to the following values:
565
- * "0" - Report the face buttons by position, as though they were on an Xbox controller.
566
- * "1" - Report the face buttons by label instead of position
567
- *
568
- * The default value is "1". This hint may be set at any time.
569
- */
570
- #define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS"
571
-
572
580
  /**
573
581
  * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
574
582
  *
@@ -594,7 +602,7 @@ extern "C" {
594
602
  #define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI"
595
603
 
596
604
  /**
597
- * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used.
605
+ * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used.
598
606
  *
599
607
  * This variable can be set to the following values:
600
608
  * "0" - HIDAPI driver is not used
@@ -602,10 +610,32 @@ extern "C" {
602
610
  *
603
611
  * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
604
612
  */
605
- #define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4"
613
+ #define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE"
614
+
615
+ /**
616
+ * \brief A variable controlling whether Switch Joy-Cons should be treated the same as Switch Pro Controllers when using the HIDAPI driver.
617
+ *
618
+ * This variable can be set to the following values:
619
+ * "0" - basic Joy-Con support with no analog input (the default)
620
+ * "1" - Joy-Cons treated as half full Pro Controllers with analog inputs and sensors
621
+ *
622
+ * This does not combine Joy-Cons into a single controller. That's up to the user.
623
+ */
624
+ #define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS"
625
+
626
+ /**
627
+ * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used.
628
+ *
629
+ * This variable can be set to the following values:
630
+ * "0" - HIDAPI driver is not used
631
+ * "1" - HIDAPI driver is used
632
+ *
633
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
634
+ */
635
+ #define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA"
606
636
 
607
637
  /**
608
- * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used.
638
+ * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used.
609
639
  *
610
640
  * This variable can be set to the following values:
611
641
  * "0" - HIDAPI driver is not used
@@ -613,7 +643,7 @@ extern "C" {
613
643
  *
614
644
  * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
615
645
  */
616
- #define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5"
646
+ #define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4"
617
647
 
618
648
  /**
619
649
  * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver.
@@ -627,11 +657,16 @@ extern "C" {
627
657
  *
628
658
  * Once extended reports are enabled, they can not be disabled without
629
659
  * power cycling the controller.
660
+ *
661
+ * For compatibility with applications written for versions of SDL prior
662
+ * to the introduction of PS5 controller support, this value will also
663
+ * control the state of extended reports on PS5 controllers when the
664
+ * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set.
630
665
  */
631
666
  #define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE"
632
667
 
633
668
  /**
634
- * \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used.
669
+ * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used.
635
670
  *
636
671
  * This variable can be set to the following values:
637
672
  * "0" - HIDAPI driver is not used
@@ -639,10 +674,38 @@ extern "C" {
639
674
  *
640
675
  * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
641
676
  */
642
- #define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM"
677
+ #define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5"
643
678
 
644
679
  /**
645
- * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used.
680
+ * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller.
681
+ *
682
+ * This variable can be set to the following values:
683
+ * "0" - player LEDs are not enabled
684
+ * "1" - player LEDs are enabled (the default)
685
+ */
686
+ #define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED"
687
+
688
+ /**
689
+ * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver.
690
+ *
691
+ * This variable can be set to the following values:
692
+ * "0" - extended reports are not enabled (the default)
693
+ * "1" - extended reports
694
+ *
695
+ * Extended input reports allow rumble on Bluetooth PS5 controllers, but
696
+ * break DirectInput handling for applications that don't use SDL.
697
+ *
698
+ * Once extended reports are enabled, they can not be disabled without
699
+ * power cycling the controller.
700
+ *
701
+ * For compatibility with applications written for versions of SDL prior
702
+ * to the introduction of PS5 controller support, this value defaults to
703
+ * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE.
704
+ */
705
+ #define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE"
706
+
707
+ /**
708
+ * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used.
646
709
  *
647
710
  * This variable can be set to the following values:
648
711
  * "0" - HIDAPI driver is not used
@@ -650,34 +713,22 @@ extern "C" {
650
713
  *
651
714
  * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
652
715
  */
653
- #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH"
716
+ #define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA"
654
717
 
655
718
  /**
656
- * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used.
719
+ * \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used.
657
720
  *
658
721
  * This variable can be set to the following values:
659
722
  * "0" - HIDAPI driver is not used
660
- * "1" - HIDAPI driver is used
723
+ * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access
724
+ * and may prompt the user for permission on iOS and Android.
661
725
  *
662
- * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI
726
+ * The default is "0"
663
727
  */
664
- #define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX"
665
-
666
- /**
667
- * \brief A variable controlling whether the HIDAPI driver for XBox controllers on Windows should pull correlated
668
- * data from XInput.
669
- *
670
- * This variable can be set to the following values:
671
- * "0" - HIDAPI Xbox driver will only use HIDAPI data
672
- * "1" - HIDAPI Xbox driver will also pull data from XInput, providing better trigger axes, guide button
673
- * presses, and rumble support
674
- *
675
- * The default is "1". This hint applies to any joysticks opened after setting the hint.
676
- */
677
- #define SDL_HINT_JOYSTICK_HIDAPI_CORRELATE_XINPUT "SDL_JOYSTICK_HIDAPI_CORRELATE_XINPUT"
728
+ #define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM"
678
729
 
679
730
  /**
680
- * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used.
731
+ * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used.
681
732
  *
682
733
  * This variable can be set to the following values:
683
734
  * "0" - HIDAPI driver is not used
@@ -685,18 +736,29 @@ extern "C" {
685
736
  *
686
737
  * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
687
738
  */
688
- #define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE"
739
+ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH"
689
740
 
690
741
  /**
691
- * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs
742
+ * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch controller is opened
692
743
  *
693
- * The variable can be set to the following values:
694
- * "0" - Do not scan for Steam Controllers
695
- * "1" - Scan for Steam Controllers (the default)
744
+ * This variable can be set to the following values:
745
+ * "0" - home button LED is turned off
746
+ * "1" - home button LED is turned on
696
747
  *
697
- * The default value is "1". This hint must be set before initializing the joystick subsystem.
748
+ * By default the Home button LED state is not changed.
698
749
  */
699
- #define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS"
750
+ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED"
751
+
752
+ /**
753
+ * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used.
754
+ *
755
+ * This variable can be set to the following values:
756
+ * "0" - HIDAPI driver is not used
757
+ * "1" - HIDAPI driver is used
758
+ *
759
+ * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI
760
+ */
761
+ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX"
700
762
 
701
763
  /**
702
764
  * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices.
@@ -708,6 +770,19 @@ extern "C" {
708
770
  */
709
771
  #define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT"
710
772
 
773
+ /**
774
+ * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput.
775
+ *
776
+ * This variable can be set to the following values:
777
+ * "0" - RAWINPUT driver will only use data from raw input APIs
778
+ * "1" - RAWINPUT driver will also pull data from XInput, providing
779
+ * better trigger axes, guide button presses, and rumble support
780
+ * for Xbox controllers
781
+ *
782
+ * The default is "1". This hint applies to any joysticks opened after setting the hint.
783
+ */
784
+ #define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT"
785
+
711
786
  /**
712
787
  * \brief A variable controlling whether a separate thread should be used
713
788
  * for handling joystick detection and raw input messages on Windows
@@ -719,369 +794,372 @@ extern "C" {
719
794
  */
720
795
  #define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD"
721
796
 
722
- /**
723
- * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values.
724
- *
725
- * This variable can be set to the following values:
726
- * "0" - Return unfiltered joystick axis values (the default)
727
- * "1" - Return axis values with deadzones taken into account
797
+ /**
798
+ * \brief Determines whether SDL enforces that DRM master is required in order
799
+ * to initialize the KMSDRM video backend.
800
+ *
801
+ * The DRM subsystem has a concept of a "DRM master" which is a DRM client that
802
+ * has the ability to set planes, set cursor, etc. When SDL is DRM master, it
803
+ * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL
804
+ * is still able to process input and query attributes of attached displays,
805
+ * but it cannot change display state or draw to the screen directly.
806
+ *
807
+ * In some cases, it can be useful to have the KMSDRM backend even if it cannot
808
+ * be used for rendering. An app may want to use SDL for input processing while
809
+ * using another rendering API (such as an MMAL overlay on Raspberry Pi) or
810
+ * using its own code to render to DRM overlays that SDL doesn't support.
811
+ *
812
+ * This hint must be set before initializing the video subsystem.
813
+ *
814
+ * This variable can be set to the following values:
815
+ * "0" - SDL will allow usage of the KMSDRM backend without DRM master
816
+ * "1" - SDL Will require DRM master to use the KMSDRM backend (default)
817
+ */
818
+ #define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER"
819
+
820
+ /**
821
+ * \brief A comma separated list of devices to open as joysticks
822
+ *
823
+ * This variable is currently only used by the Linux joystick driver.
824
+ */
825
+ #define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE"
826
+
827
+ /**
828
+ * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux
829
+ *
830
+ * This variable can be set to the following values:
831
+ * "0" - Use /dev/input/event*
832
+ * "1" - Use /dev/input/js*
833
+ *
834
+ * By default the /dev/input/event* interfaces are used
835
+ */
836
+ #define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC"
837
+
838
+ /**
839
+ * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values.
840
+ *
841
+ * This variable can be set to the following values:
842
+ * "0" - Return unfiltered joystick axis values (the default)
843
+ * "1" - Return axis values with deadzones taken into account
728
844
  */
729
845
  #define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES"
730
846
 
731
847
  /**
732
- * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it.
733
- * This is a debugging aid for developers and not expected to be used by end users. The default is "1"
734
- *
735
- * This variable can be set to the following values:
736
- * "0" - don't allow topmost
737
- * "1" - allow topmost
738
- */
739
- #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST"
848
+ * \brief When set don't force the SDL app to become a foreground process
849
+ *
850
+ * This hint only applies to Mac OS X.
851
+ *
852
+ */
853
+ #define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP"
740
854
 
741
855
  /**
742
- * \brief A variable that controls the timer resolution, in milliseconds.
743
- *
744
- * The higher resolution the timer, the more frequently the CPU services
745
- * timer interrupts, and the more precise delays are, but this takes up
746
- * power and CPU time. This hint is only used on Windows 7 and earlier.
747
- *
748
- * See this blog post for more information:
749
- * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
750
- *
751
- * If this variable is set to "0", the system timer resolution is not set.
856
+ * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac
752
857
  *
753
- * The default value is "1". This hint may be set at any time.
858
+ * If present, holding ctrl while left clicking will generate a right click
859
+ * event when on Mac.
754
860
  */
755
- #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION"
861
+ #define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK"
756
862
 
863
+ /**
864
+ * \brief A variable setting the double click radius, in pixels.
865
+ */
866
+ #define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS"
757
867
 
758
868
  /**
759
- * \brief A variable describing the content orientation on QtWayland-based platforms.
760
- *
761
- * On QtWayland platforms, windows are rotated client-side to allow for custom
762
- * transitions. In order to correctly position overlays (e.g. volume bar) and
763
- * gestures (e.g. events view, close/minimize gestures), the system needs to
764
- * know in which orientation the application is currently drawing its contents.
765
- *
766
- * This does not cause the window to be rotated or resized, the application
767
- * needs to take care of drawing the content in the right orientation (the
768
- * framebuffer is always in portrait mode).
769
- *
770
- * This variable can be one of the following values:
771
- * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape"
869
+ * \brief A variable setting the double click time, in milliseconds.
772
870
  */
773
- #define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION"
871
+ #define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME"
774
872
 
775
873
  /**
776
- * \brief Flags to set on QtWayland windows to integrate with the native window manager.
874
+ * \brief Allow mouse click events when clicking to focus an SDL window
777
875
  *
778
- * On QtWayland platforms, this hint controls the flags to set on the windows.
779
- * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures.
876
+ * This variable can be set to the following values:
877
+ * "0" - Ignore mouse clicks that activate a window
878
+ * "1" - Generate events for mouse clicks that activate a window
780
879
  *
781
- * This variable is a space-separated list of the following values (empty = no flags):
782
- * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager"
880
+ * By default SDL will ignore mouse clicks that activate a window
783
881
  */
784
- #define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS"
882
+ #define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH"
785
883
 
786
884
  /**
787
- * \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size
788
- *
789
- * Use this hint in case you need to set SDL's threads stack size to other than the default.
790
- * This is specially useful if you build SDL against a non glibc libc library (such as musl) which
791
- * provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses).
792
- * Support for this hint is currently available only in the pthread, Windows, and PSP backend.
793
- *
794
- * Instead of this hint, in 2.0.9 and later, you can use
795
- * SDL_CreateThreadWithStackSize(). This hint only works with the classic
796
- * SDL_CreateThread().
797
- */
798
- #define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE"
885
+ * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode
886
+ */
887
+ #define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE"
799
888
 
800
889
  /**
801
- * \brief A string specifying additional information to use with SDL_SetThreadPriority.
802
- *
803
- * By default SDL_SetThreadPriority will make appropriate system changes in order to
804
- * apply a thread priority. For example on systems using pthreads the scheduler policy
805
- * is changed automatically to a policy that works well with a given priority.
806
- * Code which has specific requirements can override SDL's default behavior with this hint.
807
- *
808
- * pthread hint values are "current", "other", "fifo" and "rr".
809
- * Currently no other platform hint values are defined but may be in the future.
810
- *
811
- * \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro
812
- * configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME
813
- * after calling SDL_SetThreadPriority().
814
- */
815
- #define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY"
890
+ * \brief A variable controlling whether relative mouse mode is implemented using mouse warping
891
+ *
892
+ * This variable can be set to the following values:
893
+ * "0" - Relative mouse mode uses raw input
894
+ * "1" - Relative mouse mode uses mouse warping
895
+ *
896
+ * By default SDL will use raw input for relative mouse mode
897
+ */
898
+ #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP"
816
899
 
817
900
  /**
818
- * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime.
901
+ * \brief A variable controlling whether relative mouse motion is affected by renderer scaling
819
902
  *
820
- * On some platforms, like Linux, a realtime priority thread may be subject to restrictions
821
- * that require special handling by the application. This hint exists to let SDL know that
822
- * the app is prepared to handle said restrictions.
823
- *
824
- * On Linux, SDL will apply the following configuration to any thread that becomes realtime:
825
- * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy,
826
- * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
827
- * * Exceeding this limit will result in the kernel sending SIGKILL to the app,
828
- * * Refer to the man pages for more information.
829
- *
830
903
  * This variable can be set to the following values:
831
- * "0" - default platform specific behaviour
832
- * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy
904
+ * "0" - Relative motion is unaffected by DPI or renderer's logical size
905
+ * "1" - Relative motion is scaled according to DPI scaling and logical size
906
+ *
907
+ * By default relative mouse deltas are affected by DPI and renderer scaling
833
908
  */
834
- #define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL"
909
+ #define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING"
835
910
 
836
911
  /**
837
- * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
912
+ * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode
838
913
  */
839
- #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED"
914
+ #define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE"
840
915
 
841
916
  /**
842
- * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac
917
+ * \brief A variable controlling whether mouse events should generate synthetic touch events
843
918
  *
844
- * If present, holding ctrl while left clicking will generate a right click
845
- * event when on Mac.
919
+ * This variable can be set to the following values:
920
+ * "0" - Mouse events will not generate touch events (default for desktop platforms)
921
+ * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS)
846
922
  */
847
- #define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK"
923
+ #define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS"
848
924
 
849
925
  /**
850
- * \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
851
- *
852
- * SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It
853
- * can use two different sets of binaries, those compiled by the user from source
854
- * or those provided by the Chrome browser. In the later case, these binaries require
855
- * that SDL loads a DLL providing the shader compiler.
856
- *
857
- * This variable can be set to the following values:
858
- * "d3dcompiler_46.dll" - default, best for Vista or later.
859
- * "d3dcompiler_43.dll" - for XP support.
860
- * "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.
861
- *
862
- */
863
- #define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER"
926
+ * \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
927
+ *
928
+ * This hint only applies to Unix-like platforms, and should set before
929
+ * any calls to SDL_Init()
930
+ *
931
+ * The variable can be set to the following values:
932
+ * "0" - SDL will install a SIGINT and SIGTERM handler, and when it
933
+ * catches a signal, convert it into an SDL_QUIT event.
934
+ * "1" - SDL will not install a signal handler at all.
935
+ */
936
+ #define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS"
864
937
 
865
938
  /**
866
- * \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
867
- *
868
- * If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has
869
- * SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly
870
- * created SDL_Window:
871
- *
872
- * 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is
873
- * needed for example when sharing an OpenGL context across multiple windows.
874
- *
875
- * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for
876
- * OpenGL rendering.
877
- *
878
- * This variable can be set to the following values:
879
- * The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should
880
- * share a pixel format with.
881
- */
882
- #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT"
939
+ * \brief A variable controlling what driver to use for OpenGL ES contexts.
940
+ *
941
+ * On some platforms, currently Windows and X11, OpenGL drivers may support
942
+ * creating contexts with an OpenGL ES profile. By default SDL uses these
943
+ * profiles, when available, otherwise it attempts to load an OpenGL ES
944
+ * library, e.g. that provided by the ANGLE project. This variable controls
945
+ * whether SDL follows this default behaviour or will always load an
946
+ * OpenGL ES library.
947
+ *
948
+ * Circumstances where this is useful include
949
+ * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE,
950
+ * or emulator, e.g. those from ARM, Imagination or Qualcomm.
951
+ * - Resolving OpenGL ES function addresses at link time by linking with
952
+ * the OpenGL ES library instead of querying them at run time with
953
+ * SDL_GL_GetProcAddress().
954
+ *
955
+ * Caution: for an application to work with the default behaviour across
956
+ * different OpenGL drivers it must query the OpenGL ES function
957
+ * addresses at run time using SDL_GL_GetProcAddress().
958
+ *
959
+ * This variable is ignored on most platforms because OpenGL ES is native
960
+ * or not supported.
961
+ *
962
+ * This variable can be set to the following values:
963
+ * "0" - Use ES profile of OpenGL, if available. (Default when not set.)
964
+ * "1" - Load OpenGL ES library using the default library names.
965
+ *
966
+ */
967
+ #define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER"
883
968
 
884
969
  /**
885
- * \brief A URL to a WinRT app's privacy policy
970
+ * \brief A variable controlling which orientations are allowed on iOS/Android.
886
971
  *
887
- * All network-enabled WinRT apps must make a privacy policy available to its
888
- * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be
889
- * be available in the Windows Settings charm, as accessed from within the app.
890
- * SDL provides code to add a URL-based link there, which can point to the app's
891
- * privacy policy.
972
+ * In some circumstances it is necessary to be able to explicitly control
973
+ * which UI orientations are allowed.
892
974
  *
893
- * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
894
- * before calling any SDL_Init() functions. The contents of the hint should
895
- * be a valid URL. For example, "http://www.example.com".
975
+ * This variable is a space delimited list of the following values:
976
+ * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown"
977
+ */
978
+ #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS"
979
+
980
+ /**
981
+ * \brief A variable controlling the use of a sentinel event when polling the event queue
896
982
  *
897
- * The default value is "", which will prevent SDL from adding a privacy policy
898
- * link to the Settings charm. This hint should only be set during app init.
983
+ * This variable can be set to the following values:
984
+ * "0" - Disable poll sentinels
985
+ * "1" - Enable poll sentinels
899
986
  *
900
- * The label text of an app's "Privacy Policy" link may be customized via another
901
- * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
987
+ * When polling for events, SDL_PumpEvents is used to gather new events from devices.
988
+ * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will
989
+ * become stuck until the new events stop.
990
+ * This is most noticable when moving a high frequency mouse.
902
991
  *
903
- * Please note that on Windows Phone, Microsoft does not provide standard UI
904
- * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL
905
- * will not get used on that platform. Network-enabled phone apps should display
906
- * their privacy policy through some other, in-app means.
992
+ * By default, poll sentinels are enabled.
907
993
  */
908
- #define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL"
994
+ #define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL"
909
995
 
910
- /** \brief Label text for a WinRT app's privacy policy link
996
+ /**
997
+ * \brief Override for SDL_GetPreferredLocales()
911
998
  *
912
- * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT,
913
- * Microsoft mandates that this policy be available via the Windows Settings charm.
914
- * SDL provides code to add a link there, with its label text being set via the
915
- * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
999
+ * If set, this will be favored over anything the OS might report for the
1000
+ * user's preferred locales. Changing this hint at runtime will not generate
1001
+ * a SDL_LOCALECHANGED event (but if you can change the hint, you can push
1002
+ * your own event, if you want).
916
1003
  *
917
- * Please note that a privacy policy's contents are not set via this hint. A separate
918
- * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the
919
- * policy.
1004
+ * The format of this hint is a comma-separated list of language and locale,
1005
+ * combined with an underscore, as is a common format: "en_GB". Locale is
1006
+ * optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
1007
+ */
1008
+ #define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES"
1009
+
1010
+ /**
1011
+ * \brief A variable describing the content orientation on QtWayland-based platforms.
920
1012
  *
921
- * The contents of this hint should be encoded as a UTF8 string.
1013
+ * On QtWayland platforms, windows are rotated client-side to allow for custom
1014
+ * transitions. In order to correctly position overlays (e.g. volume bar) and
1015
+ * gestures (e.g. events view, close/minimize gestures), the system needs to
1016
+ * know in which orientation the application is currently drawing its contents.
922
1017
  *
923
- * The default value is "Privacy Policy". This hint should only be set during app
924
- * initialization, preferably before any calls to SDL_Init().
1018
+ * This does not cause the window to be rotated or resized, the application
1019
+ * needs to take care of drawing the content in the right orientation (the
1020
+ * framebuffer is always in portrait mode).
925
1021
  *
926
- * For additional information on linking to a privacy policy, see the documentation for
927
- * SDL_HINT_WINRT_PRIVACY_POLICY_URL.
1022
+ * This variable can be one of the following values:
1023
+ * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape"
928
1024
  */
929
- #define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL"
1025
+ #define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION"
930
1026
 
931
- /** \brief Allows back-button-press events on Windows Phone to be marked as handled
932
- *
933
- * Windows Phone devices typically feature a Back button. When pressed,
934
- * the OS will emit back-button-press events, which apps are expected to
935
- * handle in an appropriate manner. If apps do not explicitly mark these
936
- * events as 'Handled', then the OS will invoke its default behavior for
937
- * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to
938
- * terminate the app (and attempt to switch to the previous app, or to the
939
- * device's home screen).
1027
+ /**
1028
+ * \brief Flags to set on QtWayland windows to integrate with the native window manager.
940
1029
  *
941
- * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL
942
- * to mark back-button-press events as Handled, if and when one is sent to
943
- * the app.
1030
+ * On QtWayland platforms, this hint controls the flags to set on the windows.
1031
+ * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures.
944
1032
  *
945
- * Internally, Windows Phone sends back button events as parameters to
946
- * special back-button-press callback functions. Apps that need to respond
947
- * to back-button-press events are expected to register one or more
948
- * callback functions for such, shortly after being launched (during the
949
- * app's initialization phase). After the back button is pressed, the OS
950
- * will invoke these callbacks. If the app's callback(s) do not explicitly
951
- * mark the event as handled by the time they return, or if the app never
952
- * registers one of these callback, the OS will consider the event
953
- * un-handled, and it will apply its default back button behavior (terminate
954
- * the app).
1033
+ * This variable is a space-separated list of the following values (empty = no flags):
1034
+ * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager"
1035
+ */
1036
+ #define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS"
1037
+
1038
+ /**
1039
+ * \brief A variable controlling whether the 2D render API is compatible or efficient.
955
1040
  *
956
- * SDL registers its own back-button-press callback with the Windows Phone
957
- * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN
958
- * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which
959
- * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON.
960
- * If the hint's value is set to "1", the back button event's Handled
961
- * property will get set to 'true'. If the hint's value is set to something
962
- * else, or if it is unset, SDL will leave the event's Handled property
963
- * alone. (By default, the OS sets this property to 'false', to note.)
1041
+ * This variable can be set to the following values:
964
1042
  *
965
- * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a
966
- * back button is pressed, or can set it in direct-response to a back button
967
- * being pressed.
1043
+ * "0" - Don't use batching to make rendering more efficient.
1044
+ * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls.
968
1045
  *
969
- * In order to get notified when a back button is pressed, SDL apps should
970
- * register a callback function with SDL_AddEventWatch(), and have it listen
971
- * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK.
972
- * (Alternatively, SDL_KEYUP events can be listened-for. Listening for
973
- * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON
974
- * set by such a callback, will be applied to the OS' current
975
- * back-button-press event.
1046
+ * Up to SDL 2.0.9, the render API would draw immediately when requested. Now
1047
+ * it batches up draw requests and sends them all to the GPU only when forced
1048
+ * to (during SDL_RenderPresent, when changing render targets, by updating a
1049
+ * texture that the batch needs, etc). This is significantly more efficient,
1050
+ * but it can cause problems for apps that expect to render on top of the
1051
+ * render API's output. As such, SDL will disable batching if a specific
1052
+ * render backend is requested (since this might indicate that the app is
1053
+ * planning to use the underlying graphics API directly). This hint can
1054
+ * be used to explicitly request batching in this instance. It is a contract
1055
+ * that you will either never use the underlying graphics API directly, or
1056
+ * if you do, you will call SDL_RenderFlush() before you do so any current
1057
+ * batch goes to the GPU before your work begins. Not following this contract
1058
+ * will result in undefined behavior.
1059
+ */
1060
+ #define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING"
1061
+
1062
+ /**
1063
+ * \brief A variable controlling how the 2D render API renders lines
976
1064
  *
977
- * More details on back button behavior in Windows Phone apps can be found
978
- * at the following page, on Microsoft's developer site:
979
- * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx
1065
+ * This variable can be set to the following values:
1066
+ * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20)
1067
+ * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points)
1068
+ * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20)
1069
+ * "3" - Use the driver geometry API (correct, draws thicker diagonal lines)
1070
+ *
1071
+ * This variable should be set when the renderer is created.
980
1072
  */
981
- #define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON"
1073
+ #define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD"
982
1074
 
983
1075
  /**
984
- * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X.
1076
+ * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer.
985
1077
  *
986
- * This hint only applies to Mac OS X.
1078
+ * This variable does not have any effect on the Direct3D 9 based renderer.
987
1079
  *
988
- * The variable can be set to the following values:
989
- * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
990
- * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
991
- * button on their titlebars).
992
- * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and
993
- * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
994
- * button on their titlebars).
1080
+ * This variable can be set to the following values:
1081
+ * "0" - Disable Debug Layer use
1082
+ * "1" - Enable Debug Layer use
995
1083
  *
996
- * The default value is "1". Spaces are disabled regardless of this hint if
997
- * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before
998
- * any windows are created.
1084
+ * By default, SDL does not use Direct3D Debug Layer.
999
1085
  */
1000
- #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES"
1001
-
1002
- /**
1003
- * \brief When set don't force the SDL app to become a foreground process
1004
- *
1005
- * This hint only applies to Mac OS X.
1006
- *
1007
- */
1008
- #define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP"
1086
+ #define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG"
1009
1087
 
1010
1088
  /**
1011
- * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc.
1012
- *
1013
- * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
1089
+ * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations.
1014
1090
  *
1015
- * If both hints were set then SDL_RWFromFile() will look into expansion files
1016
- * after a given relative path was not found in the internal storage and assets.
1091
+ * This variable can be set to the following values:
1092
+ * "0" - Thread-safety is not enabled (faster)
1093
+ * "1" - Thread-safety is enabled
1017
1094
  *
1018
- * By default this hint is not set and the APK expansion files are not searched.
1095
+ * By default the Direct3D device is created with thread-safety disabled.
1019
1096
  */
1020
- #define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION"
1021
-
1097
+ #define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE"
1098
+
1022
1099
  /**
1023
- * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc.
1100
+ * \brief A variable specifying which render driver to use.
1024
1101
  *
1025
- * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.
1102
+ * If the application doesn't pick a specific renderer to use, this variable
1103
+ * specifies the name of the preferred renderer. If the preferred renderer
1104
+ * can't be initialized, the normal default renderer is used.
1026
1105
  *
1027
- * If both hints were set then SDL_RWFromFile() will look into expansion files
1028
- * after a given relative path was not found in the internal storage and assets.
1106
+ * This variable is case insensitive and can be set to the following values:
1107
+ * "direct3d"
1108
+ * "opengl"
1109
+ * "opengles2"
1110
+ * "opengles"
1111
+ * "metal"
1112
+ * "software"
1029
1113
  *
1030
- * By default this hint is not set and the APK expansion files are not searched.
1114
+ * The default varies by platform, but it's the first one in the list that
1115
+ * is available on the current platform.
1031
1116
  */
1032
- #define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION"
1117
+ #define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER"
1033
1118
 
1034
1119
  /**
1035
- * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.
1120
+ * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize.
1036
1121
  *
1037
- * The variable can be set to the following values:
1038
- * "0" - SDL_TEXTEDITING events are sent, and it is the application's
1039
- * responsibility to render the text from these events and
1040
- * differentiate it somehow from committed text. (default)
1041
- * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent,
1042
- * and text that is being composed will be rendered in its own UI.
1122
+ * This variable can be set to the following values:
1123
+ * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen
1124
+ * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen
1125
+ *
1126
+ * By default letterbox is used
1043
1127
  */
1044
- #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING"
1128
+ #define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE"
1045
1129
 
1046
1130
  /**
1047
- * \brief A variable to control whether we trap the Android back button to handle it manually.
1048
- * This is necessary for the right mouse button to work on some Android devices, or
1049
- * to be able to trap the back button for use in your code reliably. If set to true,
1050
- * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of
1051
- * SDL_SCANCODE_AC_BACK.
1131
+ * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available.
1052
1132
  *
1053
- * The variable can be set to the following values:
1054
- * "0" - Back button will be handled as usual for system. (default)
1055
- * "1" - Back button will be trapped, allowing you to handle the key press
1056
- * manually. (This will also let right mouse click work on systems
1057
- * where the right mouse button functions as back.)
1133
+ * This variable can be set to the following values:
1134
+ * "0" - Disable shaders
1135
+ * "1" - Enable shaders
1058
1136
  *
1059
- * The value of this hint is used at runtime, so it can be changed at any time.
1137
+ * By default shaders are used if OpenGL supports them.
1060
1138
  */
1061
- #define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON"
1139
+ #define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS"
1062
1140
 
1063
1141
  /**
1064
- * \brief A variable to control whether the event loop will block itself when the app is paused.
1142
+ * \brief A variable controlling the scaling quality
1065
1143
  *
1066
- * The variable can be set to the following values:
1067
- * "0" - Non blocking.
1068
- * "1" - Blocking. (default)
1144
+ * This variable can be set to the following values:
1145
+ * "0" or "nearest" - Nearest pixel sampling
1146
+ * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D)
1147
+ * "2" or "best" - Currently this is the same as "linear"
1069
1148
  *
1070
- * The value should be set before SDL is initialized.
1149
+ * By default nearest pixel sampling is used
1071
1150
  */
1072
- #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE"
1151
+ #define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY"
1073
1152
 
1074
1153
  /**
1075
- * \brief A variable to control whether SDL will pause audio in background
1076
- * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
1154
+ * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing.
1077
1155
  *
1078
- * The variable can be set to the following values:
1079
- * "0" - Non paused.
1080
- * "1" - Paused. (default)
1156
+ * This variable can be set to the following values:
1157
+ * "0" - Disable vsync
1158
+ * "1" - Enable vsync
1081
1159
  *
1082
- * The value should be set before SDL is initialized.
1160
+ * By default SDL does not sync screen surface updates with vertical refresh.
1083
1161
  */
1084
- #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO"
1162
+ #define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC"
1085
1163
 
1086
1164
  /**
1087
1165
  * \brief A variable to control whether the return key on the soft keyboard
@@ -1096,98 +1174,130 @@ extern "C" {
1096
1174
  #define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME"
1097
1175
 
1098
1176
  /**
1099
- * \brief override the binding element for keyboard inputs for Emscripten builds
1100
- *
1101
- * This hint only applies to the emscripten platform
1177
+ * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI
1102
1178
  *
1103
- * The variable can be one of
1104
- * "#window" - The javascript window object (this is the default)
1105
- * "#document" - The javascript document object
1106
- * "#screen" - the javascript window.screen object
1107
- * "#canvas" - the WebGL canvas element
1108
- * any other string without a leading # sign applies to the element on the page with that ID.
1179
+ * Also known as Z-order. The variable can take a negative or positive value.
1180
+ * The default is 10000.
1109
1181
  */
1110
- #define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
1182
+ #define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER"
1111
1183
 
1112
1184
  /**
1113
- * \brief Disable giving back control to the browser automatically
1114
- * when running with asyncify
1185
+ * \brief Specify an "activity name" for screensaver inhibition.
1115
1186
  *
1116
- * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations
1117
- * such as refreshing the screen or polling events.
1187
+ * Some platforms, notably Linux desktops, list the applications which are
1188
+ * inhibiting the screensaver or other power-saving features.
1118
1189
  *
1119
- * This hint only applies to the emscripten platform
1190
+ * This hint lets you specify the "activity name" sent to the OS when
1191
+ * SDL_DisableScreenSaver() is used (or the screensaver is automatically
1192
+ * disabled). The contents of this hint are used when the screensaver is
1193
+ * disabled. You should use a string that describes what your program is doing
1194
+ * (and, therefore, why the screensaver is disabled). For example, "Playing a
1195
+ * game" or "Watching a video".
1196
+ *
1197
+ * Setting this to "" or leaving it unset will have SDL use a reasonable
1198
+ * default: "Playing a game" or something similar.
1120
1199
  *
1121
- * The variable can be set to the following values:
1122
- * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
1123
- * "1" - Enable emscripten_sleep calls (the default)
1200
+ * On targets where this is not supported, this hint does nothing.
1124
1201
  */
1125
- #define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY"
1202
+ #define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME"
1126
1203
 
1127
1204
  /**
1128
- * \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
1129
- *
1130
- * This hint only applies to Unix-like platforms, and should set before
1131
- * any calls to SDL_Init()
1205
+ * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime.
1132
1206
  *
1133
- * The variable can be set to the following values:
1134
- * "0" - SDL will install a SIGINT and SIGTERM handler, and when it
1135
- * catches a signal, convert it into an SDL_QUIT event.
1136
- * "1" - SDL will not install a signal handler at all.
1207
+ * On some platforms, like Linux, a realtime priority thread may be subject to restrictions
1208
+ * that require special handling by the application. This hint exists to let SDL know that
1209
+ * the app is prepared to handle said restrictions.
1210
+ *
1211
+ * On Linux, SDL will apply the following configuration to any thread that becomes realtime:
1212
+ * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy,
1213
+ * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
1214
+ * * Exceeding this limit will result in the kernel sending SIGKILL to the app,
1215
+ * * Refer to the man pages for more information.
1216
+ *
1217
+ * This variable can be set to the following values:
1218
+ * "0" - default platform specific behaviour
1219
+ * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy
1137
1220
  */
1138
- #define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS"
1221
+ #define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL"
1139
1222
 
1140
1223
  /**
1141
- * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows.
1224
+ * \brief A string specifying additional information to use with SDL_SetThreadPriority.
1225
+ *
1226
+ * By default SDL_SetThreadPriority will make appropriate system changes in order to
1227
+ * apply a thread priority. For example on systems using pthreads the scheduler policy
1228
+ * is changed automatically to a policy that works well with a given priority.
1229
+ * Code which has specific requirements can override SDL's default behavior with this hint.
1230
+ *
1231
+ * pthread hint values are "current", "other", "fifo" and "rr".
1232
+ * Currently no other platform hint values are defined but may be in the future.
1233
+ *
1234
+ * \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro
1235
+ * configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME
1236
+ * after calling SDL_SetThreadPriority().
1237
+ */
1238
+ #define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY"
1239
+
1240
+ /**
1241
+ * \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size
1242
+ *
1243
+ * Use this hint in case you need to set SDL's threads stack size to other than the default.
1244
+ * This is specially useful if you build SDL against a non glibc libc library (such as musl) which
1245
+ * provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses).
1246
+ * Support for this hint is currently available only in the pthread, Windows, and PSP backend.
1247
+ *
1248
+ * Instead of this hint, in 2.0.9 and later, you can use
1249
+ * SDL_CreateThreadWithStackSize(). This hint only works with the classic
1250
+ * SDL_CreateThread().
1251
+ */
1252
+ #define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE"
1253
+
1254
+ /**
1255
+ * \brief A variable that controls the timer resolution, in milliseconds.
1142
1256
  *
1143
- * The variable can be set to the following values:
1144
- * "0" - SDL will generate a window-close event when it sees Alt+F4.
1145
- * "1" - SDL will only do normal key handling for Alt+F4.
1257
+ * The higher resolution the timer, the more frequently the CPU services
1258
+ * timer interrupts, and the more precise delays are, but this takes up
1259
+ * power and CPU time. This hint is only used on Windows.
1260
+ *
1261
+ * See this blog post for more information:
1262
+ * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
1263
+ *
1264
+ * If this variable is set to "0", the system timer resolution is not set.
1265
+ *
1266
+ * The default value is "1". This hint may be set at any time.
1146
1267
  */
1147
- #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
1268
+ #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION"
1148
1269
 
1149
1270
  /**
1150
- * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
1151
- *
1152
- * The bitmap header version 4 is required for proper alpha channel support and
1153
- * SDL will use it when required. Should this not be desired, this hint can
1154
- * force the use of the 40 byte header version which is supported everywhere.
1271
+ * \brief A variable controlling whether touch events should generate synthetic mouse events
1155
1272
  *
1156
- * The variable can be set to the following values:
1157
- * "0" - Surfaces with a colorkey or an alpha channel are saved to a
1158
- * 32-bit BMP file with an alpha mask. SDL will use the bitmap
1159
- * header version 4 and set the alpha mask accordingly.
1160
- * "1" - Surfaces with a colorkey or an alpha channel are saved to a
1161
- * 32-bit BMP file without an alpha mask. The alpha channel data
1162
- * will be in the file, but applications are going to ignore it.
1273
+ * This variable can be set to the following values:
1274
+ * "0" - Touch events will not generate mouse events
1275
+ * "1" - Touch events will generate mouse events
1163
1276
  *
1164
- * The default value is "0".
1277
+ * By default SDL will generate mouse events for touch events
1165
1278
  */
1166
- #define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT"
1279
+ #define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS"
1167
1280
 
1168
1281
  /**
1169
- * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
1170
- * The 0x406D1388 Exception is a trick used to inform Visual Studio of a
1171
- * thread's name, but it tends to cause problems with other debuggers,
1172
- * and the .NET runtime. Note that SDL 2.0.6 and later will still use
1173
- * the (safer) SetThreadDescription API, introduced in the Windows 10
1174
- * Creators Update, if available.
1282
+ * \brief A variable controlling whether the Android / tvOS remotes
1283
+ * should be listed as joystick devices, instead of sending keyboard events.
1175
1284
  *
1176
- * The variable can be set to the following values:
1177
- * "0" - SDL will raise the 0x406D1388 Exception to name threads.
1178
- * This is the default behavior of SDL <= 2.0.4.
1179
- * "1" - SDL will not raise this exception, and threads will be unnamed. (default)
1180
- * This is necessary with .NET languages or debuggers that aren't Visual Studio.
1285
+ * This variable can be set to the following values:
1286
+ * "0" - Remotes send enter/escape/arrow key events
1287
+ * "1" - Remotes are available as 2 axis, 2 button joysticks (the default).
1181
1288
  */
1182
- #define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING"
1289
+ #define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK"
1183
1290
 
1184
1291
  /**
1185
- * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI
1292
+ * \brief A variable controlling whether the screensaver is enabled.
1186
1293
  *
1187
- * Also known as Z-order. The variable can take a negative or positive value.
1188
- * The default is 10000.
1294
+ * This variable can be set to the following values:
1295
+ * "0" - Disable screensaver
1296
+ * "1" - Enable screensaver
1297
+ *
1298
+ * By default SDL will disable the screensaver.
1189
1299
  */
1190
- #define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER"
1300
+ #define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER"
1191
1301
 
1192
1302
  /**
1193
1303
  * \brief Tell the video driver that we only want a double buffer.
@@ -1202,154 +1312,218 @@ extern "C" {
1202
1312
  *
1203
1313
  * Since it's driver-specific, it's only supported where possible and
1204
1314
  * implemented. Currently supported the following drivers:
1315
+ *
1205
1316
  * - KMSDRM (kmsdrm)
1206
1317
  * - Raspberry Pi (raspberrypi)
1207
1318
  */
1208
1319
  #define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER"
1209
1320
 
1210
1321
  /**
1211
- * \brief A variable controlling what driver to use for OpenGL ES contexts.
1322
+ * \brief A variable controlling whether the EGL window is allowed to be
1323
+ * composited as transparent, rather than opaque.
1212
1324
  *
1213
- * On some platforms, currently Windows and X11, OpenGL drivers may support
1214
- * creating contexts with an OpenGL ES profile. By default SDL uses these
1215
- * profiles, when available, otherwise it attempts to load an OpenGL ES
1216
- * library, e.g. that provided by the ANGLE project. This variable controls
1217
- * whether SDL follows this default behaviour or will always load an
1218
- * OpenGL ES library.
1325
+ * Most window systems will always render windows opaque, even if the surface
1326
+ * format has an alpha channel. This is not always true, however, so by default
1327
+ * SDL will try to enforce opaque composition. To override this behavior, you
1328
+ * can set this hint to "1".
1329
+ */
1330
+ #define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY"
1331
+
1332
+ /**
1333
+ * \brief A variable controlling whether the graphics context is externally managed.
1219
1334
  *
1220
- * Circumstances where this is useful include
1221
- * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE,
1222
- * or emulator, e.g. those from ARM, Imagination or Qualcomm.
1223
- * - Resolving OpenGL ES function addresses at link time by linking with
1224
- * the OpenGL ES library instead of querying them at run time with
1225
- * SDL_GL_GetProcAddress().
1335
+ * This variable can be set to the following values:
1336
+ * "0" - SDL will manage graphics contexts that are attached to windows.
1337
+ * "1" - Disable graphics context management on windows.
1226
1338
  *
1227
- * Caution: for an application to work with the default behaviour across
1228
- * different OpenGL drivers it must query the OpenGL ES function
1229
- * addresses at run time using SDL_GL_GetProcAddress().
1339
+ * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the
1340
+ * context will be automatically saved and restored when pausing the application. Additionally, some
1341
+ * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
1342
+ * behavior, which is desireable when the application manages the graphics context, such as
1343
+ * an externally managed OpenGL context or attaching a Vulkan surface to the window.
1344
+ */
1345
+ #define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT"
1346
+
1347
+ /**
1348
+ * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
1349
+ */
1350
+ #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED"
1351
+
1352
+ /**
1353
+ * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X.
1230
1354
  *
1231
- * This variable is ignored on most platforms because OpenGL ES is native
1232
- * or not supported.
1355
+ * This hint only applies to Mac OS X.
1233
1356
  *
1234
- * This variable can be set to the following values:
1235
- * "0" - Use ES profile of OpenGL, if available. (Default when not set.)
1236
- * "1" - Load OpenGL ES library using the default library names.
1357
+ * The variable can be set to the following values:
1358
+ * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
1359
+ * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
1360
+ * button on their titlebars).
1361
+ * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and
1362
+ * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
1363
+ * button on their titlebars).
1237
1364
  *
1365
+ * The default value is "1". Spaces are disabled regardless of this hint if
1366
+ * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before
1367
+ * any windows are created.
1238
1368
  */
1239
- #define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER"
1369
+ #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES"
1240
1370
 
1241
1371
  /**
1242
- * \brief A variable controlling speed/quality tradeoff of audio resampling.
1243
- *
1244
- * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ )
1245
- * to handle audio resampling. There are different resampling modes available
1246
- * that produce different levels of quality, using more CPU.
1372
+ * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false.
1373
+ * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're
1374
+ * seeing if "true" causes more problems than it solves in modern times.
1247
1375
  *
1248
- * If this hint isn't specified to a valid setting, or libsamplerate isn't
1249
- * available, SDL will use the default, internal resampling algorithm.
1376
+ */
1377
+ #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS"
1378
+
1379
+ /**
1380
+ * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used.
1250
1381
  *
1251
- * Note that this is currently only applicable to resampling audio that is
1252
- * being written to a device for playback or audio being read from a device
1253
- * for capture. SDL_AudioCVT always uses the default resampler (although this
1254
- * might change for SDL 2.1).
1382
+ * This variable can be set to the following values:
1383
+ * "0" - libdecor use is disabled.
1384
+ * "1" - libdecor use is enabled (default).
1255
1385
  *
1256
- * This hint is currently only checked at audio subsystem initialization.
1386
+ * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.
1387
+ */
1388
+ #define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR"
1389
+
1390
+ /**
1391
+ * \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
1392
+ *
1393
+ * If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has
1394
+ * SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly
1395
+ * created SDL_Window:
1396
+ *
1397
+ * 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is
1398
+ * needed for example when sharing an OpenGL context across multiple windows.
1399
+ *
1400
+ * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for
1401
+ * OpenGL rendering.
1402
+ *
1403
+ * This variable can be set to the following values:
1404
+ * The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should
1405
+ * share a pixel format with.
1406
+ */
1407
+ #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT"
1408
+
1409
+ /**
1410
+ * \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
1411
+ *
1412
+ * SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It
1413
+ * can use two different sets of binaries, those compiled by the user from source
1414
+ * or those provided by the Chrome browser. In the later case, these binaries require
1415
+ * that SDL loads a DLL providing the shader compiler.
1416
+ *
1417
+ * This variable can be set to the following values:
1418
+ * "d3dcompiler_46.dll" - default, best for Vista or later.
1419
+ * "d3dcompiler_43.dll" - for XP support.
1420
+ * "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.
1421
+ *
1422
+ */
1423
+ #define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER"
1424
+
1425
+ /**
1426
+ * \brief A variable controlling whether X11 should use GLX or EGL by default
1257
1427
  *
1258
- * This variable can be set to the following values:
1428
+ * This variable can be set to the following values:
1429
+ * "0" - Use GLX
1430
+ * "1" - Use EGL
1259
1431
  *
1260
- * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast)
1261
- * "1" or "fast" - Use fast, slightly higher quality resampling, if available
1262
- * "2" or "medium" - Use medium quality resampling, if available
1263
- * "3" or "best" - Use high quality resampling, if available
1432
+ * By default SDL will use GLX when both are present.
1264
1433
  */
1265
- #define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE"
1434
+ #define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL"
1266
1435
 
1267
1436
  /**
1268
- * \brief A variable controlling the audio category on iOS and Mac OS X
1437
+ * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used.
1438
+ *
1439
+ * This variable can be set to the following values:
1440
+ * "0" - Disable _NET_WM_BYPASS_COMPOSITOR
1441
+ * "1" - Enable _NET_WM_BYPASS_COMPOSITOR
1442
+ *
1443
+ * By default SDL will use _NET_WM_BYPASS_COMPOSITOR
1444
+ *
1445
+ */
1446
+ #define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR"
1447
+
1448
+ /**
1449
+ * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported.
1269
1450
  *
1270
1451
  * This variable can be set to the following values:
1452
+ * "0" - Disable _NET_WM_PING
1453
+ * "1" - Enable _NET_WM_PING
1271
1454
  *
1272
- * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default)
1273
- * "playback" - Use the AVAudioSessionCategoryPlayback category
1455
+ * By default SDL will use _NET_WM_PING, but for applications that know they
1456
+ * will not always be able to respond to ping requests in a timely manner they can
1457
+ * turn it off to avoid the window manager thinking the app is hung.
1458
+ * The hint is checked in CreateWindow.
1459
+ */
1460
+ #define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING"
1461
+
1462
+ /**
1463
+ * \brief A variable forcing the visual ID chosen for new X11 windows
1274
1464
  *
1275
- * For more information, see Apple's documentation:
1276
- * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
1277
1465
  */
1278
- #define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY"
1466
+ #define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID"
1279
1467
 
1280
1468
  /**
1281
- * \brief A variable controlling whether the 2D render API is compatible or efficient.
1469
+ * \brief A variable controlling whether the X11 Xinerama extension should be used.
1282
1470
  *
1283
1471
  * This variable can be set to the following values:
1472
+ * "0" - Disable Xinerama
1473
+ * "1" - Enable Xinerama
1284
1474
  *
1285
- * "0" - Don't use batching to make rendering more efficient.
1286
- * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls.
1287
- *
1288
- * Up to SDL 2.0.9, the render API would draw immediately when requested. Now
1289
- * it batches up draw requests and sends them all to the GPU only when forced
1290
- * to (during SDL_RenderPresent, when changing render targets, by updating a
1291
- * texture that the batch needs, etc). This is significantly more efficient,
1292
- * but it can cause problems for apps that expect to render on top of the
1293
- * render API's output. As such, SDL will disable batching if a specific
1294
- * render backend is requested (since this might indicate that the app is
1295
- * planning to use the underlying graphics API directly). This hint can
1296
- * be used to explicitly request batching in this instance. It is a contract
1297
- * that you will either never use the underlying graphics API directly, or
1298
- * if you do, you will call SDL_RenderFlush() before you do so any current
1299
- * batch goes to the GPU before your work begins. Not following this contract
1300
- * will result in undefined behavior.
1475
+ * By default SDL will use Xinerama if it is available.
1301
1476
  */
1302
- #define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING"
1303
-
1477
+ #define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA"
1304
1478
 
1305
1479
  /**
1306
- * \brief A variable controlling whether SDL updates joystick state when getting input events
1480
+ * \brief A variable controlling whether the X11 XRandR extension should be used.
1307
1481
  *
1308
1482
  * This variable can be set to the following values:
1483
+ * "0" - Disable XRandR
1484
+ * "1" - Enable XRandR
1309
1485
  *
1310
- * "0" - You'll call SDL_JoystickUpdate() manually
1311
- * "1" - SDL will automatically call SDL_JoystickUpdate() (default)
1312
- *
1313
- * This hint can be toggled on and off at runtime.
1486
+ * By default SDL will not use XRandR because of window manager issues.
1314
1487
  */
1315
- #define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS"
1316
-
1488
+ #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR"
1317
1489
 
1318
1490
  /**
1319
- * \brief A variable controlling whether SDL updates sensor state when getting input events
1491
+ * \brief A variable controlling whether the X11 VidMode extension should be used.
1320
1492
  *
1321
1493
  * This variable can be set to the following values:
1494
+ * "0" - Disable XVidMode
1495
+ * "1" - Enable XVidMode
1322
1496
  *
1323
- * "0" - You'll call SDL_SensorUpdate() manually
1324
- * "1" - SDL will automatically call SDL_SensorUpdate() (default)
1325
- *
1326
- * This hint can be toggled on and off at runtime.
1497
+ * By default SDL will use XVidMode if it is available.
1327
1498
  */
1328
- #define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS"
1329
-
1499
+ #define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE"
1330
1500
 
1331
1501
  /**
1332
- * \brief A variable controlling whether SDL logs all events pushed onto its internal queue.
1502
+ * \brief Controls how the fact chunk affects the loading of a WAVE file.
1333
1503
  *
1334
- * This variable can be set to the following values:
1504
+ * The fact chunk stores information about the number of samples of a WAVE
1505
+ * file. The Standards Update from Microsoft notes that this value can be used
1506
+ * to 'determine the length of the data in seconds'. This is especially useful
1507
+ * for compressed formats (for which this is a mandatory chunk) if they produce
1508
+ * multiple sample frames per block and truncating the block is not allowed.
1509
+ * The fact chunk can exactly specify how many sample frames there should be
1510
+ * in this case.
1335
1511
  *
1336
- * "0" - Don't log any events (default)
1337
- * "1" - Log all events except mouse and finger motion, which are pretty spammy.
1338
- * "2" - Log all events.
1512
+ * Unfortunately, most application seem to ignore the fact chunk and so SDL
1513
+ * ignores it by default as well.
1339
1514
  *
1340
- * This is generally meant to be used to debug SDL itself, but can be useful
1341
- * for application developers that need better visibility into what is going
1342
- * on in the event queue. Logged events are sent through SDL_Log(), which
1343
- * means by default they appear on stdout on most platforms or maybe
1344
- * OutputDebugString() on Windows, and can be funneled by the app with
1345
- * SDL_LogSetOutputFunction(), etc.
1515
+ * This variable can be set to the following values:
1346
1516
  *
1347
- * This hint can be toggled on and off at runtime, if you only need to log
1348
- * events for a small subset of program execution.
1349
- */
1350
- #define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING"
1351
-
1352
-
1517
+ * "truncate" - Use the number of samples to truncate the wave data if
1518
+ * the fact chunk is present and valid
1519
+ * "strict" - Like "truncate", but raise an error if the fact chunk
1520
+ * is invalid, not present for non-PCM formats, or if the
1521
+ * data chunk doesn't have that many samples
1522
+ * "ignorezero" - Like "truncate", but ignore fact chunk if the number of
1523
+ * samples is zero
1524
+ * "ignore" - Ignore fact chunk entirely (default)
1525
+ */
1526
+ #define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK"
1353
1527
 
1354
1528
  /**
1355
1529
  * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file.
@@ -1389,101 +1563,266 @@ extern "C" {
1389
1563
  #define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION"
1390
1564
 
1391
1565
  /**
1392
- * \brief Controls how the fact chunk affects the loading of a WAVE file.
1566
+ * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
1567
+ * The 0x406D1388 Exception is a trick used to inform Visual Studio of a
1568
+ * thread's name, but it tends to cause problems with other debuggers,
1569
+ * and the .NET runtime. Note that SDL 2.0.6 and later will still use
1570
+ * the (safer) SetThreadDescription API, introduced in the Windows 10
1571
+ * Creators Update, if available.
1393
1572
  *
1394
- * The fact chunk stores information about the number of samples of a WAVE
1395
- * file. The Standards Update from Microsoft notes that this value can be used
1396
- * to 'determine the length of the data in seconds'. This is especially useful
1397
- * for compressed formats (for which this is a mandatory chunk) if they produce
1398
- * multiple sample frames per block and truncating the block is not allowed.
1399
- * The fact chunk can exactly specify how many sample frames there should be
1400
- * in this case.
1573
+ * The variable can be set to the following values:
1574
+ * "0" - SDL will raise the 0x406D1388 Exception to name threads.
1575
+ * This is the default behavior of SDL <= 2.0.4.
1576
+ * "1" - SDL will not raise this exception, and threads will be unnamed. (default)
1577
+ * This is necessary with .NET languages or debuggers that aren't Visual Studio.
1578
+ */
1579
+ #define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING"
1580
+
1581
+ /**
1582
+ * \brief A variable controlling whether the windows message loop is processed by SDL
1401
1583
  *
1402
- * Unfortunately, most application seem to ignore the fact chunk and so SDL
1403
- * ignores it by default as well.
1584
+ * This variable can be set to the following values:
1585
+ * "0" - The window message loop is not run
1586
+ * "1" - The window message loop is processed in SDL_PumpEvents()
1587
+ *
1588
+ * By default SDL will process the windows message loop
1589
+ */
1590
+ #define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP"
1591
+
1592
+ /**
1593
+ * \brief Force SDL to use Critical Sections for mutexes on Windows.
1594
+ * On Windows 7 and newer, Slim Reader/Writer Locks are available.
1595
+ * They offer better performance, allocate no kernel ressources and
1596
+ * use less memory. SDL will fall back to Critical Sections on older
1597
+ * OS versions or if forced to by this hint.
1404
1598
  *
1405
1599
  * This variable can be set to the following values:
1600
+ * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default)
1601
+ * "1" - Force the use of Critical Sections in all cases.
1406
1602
  *
1407
- * "truncate" - Use the number of samples to truncate the wave data if
1408
- * the fact chunk is present and valid
1409
- * "strict" - Like "truncate", but raise an error if the fact chunk
1410
- * is invalid, not present for non-PCM formats, or if the
1411
- * data chunk doesn't have that many samples
1412
- * "ignorezero" - Like "truncate", but ignore fact chunk if the number of
1413
- * samples is zero
1414
- * "ignore" - Ignore fact chunk entirely (default)
1415
1603
  */
1416
- #define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK"
1604
+ #define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS"
1417
1605
 
1418
1606
  /**
1419
- * \brief Override for SDL_GetDisplayUsableBounds()
1607
+ * \brief Force SDL to use Kernel Semaphores on Windows.
1608
+ * Kernel Semaphores are inter-process and require a context
1609
+ * switch on every interaction. On Windows 8 and newer, the
1610
+ * WaitOnAddress API is available. Using that and atomics to
1611
+ * implement semaphores increases performance.
1612
+ * SDL will fall back to Kernel Objects on older OS versions
1613
+ * or if forced to by this hint.
1420
1614
  *
1421
- * If set, this hint will override the expected results for
1422
- * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
1423
- * to do this, but this allows an embedded system to request that some of the
1424
- * screen be reserved for other uses when paired with a well-behaved
1425
- * application.
1615
+ * This variable can be set to the following values:
1616
+ * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default)
1617
+ * "1" - Force the use of Kernel Objects in all cases.
1426
1618
  *
1427
- * The contents of this hint must be 4 comma-separated integers, the first
1428
- * is the bounds x, then y, width and height, in that order.
1429
1619
  */
1430
- #define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS"
1620
+ #define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL"
1431
1621
 
1432
1622
  /**
1433
- * \brief Specify an application name for an audio device.
1623
+ * \brief A variable to specify custom icon resource id from RC file on Windows platform
1624
+ */
1625
+ #define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON"
1626
+ #define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"
1627
+
1628
+ /**
1629
+ * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows.
1434
1630
  *
1435
- * Some audio backends (such as PulseAudio) allow you to describe your audio
1436
- * stream. Among other things, this description might show up in a system
1437
- * control panel that lets the user adjust the volume on specific audio
1438
- * streams instead of using one giant master volume slider.
1631
+ * The variable can be set to the following values:
1632
+ * "0" - SDL will generate a window-close event when it sees Alt+F4.
1633
+ * "1" - SDL will only do normal key handling for Alt+F4.
1634
+ */
1635
+ #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
1636
+
1637
+ /**
1638
+ * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
1639
+ * Direct3D 9Ex contains changes to state management that can eliminate device
1640
+ * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require
1641
+ * some changes to your application to cope with the new behavior, so this
1642
+ * is disabled by default.
1439
1643
  *
1440
- * This hints lets you transmit that information to the OS. The contents of
1441
- * this hint are used while opening an audio device. You should use a string
1442
- * that describes your program ("My Game 2: The Revenge")
1644
+ * This hint must be set before initializing the video subsystem.
1443
1645
  *
1444
- * Setting this to "" or leaving it unset will have SDL use a reasonable
1445
- * default: probably the application's name or "SDL Application" if SDL
1446
- * doesn't have any better information.
1646
+ * For more information on Direct3D 9Ex, see:
1647
+ * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex
1648
+ * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements
1649
+ *
1650
+ * This variable can be set to the following values:
1651
+ * "0" - Use the original Direct3D 9 API (default)
1652
+ * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable)
1447
1653
  *
1448
- * On targets where this is not supported, this hint does nothing.
1449
1654
  */
1450
- #define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME"
1655
+ #define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX"
1451
1656
 
1452
1657
  /**
1453
- * \brief Specify an application name for an audio device.
1658
+ * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden
1454
1659
  *
1455
- * Some audio backends (such as PulseAudio) allow you to describe your audio
1456
- * stream. Among other things, this description might show up in a system
1457
- * control panel that lets the user adjust the volume on specific audio
1458
- * streams instead of using one giant master volume slider.
1660
+ * This variable can be set to the following values:
1661
+ * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc)
1662
+ * "1" - The window frame is interactive when the cursor is hidden
1459
1663
  *
1460
- * This hints lets you transmit that information to the OS. The contents of
1461
- * this hint are used while opening an audio device. You should use a string
1462
- * that describes your what your program is playing ("audio stream" is
1463
- * probably sufficient in many cases, but this could be useful for something
1464
- * like "team chat" if you have a headset playing VoIP audio separately).
1664
+ * By default SDL will allow interaction with the window frame when the cursor is hidden
1665
+ */
1666
+ #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
1667
+
1668
+ /**
1669
+ * \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called
1670
+ *
1671
+ * This variable can be set to the following values:
1672
+ * "0" - The window is activated when the SDL_ShowWindow function is called
1673
+ * "1" - The window is not activated when the SDL_ShowWindow function is called
1674
+ *
1675
+ * By default SDL will activate the window when the SDL_ShowWindow function is called
1676
+ */
1677
+ #define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN"
1678
+
1679
+ /** \brief Allows back-button-press events on Windows Phone to be marked as handled
1465
1680
  *
1466
- * Setting this to "" or leaving it unset will have SDL use a reasonable
1467
- * default: "audio stream" or something similar.
1681
+ * Windows Phone devices typically feature a Back button. When pressed,
1682
+ * the OS will emit back-button-press events, which apps are expected to
1683
+ * handle in an appropriate manner. If apps do not explicitly mark these
1684
+ * events as 'Handled', then the OS will invoke its default behavior for
1685
+ * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to
1686
+ * terminate the app (and attempt to switch to the previous app, or to the
1687
+ * device's home screen).
1468
1688
  *
1469
- * On targets where this is not supported, this hint does nothing.
1689
+ * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL
1690
+ * to mark back-button-press events as Handled, if and when one is sent to
1691
+ * the app.
1692
+ *
1693
+ * Internally, Windows Phone sends back button events as parameters to
1694
+ * special back-button-press callback functions. Apps that need to respond
1695
+ * to back-button-press events are expected to register one or more
1696
+ * callback functions for such, shortly after being launched (during the
1697
+ * app's initialization phase). After the back button is pressed, the OS
1698
+ * will invoke these callbacks. If the app's callback(s) do not explicitly
1699
+ * mark the event as handled by the time they return, or if the app never
1700
+ * registers one of these callback, the OS will consider the event
1701
+ * un-handled, and it will apply its default back button behavior (terminate
1702
+ * the app).
1703
+ *
1704
+ * SDL registers its own back-button-press callback with the Windows Phone
1705
+ * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN
1706
+ * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which
1707
+ * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON.
1708
+ * If the hint's value is set to "1", the back button event's Handled
1709
+ * property will get set to 'true'. If the hint's value is set to something
1710
+ * else, or if it is unset, SDL will leave the event's Handled property
1711
+ * alone. (By default, the OS sets this property to 'false', to note.)
1712
+ *
1713
+ * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a
1714
+ * back button is pressed, or can set it in direct-response to a back button
1715
+ * being pressed.
1716
+ *
1717
+ * In order to get notified when a back button is pressed, SDL apps should
1718
+ * register a callback function with SDL_AddEventWatch(), and have it listen
1719
+ * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK.
1720
+ * (Alternatively, SDL_KEYUP events can be listened-for. Listening for
1721
+ * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON
1722
+ * set by such a callback, will be applied to the OS' current
1723
+ * back-button-press event.
1724
+ *
1725
+ * More details on back button behavior in Windows Phone apps can be found
1726
+ * at the following page, on Microsoft's developer site:
1727
+ * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx
1470
1728
  */
1471
- #define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME"
1729
+ #define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON"
1472
1730
 
1731
+ /** \brief Label text for a WinRT app's privacy policy link
1732
+ *
1733
+ * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT,
1734
+ * Microsoft mandates that this policy be available via the Windows Settings charm.
1735
+ * SDL provides code to add a link there, with its label text being set via the
1736
+ * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
1737
+ *
1738
+ * Please note that a privacy policy's contents are not set via this hint. A separate
1739
+ * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the
1740
+ * policy.
1741
+ *
1742
+ * The contents of this hint should be encoded as a UTF8 string.
1743
+ *
1744
+ * The default value is "Privacy Policy". This hint should only be set during app
1745
+ * initialization, preferably before any calls to SDL_Init().
1746
+ *
1747
+ * For additional information on linking to a privacy policy, see the documentation for
1748
+ * SDL_HINT_WINRT_PRIVACY_POLICY_URL.
1749
+ */
1750
+ #define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL"
1473
1751
 
1474
1752
  /**
1475
- * \brief Override for SDL_GetPreferredLocales()
1753
+ * \brief A URL to a WinRT app's privacy policy
1476
1754
  *
1477
- * If set, this will be favored over anything the OS might report for the
1478
- * user's preferred locales. Changing this hint at runtime will not generate
1479
- * a SDL_LOCALECHANGED event (but if you can change the hint, you can push
1480
- * your own event, if you want).
1755
+ * All network-enabled WinRT apps must make a privacy policy available to its
1756
+ * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be
1757
+ * be available in the Windows Settings charm, as accessed from within the app.
1758
+ * SDL provides code to add a URL-based link there, which can point to the app's
1759
+ * privacy policy.
1481
1760
  *
1482
- * The format of this hint is a comma-separated list of language and locale,
1483
- * combined with an underscore, as is a common format: "en_GB". Locale is
1484
- * optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
1761
+ * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
1762
+ * before calling any SDL_Init() functions. The contents of the hint should
1763
+ * be a valid URL. For example, "http://www.example.com".
1764
+ *
1765
+ * The default value is "", which will prevent SDL from adding a privacy policy
1766
+ * link to the Settings charm. This hint should only be set during app init.
1767
+ *
1768
+ * The label text of an app's "Privacy Policy" link may be customized via another
1769
+ * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
1770
+ *
1771
+ * Please note that on Windows Phone, Microsoft does not provide standard UI
1772
+ * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL
1773
+ * will not get used on that platform. Network-enabled phone apps should display
1774
+ * their privacy policy through some other, in-app means.
1485
1775
  */
1486
- #define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES"
1776
+ #define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL"
1777
+
1778
+ /**
1779
+ * \brief Mark X11 windows as override-redirect.
1780
+ *
1781
+ * If set, this _might_ increase framerate at the expense of the desktop
1782
+ * not working as expected. Override-redirect windows aren't noticed by the
1783
+ * window manager at all.
1784
+ *
1785
+ * You should probably only use this for fullscreen windows, and you probably
1786
+ * shouldn't even use it for that. But it's here if you want to try!
1787
+ */
1788
+ #define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT"
1789
+
1790
+ /**
1791
+ * \brief A variable that lets you disable the detection and use of Xinput gamepad devices
1792
+ *
1793
+ * The variable can be set to the following values:
1794
+ * "0" - Disable XInput detection (only uses direct input)
1795
+ * "1" - Enable XInput detection (the default)
1796
+ */
1797
+ #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED"
1798
+
1799
+ /**
1800
+ * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices.
1801
+ *
1802
+ * This hint is for backwards compatibility only and will be removed in SDL 2.1
1803
+ *
1804
+ * The default value is "0". This hint must be set before SDL_Init()
1805
+ */
1806
+ #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING"
1807
+
1808
+ /**
1809
+ * \brief A variable that causes SDL to not ignore audio "monitors"
1810
+ *
1811
+ * This is currently only used for PulseAudio and ignored elsewhere.
1812
+ *
1813
+ * By default, SDL ignores audio devices that aren't associated with physical
1814
+ * hardware. Changing this hint to "1" will expose anything SDL sees that
1815
+ * appears to be an audio source or sink. This will add "devices" to the list
1816
+ * that the user probably doesn't want or need, but it can be useful in
1817
+ * scenarios where you want to hook up SDL to some sort of virtual device,
1818
+ * etc.
1819
+ *
1820
+ * The default value is "0". This hint must be set before SDL_Init().
1821
+ *
1822
+ * This hint is available since SDL 2.0.16. Before then, virtual devices are
1823
+ * always ignored.
1824
+ */
1825
+ #define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS"
1487
1826
 
1488
1827
 
1489
1828
  /**
@@ -1498,71 +1837,121 @@ typedef enum
1498
1837
 
1499
1838
 
1500
1839
  /**
1501
- * \brief Set a hint with a specific priority
1840
+ * Set a hint with a specific priority.
1841
+ *
1842
+ * The priority controls the behavior when setting a hint that already has a
1843
+ * value. Hints will replace existing hints of their priority and lower.
1844
+ * Environment variables are considered to have override priority.
1502
1845
  *
1503
- * The priority controls the behavior when setting a hint that already
1504
- * has a value. Hints will replace existing hints of their priority and
1505
- * lower. Environment variables are considered to have override priority.
1846
+ * \param name the hint to set
1847
+ * \param value the value of the hint variable
1848
+ * \param priority the SDL_HintPriority level for the hint
1849
+ * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
1506
1850
  *
1507
- * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise
1851
+ * \since This function is available since SDL 2.0.0.
1852
+ *
1853
+ * \sa SDL_GetHint
1854
+ * \sa SDL_SetHint
1508
1855
  */
1509
1856
  extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name,
1510
1857
  const char *value,
1511
1858
  SDL_HintPriority priority);
1512
1859
 
1513
1860
  /**
1514
- * \brief Set a hint with normal priority
1861
+ * Set a hint with normal priority.
1862
+ *
1863
+ * Hints will not be set if there is an existing override hint or environment
1864
+ * variable that takes precedence. You can use SDL_SetHintWithPriority() to
1865
+ * set the hint with override priority instead.
1515
1866
  *
1516
- * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise
1867
+ * \param name the hint to set
1868
+ * \param value the value of the hint variable
1869
+ * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
1870
+ *
1871
+ * \since This function is available since SDL 2.0.0.
1872
+ *
1873
+ * \sa SDL_GetHint
1874
+ * \sa SDL_SetHintWithPriority
1517
1875
  */
1518
1876
  extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name,
1519
1877
  const char *value);
1520
1878
 
1521
1879
  /**
1522
- * \brief Get a hint
1880
+ * Get the value of a hint.
1881
+ *
1882
+ * \param name the hint to query
1883
+ * \returns the string value of a hint or NULL if the hint isn't set.
1884
+ *
1885
+ * \since This function is available since SDL 2.0.0.
1523
1886
  *
1524
- * \return The string value of a hint variable.
1887
+ * \sa SDL_SetHint
1888
+ * \sa SDL_SetHintWithPriority
1525
1889
  */
1526
1890
  extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name);
1527
1891
 
1528
1892
  /**
1529
- * \brief Get a hint
1893
+ * Get the boolean value of a hint variable.
1530
1894
  *
1531
- * \return The boolean value of a hint variable.
1895
+ * \param name the name of the hint to get the boolean value from
1896
+ * \param default_value the value to return if the hint does not exist
1897
+ * \returns the boolean value of a hint or the provided default value if the
1898
+ * hint does not exist.
1899
+ *
1900
+ * \since This function is available since SDL 2.0.5.
1901
+ *
1902
+ * \sa SDL_GetHint
1903
+ * \sa SDL_SetHint
1532
1904
  */
1533
1905
  extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value);
1534
1906
 
1535
1907
  /**
1536
- * \brief type definition of the hint callback function.
1908
+ * Type definition of the hint callback function.
1909
+ *
1910
+ * \param userdata what was passed as `userdata` to SDL_AddHintCallback()
1911
+ * \param name what was passed as `name` to SDL_AddHintCallback()
1912
+ * \param oldValue the previous hint value
1913
+ * \param newValue the new value hint is to be set to
1537
1914
  */
1538
1915
  typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
1539
1916
 
1540
1917
  /**
1541
- * \brief Add a function to watch a particular hint
1918
+ * Add a function to watch a particular hint.
1919
+ *
1920
+ * \param name the hint to watch
1921
+ * \param callback An SDL_HintCallback function that will be called when the
1922
+ * hint value changes
1923
+ * \param userdata a pointer to pass to the callback function
1542
1924
  *
1543
- * \param name The hint to watch
1544
- * \param callback The function to call when the hint value changes
1545
- * \param userdata A pointer to pass to the callback function
1925
+ * \since This function is available since SDL 2.0.0.
1926
+ *
1927
+ * \sa SDL_DelHintCallback
1546
1928
  */
1547
1929
  extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name,
1548
1930
  SDL_HintCallback callback,
1549
1931
  void *userdata);
1550
1932
 
1551
1933
  /**
1552
- * \brief Remove a function watching a particular hint
1934
+ * Remove a function watching a particular hint.
1935
+ *
1936
+ * \param name the hint being watched
1937
+ * \param callback An SDL_HintCallback function that will be called when the
1938
+ * hint value changes
1939
+ * \param userdata a pointer being passed to the callback function
1553
1940
  *
1554
- * \param name The hint being watched
1555
- * \param callback The function being called when the hint value changes
1556
- * \param userdata A pointer being passed to the callback function
1941
+ * \since This function is available since SDL 2.0.0.
1942
+ *
1943
+ * \sa SDL_AddHintCallback
1557
1944
  */
1558
1945
  extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name,
1559
1946
  SDL_HintCallback callback,
1560
1947
  void *userdata);
1561
1948
 
1562
1949
  /**
1563
- * \brief Clear all hints
1950
+ * Clear all hints.
1951
+ *
1952
+ * This function is automatically called during SDL_Quit().
1564
1953
  *
1565
- * This function is called during SDL_Quit() to free stored hints.
1954
+ * \since This function is available since SDL 2.0.0.
1566
1955
  */
1567
1956
  extern DECLSPEC void SDLCALL SDL_ClearHints(void);
1568
1957