shithub: ft²

Download patch

ref: 4dd5fb98c4325b4fb674bce5dec18652fdd5b22a
parent: dfcf1b407ae44ed17b47230a5ec35993d7ee8ef0
author: Olav Sørensen <olav.sorensen@live.no>
date: Tue Mar 4 13:26:17 EST 2025

Windows/macOS: Updated SDL to v2.32.2

binary files a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Headers b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Headers differ
binary files a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Resources b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Resources differ
binary files a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/SDL2 b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/SDL2 differ
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL.h
@@ -25,7 +25,6 @@
  *  Main include header for the SDL library
  */
 
-
 #ifndef SDL_h_
 #define SDL_h_
 
@@ -70,6 +69,8 @@
 extern "C" {
 #endif
 
+/* WIKI CATEGORY: Init */
+
 /* As of version 0.5, SDL is loaded dynamically into the application */
 
 /**
@@ -130,7 +131,7 @@
  * call SDL_Quit() to force shutdown). If a subsystem is already loaded then
  * this call will increase the ref-count and return.
  *
- * \param flags subsystem initialization flags
+ * \param flags subsystem initialization flags.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_assert.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_assert.h
@@ -61,6 +61,8 @@
     #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" )
 #elif defined(__APPLE__) && defined(__arm__)
     #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" )
+#elif defined(_WIN32) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__arm64__) || defined(__aarch64__)) )
+    #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #0xF000\n\t" )
 #elif defined(__386__) && defined(__WATCOMC__)
     #define SDL_TriggerBreakpoint() { _asm { int 0x03 } }
 #elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__)
@@ -191,8 +193,8 @@
  * A callback that fires when an SDL assertion fails.
  *
  * \param data a pointer to the SDL_AssertData structure corresponding to the
- *             current assertion
- * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler()
+ *             current assertion.
+ * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler().
  * \returns an SDL_AssertState value indicating how to handle the failure.
  */
 typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)(
@@ -212,8 +214,8 @@
  * This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
  *
  * \param handler the SDL_AssertionHandler function to call when an assertion
- *                fails or NULL for the default handler
- * \param userdata a pointer that is passed to `handler`
+ *                fails or NULL for the default handler.
+ * \param userdata a pointer that is passed to `handler`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -254,7 +256,7 @@
  * data, it is safe to pass a NULL pointer to this function to ignore it.
  *
  * \param puserdata pointer which is filled with the "userdata" pointer that
- *                  was passed to SDL_SetAssertionHandler()
+ *                  was passed to SDL_SetAssertionHandler().
  * \returns the SDL_AssertionHandler that is called when an assert triggers.
  *
  * \since This function is available since SDL 2.0.2.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_atomic.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_atomic.h
@@ -20,39 +20,30 @@
 */
 
 /**
- * \file SDL_atomic.h
+ * # CategoryAtomic
  *
  * Atomic operations.
  *
- * IMPORTANT:
- * If you are not an expert in concurrent lockless programming, you should
- * only be using the atomic lock and reference counting functions in this
- * file.  In all other cases you should be protecting your data structures
- * with full mutexes.
+ * IMPORTANT: If you are not an expert in concurrent lockless programming, you
+ * should not be using any functions in this file. You should be protecting
+ * your data structures with full mutexes instead.
  *
- * The list of "safe" functions to use are:
- *  SDL_AtomicLock()
- *  SDL_AtomicUnlock()
- *  SDL_AtomicIncRef()
- *  SDL_AtomicDecRef()
+ * ***Seriously, here be dragons!***
  *
- * Seriously, here be dragons!
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * You can find out a little more about lockless programming and the subtle
+ * issues that can arise here:
+ * https://learn.microsoft.com/en-us/windows/win32/dxtecharts/lockless-programming
  *
- * You can find out a little more about lockless programming and the
- * subtle issues that can arise here:
- * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx
- *
  * There's also lots of good information here:
- * http://www.1024cores.net/home/lock-free-algorithms
- * http://preshing.com/
  *
- * These operations may or may not actually be implemented using
- * processor specific atomic operations. When possible they are
- * implemented as true processor specific atomic operations. When that
- * is not possible the are implemented using locks that *do* use the
- * available atomic operations.
+ * - https://www.1024cores.net/home/lock-free-algorithms
+ * - https://preshing.com/
  *
+ * These operations may or may not actually be implemented using processor
+ * specific atomic operations. When possible they are implemented as true
+ * processor specific atomic operations. When that is not possible the are
+ * implemented using locks that *do* use the available atomic operations.
+ *
  * All of the atomic operations that modify memory are full memory barriers.
  */
 
@@ -94,7 +85,7 @@
  * ***Please note that spinlocks are dangerous if you don't know what you're
  * doing. Please be careful using any sort of spinlock!***
  *
- * \param lock a pointer to a lock variable
+ * \param lock a pointer to a lock variable.
  * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already
  *          held.
  *
@@ -111,7 +102,7 @@
  * ***Please note that spinlocks are dangerous if you don't know what you're
  * doing. Please be careful using any sort of spinlock!***
  *
- * \param lock a pointer to a lock variable
+ * \param lock a pointer to a lock variable.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -128,7 +119,7 @@
  * ***Please note that spinlocks are dangerous if you don't know what you're
  * doing. Please be careful using any sort of spinlock!***
  *
- * \param lock a pointer to a lock variable
+ * \param lock a pointer to a lock variable.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -257,10 +248,13 @@
 
 
 /**
- * \brief A type representing an atomic integer value.  It is a struct
- *        so people don't accidentally use numeric operations on it.
+ * A type representing an atomic integer value.
+ *
+ * It is a struct so people don't accidentally use numeric operations on it.
  */
-typedef struct { int value; } SDL_atomic_t;
+typedef struct SDL_atomic_t {
+    int value;
+} SDL_atomic_t;
 
 /**
  * Set an atomic variable to a new value if it is currently an old value.
@@ -268,9 +262,9 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable to be modified
- * \param oldval the old value
- * \param newval the new value
+ * \param a a pointer to an SDL_atomic_t variable to be modified.
+ * \param oldval the old value.
+ * \param newval the new value.
  * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -289,8 +283,8 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable to be modified
- * \param v the desired value
+ * \param a a pointer to an SDL_atomic_t variable to be modified.
+ * \param v the desired value.
  * \returns the previous value of the atomic variable.
  *
  * \since This function is available since SDL 2.0.2.
@@ -305,7 +299,7 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable
+ * \param a a pointer to an SDL_atomic_t variable.
  * \returns the current value of an atomic variable.
  *
  * \since This function is available since SDL 2.0.2.
@@ -322,8 +316,8 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable to be modified
- * \param v the desired value to add
+ * \param a a pointer to an SDL_atomic_t variable to be modified.
+ * \param v the desired value to add.
  * \returns the previous value of the atomic variable.
  *
  * \since This function is available since SDL 2.0.2.
@@ -356,9 +350,9 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to a pointer
- * \param oldval the old pointer value
- * \param newval the new pointer value
+ * \param a a pointer to a pointer.
+ * \param oldval the old pointer value.
+ * \param newval the new pointer value.
  * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -375,8 +369,8 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to a pointer
- * \param v the desired pointer value
+ * \param a a pointer to a pointer.
+ * \param v the desired pointer value.
  * \returns the previous value of the pointer.
  *
  * \since This function is available since SDL 2.0.2.
@@ -392,7 +386,7 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to a pointer
+ * \param a a pointer to a pointer.
  * \returns the current value of a pointer.
  *
  * \since This function is available since SDL 2.0.2.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_audio.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_audio.h
@@ -22,9 +22,9 @@
 /* !!! FIXME: several functions in here need Doxygen comments. */
 
 /**
- *  \file SDL_audio.h
+ * # CategoryAudio
  *
- *  Access to the raw audio mixing buffer for the SDL library.
+ * Access to the raw audio mixing buffer for the SDL library.
  */
 
 #ifndef SDL_audio_h_
@@ -44,24 +44,24 @@
 #endif
 
 /**
- *  \brief Audio format flags.
+ * Audio format flags.
  *
- *  These are what the 16 bits in SDL_AudioFormat currently mean...
- *  (Unspecified bits are always zero).
+ * These are what the 16 bits in SDL_AudioFormat currently mean...
+ * (Unspecified bits are always zero).
  *
- *  \verbatim
-    ++-----------------------sample is signed if set
-    ||
-    ||       ++-----------sample is bigendian if set
-    ||       ||
-    ||       ||          ++---sample is float if set
-    ||       ||          ||
-    ||       ||          || +---sample bit size---+
-    ||       ||          || |                     |
-    15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
-    \endverbatim
+ * ```
+ * ++-----------------------sample is signed if set
+ * ||
+ * ||       ++-----------sample is bigendian if set
+ * ||       ||
+ * ||       ||          ++---sample is float if set
+ * ||       ||          ||
+ * ||       ||          || +---sample bit size---+
+ * ||       ||          || |                     |
+ * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
+ * ```
  *
- *  There are macros in SDL 2.0 and later to query these bits.
+ * There are macros in SDL 2.0 and later to query these bits.
  */
 typedef Uint16 SDL_AudioFormat;
 
@@ -149,33 +149,30 @@
 /* @} *//* Audio flags */
 
 /**
- *  This function is called when the audio device needs more data.
+ * This function is called when the audio device needs more data.
  *
- *  \param userdata An application-specific parameter saved in
- *                  the SDL_AudioSpec structure
- *  \param stream A pointer to the audio data buffer.
- *  \param len    The length of that buffer in bytes.
- *
- *  Once the callback returns, the buffer will no longer be valid.
- *  Stereo samples are stored in a LRLRLR ordering.
- *
- *  You can choose to avoid callbacks and use SDL_QueueAudio() instead, if
- *  you like. Just open your audio device with a NULL callback.
+ * \param userdata An application-specific parameter saved in the
+ *                 SDL_AudioSpec structure.
+ * \param stream A pointer to the audio data buffer.
+ * \param len Length of **stream** in bytes.
  */
 typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,
                                             int len);
 
 /**
- *  The calculated values in this structure are calculated by SDL_OpenAudio().
+ * The calculated values in this structure are calculated by SDL_OpenAudio().
  *
- *  For multi-channel audio, the default SDL channel mapping is:
- *  2:  FL  FR                          (stereo)
- *  3:  FL  FR LFE                      (2.1 surround)
- *  4:  FL  FR  BL  BR                  (quad)
- *  5:  FL  FR LFE  BL  BR              (4.1 surround)
- *  6:  FL  FR  FC LFE  SL  SR          (5.1 surround - last two can also be BL BR)
- *  7:  FL  FR  FC LFE  BC  SL  SR      (6.1 surround)
- *  8:  FL  FR  FC LFE  BL  BR  SL  SR  (7.1 surround)
+ * For multi-channel audio, the default SDL channel mapping is:
+ *
+ * ```
+ * 2:  FL  FR                          (stereo)
+ * 3:  FL  FR LFE                      (2.1 surround)
+ * 4:  FL  FR  BL  BR                  (quad)
+ * 5:  FL  FR LFE  BL  BR              (4.1 surround)
+ * 6:  FL  FR  FC LFE  SL  SR          (5.1 surround - last two can also be BL BR)
+ * 7:  FL  FR  FC LFE  BC  SL  SR      (6.1 surround)
+ * 8:  FL  FR  FC LFE  BL  BR  SL  SR  (7.1 surround)
+ * ```
  */
 typedef struct SDL_AudioSpec
 {
@@ -196,11 +193,11 @@
                                           SDL_AudioFormat format);
 
 /**
- *  \brief Upper limit of filters in SDL_AudioCVT
+ * Upper limit of filters in SDL_AudioCVT
  *
- *  The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is
- *  currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers,
- *  one of which is the terminating NULL pointer.
+ * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is
+ * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, one
+ * of which is the terminating NULL pointer.
  */
 #define SDL_AUDIOCVT_MAX_FILTERS 9
 
@@ -287,7 +284,7 @@
  * meant to be proper names.
  *
  * \param index the index of the audio driver; the value ranges from 0 to
- *              SDL_GetNumAudioDrivers() - 1
+ *              SDL_GetNumAudioDrivers() - 1.
  * \returns the name of the audio driver at the requested index, or NULL if an
  *          invalid index was specified.
  *
@@ -314,7 +311,7 @@
  * specific need to designate the audio driver you want to use. You should
  * normally use SDL_Init() or SDL_InitSubSystem().
  *
- * \param driver_name the name of the desired audio driver
+ * \param driver_name the name of the desired audio driver.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -408,13 +405,13 @@
                                           SDL_AudioSpec * obtained);
 
 /**
- *  SDL Audio Device IDs.
+ * SDL Audio Device IDs.
  *
- *  A successful call to SDL_OpenAudio() is always device id 1, and legacy
- *  SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls
- *  always returns devices >= 2 on success. The legacy calls are good both
- *  for backwards compatibility and when you don't care about multiple,
- *  specific, or capture devices.
+ * A successful call to SDL_OpenAudio() is always device id 1, and legacy SDL
+ * audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls
+ * always returns devices >= 2 on success. The legacy calls are good both for
+ * backwards compatibility and when you don't care about multiple, specific,
+ * or capture devices.
  */
 typedef Uint32 SDL_AudioDeviceID;
 
@@ -452,7 +449,7 @@
  * ```
  *
  * \param iscapture zero to request playback devices, non-zero to request
- *                  recording devices
+ *                  recording devices.
  * \returns the number of available devices exposed by the current driver or
  *          -1 if an explicit list of devices can't be determined. A return
  *          value of -1 does not necessarily mean an error condition.
@@ -478,7 +475,7 @@
  * invalid next time any of several other SDL functions are called.
  *
  * \param index the index of the audio device; valid values range from 0 to
- *              SDL_GetNumAudioDevices() - 1
+ *              SDL_GetNumAudioDevices() - 1.
  * \param iscapture non-zero to query the list of recording devices, zero to
  *                  query the list of output devices.
  * \returns the name of the audio device at the requested index, or NULL on
@@ -504,11 +501,11 @@
  * count.
  *
  * \param index the index of the audio device; valid values range from 0 to
- *              SDL_GetNumAudioDevices() - 1
+ *              SDL_GetNumAudioDevices() - 1.
  * \param iscapture non-zero to query the list of recording devices, zero to
  *                  query the list of output devices.
  * \param spec The SDL_AudioSpec to be initialized by this function.
- * \returns 0 on success, nonzero on error
+ * \returns 0 on success, nonzero on error.
  *
  * \since This function is available since SDL 2.0.16.
  *
@@ -542,7 +539,7 @@
  * \param spec The SDL_AudioSpec to be initialized by this function.
  * \param iscapture non-zero to query the default recording device, zero to
  *                  query the default output device.
- * \returns 0 on success, nonzero on error
+ * \returns 0 on success, nonzero on error.
  *
  * \since This function is available since SDL 2.24.0.
  *
@@ -645,12 +642,12 @@
  *               driver-specific name as appropriate. NULL requests the most
  *               reasonable default device.
  * \param iscapture non-zero to specify a device should be opened for
- *                  recording, not playback
+ *                  recording, not playback.
  * \param desired an SDL_AudioSpec structure representing the desired output
- *                format; see SDL_OpenAudio() for more information
+ *                format; see SDL_OpenAudio() for more information.
  * \param obtained an SDL_AudioSpec structure filled in with the actual output
- *                 format; see SDL_OpenAudio() for more information
- * \param allowed_changes 0, or one or more flags OR'd together
+ *                 format; see SDL_OpenAudio() for more information.
+ * \param allowed_changes 0, or one or more flags OR'd together.
  * \returns a valid device ID that is > 0 on success or 0 on failure; call
  *          SDL_GetError() for more information.
  *
@@ -712,7 +709,7 @@
  * Use this function to get the current audio state of an audio device.
  *
  * \param dev the ID of an audio device previously opened with
- *            SDL_OpenAudioDevice()
+ *            SDL_OpenAudioDevice().
  * \returns the SDL_AudioStatus of the specified audio device.
  *
  * \since This function is available since SDL 2.0.0.
@@ -745,7 +742,7 @@
  *
  * ...and is only useful if you used the legacy SDL_OpenAudio() function.
  *
- * \param pause_on non-zero to pause, 0 to unpause
+ * \param pause_on non-zero to pause, 0 to unpause.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -775,8 +772,8 @@
  * callback, you shouldn't pause the audio device, as it will lead to dropouts
  * in the audio playback. Instead, you should use SDL_LockAudioDevice().
  *
- * \param dev a device opened by SDL_OpenAudioDevice()
- * \param pause_on non-zero to pause, 0 to unpause
+ * \param dev a device opened by SDL_OpenAudioDevice().
+ * \param pause_on non-zero to pause, 0 to unpause.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -841,14 +838,14 @@
  * SDL_LoadWAV("sample.wav", &spec, &buf, &len);
  * ```
  *
- * \param src The data source for the WAVE data
- * \param freesrc If non-zero, SDL will _always_ free the data source
+ * \param src The data source for the WAVE data.
+ * \param freesrc If non-zero, SDL will _always_ free the data source.
  * \param spec An SDL_AudioSpec that will be filled in with the wave file's
- *             format details
+ *             format details.
  * \param audio_buf A pointer filled with the audio data, allocated by the
  *                  function.
  * \param audio_len A pointer filled with the length of the audio data buffer
- *                  in bytes
+ *                  in bytes.
  * \returns This function, if successfully called, returns `spec`, which will
  *          be filled with the audio data format of the wave source data.
  *          `audio_buf` will be filled with a pointer to an allocated buffer
@@ -874,8 +871,9 @@
                                                       Uint32 * audio_len);
 
 /**
- *  Loads a WAV from a file.
- *  Compatibility convenience function.
+ * Loads a WAV from a file.
+ *
+ * Compatibility convenience function.
  */
 #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \
     SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len)
@@ -888,7 +886,7 @@
  * this function with a NULL pointer.
  *
  * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or
- *                  SDL_LoadWAV_RW()
+ *                  SDL_LoadWAV_RW().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -912,15 +910,16 @@
  * and then can call SDL_ConvertAudio() to complete the conversion.
  *
  * \param cvt an SDL_AudioCVT structure filled in with audio conversion
- *            information
+ *            information.
  * \param src_format the source format of the audio data; for more info see
- *                   SDL_AudioFormat
- * \param src_channels the number of channels in the source
- * \param src_rate the frequency (sample-frames-per-second) of the source
+ *                   SDL_AudioFormat.
+ * \param src_channels the number of channels in the source.
+ * \param src_rate the frequency (sample-frames-per-second) of the source.
  * \param dst_format the destination format of the audio data; for more info
- *                   see SDL_AudioFormat
- * \param dst_channels the number of channels in the destination
- * \param dst_rate the frequency (sample-frames-per-second) of the destination
+ *                   see SDL_AudioFormat.
+ * \param dst_channels the number of channels in the destination.
+ * \param dst_rate the frequency (sample-frames-per-second) of the
+ *                 destination.
  * \returns 1 if the audio filter is prepared, 0 if no conversion is needed,
  *          or a negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -991,12 +990,12 @@
 /**
  * Create a new audio stream.
  *
- * \param src_format The format of the source audio
- * \param src_channels The number of channels of the source audio
- * \param src_rate The sampling rate of the source audio
- * \param dst_format The format of the desired audio output
- * \param dst_channels The number of channels of the desired audio output
- * \param dst_rate The sampling rate of the desired audio output
+ * \param src_format The format of the source audio.
+ * \param src_channels The number of channels of the source audio.
+ * \param src_rate The sampling rate of the source audio.
+ * \param dst_format The format of the desired audio output.
+ * \param dst_channels The number of channels of the desired audio output.
+ * \param dst_rate The sampling rate of the desired audio output.
  * \returns 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.7.
@@ -1018,9 +1017,9 @@
 /**
  * Add data to be converted/resampled to the stream.
  *
- * \param stream The stream the audio data is being added to
- * \param buf A pointer to the audio data to add
- * \param len The number of bytes to write to the stream
+ * \param stream The stream the audio data is being added to.
+ * \param buf A pointer to the audio data to add.
+ * \param len The number of bytes to write to the stream.
  * \returns 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.7.
@@ -1037,10 +1036,10 @@
 /**
  * Get converted/resampled data from the stream
  *
- * \param stream The stream the audio is being requested from
- * \param buf A buffer to fill with audio data
- * \param len The maximum number of bytes to fill
- * \returns the number of bytes read from the stream, or -1 on error
+ * \param stream The stream the audio is being requested from.
+ * \param buf A buffer to fill with audio data.
+ * \param len The maximum number of bytes to fill.
+ * \returns the number of bytes read from the stream, or -1 on error.
  *
  * \since This function is available since SDL 2.0.7.
  *
@@ -1118,6 +1117,9 @@
  */
 extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream);
 
+/**
+ * Maximum volume allowed in calls to SDL_MixAudio and SDL_MixAudioFormat.
+ */
 #define SDL_MIX_MAXVOLUME 128
 
 /**
@@ -1132,11 +1134,11 @@
  * ...where `format` is the obtained format of the audio device from the
  * legacy SDL_OpenAudio() function.
  *
- * \param dst the destination for the mixed audio
- * \param src the source audio buffer to be mixed
- * \param len the length of the audio buffer in bytes
+ * \param dst the destination for the mixed audio.
+ * \param src the source audio buffer to be mixed.
+ * \param len the length of the audio buffer in bytes.
  * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME
- *               for full audio volume
+ *               for full audio volume.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1165,13 +1167,13 @@
  * SDL_MixAudioFormat() is really only needed when you're mixing a single
  * audio stream with a volume adjustment.
  *
- * \param dst the destination for the mixed audio
- * \param src the source audio buffer to be mixed
+ * \param dst the destination for the mixed audio.
+ * \param src the source audio buffer to be mixed.
  * \param format the SDL_AudioFormat structure representing the desired audio
- *               format
- * \param len the length of the audio buffer in bytes
+ *               format.
+ * \param len the length of the audio buffer in bytes.
  * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME
- *               for full audio volume
+ *               for full audio volume.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -1215,9 +1217,9 @@
  * from planar audio formats into a non-planar one (see SDL_AudioFormat)
  * before queuing audio.
  *
- * \param dev the device ID to which we will queue audio
- * \param data the data to queue to the device for later playback
- * \param len the number of bytes (not samples!) to which `data` points
+ * \param dev the device ID to which we will queue audio.
+ * \param data the data to queue to the device for later playback.
+ * \param len the number of bytes (not samples!) to which `data` points.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1263,9 +1265,9 @@
  * You should not call SDL_LockAudio() on the device before dequeueing; SDL
  * handles locking internally for this function.
  *
- * \param dev the device ID from which we will dequeue audio
- * \param data a pointer into where audio data should be copied
- * \param len the number of bytes (not samples!) to which (data) points
+ * \param dev the device ID from which we will dequeue audio.
+ * \param data a pointer into where audio data should be copied.
+ * \param len the number of bytes (not samples!) to which (data) points.
  * \returns the number of bytes dequeued, which could be less than requested;
  *          call SDL_GetError() for more information.
  *
@@ -1299,7 +1301,7 @@
  * You should not call SDL_LockAudio() on the device before querying; SDL
  * handles locking internally for this function.
  *
- * \param dev the device ID of which we will query queued audio size
+ * \param dev the device ID of which we will query queued audio size.
  * \returns the number of bytes (not samples!) of queued audio.
  *
  * \since This function is available since SDL 2.0.4.
@@ -1334,7 +1336,7 @@
  *
  * This function always succeeds and thus returns void.
  *
- * \param dev the device ID of which to clear the audio queue
+ * \param dev the device ID of which to clear the audio queue.
  *
  * \since This function is available since SDL 2.0.4.
  *
@@ -1406,7 +1408,7 @@
  * at once, not only will you block the audio callback, you'll block the other
  * thread.
  *
- * \param dev the ID of the device to be locked
+ * \param dev the ID of the device to be locked.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1439,7 +1441,7 @@
  *
  * This function should be paired with a previous SDL_LockAudioDevice() call.
  *
- * \param dev the ID of the device to be unlocked
+ * \param dev the ID of the device to be unlocked.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1481,7 +1483,7 @@
  * The device ID is invalid as soon as the device is closed, and is eligible
  * for reuse in a new SDL_OpenAudioDevice() call immediately.
  *
- * \param dev an audio device previously opened with SDL_OpenAudioDevice()
+ * \param dev an audio device previously opened with SDL_OpenAudioDevice().
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_bits.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_bits.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_bits.h
+ * # CategoryBits
  *
- *  Functions for fiddling with bits and bitmasks.
+ * Functions for fiddling with bits and bitmasks.
  */
 
 #ifndef SDL_bits_h_
@@ -56,6 +56,12 @@
     modify exact [eax] nomemory;
 #endif
 
+/**
+ * Use this function to get the index of the most significant (set) bit in a
+ *
+ * \param x the number to find the MSB of.
+ * \returns the index of the most significant bit of x, or -1 if x is 0.
+ */
 SDL_FORCE_INLINE int
 SDL_MostSignificantBitIndex32(Uint32 x)
 {
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_blendmode.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_blendmode.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_blendmode.h
+ * # CategoryBlendmode
  *
- *  Header file declaring the SDL_BlendMode enumeration
+ * Header file declaring the SDL_BlendMode enumeration
  */
 
 #ifndef SDL_blendmode_h_
@@ -35,9 +35,9 @@
 #endif
 
 /**
- *  \brief The blend mode used in SDL_RenderCopy() and drawing operations.
+ * The blend mode used in SDL_RenderCopy() and drawing operations.
  */
-typedef enum
+typedef enum SDL_BlendMode
 {
     SDL_BLENDMODE_NONE = 0x00000000,     /**< no blending
                                               dstRGBA = srcRGBA */
@@ -60,9 +60,10 @@
 } SDL_BlendMode;
 
 /**
- *  \brief The blend operation used when combining source and destination pixel components
+ * The blend operation used when combining source and destination pixel
+ * components
  */
-typedef enum
+typedef enum SDL_BlendOperation
 {
     SDL_BLENDOPERATION_ADD              = 0x1,  /**< dst + src: supported by all renderers */
     SDL_BLENDOPERATION_SUBTRACT         = 0x2,  /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */
@@ -72,9 +73,9 @@
 } SDL_BlendOperation;
 
 /**
- *  \brief The normalized factor used to multiply pixel components
+ * The normalized factor used to multiply pixel components
  */
-typedef enum
+typedef enum SDL_BlendFactor
 {
     SDL_BLENDFACTOR_ZERO                = 0x1,  /**< 0, 0, 0, 0 */
     SDL_BLENDFACTOR_ONE                 = 0x2,  /**< 1, 1, 1, 1 */
@@ -158,18 +159,18 @@
  * case.
  *
  * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and
- *                       blue components of the source pixels
+ *                       blue components of the source pixels.
  * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and
- *                       blue components of the destination pixels
+ *                       blue components of the destination pixels.
  * \param colorOperation the SDL_BlendOperation used to combine the red,
  *                       green, and blue components of the source and
- *                       destination pixels
+ *                       destination pixels.
  * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of
- *                       the source pixels
+ *                       the source pixels.
  * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of
- *                       the destination pixels
+ *                       the destination pixels.
  * \param alphaOperation the SDL_BlendOperation used to combine the alpha
- *                       component of the source and destination pixels
+ *                       component of the source and destination pixels.
  * \returns an SDL_BlendMode that represents the chosen factors and
  *          operations.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_clipboard.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_clipboard.h
@@ -20,7 +20,7 @@
 */
 
 /**
- * \file SDL_clipboard.h
+ * # CategoryClipboard
  *
  * Include file for SDL clipboard handling
  */
@@ -41,7 +41,7 @@
 /**
  * Put UTF-8 text into the clipboard.
  *
- * \param text the text to store in the clipboard
+ * \param text the text to store in the clipboard.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -85,7 +85,7 @@
 /**
  * Put UTF-8 text into the primary selection.
  *
- * \param text the text to store in the primary selection
+ * \param text the text to store in the primary selection.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config.h
@@ -24,9 +24,7 @@
 
 #include <SDL2/SDL_platform.h>
 
-/**
- *  \file SDL_config.h
- */
+/* WIKI CATEGORY: - */
 
 /* Add any platform that doesn't build using the configure system. */
 #if defined(__WIN32__)
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h
@@ -19,10 +19,16 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: CPUInfo */
+
 /**
- *  \file SDL_cpuinfo.h
+ * # CategoryCPUInfo
  *
- *  CPU feature detection for SDL.
+ * CPU feature detection for SDL.
+ *
+ * These functions are largely concerned with reporting if the system has
+ * access to various SIMD instruction sets, but also has other important info
+ * to share, such as number of logical CPU cores.
  */
 
 #ifndef SDL_cpuinfo_h_
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_endian.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_endian.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_endian.h
+ * # CategoryEndian
  *
- *  Functions for reading and writing endian-specific values
+ * Functions for reading and writing endian-specific values
  */
 
 #ifndef SDL_endian_h_
@@ -59,6 +59,15 @@
 #ifdef __linux__
 #include <endian.h>
 #define SDL_BYTEORDER  __BYTE_ORDER
+#elif defined(__sun) && defined(__SVR4)  /* Solaris */
+#include <sys/byteorder.h>
+#if defined(_LITTLE_ENDIAN)
+#define SDL_BYTEORDER   SDL_LIL_ENDIAN
+#elif defined(_BIG_ENDIAN)
+#define SDL_BYTEORDER   SDL_BIG_ENDIAN
+#else
+#error Unsupported endianness
+#endif
 #elif defined(__OpenBSD__) || defined(__DragonFly__)
 #include <endian.h>
 #define SDL_BYTEORDER  BYTE_ORDER
@@ -79,7 +88,7 @@
     defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
     (defined(__MIPS__) && defined(__MIPSEB__)) || \
     defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \
-    defined(__sparc__)
+    defined(__sparc__) || defined(__sparc)
 #define SDL_BYTEORDER   SDL_BIG_ENDIAN
 #else
 #define SDL_BYTEORDER   SDL_LIL_ENDIAN
@@ -180,6 +189,16 @@
   parm   [ax]   \
   modify [ax];
 #else
+
+/**
+ * Use this function to swap the byte order of a 16-bit value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapBE16
+ * \sa SDL_SwapLE16
+ */
 SDL_FORCE_INLINE Uint16
 SDL_Swap16(Uint16 x)
 {
@@ -231,6 +250,16 @@
   parm   [eax] \
   modify [eax];
 #else
+
+/**
+ * Use this function to swap the byte order of a 32-bit value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapBE32
+ * \sa SDL_SwapLE32
+ */
 SDL_FORCE_INLINE Uint32
 SDL_Swap32(Uint32 x)
 {
@@ -276,6 +305,16 @@
   parm [eax edx]  \
   modify [eax edx];
 #else
+
+/**
+ * Use this function to swap the byte order of a 64-bit value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapBE64
+ * \sa SDL_SwapLE64
+ */
 SDL_FORCE_INLINE Uint64
 SDL_Swap64(Uint64 x)
 {
@@ -293,6 +332,15 @@
 #endif
 
 
+/**
+ * Use this function to swap the byte order of a floating point value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapFloatBE
+ * \sa SDL_SwapFloatLE
+ */
 SDL_FORCE_INLINE float
 SDL_SwapFloat(float x)
 {
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_error.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_error.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_error.h
+ * # CategoryError
  *
- *  Simple error message routines for SDL.
+ * Simple error message routines for SDL.
  */
 
 #ifndef SDL_error_h_
@@ -53,9 +53,9 @@
  * }
  * ```
  *
- * \param fmt a printf()-style message format string
+ * \param fmt a printf()-style message format string.
  * \param ... additional parameters matching % tokens in the `fmt` string, if
- *            any
+ *            any.
  * \returns always -1.
  *
  * \since This function is available since SDL 2.0.0.
@@ -109,8 +109,8 @@
  * otherwise operates exactly the same as SDL_GetError().
  *
  * \param errstr A buffer to fill with the last error message that was set for
- *               the current thread
- * \param maxlen The size of the buffer pointed to by the errstr parameter
+ *               the current thread.
+ * \param maxlen The size of the buffer pointed to by the errstr parameter.
  * \returns the pointer passed in as the `errstr` parameter.
  *
  * \since This function is available since SDL 2.0.14.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_events.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_events.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_events.h
+ * # CategoryEvents
  *
- *  Include file for SDL event handling.
+ * Include file for SDL event handling.
  */
 
 #ifndef SDL_events_h_
@@ -52,7 +52,7 @@
 /**
  * The types of events that can be delivered.
  */
-typedef enum
+typedef enum SDL_EventType
 {
     SDL_FIRSTEVENT     = 0,     /**< Unused (do not remove) */
 
@@ -167,7 +167,7 @@
     /* Internal events */
     SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */
 
-    /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use,
+    /** Events SDL_USEREVENT through SDL_LASTEVENT are for your use,
      *  and should be allocated with SDL_RegisterEvents()
      */
     SDL_USEREVENT    = 0x8000,
@@ -179,7 +179,7 @@
 } SDL_EventType;
 
 /**
- *  \brief Fields shared by every event
+ * Fields shared by every event
  */
 typedef struct SDL_CommonEvent
 {
@@ -188,14 +188,14 @@
 } SDL_CommonEvent;
 
 /**
- *  \brief Display state change event data (event.display.*)
+ * Display state change event data (event.display.*)
  */
 typedef struct SDL_DisplayEvent
 {
-    Uint32 type;        /**< ::SDL_DISPLAYEVENT */
+    Uint32 type;        /**< SDL_DISPLAYEVENT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 display;     /**< The associated display index */
-    Uint8 event;        /**< ::SDL_DisplayEventID */
+    Uint8 event;        /**< SDL_DisplayEventID */
     Uint8 padding1;
     Uint8 padding2;
     Uint8 padding3;
@@ -203,14 +203,14 @@
 } SDL_DisplayEvent;
 
 /**
- *  \brief Window state change event data (event.window.*)
+ * Window state change event data (event.window.*)
  */
 typedef struct SDL_WindowEvent
 {
-    Uint32 type;        /**< ::SDL_WINDOWEVENT */
+    Uint32 type;        /**< SDL_WINDOWEVENT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The associated window */
-    Uint8 event;        /**< ::SDL_WindowEventID */
+    Uint8 event;        /**< SDL_WindowEventID */
     Uint8 padding1;
     Uint8 padding2;
     Uint8 padding3;
@@ -219,14 +219,14 @@
 } SDL_WindowEvent;
 
 /**
- *  \brief Keyboard button event structure (event.key.*)
+ * Keyboard button event structure (event.key.*)
  */
 typedef struct SDL_KeyboardEvent
 {
-    Uint32 type;        /**< ::SDL_KEYDOWN or ::SDL_KEYUP */
+    Uint32 type;        /**< SDL_KEYDOWN or SDL_KEYUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with keyboard focus, if any */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 repeat;       /**< Non-zero if this is a key repeat */
     Uint8 padding2;
     Uint8 padding3;
@@ -234,12 +234,13 @@
 } SDL_KeyboardEvent;
 
 #define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32)
+
 /**
- *  \brief Keyboard text editing event structure (event.edit.*)
+ * Keyboard text editing event structure (event.edit.*)
  */
 typedef struct SDL_TextEditingEvent
 {
-    Uint32 type;                                /**< ::SDL_TEXTEDITING */
+    Uint32 type;                                /**< SDL_TEXTEDITING */
     Uint32 timestamp;                           /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;                            /**< The window with keyboard focus, if any */
     char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE];  /**< The editing text */
@@ -248,12 +249,12 @@
 } SDL_TextEditingEvent;
 
 /**
- *  \brief Extended keyboard text editing event structure (event.editExt.*) when text would be
- *  truncated if stored in the text buffer SDL_TextEditingEvent
+ * Extended keyboard text editing event structure (event.editExt.*) when text
+ * would be truncated if stored in the text buffer SDL_TextEditingEvent
  */
 typedef struct SDL_TextEditingExtEvent
 {
-    Uint32 type;                                /**< ::SDL_TEXTEDITING_EXT */
+    Uint32 type;                                /**< SDL_TEXTEDITING_EXT */
     Uint32 timestamp;                           /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;                            /**< The window with keyboard focus, if any */
     char* text;                                 /**< The editing text, which should be freed with SDL_free(), and will not be NULL */
@@ -261,24 +262,43 @@
     Sint32 length;                              /**< The length of selected editing text */
 } SDL_TextEditingExtEvent;
 
+/**
+ * The maximum bytes of text that can be supplied in an SDL_TextInputEvent.
+ */
 #define SDL_TEXTINPUTEVENT_TEXT_SIZE (32)
+
 /**
- *  \brief Keyboard text input event structure (event.text.*)
+ * Keyboard text input event structure (event.text.*)
+ *
+ * `text` is limited to SDL_TEXTINPUTEVENT_TEXT_SIZE bytes. If the incoming
+ * string is larger than this, SDL will split it and send it in pieces, across
+ * multiple events. The string is in UTF-8 format, and if split, SDL
+ * guarantees that it will not split in the middle of a UTF-8 sequence, so any
+ * event will only contain complete codepoints. However, if there are several
+ * codepoints that go together into a single glyph (like an emoji "thumbs up"
+ * followed by a skin color), they may be split between events.
+ *
+ * This event will never be delivered unless text input is enabled by calling
+ * SDL_StartTextInput(). Text input is enabled by default on desktop
+ * platforms, and disabled by default on mobile platforms!
+ *
+ * \sa SDL_StartTextInput
+ * \sa SDL_StopTextInput
  */
 typedef struct SDL_TextInputEvent
 {
-    Uint32 type;                              /**< ::SDL_TEXTINPUT */
+    Uint32 type;                              /**< SDL_TEXTINPUT */
     Uint32 timestamp;                         /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;                          /**< The window with keyboard focus, if any */
-    char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];  /**< The input text */
+    char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];  /**< The input text; UTF-8 encoded. */
 } SDL_TextInputEvent;
 
 /**
- *  \brief Mouse motion event structure (event.motion.*)
+ * Mouse motion event structure (event.motion.*)
  */
 typedef struct SDL_MouseMotionEvent
 {
-    Uint32 type;        /**< ::SDL_MOUSEMOTION */
+    Uint32 type;        /**< SDL_MOUSEMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with mouse focus, if any */
     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
@@ -290,16 +310,16 @@
 } SDL_MouseMotionEvent;
 
 /**
- *  \brief Mouse button event structure (event.button.*)
+ * Mouse button event structure (event.button.*)
  */
 typedef struct SDL_MouseButtonEvent
 {
-    Uint32 type;        /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */
+    Uint32 type;        /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with mouse focus, if any */
     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
     Uint8 button;       /**< The mouse button index */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 clicks;       /**< 1 for single-click, 2 for double-click, etc. */
     Uint8 padding1;
     Sint32 x;           /**< X coordinate, relative to window */
@@ -307,11 +327,11 @@
 } SDL_MouseButtonEvent;
 
 /**
- *  \brief Mouse wheel event structure (event.wheel.*)
+ * Mouse wheel event structure (event.wheel.*)
  */
 typedef struct SDL_MouseWheelEvent
 {
-    Uint32 type;        /**< ::SDL_MOUSEWHEEL */
+    Uint32 type;        /**< SDL_MOUSEWHEEL */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with mouse focus, if any */
     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
@@ -325,11 +345,11 @@
 } SDL_MouseWheelEvent;
 
 /**
- *  \brief Joystick axis motion event structure (event.jaxis.*)
+ * Joystick axis motion event structure (event.jaxis.*)
  */
 typedef struct SDL_JoyAxisEvent
 {
-    Uint32 type;        /**< ::SDL_JOYAXISMOTION */
+    Uint32 type;        /**< SDL_JOYAXISMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 axis;         /**< The joystick axis index */
@@ -341,11 +361,11 @@
 } SDL_JoyAxisEvent;
 
 /**
- *  \brief Joystick trackball motion event structure (event.jball.*)
+ * Joystick trackball motion event structure (event.jball.*)
  */
 typedef struct SDL_JoyBallEvent
 {
-    Uint32 type;        /**< ::SDL_JOYBALLMOTION */
+    Uint32 type;        /**< SDL_JOYBALLMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 ball;         /**< The joystick trackball index */
@@ -357,18 +377,18 @@
 } SDL_JoyBallEvent;
 
 /**
- *  \brief Joystick hat position change event structure (event.jhat.*)
+ * Joystick hat position change event structure (event.jhat.*)
  */
 typedef struct SDL_JoyHatEvent
 {
-    Uint32 type;        /**< ::SDL_JOYHATMOTION */
+    Uint32 type;        /**< SDL_JOYHATMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 hat;          /**< The joystick hat index */
     Uint8 value;        /**< The hat position value.
-                         *   \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP
-                         *   \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT
-                         *   \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN
+                         *   \sa SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP
+                         *   \sa SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT
+                         *   \sa SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
                          *
                          *   Note that zero means the POV is centered.
                          */
@@ -377,35 +397,40 @@
 } SDL_JoyHatEvent;
 
 /**
- *  \brief Joystick button event structure (event.jbutton.*)
+ * Joystick button event structure (event.jbutton.*)
  */
 typedef struct SDL_JoyButtonEvent
 {
-    Uint32 type;        /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */
+    Uint32 type;        /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 button;       /**< The joystick button index */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 padding1;
     Uint8 padding2;
 } SDL_JoyButtonEvent;
 
 /**
- *  \brief Joystick device event structure (event.jdevice.*)
+ * Joystick device event structure (event.jdevice.*)
+ *
+ * SDL will send JOYSTICK_ADDED events for devices that are already plugged in
+ * during SDL_Init.
+ *
+ * \sa SDL_ControllerDeviceEvent
  */
 typedef struct SDL_JoyDeviceEvent
 {
-    Uint32 type;        /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */
+    Uint32 type;        /**< SDL_JOYDEVICEADDED or SDL_JOYDEVICEREMOVED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Sint32 which;       /**< The joystick device index for the ADDED event, instance id for the REMOVED event */
 } SDL_JoyDeviceEvent;
 
 /**
- *  \brief Joysick battery level change event structure (event.jbattery.*)
+ * Joysick battery level change event structure (event.jbattery.*)
  */
 typedef struct SDL_JoyBatteryEvent
 {
-    Uint32 type;        /**< ::SDL_JOYBATTERYUPDATED */
+    Uint32 type;        /**< SDL_JOYBATTERYUPDATED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     SDL_JoystickPowerLevel level; /**< The joystick battery level */
@@ -412,11 +437,11 @@
 } SDL_JoyBatteryEvent;
 
 /**
- *  \brief Game controller axis motion event structure (event.caxis.*)
+ * Game controller axis motion event structure (event.caxis.*)
  */
 typedef struct SDL_ControllerAxisEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERAXISMOTION */
+    Uint32 type;        /**< SDL_CONTROLLERAXISMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 axis;         /**< The controller axis (SDL_GameControllerAxis) */
@@ -429,15 +454,15 @@
 
 
 /**
- *  \brief Game controller button event structure (event.cbutton.*)
+ * Game controller button event structure (event.cbutton.*)
  */
 typedef struct SDL_ControllerButtonEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */
+    Uint32 type;        /**< SDL_CONTROLLERBUTTONDOWN or SDL_CONTROLLERBUTTONUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 button;       /**< The controller button (SDL_GameControllerButton) */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 padding1;
     Uint8 padding2;
 } SDL_ControllerButtonEvent;
@@ -444,21 +469,27 @@
 
 
 /**
- *  \brief Controller device event structure (event.cdevice.*)
+ * Controller device event structure (event.cdevice.*)
+ *
+ * Joysticks that are supported game controllers receive both an
+ * SDL_JoyDeviceEvent and an SDL_ControllerDeviceEvent.
+ *
+ * SDL will send CONTROLLERDEVICEADDED events for joysticks that are already
+ * plugged in during SDL_Init() and are recognized as game controllers.
  */
 typedef struct SDL_ControllerDeviceEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, ::SDL_CONTROLLERDEVICEREMAPPED, or ::SDL_CONTROLLERSTEAMHANDLEUPDATED */
+    Uint32 type;        /**< SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_CONTROLLERDEVICEREMAPPED, or SDL_CONTROLLERSTEAMHANDLEUPDATED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Sint32 which;       /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */
 } SDL_ControllerDeviceEvent;
 
 /**
- *  \brief Game controller touchpad event structure (event.ctouchpad.*)
+ * Game controller touchpad event structure (event.ctouchpad.*)
  */
 typedef struct SDL_ControllerTouchpadEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */
+    Uint32 type;        /**< SDL_CONTROLLERTOUCHPADDOWN or SDL_CONTROLLERTOUCHPADMOTION or SDL_CONTROLLERTOUCHPADUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Sint32 touchpad;    /**< The index of the touchpad */
@@ -469,24 +500,24 @@
 } SDL_ControllerTouchpadEvent;
 
 /**
- *  \brief Game controller sensor event structure (event.csensor.*)
+ * Game controller sensor event structure (event.csensor.*)
  */
 typedef struct SDL_ControllerSensorEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERSENSORUPDATE */
+    Uint32 type;        /**< SDL_CONTROLLERSENSORUPDATE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
-    Sint32 sensor;      /**< The type of the sensor, one of the values of ::SDL_SensorType */
+    Sint32 sensor;      /**< The type of the sensor, one of the values of SDL_SensorType */
     float data[3];      /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */
     Uint64 timestamp_us; /**< The timestamp of the sensor reading in microseconds, if the hardware provides this information. */
 } SDL_ControllerSensorEvent;
 
 /**
- *  \brief Audio device event structure (event.adevice.*)
+ * Audio device event structure (event.adevice.*)
  */
 typedef struct SDL_AudioDeviceEvent
 {
-    Uint32 type;        /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */
+    Uint32 type;        /**< SDL_AUDIODEVICEADDED, or SDL_AUDIODEVICEREMOVED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 which;       /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */
     Uint8 iscapture;    /**< zero if an output device, non-zero if a capture device. */
@@ -497,11 +528,11 @@
 
 
 /**
- *  \brief Touch finger event structure (event.tfinger.*)
+ * Touch finger event structure (event.tfinger.*)
  */
 typedef struct SDL_TouchFingerEvent
 {
-    Uint32 type;        /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */
+    Uint32 type;        /**< SDL_FINGERMOTION or SDL_FINGERDOWN or SDL_FINGERUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_TouchID touchId; /**< The touch device id */
     SDL_FingerID fingerId;
@@ -515,11 +546,11 @@
 
 
 /**
- *  \brief Multiple Finger Gesture Event (event.mgesture.*)
+ * Multiple Finger Gesture Event (event.mgesture.*)
  */
 typedef struct SDL_MultiGestureEvent
 {
-    Uint32 type;        /**< ::SDL_MULTIGESTURE */
+    Uint32 type;        /**< SDL_MULTIGESTURE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_TouchID touchId; /**< The touch device id */
     float dTheta;
@@ -532,11 +563,11 @@
 
 
 /**
- * \brief Dollar Gesture Event (event.dgesture.*)
+ * Dollar Gesture Event (event.dgesture.*)
  */
 typedef struct SDL_DollarGestureEvent
 {
-    Uint32 type;        /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */
+    Uint32 type;        /**< SDL_DOLLARGESTURE or SDL_DOLLARRECORD */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_TouchID touchId; /**< The touch device id */
     SDL_GestureID gestureId;
@@ -548,13 +579,15 @@
 
 
 /**
- *  \brief An event used to request a file open by the system (event.drop.*)
- *         This event is enabled by default, you can disable it with SDL_EventState().
- *  \note If this event is enabled, you must free the filename in the event.
+ * An event used to request a file open by the system (event.drop.*)
+ *
+ * This event is enabled by default, you can disable it with SDL_EventState().
+ *
+ * If this event is enabled, you must free the filename in the event.
  */
 typedef struct SDL_DropEvent
 {
-    Uint32 type;        /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */
+    Uint32 type;        /**< SDL_DROPBEGIN or SDL_DROPFILE or SDL_DROPTEXT or SDL_DROPCOMPLETE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     char *file;         /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */
     Uint32 windowID;    /**< The window that was dropped on, if any */
@@ -562,11 +595,11 @@
 
 
 /**
- *  \brief Sensor event structure (event.sensor.*)
+ * Sensor event structure (event.sensor.*)
  */
 typedef struct SDL_SensorEvent
 {
-    Uint32 type;        /**< ::SDL_SENSORUPDATE */
+    Uint32 type;        /**< SDL_SENSORUPDATE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Sint32 which;       /**< The instance ID of the sensor */
     float data[6];      /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */
@@ -574,20 +607,20 @@
 } SDL_SensorEvent;
 
 /**
- *  \brief The "quit requested" event
+ * The "quit requested" event
  */
 typedef struct SDL_QuitEvent
 {
-    Uint32 type;        /**< ::SDL_QUIT */
+    Uint32 type;        /**< SDL_QUIT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
 } SDL_QuitEvent;
 
 /**
- *  \brief A user-defined event type (event.user.*)
+ * A user-defined event type (event.user.*)
  */
 typedef struct SDL_UserEvent
 {
-    Uint32 type;        /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */
+    Uint32 type;        /**< SDL_USEREVENT through SDL_LASTEVENT-1 */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The associated window if any */
     Sint32 code;        /**< User defined event code */
@@ -600,20 +633,24 @@
 typedef struct SDL_SysWMmsg SDL_SysWMmsg;
 
 /**
- *  \brief A video driver dependent system event (event.syswm.*)
- *         This event is disabled by default, you can enable it with SDL_EventState()
+ * A video driver dependent system event (event.syswm.*)
  *
- *  \note If you want to use this event, you should include SDL_syswm.h.
+ * This event is disabled by default, you can enable it with SDL_EventState()
+ *
+ * If you want to use this event, you should include SDL_syswm.h.
  */
 typedef struct SDL_SysWMEvent
 {
-    Uint32 type;        /**< ::SDL_SYSWMEVENT */
+    Uint32 type;        /**< SDL_SYSWMEVENT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_SysWMmsg *msg;  /**< driver dependent data, defined in SDL_syswm.h */
 } SDL_SysWMEvent;
 
 /**
- *  \brief General event structure
+ * General event structure
+ *
+ * The SDL_Event structure is the core of all event handling in SDL. SDL_Event
+ * is a union of all event structures used in SDL.
  */
 typedef union SDL_Event
 {
@@ -696,7 +733,7 @@
 extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
 
 /* @{ */
-typedef enum
+typedef enum SDL_eventaction
 {
     SDL_ADDEVENT,
     SDL_PEEKEVENT,
@@ -723,15 +760,15 @@
  *
  * This function is thread-safe.
  *
- * \param events destination buffer for the retrieved events
+ * \param events destination buffer for the retrieved events.
  * \param numevents if action is SDL_ADDEVENT, the number of events to add
  *                  back to the event queue; if action is SDL_PEEKEVENT or
- *                  SDL_GETEVENT, the maximum number of events to retrieve
- * \param action action to take; see [[#action|Remarks]] for details
+ *                  SDL_GETEVENT, the maximum number of events to retrieve.
+ * \param action action to take; see [[#action|Remarks]] for details.
  * \param minType minimum value of the event type to be considered;
- *                SDL_FIRSTEVENT is a safe choice
+ *                SDL_FIRSTEVENT is a safe choice.
  * \param maxType maximum value of the event type to be considered;
- *                SDL_LASTEVENT is a safe choice
+ *                SDL_LASTEVENT is a safe choice.
  * \returns the number of events actually stored or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -752,7 +789,7 @@
  * If you need to check for a range of event types, use SDL_HasEvents()
  * instead.
  *
- * \param type the type of event to be queried; see SDL_EventType for details
+ * \param type the type of event to be queried; see SDL_EventType for details.
  * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if
  *          events matching `type` are not present.
  *
@@ -769,9 +806,9 @@
  * If you need to check for a single event type, use SDL_HasEvent() instead.
  *
  * \param minType the low end of event type to be queried, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  * \param maxType the high end of event type to be queried, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are
  *          present, or SDL_FALSE if not.
  *
@@ -795,7 +832,7 @@
  * sure that all pending OS events are flushed, you can call SDL_PumpEvents()
  * on the main thread immediately before the flush call.
  *
- * \param type the type of event to be cleared; see SDL_EventType for details
+ * \param type the type of event to be cleared; see SDL_EventType for details.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -818,9 +855,9 @@
  * on the main thread immediately before the flush call.
  *
  * \param minType the low end of event type to be cleared, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  * \param maxType the high end of event type to be cleared, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -861,7 +898,7 @@
  * ```
  *
  * \param event the SDL_Event structure to be filled with the next event from
- *              the queue, or NULL
+ *              the queue, or NULL.
  * \returns 1 if there is a pending event or 0 if there are none available.
  *
  * \since This function is available since SDL 2.0.0.
@@ -885,7 +922,7 @@
  * this function in the thread that initialized the video subsystem.
  *
  * \param event the SDL_Event structure to be filled in with the next event
- *              from the queue, or NULL
+ *              from the queue, or NULL.
  * \returns 1 on success or 0 if there was an error while waiting for events;
  *          call SDL_GetError() for more information.
  *
@@ -908,9 +945,9 @@
  * this function in the thread that initialized the video subsystem.
  *
  * \param event the SDL_Event structure to be filled in with the next event
- *              from the queue, or NULL
+ *              from the queue, or NULL.
  * \param timeout the maximum number of milliseconds to wait for the next
- *                available event
+ *                available event.
  * \returns 1 on success or 0 if there was an error while waiting for events;
  *          call SDL_GetError() for more information. This also returns 0 if
  *          the timeout elapsed without an event arriving.
@@ -945,7 +982,7 @@
  * get an event type that does not conflict with other code that also wants
  * its own custom event types.
  *
- * \param event the SDL_Event to be added to the queue
+ * \param event the SDL_Event to be added to the queue.
  * \returns 1 on success, 0 if the event was filtered, or a negative error
  *          code on failure; call SDL_GetError() for more information. A
  *          common reason for error is the event queue being full.
@@ -961,11 +998,11 @@
 /**
  * A function pointer used for callbacks that watch the event queue.
  *
- * \param userdata what was passed as `userdata` to SDL_SetEventFilter()
- *        or SDL_AddEventWatch, etc
- * \param event the event that triggered the callback
- * \returns 1 to permit event to be added to the queue, and 0 to disallow
- *          it. When used with SDL_AddEventWatch, the return value is ignored.
+ * \param userdata what was passed as `userdata` to SDL_SetEventFilter() or
+ *                 SDL_AddEventWatch, etc.
+ * \param event the event that triggered the callback.
+ * \returns 1 to permit event to be added to the queue, and 0 to disallow it.
+ *          When used with SDL_AddEventWatch, the return value is ignored.
  *
  * \sa SDL_SetEventFilter
  * \sa SDL_AddEventWatch
@@ -988,7 +1025,7 @@
  * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the
  * application at the next event poll.
  *
- * There is one caveat when dealing with the ::SDL_QuitEvent event type. The
+ * There is one caveat when dealing with the SDL_QuitEvent event type. The
  * event filter is only called when the window manager desires to close the
  * application window. If the event filter returns 1, then the window will be
  * closed, otherwise the window will remain open if possible.
@@ -1003,8 +1040,8 @@
  * the event filter, but events pushed onto the queue with SDL_PeepEvents() do
  * not.
  *
- * \param filter An SDL_EventFilter function to call when an event happens
- * \param userdata a pointer that is passed to `filter`
+ * \param filter An SDL_EventFilter function to call when an event happens.
+ * \param userdata a pointer that is passed to `filter`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1023,9 +1060,9 @@
  * This function can be used to "chain" filters, by saving the existing filter
  * before replacing it with a function that will call that saved filter.
  *
- * \param filter the current callback function will be stored here
+ * \param filter the current callback function will be stored here.
  * \param userdata the pointer that is passed to the current event filter will
- *                 be stored here
+ *                 be stored here.
  * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set.
  *
  * \since This function is available since SDL 2.0.0.
@@ -1054,7 +1091,7 @@
  * through SDL_PeepEvents().
  *
  * \param filter an SDL_EventFilter function to call when an event happens.
- * \param userdata a pointer that is passed to `filter`
+ * \param userdata a pointer that is passed to `filter`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1070,8 +1107,8 @@
  * This function takes the same input as SDL_AddEventWatch() to identify and
  * delete the corresponding callback.
  *
- * \param filter the function originally passed to SDL_AddEventWatch()
- * \param userdata the pointer originally passed to SDL_AddEventWatch()
+ * \param filter the function originally passed to SDL_AddEventWatch().
+ * \param userdata the pointer originally passed to SDL_AddEventWatch().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1088,8 +1125,8 @@
  * this function does not change the filter permanently, it only uses the
  * supplied filter until this function returns.
  *
- * \param filter the SDL_EventFilter function to call when an event happens
- * \param userdata a pointer that is passed to `filter`
+ * \param filter the SDL_EventFilter function to call when an event happens.
+ * \param userdata a pointer that is passed to `filter`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1115,8 +1152,8 @@
  *   from the event queue and will not be filtered
  * - `SDL_ENABLE`: the event will be processed normally
  *
- * \param type the type of event; see SDL_EventType for details
- * \param state how to process the event
+ * \param type the type of event; see SDL_EventType for details.
+ * \param state how to process the event.
  * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state
  *          of the event before this function makes any changes to it.
  *
@@ -1138,7 +1175,7 @@
  * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or
  * 0xFFFFFFFF), but is clearer to write.
  *
- * \param numevents the number of events to be allocated
+ * \param numevents the number of events to be allocated.
  * \returns the beginning event number, or (Uint32)-1 if there are not enough
  *          user-defined events left.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_filesystem.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_filesystem.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_filesystem.h
+ * # CategoryFilesystem
  *
- *  \brief Include file for filesystem SDL API functions
+ * Include file for filesystem SDL API functions
  */
 
 #ifndef SDL_filesystem_h_
@@ -126,8 +126,8 @@
  * The pointer returned is owned by the caller. Please call SDL_free() on the
  * pointer when done with it.
  *
- * \param org the name of your organization
- * \param app the name of your application
+ * \param org the name of your organization.
+ * \param app the name of your application.
  * \returns a UTF-8 string of the user directory in platform-dependent
  *          notation. NULL if there's a problem (creating directory failed,
  *          etc.).
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h
@@ -19,10 +19,12 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: GameController */
+
 /**
- *  \file SDL_gamecontroller.h
+ * # CategoryGameController
  *
- *  Include file for SDL game controller event handling
+ * Include file for SDL game controller event handling
  */
 
 #ifndef SDL_gamecontroller_h_
@@ -44,7 +46,7 @@
  *  \file SDL_gamecontroller.h
  *
  *  In order to use these functions, SDL_Init() must have been called
- *  with the ::SDL_INIT_GAMECONTROLLER flag.  This causes SDL to scan the system
+ *  with the SDL_INIT_GAMECONTROLLER flag.  This causes SDL to scan the system
  *  for game controllers, and load appropriate drivers.
  *
  *  If you would like to receive controller updates while the application
@@ -58,7 +60,7 @@
 struct _SDL_GameController;
 typedef struct _SDL_GameController SDL_GameController;
 
-typedef enum
+typedef enum SDL_GameControllerType
 {
     SDL_CONTROLLER_TYPE_UNKNOWN = 0,
     SDL_CONTROLLER_TYPE_XBOX360,
@@ -77,7 +79,7 @@
     SDL_CONTROLLER_TYPE_MAX
 } SDL_GameControllerType;
 
-typedef enum
+typedef enum SDL_GameControllerBindType
 {
     SDL_CONTROLLER_BINDTYPE_NONE = 0,
     SDL_CONTROLLER_BINDTYPE_BUTTON,
@@ -86,7 +88,7 @@
 } SDL_GameControllerBindType;
 
 /**
- *  Get the SDL joystick layer binding for this controller button/axis mapping
+ * Get the SDL joystick layer binding for this controller button/axis mapping
  */
 typedef struct SDL_GameControllerButtonBind
 {
@@ -144,6 +146,10 @@
  * If a new mapping is loaded for an already known controller GUID, the later
  * version will overwrite the one currently loaded.
  *
+ * If this function is called before SDL_Init, SDL will generate an
+ * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged
+ * in at the time that SDL_Init is called.
+ *
  * Mappings not belonging to the current platform or with no platform field
  * specified will be ignored (i.e. mappings for Linux will be ignored in
  * Windows, etc).
@@ -152,8 +158,8 @@
  * processing it, so take this into consideration if you are in a memory
  * constrained environment.
  *
- * \param rw the data stream for the mappings to be added
- * \param freerw non-zero to close the stream after being read
+ * \param rw the data stream for the mappings to be added.
+ * \param freerw non-zero to close the stream after being read.
  * \returns the number of mappings added or -1 on error; call SDL_GetError()
  *          for more information.
  *
@@ -162,13 +168,15 @@
  * \sa SDL_GameControllerAddMapping
  * \sa SDL_GameControllerAddMappingsFromFile
  * \sa SDL_GameControllerMappingForGUID
+ * \sa SDL_CONTROLLERDEVICEADDED
  */
 extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw);
 
 /**
- *  Load a set of mappings from a file, filtered by the current SDL_GetPlatform()
+ * Load a set of mappings from a file, filtered by the current
+ * SDL_GetPlatform()
  *
- *  Convenience macro.
+ * Convenience macro.
  */
 #define SDL_GameControllerAddMappingsFromFile(file)   SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1)
 
@@ -190,7 +198,11 @@
  * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7"
  * ```
  *
- * \param mappingString the mapping string
+ * If this function is called before SDL_Init, SDL will generate an
+ * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged
+ * in at the time that SDL_Init is called.
+ *
+ * \param mappingString the mapping string.
  * \returns 1 if a new mapping is added, 0 if an existing mapping is updated,
  *          -1 on error; call SDL_GetError() for more information.
  *
@@ -198,6 +210,7 @@
  *
  * \sa SDL_GameControllerMapping
  * \sa SDL_GameControllerMappingForGUID
+ * \sa SDL_CONTROLLERDEVICEADDED
  */
 extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString);
 
@@ -225,7 +238,7 @@
  *
  * The returned string must be freed with SDL_free().
  *
- * \param guid a structure containing the GUID for which a mapping is desired
+ * \param guid a structure containing the GUID for which a mapping is desired.
  * \returns a mapping string or NULL on error; call SDL_GetError() for more
  *          information.
  *
@@ -244,7 +257,7 @@
  * Details about mappings are discussed with SDL_GameControllerAddMapping().
  *
  * \param gamecontroller the game controller you want to get the current
- *                       mapping for
+ *                       mapping for.
  * \returns a string that has the controller's mapping or NULL if no mapping
  *          is available; call SDL_GetError() for more information.
  *
@@ -262,7 +275,7 @@
  * SDL_JoystickOpen().
  *
  * \param joystick_index the device_index of a device, up to
- *                       SDL_NumJoysticks()
+ *                       SDL_NumJoysticks().
  * \returns SDL_TRUE if the given joystick is supported by the game controller
  *          interface, SDL_FALSE if it isn't or it's an invalid index.
  *
@@ -282,7 +295,7 @@
  * SDL_JoystickOpen().
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the implementation-dependent name for the game controller, or NULL
  *          if there is no name or the index is invalid.
  *
@@ -303,7 +316,7 @@
  * SDL_JoystickOpen().
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the implementation-dependent path for the game controller, or NULL
  *          if there is no path or the index is invalid.
  *
@@ -319,7 +332,7 @@
  * This can be called before any controllers are opened.
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the controller type.
  *
  * \since This function is available since SDL 2.0.12.
@@ -332,7 +345,7 @@
  * This can be called before any controllers are opened.
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if
  *          no mapping is available.
  *
@@ -352,7 +365,7 @@
  * be used there instead.
  *
  * \param joystick_index the device_index of a device, up to
- *                       SDL_NumJoysticks()
+ *                       SDL_NumJoysticks().
  * \returns a gamecontroller identifier or NULL if an error occurred; call
  *          SDL_GetError() for more information.
  *
@@ -367,7 +380,7 @@
 /**
  * Get the SDL_GameController associated with an instance id.
  *
- * \param joyid the instance id to get the SDL_GameController for
+ * \param joyid the instance id to get the SDL_GameController for.
  * \returns an SDL_GameController on success or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -399,7 +412,7 @@
  * it takes a controller identifier instead of the (unstable) device index.
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  * \returns the implementation dependent name for the game controller, or NULL
  *          if there is no name or the identifier passed is invalid.
  *
@@ -417,7 +430,7 @@
  * it takes a controller identifier instead of the (unstable) device index.
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  * \returns the implementation dependent path for the game controller, or NULL
  *          if there is no path or the identifier passed is invalid.
  *
@@ -527,8 +540,8 @@
 /**
  * Get the Steam Input handle of an opened controller, if available.
  *
- * Returns an InputHandle_t for the controller that can be used with Steam Input API:
- * https://partner.steamgames.com/doc/api/ISteamInput
+ * Returns an InputHandle_t for the controller that can be used with Steam
+ * Input API: https://partner.steamgames.com/doc/api/ISteamInput
  *
  * \param gamecontroller the game controller object to query.
  * \returns the gamepad handle, or 0 if unavailable.
@@ -542,7 +555,7 @@
  * Check if a controller has been opened and is currently connected.
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  * \returns SDL_TRUE if the controller has been opened and is currently
  *          connected, or SDL_FALSE if not.
  *
@@ -567,7 +580,7 @@
  * cause SDL to crash.
  *
  * \param gamecontroller the game controller object that you want to get a
- *                       joystick from
+ *                       joystick from.
  * \returns a SDL_Joystick object; call SDL_GetError() for more information.
  *
  * \since This function is available since SDL 2.0.0.
@@ -584,7 +597,7 @@
  * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0,
  * and 1 will have any effect. Other numbers will just be returned.
  *
- * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`
+ * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`.
  * \returns the same value passed to the function, with exception to -1
  *          (SDL_QUERY), which will return the current state.
  *
@@ -607,17 +620,19 @@
 
 
 /**
- *  The list of axes available from a controller
+ * The list of axes available from a controller
  *
- *  Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX,
- *  and are centered within ~8000 of zero, though advanced UI will allow users to set
- *  or autodetect the dead zone, which varies between controllers.
+ * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to
+ * SDL_JOYSTICK_AXIS_MAX, and are centered within ~8000 of zero, though
+ * advanced UI will allow users to set or autodetect the dead zone, which
+ * varies between controllers.
  *
- *  Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX
- *  (fully pressed) when reported by SDL_GameControllerGetAxis(). Note that this is not the
- *  same range that will be reported by the lower-level SDL_GetJoystickAxis().
+ * Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX (fully
+ * pressed) when reported by SDL_GameControllerGetAxis(). Note that this is
+ * not the same range that will be reported by the lower-level
+ * SDL_GetJoystickAxis().
  */
-typedef enum
+typedef enum SDL_GameControllerAxis
 {
     SDL_CONTROLLER_AXIS_INVALID = -1,
     SDL_CONTROLLER_AXIS_LEFTX,
@@ -641,7 +656,7 @@
  * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`,
  * respectively.
  *
- * \param str string representing a SDL_GameController axis
+ * \param str string representing a SDL_GameController axis.
  * \returns the SDL_GameControllerAxis enum corresponding to the input string,
  *          or `SDL_CONTROLLER_AXIS_INVALID` if no match was found.
  *
@@ -656,7 +671,7 @@
  *
  * The caller should not SDL_free() the returned string.
  *
- * \param axis an enum value for a given SDL_GameControllerAxis
+ * \param axis an enum value for a given SDL_GameControllerAxis.
  * \returns a string for the given axis, or NULL if an invalid axis is
  *          specified. The string returned is of the format used by
  *          SDL_GameController mapping strings.
@@ -670,8 +685,8 @@
 /**
  * Get the SDL joystick layer binding for a controller axis mapping.
  *
- * \param gamecontroller a game controller
- * \param axis an axis enum value (one of the SDL_GameControllerAxis values)
+ * \param gamecontroller a game controller.
+ * \param axis an axis enum value (one of the SDL_GameControllerAxis values).
  * \returns a SDL_GameControllerButtonBind describing the bind. On failure
  *          (like the given Controller axis doesn't exist on the device), its
  *          `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`.
@@ -690,8 +705,8 @@
  * This merely reports whether the controller's mapping defined this axis, as
  * that is all the information SDL has about the physical device.
  *
- * \param gamecontroller a game controller
- * \param axis an axis enum value (an SDL_GameControllerAxis value)
+ * \param gamecontroller a game controller.
+ * \param axis an axis enum value (an SDL_GameControllerAxis value).
  * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -704,16 +719,15 @@
  *
  * The axis indices start at index 0.
  *
- * For thumbsticks, the state is a value ranging from -32768 (up/left)
- * to 32767 (down/right).
+ * For thumbsticks, the state is a value ranging from -32768 (up/left) to
+ * 32767 (down/right).
  *
- * Triggers range from 0 when released to 32767 when fully pressed, and
- * never return a negative value. Note that this differs from the value
- * reported by the lower-level SDL_GetJoystickAxis(), which normally uses
- * the full range.
+ * Triggers range from 0 when released to 32767 when fully pressed, and never
+ * return a negative value. Note that this differs from the value reported by
+ * the lower-level SDL_JoystickGetAxis(), which normally uses the full range.
  *
- * \param gamecontroller a game controller
- * \param axis an axis index (one of the SDL_GameControllerAxis values)
+ * \param gamecontroller a game controller.
+ * \param axis an axis index (one of the SDL_GameControllerAxis values).
  * \returns axis state (including 0) on success or 0 (also) on failure; call
  *          SDL_GetError() for more information.
  *
@@ -725,9 +739,9 @@
 SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis);
 
 /**
- *  The list of buttons available from a controller
+ * The list of buttons available from a controller
  */
-typedef enum
+typedef enum SDL_GameControllerButton
 {
     SDL_CONTROLLER_BUTTON_INVALID = -1,
     SDL_CONTROLLER_BUTTON_A,
@@ -762,7 +776,7 @@
  * SDL_GameController mapping. You do not normally need to call this function
  * unless you are parsing SDL_GameController mappings in your own code.
  *
- * \param str string representing a SDL_GameController axis
+ * \param str string representing a SDL_GameController axis.
  * \returns the SDL_GameControllerButton enum corresponding to the input
  *          string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found.
  *
@@ -775,7 +789,7 @@
  *
  * The caller should not SDL_free() the returned string.
  *
- * \param button an enum value for a given SDL_GameControllerButton
+ * \param button an enum value for a given SDL_GameControllerButton.
  * \returns a string for the given button, or NULL if an invalid button is
  *          specified. The string returned is of the format used by
  *          SDL_GameController mapping strings.
@@ -789,8 +803,8 @@
 /**
  * Get the SDL joystick layer binding for a controller button mapping.
  *
- * \param gamecontroller a game controller
- * \param button an button enum value (an SDL_GameControllerButton value)
+ * \param gamecontroller a game controller.
+ * \param button an button enum value (an SDL_GameControllerButton value).
  * \returns a SDL_GameControllerButtonBind describing the bind. On failure
  *          (like the given Controller button doesn't exist on the device),
  *          its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`.
@@ -809,8 +823,8 @@
  * This merely reports whether the controller's mapping defined this button,
  * as that is all the information SDL has about the physical device.
  *
- * \param gamecontroller a game controller
- * \param button a button enum value (an SDL_GameControllerButton value)
+ * \param gamecontroller a game controller.
+ * \param button a button enum value (an SDL_GameControllerButton value).
  * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -821,8 +835,8 @@
 /**
  * Get the current state of a button on a game controller.
  *
- * \param gamecontroller a game controller
- * \param button a button index (one of the SDL_GameControllerButton values)
+ * \param gamecontroller a game controller.
+ * \param button a button index (one of the SDL_GameControllerButton values).
  * \returns 1 for pressed state or 0 for not pressed state or error; call
  *          SDL_GetError() for more information.
  *
@@ -858,8 +872,8 @@
 /**
  * Return whether a game controller has a particular sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -869,9 +883,9 @@
 /**
  * Set whether data reporting for a game controller sensor is enabled.
  *
- * \param gamecontroller The controller to update
- * \param type The type of sensor to enable/disable
- * \param enabled Whether data reporting should be enabled
+ * \param gamecontroller The controller to update.
+ * \param type The type of sensor to enable/disable.
+ * \param enabled Whether data reporting should be enabled.
  * \returns 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.14.
@@ -881,8 +895,8 @@
 /**
  * Query whether sensor data reporting is enabled for a game controller.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -893,8 +907,8 @@
  * Get the data rate (number of events per second) of a game controller
  * sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \return the data rate, or 0.0f if the data rate is not available.
  *
  * \since This function is available since SDL 2.0.16.
@@ -907,10 +921,10 @@
  * The number of values and interpretation of the data is sensor dependent.
  * See SDL_sensor.h for the details for each type of sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \return 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.14.
@@ -924,12 +938,12 @@
  * The number of values and interpretation of the data is sensor dependent.
  * See SDL_sensor.h for the details for each type of sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \param timestamp A pointer filled with the timestamp in microseconds of the
- *                  current sensor reading if available, or 0 if not
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ *                  current sensor reading if available, or 0 if not.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \return 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.26.0.
@@ -942,13 +956,13 @@
  * Each call to this function cancels any previous rumble effect, and calling
  * it with 0 intensity stops any rumbling.
  *
- * \param gamecontroller The controller to vibrate
+ * \param gamecontroller The controller to vibrate.
  * \param low_frequency_rumble The intensity of the low frequency (left)
- *                             rumble motor, from 0 to 0xFFFF
+ *                             rumble motor, from 0 to 0xFFFF.
  * \param high_frequency_rumble The intensity of the high frequency (right)
- *                              rumble motor, from 0 to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if rumble isn't supported on this controller
+ *                              rumble motor, from 0 to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if rumble isn't supported on this controller.
  *
  * \since This function is available since SDL 2.0.9.
  *
@@ -967,13 +981,13 @@
  * want the (more common) whole-controller rumble, use
  * SDL_GameControllerRumble() instead.
  *
- * \param gamecontroller The controller to vibrate
+ * \param gamecontroller The controller to vibrate.
  * \param left_rumble The intensity of the left trigger rumble motor, from 0
- *                    to 0xFFFF
+ *                    to 0xFFFF.
  * \param right_rumble The intensity of the right trigger rumble motor, from 0
- *                     to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if trigger rumble isn't supported on this controller
+ *                     to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if trigger rumble isn't supported on this controller.
  *
  * \since This function is available since SDL 2.0.14.
  *
@@ -984,9 +998,9 @@
 /**
  * Query whether a game controller has an LED.
  *
- * \param gamecontroller The controller to query
+ * \param gamecontroller The controller to query.
  * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a
- *          modifiable LED
+ *          modifiable LED.
  *
  * \since This function is available since SDL 2.0.14.
  */
@@ -995,9 +1009,9 @@
 /**
  * Query whether a game controller has rumble support.
  *
- * \param gamecontroller The controller to query
+ * \param gamecontroller The controller to query.
  * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble
- *          support
+ *          support.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1008,9 +1022,9 @@
 /**
  * Query whether a game controller has rumble support on triggers.
  *
- * \param gamecontroller The controller to query
+ * \param gamecontroller The controller to query.
  * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger
- *          rumble support
+ *          rumble support.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1021,11 +1035,11 @@
 /**
  * Update a game controller's LED color.
  *
- * \param gamecontroller The controller to update
- * \param red The intensity of the red LED
- * \param green The intensity of the green LED
- * \param blue The intensity of the blue LED
- * \returns 0, or -1 if this controller does not have a modifiable LED
+ * \param gamecontroller The controller to update.
+ * \param red The intensity of the red LED.
+ * \param green The intensity of the green LED.
+ * \param blue The intensity of the blue LED.
+ * \returns 0, or -1 if this controller does not have a modifiable LED.
  *
  * \since This function is available since SDL 2.0.14.
  */
@@ -1034,11 +1048,11 @@
 /**
  * Send a controller specific effect packet
  *
- * \param gamecontroller The controller to affect
- * \param data The data to send to the controller
- * \param size The size of the data to send to the controller
+ * \param gamecontroller The controller to affect.
+ * \param data The data to send to the controller.
+ * \param size The size of the data to send to the controller.
  * \returns 0, or -1 if this controller or driver doesn't support effect
- *          packets
+ *          packets.
  *
  * \since This function is available since SDL 2.0.16.
  */
@@ -1048,7 +1062,7 @@
  * Close a game controller previously opened with SDL_GameControllerOpen().
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1060,9 +1074,9 @@
  * Return the sfSymbolsName for a given button on a game controller on Apple
  * platforms.
  *
- * \param gamecontroller the controller to query
- * \param button a button on the game controller
- * \returns the sfSymbolsName or NULL if the name can't be found
+ * \param gamecontroller the controller to query.
+ * \param button a button on the game controller.
+ * \returns the sfSymbolsName or NULL if the name can't be found.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1074,9 +1088,9 @@
  * Return the sfSymbolsName for a given axis on a game controller on Apple
  * platforms.
  *
- * \param gamecontroller the controller to query
- * \param axis an axis on the game controller
- * \returns the sfSymbolsName or NULL if the name can't be found
+ * \param gamecontroller the controller to query.
+ * \param axis an axis on the game controller.
+ * \returns the sfSymbolsName or NULL if the name can't be found.
  *
  * \since This function is available since SDL 2.0.18.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gesture.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gesture.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_gesture.h
+ * # CategoryGesture
  *
- *  Include file for SDL gesture event handling.
+ * Include file for SDL gesture event handling.
  */
 
 #ifndef SDL_gesture_h_
@@ -51,7 +51,7 @@
  * If the parameter `touchId` is -1 (i.e., all devices), this function will
  * always return 1, regardless of whether there actually are any devices.
  *
- * \param touchId the touch device id, or -1 for all touch devices
+ * \param touchId the touch device id, or -1 for all touch devices.
  * \returns 1 on success or 0 if the specified device could not be found.
  *
  * \since This function is available since SDL 2.0.0.
@@ -64,7 +64,7 @@
 /**
  * Save all currently loaded Dollar Gesture templates.
  *
- * \param dst a SDL_RWops to save to
+ * \param dst a SDL_RWops to save to.
  * \returns the number of saved templates on success or 0 on failure; call
  *          SDL_GetError() for more information.
  *
@@ -78,8 +78,8 @@
 /**
  * Save a currently loaded Dollar Gesture template.
  *
- * \param gestureId a gesture id
- * \param dst a SDL_RWops to save to
+ * \param gestureId a gesture id.
+ * \param dst a SDL_RWops to save to.
  * \returns 1 on success or 0 on failure; call SDL_GetError() for more
  *          information.
  *
@@ -94,8 +94,8 @@
 /**
  * Load Dollar Gesture templates from a file.
  *
- * \param touchId a touch id
- * \param src a SDL_RWops to load from
+ * \param touchId a touch id.
+ * \param src a SDL_RWops to load from.
  * \returns the number of loaded templates on success or a negative error code
  *          (or 0) on failure; call SDL_GetError() for more information.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_guid.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_guid.h
@@ -19,10 +19,13 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: GUID */
+
 /**
- *  \file SDL_guid.h
+ * # CategoryGUID
  *
- *  Include file for handling ::SDL_GUID values.
+ * A GUID is a 128-bit value that represents something that is uniquely
+ * identifiable by this value: "globally unique."
  */
 
 #ifndef SDL_guid_h_
@@ -38,21 +41,25 @@
 #endif
 
 /**
- * An SDL_GUID is a 128-bit identifier for an input device that
- *   identifies that device across runs of SDL programs on the same
- *   platform.  If the device is detached and then re-attached to a
- *   different port, or if the base system is rebooted, the device
- *   should still report the same GUID.
+ * An SDL_GUID is a 128-bit identifier.
  *
- * GUIDs are as precise as possible but are not guaranteed to
- *   distinguish physically distinct but equivalent devices.  For
- *   example, two game controllers from the same vendor with the same
- *   product ID and revision may have the same GUID.
+ * This is an acronym for "Globally Unique ID."
  *
- * GUIDs may be platform-dependent (i.e., the same device may report
- *   different GUIDs on different operating systems).
+ * While a GUID can be used to assign a unique value to almost anything, in
+ * SDL these are largely used to identify input devices across runs of SDL
+ * programs on the same platform.If the device is detached and then
+ * re-attached to a different port, or if the base system is rebooted, the
+ * device should still report the same GUID.
+ *
+ * GUIDs are as precise as possible but are not guaranteed to distinguish
+ * physically distinct but equivalent devices. For example, two game
+ * controllers from the same vendor with the same product ID and revision may
+ * have the same GUID.
+ *
+ * GUIDs may be platform-dependent (i.e., the same device may report different
+ * GUIDs on different operating systems).
  */
-typedef struct {
+typedef struct SDL_GUID {
     Uint8 data[16];
 } SDL_GUID;
 
@@ -59,13 +66,13 @@
 /* Function prototypes */
 
 /**
- * Get an ASCII string representation for a given ::SDL_GUID.
+ * Get an ASCII string representation for a given SDL_GUID.
  *
  * You should supply at least 33 bytes for pszGUID.
  *
- * \param guid the ::SDL_GUID you wish to convert to string
- * \param pszGUID buffer in which to write the ASCII string
- * \param cbGUID the size of pszGUID
+ * \param guid the SDL_GUID you wish to convert to string.
+ * \param pszGUID buffer in which to write the ASCII string.
+ * \param cbGUID the size of pszGUID.
  *
  * \since This function is available since SDL 2.24.0.
  *
@@ -74,14 +81,14 @@
 extern DECLSPEC void SDLCALL SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID);
 
 /**
- * Convert a GUID string into a ::SDL_GUID structure.
+ * Convert a GUID string into a SDL_GUID structure.
  *
  * Performs no error checking. If this function is given a string containing
  * an invalid GUID, the function will silently succeed, but the GUID generated
  * will not be useful.
  *
- * \param pchGUID string containing an ASCII representation of a GUID
- * \returns a ::SDL_GUID structure.
+ * \param pchGUID string containing an ASCII representation of a GUID.
+ * \returns a SDL_GUID structure.
  *
  * \since This function is available since SDL 2.24.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_haptic.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_haptic.h
@@ -20,24 +20,25 @@
 */
 
 /**
- *  \file SDL_haptic.h
+ * # CategoryHaptic
  *
- *  \brief The SDL haptic subsystem allows you to control haptic (force feedback)
- *         devices.
+ * SDL haptic subsystem allows you to control haptic (force feedback) devices.
  *
- *  The basic usage is as follows:
- *   - Initialize the subsystem (::SDL_INIT_HAPTIC).
- *   - Open a haptic device.
- *    - SDL_HapticOpen() to open from index.
- *    - SDL_HapticOpenFromJoystick() to open from an existing joystick.
- *   - Create an effect (::SDL_HapticEffect).
- *   - Upload the effect with SDL_HapticNewEffect().
- *   - Run the effect with SDL_HapticRunEffect().
- *   - (optional) Free the effect with SDL_HapticDestroyEffect().
- *   - Close the haptic device with SDL_HapticClose().
+ * The basic usage is as follows:
  *
- * \par Simple rumble example:
- * \code
+ * - Initialize the subsystem (SDL_INIT_HAPTIC).
+ * - Open a haptic device.
+ * - SDL_HapticOpen() to open from index.
+ * - SDL_HapticOpenFromJoystick() to open from an existing joystick.
+ * - Create an effect (SDL_HapticEffect).
+ * - Upload the effect with SDL_HapticNewEffect().
+ * - Run the effect with SDL_HapticRunEffect().
+ * - (optional) Free the effect with SDL_HapticDestroyEffect().
+ * - Close the haptic device with SDL_HapticClose().
+ *
+ * Simple rumble example:
+ *
+ * ```c
  *    SDL_Haptic *haptic;
  *
  *    // Open the device
@@ -56,10 +57,11 @@
  *
  *    // Clean up
  *    SDL_HapticClose( haptic );
- * \endcode
+ * ```
  *
- * \par Complete example:
- * \code
+ * Complete example:
+ *
+ * ```c
  * int test_haptic( SDL_Joystick * joystick ) {
  *    SDL_Haptic *haptic;
  *    SDL_HapticEffect effect;
@@ -101,7 +103,7 @@
  *
  *    return 0; // Success
  * }
- * \endcode
+ * ```
  */
 
 #ifndef SDL_haptic_h_
@@ -154,31 +156,29 @@
 /* @{ */
 
 /**
- *  \brief Constant effect supported.
+ * Constant effect supported.
  *
- *  Constant haptic effect.
+ * Constant haptic effect.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_CONSTANT   (1u<<0)
 
 /**
- *  \brief Sine wave effect supported.
+ * Sine wave effect supported.
  *
- *  Periodic haptic effect that simulates sine waves.
+ * Periodic haptic effect that simulates sine waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_SINE       (1u<<1)
 
 /**
- *  \brief Left/Right effect supported.
+ * Left/Right effect supported.
  *
- *  Haptic effect for direct control over high/low frequency motors.
+ * Haptic effect for direct control over high/low frequency motors.
  *
- *  \sa SDL_HapticLeftRight
- * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry,
- *          we ran out of bits, and this is important for XInput devices.
+ * \sa SDL_HapticLeftRight
  */
 #define SDL_HAPTIC_LEFTRIGHT     (1u<<2)
 
@@ -186,85 +186,85 @@
 /* #define SDL_HAPTIC_SQUARE     (1<<2) */
 
 /**
- *  \brief Triangle wave effect supported.
+ * Triangle wave effect supported.
  *
- *  Periodic haptic effect that simulates triangular waves.
+ * Periodic haptic effect that simulates triangular waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_TRIANGLE   (1u<<3)
 
 /**
- *  \brief Sawtoothup wave effect supported.
+ * Sawtoothup wave effect supported.
  *
- *  Periodic haptic effect that simulates saw tooth up waves.
+ * Periodic haptic effect that simulates saw tooth up waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_SAWTOOTHUP (1u<<4)
 
 /**
- *  \brief Sawtoothdown wave effect supported.
+ * Sawtoothdown wave effect supported.
  *
- *  Periodic haptic effect that simulates saw tooth down waves.
+ * Periodic haptic effect that simulates saw tooth down waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5)
 
 /**
- *  \brief Ramp effect supported.
+ * Ramp effect supported.
  *
- *  Ramp haptic effect.
+ * Ramp haptic effect.
  *
- *  \sa SDL_HapticRamp
+ * \sa SDL_HapticRamp
  */
 #define SDL_HAPTIC_RAMP       (1u<<6)
 
 /**
- *  \brief Spring effect supported - uses axes position.
+ * Spring effect supported - uses axes position.
  *
- *  Condition haptic effect that simulates a spring.  Effect is based on the
- *  axes position.
+ * Condition haptic effect that simulates a spring. Effect is based on the
+ * axes position.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_SPRING     (1u<<7)
 
 /**
- *  \brief Damper effect supported - uses axes velocity.
+ * Damper effect supported - uses axes velocity.
  *
- *  Condition haptic effect that simulates dampening.  Effect is based on the
- *  axes velocity.
+ * Condition haptic effect that simulates dampening. Effect is based on the
+ * axes velocity.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_DAMPER     (1u<<8)
 
 /**
- *  \brief Inertia effect supported - uses axes acceleration.
+ * Inertia effect supported - uses axes acceleration.
  *
- *  Condition haptic effect that simulates inertia.  Effect is based on the axes
- *  acceleration.
+ * Condition haptic effect that simulates inertia. Effect is based on the axes
+ * acceleration.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_INERTIA    (1u<<9)
 
 /**
- *  \brief Friction effect supported - uses axes movement.
+ * Friction effect supported - uses axes movement.
  *
- *  Condition haptic effect that simulates friction.  Effect is based on the
- *  axes movement.
+ * Condition haptic effect that simulates friction. Effect is based on the
+ * axes movement.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_FRICTION   (1u<<10)
 
 /**
- *  \brief Custom effect is supported.
+ * Custom effect is supported.
  *
- *  User defined custom haptic effect.
+ * User defined custom haptic effect.
  */
 #define SDL_HAPTIC_CUSTOM     (1u<<11)
 
@@ -273,39 +273,39 @@
 /* These last few are features the device has, not effects */
 
 /**
- *  \brief Device can set global gain.
+ * Device can set global gain.
  *
- *  Device supports setting the global gain.
+ * Device supports setting the global gain.
  *
- *  \sa SDL_HapticSetGain
+ * \sa SDL_HapticSetGain
  */
 #define SDL_HAPTIC_GAIN       (1u<<12)
 
 /**
- *  \brief Device can set autocenter.
+ * Device can set autocenter.
  *
- *  Device supports setting autocenter.
+ * Device supports setting autocenter.
  *
- *  \sa SDL_HapticSetAutocenter
+ * \sa SDL_HapticSetAutocenter
  */
 #define SDL_HAPTIC_AUTOCENTER (1u<<13)
 
 /**
- *  \brief Device can be queried for effect status.
+ * Device can be queried for effect status.
  *
- *  Device supports querying effect status.
+ * Device supports querying effect status.
  *
- *  \sa SDL_HapticGetEffectStatus
+ * \sa SDL_HapticGetEffectStatus
  */
 #define SDL_HAPTIC_STATUS     (1u<<14)
 
 /**
- *  \brief Device can be paused.
+ * Device can be paused.
  *
- *  Devices supports being paused.
+ * Devices supports being paused.
  *
- *  \sa SDL_HapticPause
- *  \sa SDL_HapticUnpause
+ * \sa SDL_HapticPause
+ * \sa SDL_HapticUnpause
  */
 #define SDL_HAPTIC_PAUSE      (1u<<15)
 
@@ -316,31 +316,33 @@
 /* @{ */
 
 /**
- *  \brief Uses polar coordinates for the direction.
+ * Uses polar coordinates for the direction.
  *
- *  \sa SDL_HapticDirection
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_POLAR      0
 
 /**
- *  \brief Uses cartesian coordinates for the direction.
+ * Uses cartesian coordinates for the direction.
  *
- *  \sa SDL_HapticDirection
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_CARTESIAN  1
 
 /**
- *  \brief Uses spherical coordinates for the direction.
+ * Uses spherical coordinates for the direction.
  *
- *  \sa SDL_HapticDirection
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_SPHERICAL  2
 
 /**
- *  \brief Use this value to play an effect on the steering wheel axis. This 
- *  provides better compatibility across platforms and devices as SDL will guess 
- *  the correct axis.
- *  \sa SDL_HapticDirection
+ * Use this value to play an effect on the steering wheel axis.
+ *
+ * This provides better compatibility across platforms and devices as SDL will
+ * guess the correct axis.
+ *
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_STEERING_AXIS 3
 
@@ -353,7 +355,7 @@
  */
 
 /**
- * \brief Used to play a device an infinite number of times.
+ * Used to play a device an infinite number of times.
  *
  * \sa SDL_HapticRunEffect
  */
@@ -361,77 +363,82 @@
 
 
 /**
- *  \brief Structure that represents a haptic direction.
+ * Structure that represents a haptic direction.
  *
- *  This is the direction where the force comes from,
- *  instead of the direction in which the force is exerted.
+ * This is the direction where the force comes from, instead of the direction
+ * in which the force is exerted.
  *
- *  Directions can be specified by:
- *   - ::SDL_HAPTIC_POLAR : Specified by polar coordinates.
- *   - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates.
- *   - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates.
+ * Directions can be specified by:
  *
- *  Cardinal directions of the haptic device are relative to the positioning
- *  of the device.  North is considered to be away from the user.
+ * - SDL_HAPTIC_POLAR : Specified by polar coordinates.
+ * - SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates.
+ * - SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates.
  *
- *  The following diagram represents the cardinal directions:
- *  \verbatim
-                 .--.
-                 |__| .-------.
-                 |=.| |.-----.|
-                 |--| ||     ||
-                 |  | |'-----'|
-                 |__|~')_____('
-                   [ COMPUTER ]
-
-
-                     North (0,-1)
-                         ^
-                         |
-                         |
-   (-1,0)  West <----[ HAPTIC ]----> East (1,0)
-                         |
-                         |
-                         v
-                      South (0,1)
-
-
-                      [ USER ]
-                        \|||/
-                        (o o)
-                  ---ooO-(_)-Ooo---
-    \endverbatim
+ * Cardinal directions of the haptic device are relative to the positioning of
+ * the device. North is considered to be away from the user.
  *
- *  If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a
- *  degree starting north and turning clockwise.  ::SDL_HAPTIC_POLAR only uses
- *  the first \c dir parameter.  The cardinal directions would be:
- *   - North: 0 (0 degrees)
- *   - East: 9000 (90 degrees)
- *   - South: 18000 (180 degrees)
- *   - West: 27000 (270 degrees)
+ * The following diagram represents the cardinal directions:
  *
- *  If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions
- *  (X axis, Y axis and Z axis (with 3 axes)).  ::SDL_HAPTIC_CARTESIAN uses
- *  the first three \c dir parameters.  The cardinal directions would be:
- *   - North:  0,-1, 0
- *   - East:   1, 0, 0
- *   - South:  0, 1, 0
- *   - West:  -1, 0, 0
+ * ```
+ *                .--.
+ *                |__| .-------.
+ *                |=.| |.-----.|
+ *                |--| ||     ||
+ *                |  | |'-----'|
+ *                |__|~')_____('
+ *                  [ COMPUTER ]
  *
- *  The Z axis represents the height of the effect if supported, otherwise
- *  it's unused.  In cartesian encoding (1, 2) would be the same as (2, 4), you
- *  can use any multiple you want, only the direction matters.
  *
- *  If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations.
- *  The first two \c dir parameters are used.  The \c dir parameters are as
- *  follows (all values are in hundredths of degrees):
- *   - Degrees from (1, 0) rotated towards (0, 1).
- *   - Degrees towards (0, 0, 1) (device needs at least 3 axes).
+ *                    North (0,-1)
+ *                        ^
+ *                        |
+ *                        |
+ *  (-1,0)  West <----[ HAPTIC ]----> East (1,0)
+ *                        |
+ *                        |
+ *                        v
+ *                     South (0,1)
  *
  *
- *  Example of force coming from the south with all encodings (force coming
- *  from the south means the user will have to pull the stick to counteract):
- *  \code
+ *                     [ USER ]
+ *                       \|||/
+ *                       (o o)
+ *                 ---ooO-(_)-Ooo---
+ * ```
+ *
+ * If type is SDL_HAPTIC_POLAR, direction is encoded by hundredths of a degree
+ * starting north and turning clockwise. SDL_HAPTIC_POLAR only uses the first
+ * `dir` parameter. The cardinal directions would be:
+ *
+ * - North: 0 (0 degrees)
+ * - East: 9000 (90 degrees)
+ * - South: 18000 (180 degrees)
+ * - West: 27000 (270 degrees)
+ *
+ * If type is SDL_HAPTIC_CARTESIAN, direction is encoded by three positions (X
+ * axis, Y axis and Z axis (with 3 axes)). SDL_HAPTIC_CARTESIAN uses the first
+ * three `dir` parameters. The cardinal directions would be:
+ *
+ * - North: 0,-1, 0
+ * - East: 1, 0, 0
+ * - South: 0, 1, 0
+ * - West: -1, 0, 0
+ *
+ * The Z axis represents the height of the effect if supported, otherwise it's
+ * unused. In cartesian encoding (1, 2) would be the same as (2, 4), you can
+ * use any multiple you want, only the direction matters.
+ *
+ * If type is SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. The
+ * first two `dir` parameters are used. The `dir` parameters are as follows
+ * (all values are in hundredths of degrees):
+ *
+ * - Degrees from (1, 0) rotated towards (0, 1).
+ * - Degrees towards (0, 0, 1) (device needs at least 3 axes).
+ *
+ * Example of force coming from the south with all encodings (force coming
+ * from the south means the user will have to pull the stick to counteract):
+ *
+ * ```c
  *  SDL_HapticDirection direction;
  *
  *  // Cartesian directions
@@ -447,14 +454,14 @@
  *  // Spherical coordinates
  *  direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding
  *  direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters.
- *  \endcode
+ * ```
  *
- *  \sa SDL_HAPTIC_POLAR
- *  \sa SDL_HAPTIC_CARTESIAN
- *  \sa SDL_HAPTIC_SPHERICAL
- *  \sa SDL_HAPTIC_STEERING_AXIS
- *  \sa SDL_HapticEffect
- *  \sa SDL_HapticNumAxes
+ * \sa SDL_HAPTIC_POLAR
+ * \sa SDL_HAPTIC_CARTESIAN
+ * \sa SDL_HAPTIC_SPHERICAL
+ * \sa SDL_HAPTIC_STEERING_AXIS
+ * \sa SDL_HapticEffect
+ * \sa SDL_HapticNumAxes
  */
 typedef struct SDL_HapticDirection
 {
@@ -464,20 +471,20 @@
 
 
 /**
- *  \brief A structure containing a template for a Constant effect.
+ * A structure containing a template for a Constant effect.
  *
- *  This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect.
+ * This struct is exclusively for the SDL_HAPTIC_CONSTANT effect.
  *
- *  A constant effect applies a constant force in the specified direction
- *  to the joystick.
+ * A constant effect applies a constant force in the specified direction to
+ * the joystick.
  *
- *  \sa SDL_HAPTIC_CONSTANT
- *  \sa SDL_HapticEffect
+ * \sa SDL_HAPTIC_CONSTANT
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticConstant
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_CONSTANT */
+    Uint16 type;            /**< SDL_HAPTIC_CONSTANT */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -499,68 +506,71 @@
 } SDL_HapticConstant;
 
 /**
- *  \brief A structure containing a template for a Periodic effect.
+ * A structure containing a template for a Periodic effect.
  *
- *  The struct handles the following effects:
- *   - ::SDL_HAPTIC_SINE
- *   - ::SDL_HAPTIC_LEFTRIGHT
- *   - ::SDL_HAPTIC_TRIANGLE
- *   - ::SDL_HAPTIC_SAWTOOTHUP
- *   - ::SDL_HAPTIC_SAWTOOTHDOWN
+ * The struct handles the following effects:
  *
- *  A periodic effect consists in a wave-shaped effect that repeats itself
- *  over time.  The type determines the shape of the wave and the parameters
- *  determine the dimensions of the wave.
+ * - SDL_HAPTIC_SINE
+ * - SDL_HAPTIC_SQUARE
+ * - SDL_HAPTIC_TRIANGLE
+ * - SDL_HAPTIC_SAWTOOTHUP
+ * - SDL_HAPTIC_SAWTOOTHDOWN
  *
- *  Phase is given by hundredth of a degree meaning that giving the phase a value
- *  of 9000 will displace it 25% of its period.  Here are sample values:
- *   -     0: No phase displacement.
- *   -  9000: Displaced 25% of its period.
- *   - 18000: Displaced 50% of its period.
- *   - 27000: Displaced 75% of its period.
- *   - 36000: Displaced 100% of its period, same as 0, but 0 is preferred.
+ * A periodic effect consists in a wave-shaped effect that repeats itself over
+ * time. The type determines the shape of the wave and the parameters
+ * determine the dimensions of the wave.
  *
- *  Examples:
- *  \verbatim
-    SDL_HAPTIC_SINE
-      __      __      __      __
-     /  \    /  \    /  \    /
-    /    \__/    \__/    \__/
-
-    SDL_HAPTIC_SQUARE
-     __    __    __    __    __
-    |  |  |  |  |  |  |  |  |  |
-    |  |__|  |__|  |__|  |__|  |
-
-    SDL_HAPTIC_TRIANGLE
-      /\    /\    /\    /\    /\
-     /  \  /  \  /  \  /  \  /
-    /    \/    \/    \/    \/
-
-    SDL_HAPTIC_SAWTOOTHUP
-      /|  /|  /|  /|  /|  /|  /|
-     / | / | / | / | / | / | / |
-    /  |/  |/  |/  |/  |/  |/  |
-
-    SDL_HAPTIC_SAWTOOTHDOWN
-    \  |\  |\  |\  |\  |\  |\  |
-     \ | \ | \ | \ | \ | \ | \ |
-      \|  \|  \|  \|  \|  \|  \|
-    \endverbatim
+ * Phase is given by hundredth of a degree meaning that giving the phase a
+ * value of 9000 will displace it 25% of its period. Here are sample values:
  *
- *  \sa SDL_HAPTIC_SINE
- *  \sa SDL_HAPTIC_LEFTRIGHT
- *  \sa SDL_HAPTIC_TRIANGLE
- *  \sa SDL_HAPTIC_SAWTOOTHUP
- *  \sa SDL_HAPTIC_SAWTOOTHDOWN
- *  \sa SDL_HapticEffect
+ * - 0: No phase displacement.
+ * - 9000: Displaced 25% of its period.
+ * - 18000: Displaced 50% of its period.
+ * - 27000: Displaced 75% of its period.
+ * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred.
+ *
+ * Examples:
+ *
+ * ```
+ *   SDL_HAPTIC_SINE
+ *     __      __      __      __
+ *    /  \    /  \    /  \    /
+ *   /    \__/    \__/    \__/
+ *
+ *   SDL_HAPTIC_SQUARE
+ *    __    __    __    __    __
+ *   |  |  |  |  |  |  |  |  |  |
+ *   |  |__|  |__|  |__|  |__|  |
+ *
+ *   SDL_HAPTIC_TRIANGLE
+ *     /\    /\    /\    /\    /\
+ *    /  \  /  \  /  \  /  \  /
+ *   /    \/    \/    \/    \/
+ *
+ *   SDL_HAPTIC_SAWTOOTHUP
+ *     /|  /|  /|  /|  /|  /|  /|
+ *    / | / | / | / | / | / | / |
+ *   /  |/  |/  |/  |/  |/  |/  |
+ *
+ *   SDL_HAPTIC_SAWTOOTHDOWN
+ *   \  |\  |\  |\  |\  |\  |\  |
+ *    \ | \ | \ | \ | \ | \ | \ |
+ *     \|  \|  \|  \|  \|  \|  \|
+ * ```
+ *
+ * \sa SDL_HAPTIC_SINE
+ * \sa SDL_HAPTIC_LEFTRIGHT
+ * \sa SDL_HAPTIC_TRIANGLE
+ * \sa SDL_HAPTIC_SAWTOOTHUP
+ * \sa SDL_HAPTIC_SAWTOOTHDOWN
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticPeriodic
 {
     /* Header */
-    Uint16 type;        /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT,
-                             ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or
-                             ::SDL_HAPTIC_SAWTOOTHDOWN */
+    Uint16 type;        /**< SDL_HAPTIC_SINE, SDL_HAPTIC_LEFTRIGHT,
+                             SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or
+                             SDL_HAPTIC_SAWTOOTHDOWN */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -585,35 +595,36 @@
 } SDL_HapticPeriodic;
 
 /**
- *  \brief A structure containing a template for a Condition effect.
+ * A structure containing a template for a Condition effect.
  *
- *  The struct handles the following effects:
- *   - ::SDL_HAPTIC_SPRING: Effect based on axes position.
- *   - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity.
- *   - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration.
- *   - ::SDL_HAPTIC_FRICTION: Effect based on axes movement.
+ * The struct handles the following effects:
  *
- *  Direction is handled by condition internals instead of a direction member.
- *  The condition effect specific members have three parameters.  The first
- *  refers to the X axis, the second refers to the Y axis and the third
- *  refers to the Z axis.  The right terms refer to the positive side of the
- *  axis and the left terms refer to the negative side of the axis.  Please
- *  refer to the ::SDL_HapticDirection diagram for which side is positive and
- *  which is negative.
+ * - SDL_HAPTIC_SPRING: Effect based on axes position.
+ * - SDL_HAPTIC_DAMPER: Effect based on axes velocity.
+ * - SDL_HAPTIC_INERTIA: Effect based on axes acceleration.
+ * - SDL_HAPTIC_FRICTION: Effect based on axes movement.
  *
- *  \sa SDL_HapticDirection
- *  \sa SDL_HAPTIC_SPRING
- *  \sa SDL_HAPTIC_DAMPER
- *  \sa SDL_HAPTIC_INERTIA
- *  \sa SDL_HAPTIC_FRICTION
- *  \sa SDL_HapticEffect
+ * Direction is handled by condition internals instead of a direction member.
+ * The condition effect specific members have three parameters. The first
+ * refers to the X axis, the second refers to the Y axis and the third refers
+ * to the Z axis. The right terms refer to the positive side of the axis and
+ * the left terms refer to the negative side of the axis. Please refer to the
+ * SDL_HapticDirection diagram for which side is positive and which is
+ * negative.
+ *
+ * \sa SDL_HapticDirection
+ * \sa SDL_HAPTIC_SPRING
+ * \sa SDL_HAPTIC_DAMPER
+ * \sa SDL_HAPTIC_INERTIA
+ * \sa SDL_HAPTIC_FRICTION
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticCondition
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER,
-                                 ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */
-    SDL_HapticDirection direction;  /**< Direction of the effect - Not used ATM. */
+    Uint16 type;            /**< SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER,
+                                 SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION */
+    SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
     Uint32 length;          /**< Duration of the effect. */
@@ -633,22 +644,22 @@
 } SDL_HapticCondition;
 
 /**
- *  \brief A structure containing a template for a Ramp effect.
+ * A structure containing a template for a Ramp effect.
  *
- *  This struct is exclusively for the ::SDL_HAPTIC_RAMP effect.
+ * This struct is exclusively for the SDL_HAPTIC_RAMP effect.
  *
- *  The ramp effect starts at start strength and ends at end strength.
- *  It augments in linear fashion.  If you use attack and fade with a ramp
- *  the effects get added to the ramp effect making the effect become
- *  quadratic instead of linear.
+ * The ramp effect starts at start strength and ends at end strength. It
+ * augments in linear fashion. If you use attack and fade with a ramp the
+ * effects get added to the ramp effect making the effect become quadratic
+ * instead of linear.
  *
- *  \sa SDL_HAPTIC_RAMP
- *  \sa SDL_HapticEffect
+ * \sa SDL_HAPTIC_RAMP
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticRamp
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_RAMP */
+    Uint16 type;            /**< SDL_HAPTIC_RAMP */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -671,9 +682,9 @@
 } SDL_HapticRamp;
 
 /**
- * \brief A structure containing a template for a Left/Right effect.
+ * A structure containing a template for a Left/Right effect.
  *
- * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect.
+ * This struct is exclusively for the SDL_HAPTIC_LEFTRIGHT effect.
  *
  * The Left/Right effect is used to explicitly control the large and small
  * motors, commonly found in modern game controllers. The small (right) motor
@@ -685,7 +696,7 @@
 typedef struct SDL_HapticLeftRight
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_LEFTRIGHT */
+    Uint16 type;            /**< SDL_HAPTIC_LEFTRIGHT */
 
     /* Replay */
     Uint32 length;          /**< Duration of the effect in milliseconds. */
@@ -696,24 +707,24 @@
 } SDL_HapticLeftRight;
 
 /**
- *  \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect.
+ * A structure containing a template for the SDL_HAPTIC_CUSTOM effect.
  *
- *  This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect.
+ * This struct is exclusively for the SDL_HAPTIC_CUSTOM effect.
  *
- *  A custom force feedback effect is much like a periodic effect, where the
- *  application can define its exact shape.  You will have to allocate the
- *  data yourself.  Data should consist of channels * samples Uint16 samples.
+ * A custom force feedback effect is much like a periodic effect, where the
+ * application can define its exact shape. You will have to allocate the data
+ * yourself. Data should consist of channels * samples Uint16 samples.
  *
- *  If channels is one, the effect is rotated using the defined direction.
- *  Otherwise it uses the samples in data for the different axes.
+ * If channels is one, the effect is rotated using the defined direction.
+ * Otherwise it uses the samples in data for the different axes.
  *
- *  \sa SDL_HAPTIC_CUSTOM
- *  \sa SDL_HapticEffect
+ * \sa SDL_HAPTIC_CUSTOM
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticCustom
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_CUSTOM */
+    Uint16 type;            /**< SDL_HAPTIC_CUSTOM */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -738,27 +749,28 @@
 } SDL_HapticCustom;
 
 /**
- *  \brief The generic template for any haptic effect.
+ * The generic template for any haptic effect.
  *
- *  All values max at 32767 (0x7FFF).  Signed values also can be negative.
- *  Time values unless specified otherwise are in milliseconds.
+ * All values max at 32767 (0x7FFF). Signed values also can be negative. Time
+ * values unless specified otherwise are in milliseconds.
  *
- *  You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767
- *  value.  Neither delay, interval, attack_length nor fade_length support
- *  ::SDL_HAPTIC_INFINITY.  Fade will also not be used since effect never ends.
+ * You can also pass SDL_HAPTIC_INFINITY to length instead of a 0-32767 value.
+ * Neither delay, interval, attack_length nor fade_length support
+ * SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends.
  *
- *  Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of
- *  ::SDL_HAPTIC_INFINITY.
+ * Additionally, the SDL_HAPTIC_RAMP effect does not support a duration of
+ * SDL_HAPTIC_INFINITY.
  *
- *  Button triggers may not be supported on all devices, it is advised to not
- *  use them if possible.  Buttons start at index 1 instead of index 0 like
- *  the joystick.
+ * Button triggers may not be supported on all devices, it is advised to not
+ * use them if possible. Buttons start at index 1 instead of index 0 like the
+ * joystick.
  *
- *  If both attack_length and fade_level are 0, the envelope is not used,
- *  otherwise both values are used.
+ * If both attack_length and fade_level are 0, the envelope is not used,
+ * otherwise both values are used.
  *
- *  Common parts:
- *  \code
+ * Common parts:
+ *
+ * ```c
  *  // Replay - All effects have this
  *  Uint32 length;        // Duration of effect (ms).
  *  Uint16 delay;         // Delay before starting effect.
@@ -772,39 +784,39 @@
  *  Uint16 attack_level;  // Level at the start of the attack.
  *  Uint16 fade_length;   // Duration of the fade out (ms).
  *  Uint16 fade_level;    // Level at the end of the fade.
- *  \endcode
+ * ```
  *
+ * Here we have an example of a constant effect evolution in time:
  *
- *  Here we have an example of a constant effect evolution in time:
- *  \verbatim
-    Strength
-    ^
-    |
-    |    effect level -->  _________________
-    |                     /                 \
-    |                    /                   \
-    |                   /                     \
-    |                  /                       \
-    | attack_level --> |                        \
-    |                  |                        |  <---  fade_level
-    |
-    +--------------------------------------------------> Time
-                       [--]                 [---]
-                       attack_length        fade_length
-
-    [------------------][-----------------------]
-    delay               length
-    \endverbatim
+ * ```
+ *  Strength
+ *  ^
+ *  |
+ *  |    effect level -->  _________________
+ *  |                     /                 \
+ *  |                    /                   \
+ *  |                   /                     \
+ *  |                  /                       \
+ *  | attack_level --> |                        \
+ *  |                  |                        |  <---  fade_level
+ *  |
+ *  +--------------------------------------------------> Time
+ *                     [--]                 [---]
+ *                     attack_length        fade_length
  *
- *  Note either the attack_level or the fade_level may be above the actual
- *  effect level.
+ *  [------------------][-----------------------]
+ *  delay               length
+ * ```
  *
- *  \sa SDL_HapticConstant
- *  \sa SDL_HapticPeriodic
- *  \sa SDL_HapticCondition
- *  \sa SDL_HapticRamp
- *  \sa SDL_HapticLeftRight
- *  \sa SDL_HapticCustom
+ * Note either the attack_level or the fade_level may be above the actual
+ * effect level.
+ *
+ * \sa SDL_HapticConstant
+ * \sa SDL_HapticPeriodic
+ * \sa SDL_HapticCondition
+ * \sa SDL_HapticRamp
+ * \sa SDL_HapticLeftRight
+ * \sa SDL_HapticCustom
  */
 typedef union SDL_HapticEffect
 {
@@ -859,7 +871,7 @@
  * autocenter will be disabled. To modify these values use SDL_HapticSetGain()
  * and SDL_HapticSetAutocenter().
  *
- * \param device_index index of the device to open
+ * \param device_index index of the device to open.
  * \returns the device identifier or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -879,7 +891,7 @@
 /**
  * Check if the haptic device at the designated index has been opened.
  *
- * \param device_index the index of the device to query
+ * \param device_index the index of the device to query.
  * \returns 1 if it has been opened, 0 if it hasn't or on failure; call
  *          SDL_GetError() for more information.
  *
@@ -893,7 +905,7 @@
 /**
  * Get the index of a haptic device.
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns the index of the specified haptic device or a negative error code
  *          on failure; call SDL_GetError() for more information.
  *
@@ -931,7 +943,7 @@
 /**
  * Query if a joystick has haptic features.
  *
- * \param joystick the SDL_Joystick to test for haptic capabilities
+ * \param joystick the SDL_Joystick to test for haptic capabilities.
  * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -953,7 +965,7 @@
  * device will also get unallocated and you'll be unable to use force feedback
  * on that device.
  *
- * \param joystick the SDL_Joystick to create a haptic device from
+ * \param joystick the SDL_Joystick to create a haptic device from.
  * \returns a valid haptic device identifier on success or NULL on failure;
  *          call SDL_GetError() for more information.
  *
@@ -969,7 +981,7 @@
 /**
  * Close a haptic device previously opened with SDL_HapticOpen().
  *
- * \param haptic the SDL_Haptic device to close
+ * \param haptic the SDL_Haptic device to close.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -984,7 +996,7 @@
  * approximation. Always check to see if your created effect was actually
  * created and do not rely solely on SDL_HapticNumEffects().
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns the number of effects the haptic device can store or a negative
  *          error code on failure; call SDL_GetError() for more information.
  *
@@ -1000,7 +1012,7 @@
  *
  * This is not supported on all platforms, but will always return a value.
  *
- * \param haptic the SDL_Haptic device to query maximum playing effects
+ * \param haptic the SDL_Haptic device to query maximum playing effects.
  * \returns the number of effects the haptic device can play at the same time
  *          or a negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -1015,7 +1027,7 @@
 /**
  * Get the haptic device's supported features in bitwise manner.
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns a list of supported haptic features in bitwise manner (OR'd), or 0
  *          on failure; call SDL_GetError() for more information.
  *
@@ -1033,7 +1045,7 @@
  * The number of haptic axes might be useful if working with the
  * SDL_HapticDirection effect.
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns the number of axes on success or a negative error code on failure;
  *          call SDL_GetError() for more information.
  *
@@ -1044,8 +1056,8 @@
 /**
  * Check to see if an effect is supported by a haptic device.
  *
- * \param haptic the SDL_Haptic device to query
- * \param effect the desired effect to query
+ * \param haptic the SDL_Haptic device to query.
+ * \param effect the desired effect to query.
  * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -1062,9 +1074,9 @@
 /**
  * Create a new haptic effect on a specified device.
  *
- * \param haptic an SDL_Haptic device to create the effect on
+ * \param haptic an SDL_Haptic device to create the effect on.
  * \param effect an SDL_HapticEffect structure containing the properties of
- *               the effect to create
+ *               the effect to create.
  * \returns the ID of the effect on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -1085,10 +1097,10 @@
  * start playing from the start. You also cannot change the type either when
  * running SDL_HapticUpdateEffect().
  *
- * \param haptic the SDL_Haptic device that has the effect
- * \param effect the identifier of the effect to update
+ * \param haptic the SDL_Haptic device that has the effect.
+ * \param effect the identifier of the effect to update.
  * \param data an SDL_HapticEffect structure containing the new effect
- *             properties to use
+ *             properties to use.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1111,10 +1123,10 @@
  * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY`
  * instead.
  *
- * \param haptic the SDL_Haptic device to run the effect on
- * \param effect the ID of the haptic effect to run
+ * \param haptic the SDL_Haptic device to run the effect on.
+ * \param effect the ID of the haptic effect to run.
  * \param iterations the number of iterations to run the effect; use
- *                   `SDL_HAPTIC_INFINITY` to repeat forever
+ *                   `SDL_HAPTIC_INFINITY` to repeat forever.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1133,8 +1145,8 @@
  *
  * *
  *
- * \param haptic the SDL_Haptic device to stop the effect on
- * \param effect the ID of the haptic effect to stop
+ * \param haptic the SDL_Haptic device to stop the effect on.
+ * \param effect the ID of the haptic effect to stop.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1152,8 +1164,8 @@
  * This will stop the effect if it's running. Effects are automatically
  * destroyed when the device is closed.
  *
- * \param haptic the SDL_Haptic device to destroy the effect on
- * \param effect the ID of the haptic effect to destroy
+ * \param haptic the SDL_Haptic device to destroy the effect on.
+ * \param effect the ID of the haptic effect to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1167,8 +1179,8 @@
  *
  * Device must support the SDL_HAPTIC_STATUS feature.
  *
- * \param haptic the SDL_Haptic device to query for the effect status on
- * \param effect the ID of the haptic effect to query its status
+ * \param haptic the SDL_Haptic device to query for the effect status on.
+ * \param effect the ID of the haptic effect to query its status.
  * \returns 0 if it isn't playing, 1 if it is playing, or a negative error
  *          code on failure; call SDL_GetError() for more information.
  *
@@ -1190,8 +1202,9 @@
  * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the
  * maximum.
  *
- * \param haptic the SDL_Haptic device to set the gain on
- * \param gain value to set the gain to, should be between 0 and 100 (0 - 100)
+ * \param haptic the SDL_Haptic device to set the gain on.
+ * \param gain value to set the gain to, should be between 0 and 100 (0 -
+ *             100).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1209,8 +1222,8 @@
  *
  * Device must support the SDL_HAPTIC_AUTOCENTER feature.
  *
- * \param haptic the SDL_Haptic device to set autocentering on
- * \param autocenter value to set autocenter to (0-100)
+ * \param haptic the SDL_Haptic device to set autocentering on.
+ * \param autocenter value to set autocenter to (0-100).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1230,7 +1243,7 @@
  * Do not modify the effects nor add new ones while the device is paused. That
  * can cause all sorts of weird errors.
  *
- * \param haptic the SDL_Haptic device to pause
+ * \param haptic the SDL_Haptic device to pause.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1245,7 +1258,7 @@
  *
  * Call to unpause after SDL_HapticPause().
  *
- * \param haptic the SDL_Haptic device to unpause
+ * \param haptic the SDL_Haptic device to unpause.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1258,7 +1271,7 @@
 /**
  * Stop all the currently playing effects on a haptic device.
  *
- * \param haptic the SDL_Haptic device to stop
+ * \param haptic the SDL_Haptic device to stop.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1269,7 +1282,7 @@
 /**
  * Check whether rumble is supported on a haptic device.
  *
- * \param haptic haptic device to check for rumble support
+ * \param haptic haptic device to check for rumble support.
  * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -1285,7 +1298,7 @@
 /**
  * Initialize a haptic device for simple rumble playback.
  *
- * \param haptic the haptic device to initialize for simple rumble playback
+ * \param haptic the haptic device to initialize for simple rumble playback.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1301,9 +1314,9 @@
 /**
  * Run a simple rumble effect on a haptic device.
  *
- * \param haptic the haptic device to play the rumble effect on
- * \param strength strength of the rumble to play as a 0-1 float value
- * \param length length of the rumble to play in milliseconds
+ * \param haptic the haptic device to play the rumble effect on.
+ * \param strength strength of the rumble to play as a 0-1 float value.
+ * \param length length of the rumble to play in milliseconds.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1318,7 +1331,7 @@
 /**
  * Stop the simple rumble on a haptic device.
  *
- * \param haptic the haptic device to stop the rumble effect on
+ * \param haptic the haptic device to stop the rumble effect on.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hidapi.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hidapi.h
@@ -19,44 +19,35 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: HIDAPI */
+
 /**
- *  \file SDL_hidapi.h
+ * # CategoryHIDAPI
  *
- *  Header file for SDL HIDAPI functions.
+ * Header file for SDL HIDAPI functions.
  *
- *  This is an adaptation of the original HIDAPI interface by Alan Ott,
- *  and includes source code licensed under the following BSD license:
+ * This is an adaptation of the original HIDAPI interface by Alan Ott, and
+ * includes source code licensed under the following license:
  *
-    Copyright (c) 2010, Alan Ott, Signal 11 Software
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of Signal 11 Software nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
+ * ```
+ * HIDAPI - Multi-Platform library for
+ * communication with HID devices.
  *
+ * Copyright 2009, Alan Ott, Signal 11 Software.
+ * All Rights Reserved.
+ *
+ * This software may be used by anyone for any reason so
+ * long as the copyright notice in the source files
+ * remains intact.
+ * ```
+ *
+ * (Note that this license is the same as item three of SDL's zlib license, so
+ * it adds no new requirements on the user.)
+ *
  * If you would like a version of SDL without this code, you can build SDL
- * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example
- * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework.
+ * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for
+ * example on iOS or tvOS to avoid a dependency on the CoreBluetooth
+ * framework.
  */
 
 #ifndef SDL_hidapi_h_
@@ -71,14 +62,15 @@
 #endif
 
 /**
- *  \brief  A handle representing an open HID device
+ * A handle representing an open HID device
  */
 struct SDL_hid_device_;
 typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */
 
 /** hidapi info structure */
+
 /**
- *  \brief  Information about a connected HID device
+ * Information about a connected HID device
  */
 typedef struct SDL_hid_device_info
 {
@@ -234,13 +226,13 @@
  * The path name be determined by calling SDL_hid_enumerate(), or a
  * platform-specific path name can be used (eg: /dev/hidraw0 on Linux).
  *
- * \param path The path name of the device to open
+ * \param path The path name of the device to open.
  * \returns a pointer to a SDL_hid_device object on success or NULL on
  *          failure.
  *
  * \since This function is available since SDL 2.0.18.
  */
-extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */);
+extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive);
 
 /**
  * Write an Output report to a HID device.
@@ -434,7 +426,7 @@
 /**
  * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers
  *
- * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan
+ * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan.
  *
  * \since This function is available since SDL 2.0.18.
  */
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hints.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hints.h
@@ -20,20 +20,20 @@
 */
 
 /**
- *  \file SDL_hints.h
+ * # CategoryHints
  *
- *  Official documentation for SDL configuration variables
+ * Official documentation for SDL configuration variables
  *
- *  This file contains functions to set and get configuration hints,
- *  as well as listing each of them alphabetically.
+ * This file contains functions to set and get configuration hints, as well as
+ * listing each of them alphabetically.
  *
- *  The convention for naming hints is SDL_HINT_X, where "SDL_X" is
- *  the environment variable that can be used to override the default.
+ * The convention for naming hints is SDL_HINT_X, where "SDL_X" is the
+ * environment variable that can be used to override the default.
  *
- *  In general these hints are just that - they may or may not be
- *  supported or applicable on any given platform, but they provide
- *  a way for an application or user to give the library a hint as
- *  to how they would like the library to work.
+ * In general these hints are just that - they may or may not be supported or
+ * applicable on any given platform, but they provide a way for an application
+ * or user to give the library a hint as to how they would like the library to
+ * work.
  */
 
 #ifndef SDL_hints_h_
@@ -48,110 +48,132 @@
 #endif
 
 /**
- *  \brief  A variable controlling whether the Android / iOS built-in
- *  accelerometer should be listed as a joystick device.
+ * A variable controlling whether the Android / iOS built-in accelerometer
+ * should be listed as a joystick device.
  *
- *  This variable can be set to the following values:
- *    "0"       - The accelerometer is not listed as a joystick
- *    "1"       - The accelerometer is available as a 3 axis joystick (the default).
+ * This variable can be set to the following values:
+ *
+ * - "0": The accelerometer is not listed as a joystick
+ * - "1": The accelerometer is available as a 3 axis joystick (the default).
  */
 #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK"
 
 /**
- *  \brief Specify the behavior of Alt+Tab while the keyboard is grabbed.
+ * Specify the behavior of Alt+Tab while the keyboard is grabbed.
  *
- * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed
- * and your window is full-screen. This prevents the user from getting stuck in
- * your application if you've enabled keyboard grab.
+ * By default, SDL emulates Alt+Tab functionality while the keyboard is
+ * grabbed and your window is full-screen. This prevents the user from getting
+ * stuck in your application if you've enabled keyboard grab.
  *
  * The variable can be set to the following values:
- *   "0"       - SDL will not handle Alt+Tab. Your application is responsible
-                 for handling Alt+Tab while the keyboard is grabbed.
- *   "1"       - SDL will minimize your window when Alt+Tab is pressed (default)
-*/
+ *
+ * - "0": SDL will not handle Alt+Tab. Your application is responsible for
+ *   handling Alt+Tab while the keyboard is grabbed.
+ * - "1": SDL will minimize your window when Alt+Tab is pressed (default)
+ */
 #define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED"
 
 /**
- *  \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it.
- *      This is a debugging aid for developers and not expected to be used by end users. The default is "1"
+ * If set to "0" then never set the top most bit on a SDL Window, even if the
+ * video mode expects it.
  *
- *  This variable can be set to the following values:
- *    "0"       - don't allow topmost
- *    "1"       - allow topmost
+ * This is a debugging aid for developers and not expected to be used by end
+ * users. The default is "1"
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": don't allow topmost
+ * - "1": allow topmost
  */
 #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST"
 
 /**
- * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc.
+ * Android APK expansion main file version.
  *
- * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
+ * Should be a string number like "1", "2" etc.
  *
+ * Must be set together with
+ * SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
+ *
  * If both hints were set then SDL_RWFromFile() will look into expansion files
- * after a given relative path was not found in the internal storage and assets.
+ * after a given relative path was not found in the internal storage and
+ * assets.
  *
- * By default this hint is not set and the APK expansion files are not searched.
+ * By default this hint is not set and the APK expansion files are not
+ * searched.
  */
 #define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION"
 
 /**
- * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc.
+ * Android APK expansion patch file version.
  *
+ * Should be a string number like "1", "2" etc.
+ *
  * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.
  *
  * If both hints were set then SDL_RWFromFile() will look into expansion files
- * after a given relative path was not found in the internal storage and assets.
+ * after a given relative path was not found in the internal storage and
+ * assets.
  *
- * By default this hint is not set and the APK expansion files are not searched.
+ * By default this hint is not set and the APK expansion files are not
+ * searched.
  */
 #define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION"
 
 /**
- * \brief A variable to control whether the event loop will block itself when the app is paused.
+ * A variable to control whether the event loop will block itself when the app
+ * is paused.
  *
  * The variable can be set to the following values:
- *   "0"       - Non blocking.
- *   "1"       - Blocking. (default)
  *
+ * - "0": Non blocking.
+ * - "1": Blocking. (default)
+ *
  * The value should be set before SDL is initialized.
  */
 #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE"
 
 /**
- * \brief A variable to control whether SDL will pause audio in background
- *        (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
+ * A variable to control whether SDL will pause audio in background (Requires
+ * SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
  *
  * The variable can be set to the following values:
- *   "0"       - Non paused.
- *   "1"       - Paused. (default)
  *
+ * - "0": Non paused.
+ * - "1": Paused. (default)
+ *
  * The value should be set before SDL is initialized.
  */
 #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO"
 
 /**
- * \brief A variable to control whether we trap the Android back button to handle it manually.
- *        This is necessary for the right mouse button to work on some Android devices, or
- *        to be able to trap the back button for use in your code reliably.  If set to true,
- *        the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of
- *        SDL_SCANCODE_AC_BACK.
+ * A variable to control whether we trap the Android back button to handle it
+ * manually.
  *
+ * This is necessary for the right mouse button to work on some Android
+ * devices, or to be able to trap the back button for use in your code
+ * reliably. If set to true, the back button will show up as an SDL_KEYDOWN /
+ * SDL_KEYUP pair with a keycode of SDL_SCANCODE_AC_BACK.
+ *
  * The variable can be set to the following values:
- *   "0"       - Back button will be handled as usual for system. (default)
- *   "1"       - Back button will be trapped, allowing you to handle the key press
- *               manually.  (This will also let right mouse click work on systems
- *               where the right mouse button functions as back.)
  *
- * The value of this hint is used at runtime, so it can be changed at any time.
+ * - "0": Back button will be handled as usual for system. (default)
+ * - "1": Back button will be trapped, allowing you to handle the key press
+ *   manually. (This will also let right mouse click work on systems where the
+ *   right mouse button functions as back.)
+ *
+ * The value of this hint is used at runtime, so it can be changed at any
+ * time.
  */
 #define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON"
 
 /**
- *  \brief Specify an application name.
+ * Specify an application name.
  *
  * This hint lets you specify the application name sent to the OS when
  * required. For example, this will often appear in volume control applets for
  * audio streams, and in lists of applications which are inhibiting the
- * screensaver.  You should use a string that describes your program ("My Game
+ * screensaver. You should use a string that describes your program ("My Game
  * 2: The Revenge")
  *
  * Setting this to "" or leaving it unset will have SDL use a reasonable
@@ -166,48 +188,51 @@
 #define SDL_HINT_APP_NAME "SDL_APP_NAME"
 
 /**
- *  \brief  A variable controlling whether controllers used with the Apple TV
- *  generate UI events.
+ * A variable controlling whether controllers used with the Apple TV generate
+ * UI events.
  *
  * When UI events are generated by controller input, the app will be
- * backgrounded when the Apple TV remote's menu button is pressed, and when the
- * pause or B buttons on gamepads are pressed.
+ * backgrounded when the Apple TV remote's menu button is pressed, and when
+ * the pause or B buttons on gamepads are pressed.
  *
  * More information about properly making use of controllers for the Apple TV
  * can be found here:
  * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
  *
- *  This variable can be set to the following values:
- *    "0"       - Controller input does not generate UI events (the default).
- *    "1"       - Controller input generates UI events.
+ * This variable can be set to the following values:
+ *
+ * - "0": Controller input does not generate UI events (the default).
+ * - "1": Controller input generates UI events.
  */
 #define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS"
 
 /**
- * \brief  A variable controlling whether the Apple TV remote's joystick axes
- *         will automatically match the rotation of the remote.
+ * A variable controlling whether the Apple TV remote's joystick axes will
+ * automatically match the rotation of the remote.
  *
- *  This variable can be set to the following values:
- *    "0"       - Remote orientation does not affect joystick axes (the default).
- *    "1"       - Joystick axes are based on the orientation of the remote.
+ * This variable can be set to the following values:
+ *
+ * - "0": Remote orientation does not affect joystick axes (the default).
+ * - "1": Joystick axes are based on the orientation of the remote.
  */
 #define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION"
 
 /**
- *  \brief  A variable controlling the audio category on iOS and Mac OS X
+ * A variable controlling the audio category on iOS and Mac OS X
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "ambient"     - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default)
- *    "playback"    - Use the AVAudioSessionCategoryPlayback category
+ * - "ambient": Use the AVAudioSessionCategoryAmbient audio category, will be
+ *   muted by the phone mute switch (default)
+ * - "playback": Use the AVAudioSessionCategoryPlayback category
  *
- *  For more information, see Apple's documentation:
- *  https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
+ * For more information, see Apple's documentation:
+ * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
  */
 #define SDL_HINT_AUDIO_CATEGORY   "SDL_AUDIO_CATEGORY"
 
 /**
- *  \brief Specify an application name for an audio device.
+ * Specify an application name for an audio device.
  *
  * Some audio backends (such as PulseAudio) allow you to describe your audio
  * stream. Among other things, this description might show up in a system
@@ -228,7 +253,7 @@
 #define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME"
 
 /**
- *  \brief Specify an application name for an audio device.
+ * Specify an application name for an audio device.
  *
  * Some audio backends (such as PulseAudio) allow you to describe your audio
  * stream. Among other things, this description might show up in a system
@@ -249,11 +274,11 @@
 #define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME"
 
 /**
- *  \brief Specify an application role for an audio device.
+ * Specify an application role for an audio device.
  *
  * Some audio backends (such as Pipewire) allow you to describe the role of
- * your audio stream. Among other things, this description might show up in
- * a system control panel or software for displaying and manipulating media
+ * your audio stream. Among other things, this description might show up in a
+ * system control panel or software for displaying and manipulating media
  * playback/capture graphs.
  *
  * This hints lets you transmit that information to the OS. The contents of
@@ -269,1168 +294,1384 @@
 #define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE"
 
 /**
- *  \brief  A variable controlling speed/quality tradeoff of audio resampling.
+ * A variable controlling speed/quality tradeoff of audio resampling.
  *
- *  If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ )
- *  to handle audio resampling. There are different resampling modes available
- *  that produce different levels of quality, using more CPU.
+ * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ )
+ * to handle audio resampling. There are different resampling modes available
+ * that produce different levels of quality, using more CPU.
  *
- *  If this hint isn't specified to a valid setting, or libsamplerate isn't
- *  available, SDL will use the default, internal resampling algorithm.
+ * If this hint isn't specified to a valid setting, or libsamplerate isn't
+ * available, SDL will use the default, internal resampling algorithm.
  *
- *  As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is available.
+ * As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is
+ * available.
  *
- *  This hint is currently only checked at audio subsystem initialization.
+ * This hint is currently only checked at audio subsystem initialization.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast)
- *    "1" or "fast"    - Use fast, slightly higher quality resampling, if available
- *    "2" or "medium"  - Use medium quality resampling, if available
- *    "3" or "best"    - Use high quality resampling, if available
+ * - "0" or "default": Use SDL's internal resampling (Default when not set -
+ *   low quality, fast)
+ * - "1" or "fast": Use fast, slightly higher quality resampling, if available
+ * - "2" or "medium": Use medium quality resampling, if available
+ * - "3" or "best": Use high quality resampling, if available
  */
 #define SDL_HINT_AUDIO_RESAMPLING_MODE   "SDL_AUDIO_RESAMPLING_MODE"
 
 /**
- *  \brief  A variable controlling whether SDL updates joystick state when getting input events
+ * A variable controlling whether SDL updates joystick state when getting
+ * input events
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0"     - You'll call SDL_JoystickUpdate() manually
- *    "1"     - SDL will automatically call SDL_JoystickUpdate() (default)
+ * - "0": You'll call SDL_JoystickUpdate() manually
+ * - "1": SDL will automatically call SDL_JoystickUpdate() (default)
  *
- *  This hint can be toggled on and off at runtime.
+ * This hint can be toggled on and off at runtime.
  */
 #define SDL_HINT_AUTO_UPDATE_JOYSTICKS  "SDL_AUTO_UPDATE_JOYSTICKS"
 
 /**
- *  \brief  A variable controlling whether SDL updates sensor state when getting input events
+ * A variable controlling whether SDL updates sensor state when getting input
+ * events
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0"     - You'll call SDL_SensorUpdate() manually
- *    "1"     - SDL will automatically call SDL_SensorUpdate() (default)
+ * - "0": You'll call SDL_SensorUpdate() manually
+ * - "1": SDL will automatically call SDL_SensorUpdate() (default)
  *
- *  This hint can be toggled on and off at runtime.
+ * This hint can be toggled on and off at runtime.
  */
 #define SDL_HINT_AUTO_UPDATE_SENSORS    "SDL_AUTO_UPDATE_SENSORS"
 
 /**
- *  \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
+ * Prevent SDL from using version 4 of the bitmap header when saving BMPs.
  *
- * The bitmap header version 4 is required for proper alpha channel support and
- * SDL will use it when required. Should this not be desired, this hint can
- * force the use of the 40 byte header version which is supported everywhere.
+ * The bitmap header version 4 is required for proper alpha channel support
+ * and SDL will use it when required. Should this not be desired, this hint
+ * can force the use of the 40 byte header version which is supported
+ * everywhere.
  *
  * The variable can be set to the following values:
- *   "0"       - Surfaces with a colorkey or an alpha channel are saved to a
- *               32-bit BMP file with an alpha mask. SDL will use the bitmap
- *               header version 4 and set the alpha mask accordingly.
- *   "1"       - Surfaces with a colorkey or an alpha channel are saved to a
- *               32-bit BMP file without an alpha mask. The alpha channel data
- *               will be in the file, but applications are going to ignore it.
  *
+ * - "0": Surfaces with a colorkey or an alpha channel are saved to a 32-bit
+ *   BMP file with an alpha mask. SDL will use the bitmap header version 4 and
+ *   set the alpha mask accordingly.
+ * - "1": Surfaces with a colorkey or an alpha channel are saved to a 32-bit
+ *   BMP file without an alpha mask. The alpha channel data will be in the
+ *   file, but applications are going to ignore it.
+ *
  * The default value is "0".
  */
 #define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT"
 
 /**
- *  \brief Override for SDL_GetDisplayUsableBounds()
+ * Override for SDL_GetDisplayUsableBounds()
  *
- *  If set, this hint will override the expected results for
- *  SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
- *  to do this, but this allows an embedded system to request that some of the
- *  screen be reserved for other uses when paired with a well-behaved
- *  application.
+ * If set, this hint will override the expected results for
+ * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
+ * to do this, but this allows an embedded system to request that some of the
+ * screen be reserved for other uses when paired with a well-behaved
+ * application.
  *
- *  The contents of this hint must be 4 comma-separated integers, the first
- *  is the bounds x, then y, width and height, in that order.
+ * The contents of this hint must be 4 comma-separated integers, the first is
+ * the bounds x, then y, width and height, in that order.
  */
 #define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS"
 
 /**
- *  \brief Disable giving back control to the browser automatically
- *  when running with asyncify
+ * Disable giving back control to the browser automatically when running with
+ * asyncify
  *
- * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations
- * such as refreshing the screen or polling events.
+ * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations such as
+ * refreshing the screen or polling events.
  *
  * This hint only applies to the emscripten platform
  *
  * The variable can be set to the following values:
- *    "0"       - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
- *    "1"       - Enable emscripten_sleep calls (the default)
+ *
+ * - "0": Disable emscripten_sleep calls (if you give back browser control
+ *   manually or use asyncify for other purposes)
+ * - "1": Enable emscripten_sleep calls (the default)
  */
 #define SDL_HINT_EMSCRIPTEN_ASYNCIFY   "SDL_EMSCRIPTEN_ASYNCIFY"
 
 /**
- *  \brief override the binding element for keyboard inputs for Emscripten builds
+ * override the binding element for keyboard inputs for Emscripten builds
  *
- * This hint only applies to the emscripten platform
+ * This hint only applies to the emscripten platform.
  *
- * The variable can be one of
- *    "#window"      - The javascript window object (this is the default)
- *    "#document"    - The javascript document object
- *    "#screen"      - the javascript window.screen object
- *    "#canvas"      - the WebGL canvas element
- *    any other string without a leading # sign applies to the element on the page with that ID.
+ * The variable can be one of:
+ *
+ * - "#window": the javascript window object (this is the default)
+ * - "#document": the javascript document object
+ * - "#screen": the javascript window.screen object
+ * - "#canvas": the WebGL canvas element
+ *
+ * Any other string without a leading # sign applies to the element on the
+ * page with that ID.
  */
 #define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT   "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
 
 /**
- *  \brief  A variable that controls whether the on-screen keyboard should be shown when text input is active
+ * A variable that controls whether the on-screen keyboard should be shown
+ * when text input is active
  *
- *  The variable can be set to the following values:
- *    "0"       - Do not show the on-screen keyboard
- *    "1"       - Show the on-screen keyboard
+ * The variable can be set to the following values:
  *
- *  The default value is "1". This hint must be set before text input is activated.
+ * - "0": Do not show the on-screen keyboard
+ * - "1": Show the on-screen keyboard
+ *
+ * The default value is "1". This hint must be set before text input is
+ * activated.
  */
 #define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD"
 
 /**
- *  \brief  A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs
+ * A variable controlling verbosity of the logging of SDL events pushed onto
+ * the internal queue.
  *
- *  The variable can be set to the following values:
- *    "0"       - Do not scan for Steam Controllers
- *    "1"       - Scan for Steam Controllers (the default)
+ * This variable can be set to the following values, from least to most
+ * verbose:
  *
- *  The default value is "1".  This hint must be set before initializing the joystick subsystem.
- */
-#define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS"
-
-/**
- *  \brief  A variable controlling verbosity of the logging of SDL events pushed onto the internal queue.
+ * - "0": Don't log any events (default)
+ * - "1": Log most events (other than the really spammy ones).
+ * - "2": Include mouse and finger motion events.
+ * - "3": Include SDL_SysWMEvent events.
  *
- *  This variable can be set to the following values, from least to most verbose:
+ * This is generally meant to be used to debug SDL itself, but can be useful
+ * for application developers that need better visibility into what is going
+ * on in the event queue. Logged events are sent through SDL_Log(), which
+ * means by default they appear on stdout on most platforms or maybe
+ * OutputDebugString() on Windows, and can be funneled by the app with
+ * SDL_LogSetOutputFunction(), etc.
  *
- *    "0"     - Don't log any events (default)
- *    "1"     - Log most events (other than the really spammy ones).
- *    "2"     - Include mouse and finger motion events.
- *    "3"     - Include SDL_SysWMEvent events.
- *
- *  This is generally meant to be used to debug SDL itself, but can be useful
- *  for application developers that need better visibility into what is going
- *  on in the event queue. Logged events are sent through SDL_Log(), which
- *  means by default they appear on stdout on most platforms or maybe
- *  OutputDebugString() on Windows, and can be funneled by the app with
- *  SDL_LogSetOutputFunction(), etc.
- *
- *  This hint can be toggled on and off at runtime, if you only need to log
- *  events for a small subset of program execution.
+ * This hint can be toggled on and off at runtime, if you only need to log
+ * events for a small subset of program execution.
  */
 #define SDL_HINT_EVENT_LOGGING   "SDL_EVENT_LOGGING"
 
 /**
- *  \brief  A variable controlling whether raising the window should be done more forcefully
+ * A variable controlling whether raising the window should be done more
+ * forcefully
  *
- *  This variable can be set to the following values:
- *    "0"       - No forcing (the default)
- *    "1"       - Extra level of forcing
+ * This variable can be set to the following values:
  *
- *  At present, this is only an issue under MS Windows, which makes it nearly impossible to
- *  programmatically move a window to the foreground, for "security" reasons. See
- *  http://stackoverflow.com/a/34414846 for a discussion.
+ * - "0": No forcing (the default)
+ * - "1": Extra level of forcing
+ *
+ * At present, this is only an issue under MS Windows, which makes it nearly
+ * impossible to programmatically move a window to the foreground, for
+ * "security" reasons. See http://stackoverflow.com/a/34414846 for a
+ * discussion.
  */
 #define SDL_HINT_FORCE_RAISEWINDOW    "SDL_HINT_FORCE_RAISEWINDOW"
 
 /**
- *  \brief  A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
+ * A variable controlling how 3D acceleration is used to accelerate the SDL
+ * screen surface.
  *
- *  SDL can try to accelerate the SDL screen surface by using streaming
- *  textures with a 3D rendering engine.  This variable controls whether and
- *  how this is done.
+ * SDL can try to accelerate the SDL screen surface by using streaming
+ * textures with a 3D rendering engine. This variable controls whether and how
+ * this is done.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable 3D acceleration
- *    "1"       - Enable 3D acceleration, using the default renderer.
- *    "X"       - Enable 3D acceleration, using X where X is one of the valid rendering drivers.  (e.g. "direct3d", "opengl", etc.)
+ * This variable can be set to the following values:
  *
- *  By default SDL tries to make a best guess for each platform whether
- *  to use acceleration or not.
+ * - "0": Disable 3D acceleration
+ * - "1": Enable 3D acceleration, using the default renderer.
+ * - "X": Enable 3D acceleration, using X where X is one of the valid
+ *   rendering drivers. (e.g. "direct3d", "opengl", etc.)
+ *
+ * By default SDL tries to make a best guess for each platform whether to use
+ * acceleration or not.
  */
 #define SDL_HINT_FRAMEBUFFER_ACCELERATION   "SDL_FRAMEBUFFER_ACCELERATION"
 
 /**
- *  \brief  A variable that lets you manually hint extra gamecontroller db entries.
+ * A variable that lets you manually hint extra gamecontroller db entries.
  *
- *  The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h
+ * The variable should be newline delimited rows of gamecontroller config
+ * data, see SDL_gamecontroller.h
  *
- *  This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
- *  You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You
+ * can update mappings after the system is initialized with
+ * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
  */
 #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG"
 
 /**
- *  \brief  A variable that lets you provide a file with extra gamecontroller db entries.
+ * A variable that lets you provide a file with extra gamecontroller db
+ * entries.
  *
- *  The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h
+ * The file should contain lines of gamecontroller config data, see
+ * SDL_gamecontroller.h
  *
- *  This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
- *  You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You
+ * can update mappings after the system is initialized with
+ * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
  */
 #define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE"
 
 /**
- *  \brief  A variable that overrides the automatic controller type detection
+ * A variable that overrides the automatic controller type detection
  *
- *  The variable should be comma separated entries, in the form: VID/PID=type
+ * The variable should be comma separated entries, in the form: VID/PID=type
  *
- *  The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
+ * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
  *
- *  The type should be one of:
- *      Xbox360
- *      XboxOne
- *      PS3
- *      PS4
- *      PS5
- *      SwitchPro
+ * The type should be one of: Xbox360 XboxOne PS3 PS4 PS5 SwitchPro
  *
- *  This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
+ * This hint affects what driver is used, and must be set before calling
+ * SDL_Init(SDL_INIT_GAMECONTROLLER)
  */
 #define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE"
 
 /**
- *  \brief  A variable containing a list of devices to skip when scanning for game controllers.
+ * A variable containing a list of devices to skip when scanning for game
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES"
 
 /**
- *  \brief  If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable.
+ * If set, all devices will be skipped when scanning for game controllers
+ * except for the ones listed in this variable.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT"
 
 /**
- *  \brief  If set, game controller face buttons report their values according to their labels instead of their positional layout.
+ * If set, game controller face buttons report their values according to their
+ * labels instead of their positional layout.
  *
- *  For example, on Nintendo Switch controllers, normally you'd get:
+ * For example, on Nintendo Switch controllers, normally you'd get:
  *
+ * ```
  *      (Y)
  *  (X)     (B)
  *      (A)
+ * ```
  *
- *  but if this hint is set, you'll get:
+ * but if this hint is set, you'll get:
  *
+ * ```
  *      (X)
  *  (Y)     (A)
  *      (B)
+ * ```
  *
- *  The variable can be set to the following values:
- *    "0"       - Report the face buttons by position, as though they were on an Xbox controller.
- *    "1"       - Report the face buttons by label instead of position
+ * The variable can be set to the following values:
  *
- *  The default value is "1".  This hint may be set at any time.
+ * - "0": Report the face buttons by position, as though they were on an Xbox
+ *   controller.
+ * - "1": Report the face buttons by label instead of position
+ *
+ * The default value is "1". This hint may be set at any time.
  */
 #define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS"
 
 /**
- *  \brief  A variable controlling whether grabbing input grabs the keyboard
+ * A variable controlling whether grabbing input grabs the keyboard
  *
- *  This variable can be set to the following values:
- *    "0"       - Grab will affect only the mouse
- *    "1"       - Grab will affect mouse and keyboard
+ * This variable can be set to the following values:
  *
- *  By default SDL will not grab the keyboard so system shortcuts still work.
+ * - "0": Grab will affect only the mouse
+ * - "1": Grab will affect mouse and keyboard
+ *
+ * By default SDL will not grab the keyboard so system shortcuts still work.
  */
 #define SDL_HINT_GRAB_KEYBOARD              "SDL_GRAB_KEYBOARD"
 
 /**
- *  \brief  A variable containing a list of devices to ignore in SDL_hid_enumerate()
+ * A variable containing a list of devices to ignore in SDL_hid_enumerate()
  *
- *  For example, to ignore the Shanwan DS3 controller and any Valve controller, you might
- *  have the string "0x2563/0x0523,0x28de/0x0000"
+ * For example, to ignore the Shanwan DS3 controller and any Valve controller,
+ * you might have the string "0x2563/0x0523,0x28de/0x0000"
  */
 #define SDL_HINT_HIDAPI_IGNORE_DEVICES "SDL_HIDAPI_IGNORE_DEVICES"
 
 /**
- *  \brief  A variable controlling whether the idle timer is disabled on iOS.
+ * A variable controlling whether the idle timer is disabled on iOS.
  *
- *  When an iOS app does not receive touches for some time, the screen is
- *  dimmed automatically. For games where the accelerometer is the only input
- *  this is problematic. This functionality can be disabled by setting this
- *  hint.
+ * When an iOS app does not receive touches for some time, the screen is
+ * dimmed automatically. For games where the accelerometer is the only input
+ * this is problematic. This functionality can be disabled by setting this
+ * hint.
  *
- *  As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver()
- *  accomplish the same thing on iOS. They should be preferred over this hint.
+ * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver()
+ * accomplish the same thing on iOS. They should be preferred over this hint.
  *
- *  This variable can be set to the following values:
- *    "0"       - Enable idle timer
- *    "1"       - Disable idle timer
+ * This variable can be set to the following values:
+ *
+ * - "0": Enable idle timer
+ * - "1": Disable idle timer
  */
 #define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED"
 
 /**
- * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.
+ * A variable to control whether certain IMEs should handle text editing
+ * internally instead of sending SDL_TEXTEDITING events.
  *
  * The variable can be set to the following values:
- *   "0"       - SDL_TEXTEDITING events are sent, and it is the application's
- *               responsibility to render the text from these events and
- *               differentiate it somehow from committed text. (default)
- *   "1"       - If supported by the IME then SDL_TEXTEDITING events are not sent,
- *               and text that is being composed will be rendered in its own UI.
+ *
+ * - "0": SDL_TEXTEDITING events are sent, and it is the application's
+ *   responsibility to render the text from these events and differentiate it
+ *   somehow from committed text. (default)
+ * - "1": If supported by the IME then SDL_TEXTEDITING events are not sent,
+ *   and text that is being composed will be rendered in its own UI.
  */
 #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING"
 
 /**
- * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them.
+ * A variable to control whether certain IMEs should show native UI components
+ * (such as the Candidate List) instead of suppressing them.
  *
  * The variable can be set to the following values:
- *   "0"       - Native UI components are not display. (default)
- *   "1"       - Native UI components are displayed.
+ *
+ * - "0": Native UI components are not display. (default)
+ * - "1": Native UI components are displayed.
  */
 #define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI"
 
 /**
- * \brief A variable to control if extended IME text support is enabled.
- * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise.
- * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated.
+ * A variable to control if extended IME text support is enabled.
  *
+ * If enabled then SDL_TextEditingExtEvent will be issued if the text would be
+ * truncated otherwise. Additionally SDL_TextInputEvent will be dispatched
+ * multiple times so that it is not truncated.
+ *
  * The variable can be set to the following values:
- *   "0"       - Legacy behavior. Text can be truncated, no heap allocations. (default)
- *   "1"       - Modern behavior.
+ *
+ * - "0": Legacy behavior. Text can be truncated, no heap allocations.
+ *   (default)
+ * - "1": Modern behavior.
  */
 #define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT"
 
 /**
- * \brief  A variable controlling whether the home indicator bar on iPhone X
- *         should be hidden.
+ * A variable controlling whether the home indicator bar on iPhone X should be
+ * hidden.
  *
- *  This variable can be set to the following values:
- *    "0"       - The indicator bar is not hidden (default for windowed applications)
- *    "1"       - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications)
- *    "2"       - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications)
+ * This variable can be set to the following values:
+ *
+ * - "0": The indicator bar is not hidden (default for windowed applications)
+ * - "1": The indicator bar is hidden and is shown when the screen is touched
+ *   (useful for movie playback applications)
+ * - "2": The indicator bar is dim and the first swipe makes it visible and
+ *   the second swipe performs the "home" action (default for fullscreen
+ *   applications)
  */
 #define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR"
 
 /**
- *  \brief  A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
+ * A variable that lets you enable joystick (and gamecontroller) events even
+ * when your app is in the background.
  *
- *  The variable can be set to the following values:
- *    "0"       - Disable joystick & gamecontroller input events when the
- *                application is in the background.
- *    "1"       - Enable joystick & gamecontroller input events when the
- *                application is in the background.
+ * The variable can be set to the following values:
  *
- *  The default value is "0".  This hint may be set at any time.
+ * - "0": Disable joystick & gamecontroller input events when the application
+ *   is in the background.
+ * - "1": Enable joystick & gamecontroller input events when the application
+ *   is in the background.
+ *
+ * The default value is "0". This hint may be set at any time.
  */
 #define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS"
 
 /**
- *  A variable containing a list of arcade stick style controllers.
+ * A variable containing a list of arcade stick style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES "SDL_JOYSTICK_ARCADESTICK_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not arcade stick style controllers. This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not arcade stick style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of devices that should not be considerd joysticks.
+ * A variable containing a list of devices that should not be considerd
+ * joysticks.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES "SDL_JOYSTICK_BLACKLIST_DEVICES"
 
 /**
- *  A variable containing a list of devices that should be considered joysticks. This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in device list.
+ * A variable containing a list of devices that should be considered
+ * joysticks.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED "SDL_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of flightstick style controllers.
+ * A variable containing a list of flightstick style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES "SDL_JOYSTICK_FLIGHTSTICK_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not flightstick style controllers. This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not flightstick style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of devices known to have a GameCube form factor.
+ * A variable containing a list of devices known to have a GameCube form
+ * factor.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES "SDL_JOYSTICK_GAMECUBE_DEVICES"
 
 /**
- *  A variable containing a list of devices known not to have a GameCube form factor. This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in device list.
+ * A variable containing a list of devices known not to have a GameCube form
+ * factor.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED "SDL_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI joystick drivers should be used.
+ * A variable controlling whether the HIDAPI joystick drivers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI drivers are not used
- *    "1"       - HIDAPI drivers are used (the default)
+ * This variable can be set to the following values:
  *
- *  This variable is the default for all drivers, but can be overridden by the hints for specific drivers below.
+ * - "0": HIDAPI drivers are not used
+ * - "1": HIDAPI drivers are used (the default)
+ *
+ * This variable is the default for all drivers, but can be overridden by the
+ * hints for specific drivers below.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Nintendo GameCube
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE"
 
 /**
- *  \brief  A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement
- *          the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2)
- *          this is useful for applications that need full compatibility for things like ADSR envelopes.
- *          Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0"
- *          Rumble is both at any arbitrary value,
- *          StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0"
+ * A variable controlling whether "low_frequency_rumble" and
+ * "high_frequency_rumble" is used to implement the GameCube controller's 3
+ * rumble modes, Stop(0), Rumble(1), and StopHard(2) this is useful for
+ * applications that need full compatibility for things like ADSR envelopes.
  *
- *  This variable can be set to the following values:
- *    "0"       - Normal rumble behavior is behavior is used (default)
- *    "1"       - Proper GameCube controller rumble behavior is used
+ * Stop is implemented by setting "low_frequency_rumble" to "0" and
+ * "high_frequency_rumble" ">0" Rumble is both at any arbitrary value,
+ * StopHard is implemented by setting both "low_frequency_rumble" and
+ * "high_frequency_rumble" to "0"
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Normal rumble behavior is behavior is used (default)
+ * - "1": Proper GameCube controller rumble behavior is used
  */
 #define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Switch Joy-Cons should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for Nintendo Switch
+ * Joy-Cons should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS"
 
 /**
-  *  \brief  A variable controlling whether Nintendo Switch Joy-Con controllers will be combined into a single Pro-like controller when using the HIDAPI driver
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Left and right Joy-Con controllers will not be combined and each will be a mini-gamepad
-  *    "1"       - Left and right Joy-Con controllers will be combined into a single controller (the default)
-  */
+ * A variable controlling whether Nintendo Switch Joy-Con controllers will be
+ * combined into a single Pro-like controller when using the HIDAPI driver
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Left and right Joy-Con controllers will not be combined and each
+ *   will be a mini-gamepad
+ * - "1": Left and right Joy-Con controllers will be combined into a single
+ *   controller (the default)
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS "SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS"
 
 /**
-  *  \brief  A variable controlling whether Nintendo Switch Joy-Con controllers will be in vertical mode when using the HIDAPI driver
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Left and right Joy-Con controllers will not be in vertical mode (the default)
-  *    "1"       - Left and right Joy-Con controllers will be in vertical mode
-  *
-  *  This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
-  */
+ * A variable controlling whether Nintendo Switch Joy-Con controllers will be
+ * in vertical mode when using the HIDAPI driver
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Left and right Joy-Con controllers will not be in vertical mode (the
+ *   default)
+ * - "1": Left and right Joy-Con controllers will be in vertical mode
+ *
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS "SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for Amazon Luna
+ * controllers connected via Bluetooth should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Online classic controllers should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for Nintendo Online
+ * classic controllers should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC "SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for NVIDIA SHIELD controllers should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for NVIDIA SHIELD
+ * controllers should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_SHIELD "SDL_JOYSTICK_HIDAPI_SHIELD"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for PS3 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for PS3 controllers should
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on other platforms.
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
  *
- *  It is not possible to use this driver on Windows, due to limitations in the default drivers
- *  installed. See https://github.com/ViGEm/DsHidMini for an alternative driver on Windows.
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on
+ * other platforms.
+ *
+ * It is not possible to use this driver on Windows, due to limitations in the
+ * default drivers installed. See https://github.com/ViGEm/DsHidMini for an
+ * alternative driver on Windows.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS3 "SDL_JOYSTICK_HIDAPI_PS3"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for PS4 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for PS4 controllers should
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4"
 
 /**
- *  \brief  A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver.
+ * A variable controlling whether extended input reports should be used for
+ * PS4 controllers when using the HIDAPI driver.
  *
- *  This variable can be set to the following values:
- *    "0"       - extended reports are not enabled (the default)
- *    "1"       - extended reports
+ * This variable can be set to the following values:
  *
- *  Extended input reports allow rumble on Bluetooth PS4 controllers, but
- *  break DirectInput handling for applications that don't use SDL.
+ * - "0": extended reports are not enabled (the default)
+ * - "1": extended reports
  *
- *  Once extended reports are enabled, they can not be disabled without
- *  power cycling the controller.
+ * Extended input reports allow rumble on Bluetooth PS4 controllers, but break
+ * DirectInput handling for applications that don't use SDL.
  *
- *  For compatibility with applications written for versions of SDL prior
- *  to the introduction of PS5 controller support, this value will also
- *  control the state of extended reports on PS5 controllers when the
- *  SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set.
+ * Once extended reports are enabled, they can not be disabled without power
+ * cycling the controller.
+ *
+ * For compatibility with applications written for versions of SDL prior to
+ * the introduction of PS5 controller support, this value will also control
+ * the state of extended reports on PS5 controllers when the
+ * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for PS5 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for PS5 controllers should
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with a PS5 controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver.
+ * A variable controlling whether extended input reports should be used for
+ * PS5 controllers when using the HIDAPI driver.
  *
- *  This variable can be set to the following values:
- *    "0"       - extended reports are not enabled (the default)
- *    "1"       - extended reports
+ * This variable can be set to the following values:
  *
- *  Extended input reports allow rumble on Bluetooth PS5 controllers, but
- *  break DirectInput handling for applications that don't use SDL.
+ * - "0": extended reports are not enabled (the default)
+ * - "1": extended reports
  *
- *  Once extended reports are enabled, they can not be disabled without
- *  power cycling the controller.
+ * Extended input reports allow rumble on Bluetooth PS5 controllers, but break
+ * DirectInput handling for applications that don't use SDL.
  *
- *  For compatibility with applications written for versions of SDL prior
- *  to the introduction of PS5 controller support, this value defaults to
- *  the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE.
+ * Once extended reports are enabled, they can not be disabled without power
+ * cycling the controller.
+ *
+ * For compatibility with applications written for versions of SDL prior to
+ * the introduction of PS5 controller support, this value defaults to the
+ * value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Google Stadia
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Bluetooth Steam Controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Bluetooth Steam
+ * Controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access
- *                and may prompt the user for permission on iOS and Android.
+ * This variable can be set to the following values:
  *
- *  The default is "0"
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used for Steam Controllers, which requires
+ *   Bluetooth access and may prompt the user for permission on iOS and
+ *   Android.
+ *
+ * The default is "0"
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for the Steam Deck builtin controller should be used.
+ * A variable controlling whether the HIDAPI driver for the Steam Deck builtin
+ * controller should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_STEAMDECK "SDL_JOYSTICK_HIDAPI_STEAMDECK"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Nintendo Switch
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH"
 
 /**
- *  \brief  A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Pro controller is opened
+ * A variable controlling whether the Home button LED should be turned on when
+ * a Nintendo Switch Pro controller is opened
  *
- *  This variable can be set to the following values:
- *    "0"       - home button LED is turned off
- *    "1"       - home button LED is turned on
+ * This variable can be set to the following values:
  *
- *  By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
+ * - "0": home button LED is turned off
+ * - "1": home button LED is turned on
+ *
+ * By default the Home button LED state is not changed. This hint can also be
+ * set to a floating point value between 0.0 and 1.0 which controls the
+ * brightness of the Home button LED.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED"
 
 /**
- *  \brief  A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Joy-Con controller is opened
+ * A variable controlling whether the Home button LED should be turned on when
+ * a Nintendo Switch Joy-Con controller is opened
  *
- *  This variable can be set to the following values:
- *    "0"       - home button LED is turned off
- *    "1"       - home button LED is turned on
+ * This variable can be set to the following values:
  *
- *  By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
+ * - "0": home button LED is turned off
+ * - "1": home button LED is turned on
+ *
+ * By default the Home button LED state is not changed. This hint can also be
+ * set to a floating point value between 0.0 and 1.0 which controls the
+ * brightness of the Home button LED.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED "SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with a Nintendo Switch controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  This driver doesn't work with the dolphinbar, so the default is SDL_FALSE for now.
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * This driver doesn't work with the dolphinbar, so the default is SDL_FALSE
+ * for now.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_WII "SDL_JOYSTICK_HIDAPI_WII"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Wii controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with a Wii controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED "SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox controllers
+ * should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is "0" on Windows, otherwise the value of
+ * SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX   "SDL_JOYSTICK_HIDAPI_XBOX"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox 360 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox 360 controllers
+ * should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360   "SDL_JOYSTICK_HIDAPI_XBOX_360"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with an Xbox 360 controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with an Xbox 360 controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED "SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox 360 wireless controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox 360 wireless
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS   "SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox One controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox One controllers
+ * should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE   "SDL_JOYSTICK_HIDAPI_XBOX_ONE"
 
 /**
- *  \brief  A variable controlling whether the Home button LED should be turned on when an Xbox One controller is opened
+ * A variable controlling whether the Home button LED should be turned on when
+ * an Xbox One controller is opened
  *
- *  This variable can be set to the following values:
- *    "0"       - home button LED is turned off
- *    "1"       - home button LED is turned on
+ * This variable can be set to the following values:
  *
- *  By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. The default brightness is 0.4.
+ * - "0": home button LED is turned off
+ * - "1": home button LED is turned on
+ *
+ * By default the Home button LED state is not changed. This hint can also be
+ * set to a floating point value between 0.0 and 1.0 which controls the
+ * brightness of the Home button LED. The default brightness is 0.4.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED"
 
 /**
-  *  A variable controlling whether IOKit should be used for controller handling.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - IOKit is not used
-  *    "1"       - IOKit is used (the default)
-  */
+ * A variable controlling whether IOKit should be used for controller
+ * handling.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": IOKit is not used
+ * - "1": IOKit is used (the default)
+ */
 #define SDL_HINT_JOYSTICK_IOKIT "SDL_JOYSTICK_IOKIT"
 
 /**
-  *  A variable controlling whether GCController should be used for controller handling.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - GCController is not used
-  *    "1"       - GCController is used (the default)
-  */
+ * A variable controlling whether GCController should be used for controller
+ * handling.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": GCController is not used
+ * - "1": GCController is used (the default)
+ */
 #define SDL_HINT_JOYSTICK_MFI "SDL_JOYSTICK_MFI"
 
 /**
-  *  \brief  A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - RAWINPUT drivers are not used
-  *    "1"       - RAWINPUT drivers are used (the default)
-  */
+ * A variable controlling whether the RAWINPUT joystick drivers should be used
+ * for better handling XInput-capable devices.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": RAWINPUT drivers are not used
+ * - "1": RAWINPUT drivers are used (the default)
+ */
 #define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT"
 
 /**
-  *  \brief  A variable controlling whether the RAWINPUT driver should pull correlated data from XInput.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - RAWINPUT driver will only use data from raw input APIs
-  *    "1"       - RAWINPUT driver will also pull data from XInput, providing
-  *                better trigger axes, guide button presses, and rumble support
-  *                for Xbox controllers
-  *
-  *  The default is "1".  This hint applies to any joysticks opened after setting the hint.
-  */
+ * A variable controlling whether the RAWINPUT driver should pull correlated
+ * data from XInput.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": RAWINPUT driver will only use data from raw input APIs
+ * - "1": RAWINPUT driver will also pull data from XInput, providing better
+ *   trigger axes, guide button presses, and rumble support for Xbox
+ *   controllers
+ *
+ * The default is "1". This hint applies to any joysticks opened after setting
+ * the hint.
+ */
 #define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT   "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT"
 
 /**
-  *  \brief  A variable controlling whether the ROG Chakram mice should show up as joysticks
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - ROG Chakram mice do not show up as joysticks (the default)
-  *    "1"       - ROG Chakram mice show up as joysticks
-  */
+ * A variable controlling whether the ROG Chakram mice should show up as
+ * joysticks
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": ROG Chakram mice do not show up as joysticks (the default)
+ * - "1": ROG Chakram mice show up as joysticks
+ */
 #define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM"
 
 /**
-  *  \brief  A variable controlling whether a separate thread should be used
-  *          for handling joystick detection and raw input messages on Windows
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - A separate thread is not used (the default)
-  *    "1"       - A separate thread is used for handling raw input messages
-  *
-  */
+ * A variable controlling whether a separate thread should be used for
+ * handling joystick detection and raw input messages on Windows
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": A separate thread is not used (the default)
+ * - "1": A separate thread is used for handling raw input messages
+ */
 #define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD"
 
 /**
- *  A variable containing a list of throttle style controllers.
+ * A variable containing a list of throttle style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES "SDL_JOYSTICK_THROTTLE_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not throttle style controllers. This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not throttle style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES_EXCLUDED "SDL_JOYSTICK_THROTTLE_DEVICES_EXCLUDED"
 
 /**
-  *  \brief  A variable controlling whether Windows.Gaming.Input should be used for controller handling.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - WGI is not used
-  *    "1"       - WGI is used (the default)
-  */
+ * A variable controlling whether Windows.Gaming.Input should be used for
+ * controller handling.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": WGI is not used
+ * - "1": WGI is used (the default)
+ */
 #define SDL_HINT_JOYSTICK_WGI "SDL_JOYSTICK_WGI"
 
 /**
- *  A variable containing a list of wheel style controllers.
+ * A variable containing a list of wheel style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_WHEEL_DEVICES "SDL_JOYSTICK_WHEEL_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not wheel style controllers. This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not wheel style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device
+ * list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_WHEEL_DEVICES_EXCLUDED "SDL_JOYSTICK_WHEEL_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of devices known to have all axes centered at zero.
+ * A variable containing a list of devices known to have all axes centered at
+ * zero.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_ZERO_CENTERED_DEVICES "SDL_JOYSTICK_ZERO_CENTERED_DEVICES"
 
 /**
- * \brief Determines whether SDL enforces that DRM master is required in order
- *        to initialize the KMSDRM video backend.
+ * Determines whether SDL enforces that DRM master is required in order to
+ * initialize the KMSDRM video backend.
  *
- * The DRM subsystem has a concept of a "DRM master" which is a DRM client that
- * has the ability to set planes, set cursor, etc. When SDL is DRM master, it
- * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL
- * is still able to process input and query attributes of attached displays,
- * but it cannot change display state or draw to the screen directly.
+ * The DRM subsystem has a concept of a "DRM master" which is a DRM client
+ * that has the ability to set planes, set cursor, etc. When SDL is DRM
+ * master, it can draw to the screen using the SDL rendering APIs. Without DRM
+ * master, SDL is still able to process input and query attributes of attached
+ * displays, but it cannot change display state or draw to the screen
+ * directly.
  *
- * In some cases, it can be useful to have the KMSDRM backend even if it cannot
- * be used for rendering. An app may want to use SDL for input processing while
- * using another rendering API (such as an MMAL overlay on Raspberry Pi) or
- * using its own code to render to DRM overlays that SDL doesn't support.
+ * In some cases, it can be useful to have the KMSDRM backend even if it
+ * cannot be used for rendering. An app may want to use SDL for input
+ * processing while using another rendering API (such as an MMAL overlay on
+ * Raspberry Pi) or using its own code to render to DRM overlays that SDL
+ * doesn't support.
  *
  * This hint must be set before initializing the video subsystem.
  *
  * This variable can be set to the following values:
- *    "0"       - SDL will allow usage of the KMSDRM backend without DRM master
- *    "1"       - SDL Will require DRM master to use the KMSDRM backend (default)
+ *
+ * - "0": SDL will allow usage of the KMSDRM backend without DRM master
+ * - "1": SDL Will require DRM master to use the KMSDRM backend (default)
  */
 #define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER      "SDL_KMSDRM_REQUIRE_DRM_MASTER"
 
 /**
-  *  \brief  A comma separated list of devices to open as joysticks
-  *
-  *  This variable is currently only used by the Linux joystick driver.
-  */
+ * A comma separated list of devices to open as joysticks
+ *
+ * This variable is currently only used by the Linux joystick driver.
+ */
 #define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE"
 
+
 /**
-  *  \brief  A variable controlling whether joysticks on Linux will always treat 'hat' axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking whether they may be analog.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Only map hat axis inputs to digital hat outputs if the input axes appear to actually be digital (the default)
-  *    "1"       - Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as digital hats
-  */
+ * A variable containing a list of devices and their desired number of haptic
+ * (force feedback) enabled axis.
+ *
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form plus the number of desired axes, e.g.
+ *
+ * `0xAAAA/0xBBBB/1,0xCCCC/0xDDDD/3`
+ *
+ * This hint supports a "wildcard" device that will set the number of haptic
+ * axes on all initialized haptic devices which were not defined explicitly in
+ * this hint.
+ *
+ * `0xFFFF/0xFFFF/1`
+ *
+ * This hint should be set before a controller is opened. The number of haptic
+ * axes won't exceed the number of real axes found on the device.
+ */
+#define SDL_HINT_JOYSTICK_HAPTIC_AXES "SDL_JOYSTICK_HAPTIC_AXES"
+
+/**
+ * A variable controlling whether joysticks on Linux will always treat 'hat'
+ * axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking
+ * whether they may be analog.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Only map hat axis inputs to digital hat outputs if the input axes
+ *   appear to actually be digital (the default)
+ * - "1": Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as
+ *   digital hats
+ */
 #define SDL_HINT_LINUX_DIGITAL_HATS "SDL_LINUX_DIGITAL_HATS"
 
 /**
-  *  \brief  A variable controlling whether digital hats on Linux will apply deadzones to their underlying input axes or use unfiltered values.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Return digital hat values based on unfiltered input axis values
-  *    "1"       - Return digital hat values with deadzones on the input axes taken into account (the default)
-  */
+ * A variable controlling whether digital hats on Linux will apply deadzones
+ * to their underlying input axes or use unfiltered values.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Return digital hat values based on unfiltered input axis values
+ * - "1": Return digital hat values with deadzones on the input axes taken
+ *   into account (the default)
+ */
 #define SDL_HINT_LINUX_HAT_DEADZONES "SDL_LINUX_HAT_DEADZONES"
 
 /**
-  *  \brief  A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Use /dev/input/event*
-  *    "1"       - Use /dev/input/js*
-  *
-  *  By default the /dev/input/event* interfaces are used
-  */
+ * A variable controlling whether to use the classic /dev/input/js* joystick
+ * interface or the newer /dev/input/event* joystick interface on Linux
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use /dev/input/event*
+ * - "1": Use /dev/input/js*
+ *
+ * By default the /dev/input/event* interfaces are used
+ */
 #define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC"
 
 /**
-  *  \brief  A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Return unfiltered joystick axis values (the default)
-  *    "1"       - Return axis values with deadzones taken into account
-  */
+ * A variable controlling whether joysticks on Linux adhere to their
+ * HID-defined deadzones or return unfiltered values.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Return unfiltered joystick axis values (the default)
+ * - "1": Return axis values with deadzones taken into account
+ */
 #define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES"
 
 /**
- *  \brief A variable controlling the default SDL log levels.
+ * A variable controlling the default SDL log levels.
  *
- *  This variable is a comma separated set of category=level tokens that define the default logging levels for SDL applications.
+ * This variable is a comma separated set of category=level tokens that define
+ * the default logging levels for SDL applications.
  *
- *  The category can be a numeric category, one of "app", "error", "assert", "system", "audio", "video", "render", "input", "test", or `*` for any unspecified category.
+ * The category can be a numeric category, one of "app", "error", "assert",
+ * "system", "audio", "video", "render", "input", "test", or `*` for any
+ * unspecified category.
  *
- *  The level can be a numeric level, one of "verbose", "debug", "info", "warn", "error", "critical", or "quiet" to disable that category.
+ * The level can be a numeric level, one of "verbose", "debug", "info",
+ * "warn", "error", "critical", or "quiet" to disable that category.
  *
- *  You can omit the category if you want to set the logging level for all categories.
+ * You can omit the category if you want to set the logging level for all
+ * categories.
  *
- *  If this hint isn't set, the default log levels are equivalent to:
- *  "app=info,assert=warn,test=verbose,*=error"
+ * If this hint isn't set, the default log levels are equivalent to:
+ * "app=info,assert=warn,test=verbose,*=error"
  */
 #define SDL_HINT_LOGGING   "SDL_LOGGING"
 
 /**
-*  \brief  When set don't force the SDL app to become a foreground process
-*
-*  This hint only applies to Mac OS X.
-*
-*/
+ * When set don't force the SDL app to become a foreground process
+ *
+ * This hint only applies to Mac OS X.
+ */
 #define SDL_HINT_MAC_BACKGROUND_APP    "SDL_MAC_BACKGROUND_APP"
 
 /**
- *  \brief A variable that determines whether ctrl+click should generate a right-click event on Mac
+ * A variable that determines whether ctrl+click should generate a right-click
+ * event on Mac
  *
- *  If present, holding ctrl while left clicking will generate a right click
- *  event when on Mac.
+ * If present, holding ctrl while left clicking will generate a right click
+ * event when on Mac.
  */
 #define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK"
 
 /**
- *  \brief   A variable controlling whether dispatching OpenGL context updates should block the dispatching thread until the main thread finishes processing
+ * A variable controlling whether dispatching OpenGL context updates should
+ * block the dispatching thread until the main thread finishes processing
  *
- *  This variable can be set to the following values:
- *    "0"       - Dispatching OpenGL context updates will block the dispatching thread until the main thread finishes processing (default).
- *    "1"       - Dispatching OpenGL context updates will allow the dispatching thread to continue execution.
+ * This variable can be set to the following values:
  *
- *  Generally you want the default, but if you have OpenGL code in a background thread on a Mac, and the main thread
- *  hangs because it's waiting for that background thread, but that background thread is also hanging because it's
- *  waiting for the main thread to do an update, this might fix your issue.
+ * - "0": Dispatching OpenGL context updates will block the dispatching thread
+ *   until the main thread finishes processing (default).
+ * - "1": Dispatching OpenGL context updates will allow the dispatching thread
+ *   to continue execution.
  *
- *  This hint only applies to macOS.
+ * Generally you want the default, but if you have OpenGL code in a background
+ * thread on a Mac, and the main thread hangs because it's waiting for that
+ * background thread, but that background thread is also hanging because it's
+ * waiting for the main thread to do an update, this might fix your issue.
  *
- *  This hint is available since SDL 2.24.0.
+ * This hint only applies to macOS.
  *
+ * This hint is available since SDL 2.24.0.
  */
 #define SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH "SDL_MAC_OPENGL_ASYNC_DISPATCH"
 
 /**
- *  \brief  A variable setting the double click radius, in pixels.
+ * A variable setting the double click radius, in pixels.
  */
 #define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS    "SDL_MOUSE_DOUBLE_CLICK_RADIUS"
 
 /**
- *  \brief  A variable setting the double click time, in milliseconds.
+ * A variable setting the double click time, in milliseconds.
  */
 #define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME    "SDL_MOUSE_DOUBLE_CLICK_TIME"
 
 /**
- *  \brief Allow mouse click events when clicking to focus an SDL window
+ * Allow mouse click events when clicking to focus an SDL window
  *
- *  This variable can be set to the following values:
- *    "0"       - Ignore mouse clicks that activate a window
- *    "1"       - Generate events for mouse clicks that activate a window
+ * This variable can be set to the following values:
  *
- *  By default SDL will ignore mouse clicks that activate a window
+ * - "0": Ignore mouse clicks that activate a window
+ * - "1": Generate events for mouse clicks that activate a window
+ *
+ * By default SDL will ignore mouse clicks that activate a window
  */
 #define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH"
 
 /**
- *  \brief  A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode
+ * A variable setting the speed scale for mouse motion, in floating point,
+ * when the mouse is not in relative mode
  */
 #define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE    "SDL_MOUSE_NORMAL_SPEED_SCALE"
 
 /**
- *  \brief  A variable controlling whether relative mouse mode constrains the mouse to the center of the window
+ * A variable controlling whether relative mouse mode constrains the mouse to
+ * the center of the window
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative mouse mode constrains the mouse to the window
- *    "1"       - Relative mouse mode constrains the mouse to the center of the window
+ * This variable can be set to the following values:
  *
- *  Constraining to the center of the window works better for FPS games and when the
- *  application is running over RDP. Constraining to the whole window works better
- *  for 2D games and increases the chance that the mouse will be in the correct
- *  position when using high DPI mice.
+ * - "0": Relative mouse mode constrains the mouse to the window
+ * - "1": Relative mouse mode constrains the mouse to the center of the window
  *
- *  By default SDL will constrain the mouse to the center of the window
+ * Constraining to the center of the window works better for FPS games and
+ * when the application is running over RDP. Constraining to the whole window
+ * works better for 2D games and increases the chance that the mouse will be
+ * in the correct position when using high DPI mice.
+ *
+ * By default SDL will constrain the mouse to the center of the window
  */
 #define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER    "SDL_MOUSE_RELATIVE_MODE_CENTER"
 
 /**
- *  \brief  A variable controlling whether relative mouse mode is implemented using mouse warping
+ * A variable controlling whether relative mouse mode is implemented using
+ * mouse warping
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative mouse mode uses raw input
- *    "1"       - Relative mouse mode uses mouse warping
+ * This variable can be set to the following values:
  *
- *  By default SDL will use raw input for relative mouse mode
+ * - "0": Relative mouse mode uses raw input
+ * - "1": Relative mouse mode uses mouse warping
+ *
+ * By default SDL will use raw input for relative mouse mode
  */
 #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP    "SDL_MOUSE_RELATIVE_MODE_WARP"
 
 /**
- *  \brief  A variable controlling whether relative mouse motion is affected by renderer scaling
+ * A variable controlling whether relative mouse motion is affected by
+ * renderer scaling
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative motion is unaffected by DPI or renderer's logical size
- *    "1"       - Relative motion is scaled according to DPI scaling and logical size
+ * This variable can be set to the following values:
  *
- *  By default relative mouse deltas are affected by DPI and renderer scaling
+ * - "0": Relative motion is unaffected by DPI or renderer's logical size
+ * - "1": Relative motion is scaled according to DPI scaling and logical size
+ *
+ * By default relative mouse deltas are affected by DPI and renderer scaling
  */
 #define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING"
 
 /**
- *  \brief  A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode
+ * A variable setting the scale for mouse motion, in floating point, when the
+ * mouse is in relative mode
  */
 #define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE    "SDL_MOUSE_RELATIVE_SPEED_SCALE"
 
 /**
- *  \brief  A variable controlling whether the system mouse acceleration curve is used for relative mouse motion.
+ * A variable controlling whether the system mouse acceleration curve is used
+ * for relative mouse motion.
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative mouse motion will be unscaled (the default)
- *    "1"       - Relative mouse motion will be scaled using the system mouse acceleration curve.
+ * This variable can be set to the following values:
  *
- *    If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the system speed scale.
+ * - "0": Relative mouse motion will be unscaled (the default)
+ * - "1": Relative mouse motion will be scaled using the system mouse
+ *   acceleration curve.
+ *
+ * If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the
+ * system speed scale.
  */
 #define SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE    "SDL_MOUSE_RELATIVE_SYSTEM_SCALE"
 
 /**
- *  \brief  A variable controlling whether a motion event should be generated for mouse warping in relative mode.
+ * A variable controlling whether a motion event should be generated for mouse
+ * warping in relative mode.
  *
- *  This variable can be set to the following values:
- *    "0"       - Warping the mouse will not generate a motion event in relative mode
- *    "1"       - Warping the mouse will generate a motion event in relative mode
+ * This variable can be set to the following values:
  *
- *  By default warping the mouse will not generate motion events in relative mode. This avoids the application having to filter out large relative motion due to warping.
+ * - "0": Warping the mouse will not generate a motion event in relative mode
+ * - "1": Warping the mouse will generate a motion event in relative mode
+ *
+ * By default warping the mouse will not generate motion events in relative
+ * mode. This avoids the application having to filter out large relative
+ * motion due to warping.
  */
 #define SDL_HINT_MOUSE_RELATIVE_WARP_MOTION  "SDL_MOUSE_RELATIVE_WARP_MOTION"
 
 /**
- *  \brief  A variable controlling whether the hardware cursor stays visible when relative mode is active.
+ * A variable controlling whether the hardware cursor stays visible when
+ * relative mode is active.
  *
- *  This variable can be set to the following values:
- *    "0"       - The cursor will be hidden while relative mode is active (default)
- *    "1"       - The cursor will remain visible while relative mode is active
+ * This variable can be set to the following values: "0" - The cursor will be
+ * hidden while relative mode is active (default) "1" - The cursor will remain
+ * visible while relative mode is active
  *
- *  Note that for systems without raw hardware inputs, relative mode is implemented using warping, so the hardware cursor will visibly warp between frames if this is enabled on those systems.
+ * Note that for systems without raw hardware inputs, relative mode is
+ * implemented using warping, so the hardware cursor will visibly warp between
+ * frames if this is enabled on those systems.
  */
 #define SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE  "SDL_MOUSE_RELATIVE_CURSOR_VISIBLE"
 
@@ -1438,330 +1679,382 @@
  * A variable controlling whether mouse events should generate synthetic touch
  * events
  *
- *  This variable can be set to the following values:
- *    "0"       - Mouse events will not generate touch events (default for desktop platforms)
- *    "1"       - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS)
+ * This variable can be set to the following values:
+ *
+ * - "0": Mouse events will not generate touch events (default for desktop
+ *   platforms)
+ * - "1": Mouse events will generate touch events (default for mobile
+ *   platforms, such as Android and iOS)
  */
 #define SDL_HINT_MOUSE_TOUCH_EVENTS    "SDL_MOUSE_TOUCH_EVENTS"
 
 /**
- *  \brief  A variable controlling whether the mouse is captured while mouse buttons are pressed
+ * A variable controlling whether the mouse is captured while mouse buttons
+ * are pressed
  *
- *  This variable can be set to the following values:
- *    "0"       - The mouse is not captured while mouse buttons are pressed
- *    "1"       - The mouse is captured while mouse buttons are pressed
+ * This variable can be set to the following values:
  *
- *  By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged
- *  outside the window, the application continues to receive mouse events until the button is
- *  released.
+ * - "0": The mouse is not captured while mouse buttons are pressed
+ * - "1": The mouse is captured while mouse buttons are pressed
+ *
+ * By default the mouse is captured while mouse buttons are pressed so if the
+ * mouse is dragged outside the window, the application continues to receive
+ * mouse events until the button is released.
  */
 #define SDL_HINT_MOUSE_AUTO_CAPTURE    "SDL_MOUSE_AUTO_CAPTURE"
 
 /**
- *  \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
+ * Tell SDL not to catch the SIGINT or SIGTERM signals.
  *
- * This hint only applies to Unix-like platforms, and should set before
- * any calls to SDL_Init()
+ * This hint only applies to Unix-like platforms, and should set before any
+ * calls to SDL_Init()
  *
  * The variable can be set to the following values:
- *   "0"       - SDL will install a SIGINT and SIGTERM handler, and when it
- *               catches a signal, convert it into an SDL_QUIT event.
- *   "1"       - SDL will not install a signal handler at all.
+ *
+ * - "0": SDL will install a SIGINT and SIGTERM handler, and when it catches a
+ *   signal, convert it into an SDL_QUIT event.
+ * - "1": SDL will not install a signal handler at all.
  */
 #define SDL_HINT_NO_SIGNAL_HANDLERS   "SDL_NO_SIGNAL_HANDLERS"
 
 /**
- *  \brief  A variable controlling what driver to use for OpenGL ES contexts.
+ * A variable controlling what driver to use for OpenGL ES contexts.
  *
- *  On some platforms, currently Windows and X11, OpenGL drivers may support
- *  creating contexts with an OpenGL ES profile. By default SDL uses these
- *  profiles, when available, otherwise it attempts to load an OpenGL ES
- *  library, e.g. that provided by the ANGLE project. This variable controls
- *  whether SDL follows this default behaviour or will always load an
- *  OpenGL ES library.
+ * On some platforms, currently Windows and X11, OpenGL drivers may support
+ * creating contexts with an OpenGL ES profile. By default SDL uses these
+ * profiles, when available, otherwise it attempts to load an OpenGL ES
+ * library, e.g. that provided by the ANGLE project. This variable controls
+ * whether SDL follows this default behaviour or will always load an OpenGL ES
+ * library.
  *
- *  Circumstances where this is useful include
- *  - Testing an app with a particular OpenGL ES implementation, e.g ANGLE,
- *    or emulator, e.g. those from ARM, Imagination or Qualcomm.
- *  - Resolving OpenGL ES function addresses at link time by linking with
- *    the OpenGL ES library instead of querying them at run time with
- *    SDL_GL_GetProcAddress().
+ * Circumstances where this is useful include - Testing an app with a
+ * particular OpenGL ES implementation, e.g ANGLE, or emulator, e.g. those
+ * from ARM, Imagination or Qualcomm. - Resolving OpenGL ES function addresses
+ * at link time by linking with the OpenGL ES library instead of querying them
+ * at run time with SDL_GL_GetProcAddress().
  *
- *  Caution: for an application to work with the default behaviour across
- *  different OpenGL drivers it must query the OpenGL ES function
- *  addresses at run time using SDL_GL_GetProcAddress().
+ * Caution: for an application to work with the default behaviour across
+ * different OpenGL drivers it must query the OpenGL ES function addresses at
+ * run time using SDL_GL_GetProcAddress().
  *
- *  This variable is ignored on most platforms because OpenGL ES is native
- *  or not supported.
+ * This variable is ignored on most platforms because OpenGL ES is native or
+ * not supported.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use ES profile of OpenGL, if available. (Default when not set.)
- *    "1"       - Load OpenGL ES library using the default library names.
+ * This variable can be set to the following values:
  *
+ * - "0": Use ES profile of OpenGL, if available. (Default when not set.)
+ * - "1": Load OpenGL ES library using the default library names.
  */
 #define SDL_HINT_OPENGL_ES_DRIVER   "SDL_OPENGL_ES_DRIVER"
 
 /**
- *  \brief  A variable controlling which orientations are allowed on iOS/Android.
+ * A variable controlling which orientations are allowed on iOS/Android.
  *
- *  In some circumstances it is necessary to be able to explicitly control
- *  which UI orientations are allowed.
+ * In some circumstances it is necessary to be able to explicitly control
+ * which UI orientations are allowed.
  *
- *  This variable is a space delimited list of the following values:
- *    "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown"
+ * This variable is a space delimited list of the following values:
+ *
+ * - "LandscapeLeft"
+ * - "LandscapeRight"
+ * - "Portrait"
+ * - "PortraitUpsideDown"
  */
 #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS"
 
 /**
- *  \brief  A variable controlling the use of a sentinel event when polling the event queue
+ * A variable controlling the use of a sentinel event when polling the event
+ * queue
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable poll sentinels
- *    "1"       - Enable poll sentinels
+ * This variable can be set to the following values:
  *
- *  When polling for events, SDL_PumpEvents is used to gather new events from devices.
- *  If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will
- *  become stuck until the new events stop.
- *  This is most noticeable when moving a high frequency mouse.
+ * - "0": Disable poll sentinels
+ * - "1": Enable poll sentinels
  *
- *  By default, poll sentinels are enabled.
+ * When polling for events, SDL_PumpEvents is used to gather new events from
+ * devices. If a device keeps producing new events between calls to
+ * SDL_PumpEvents, a poll loop will become stuck until the new events stop.
+ * This is most noticeable when moving a high frequency mouse.
+ *
+ * By default, poll sentinels are enabled.
  */
 #define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL"
 
 /**
- *  \brief Override for SDL_GetPreferredLocales()
+ * Override for SDL_GetPreferredLocales()
  *
- *  If set, this will be favored over anything the OS might report for the
- *  user's preferred locales. Changing this hint at runtime will not generate
- *  a SDL_LOCALECHANGED event (but if you can change the hint, you can push
- *  your own event, if you want).
+ * If set, this will be favored over anything the OS might report for the
+ * user's preferred locales. Changing this hint at runtime will not generate a
+ * SDL_LOCALECHANGED event (but if you can change the hint, you can push your
+ * own event, if you want).
  *
- *  The format of this hint is a comma-separated list of language and locale,
- *  combined with an underscore, as is a common format: "en_GB". Locale is
- *  optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
+ * The format of this hint is a comma-separated list of language and locale,
+ * combined with an underscore, as is a common format: "en_GB". Locale is
+ * optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
  */
 #define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES"
 
 /**
- *  \brief  A variable describing the content orientation on QtWayland-based platforms.
+ * A variable describing the content orientation on QtWayland-based platforms.
  *
- *  On QtWayland platforms, windows are rotated client-side to allow for custom
- *  transitions. In order to correctly position overlays (e.g. volume bar) and
- *  gestures (e.g. events view, close/minimize gestures), the system needs to
- *  know in which orientation the application is currently drawing its contents.
+ * On QtWayland platforms, windows are rotated client-side to allow for custom
+ * transitions. In order to correctly position overlays (e.g. volume bar) and
+ * gestures (e.g. events view, close/minimize gestures), the system needs to
+ * know in which orientation the application is currently drawing its
+ * contents.
  *
- *  This does not cause the window to be rotated or resized, the application
- *  needs to take care of drawing the content in the right orientation (the
- *  framebuffer is always in portrait mode).
+ * This does not cause the window to be rotated or resized, the application
+ * needs to take care of drawing the content in the right orientation (the
+ * framebuffer is always in portrait mode).
  *
- *  This variable can be one of the following values:
- *    "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape"
+ * This variable can be one of the following values:
  *
- *  Since SDL 2.0.22 this variable accepts a comma-separated list of values above.
+ * - "primary" (default)
+ * - "portrait"
+ * - "landscape"
+ * - "inverted-portrait"
+ * - "inverted-landscape"
+ *
+ * Since SDL 2.0.22 this variable accepts a comma-separated list of values
+ * above.
  */
 #define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION"
 
 /**
- *  \brief  Flags to set on QtWayland windows to integrate with the native window manager.
+ * Flags to set on QtWayland windows to integrate with the native window
+ * manager.
  *
- *  On QtWayland platforms, this hint controls the flags to set on the windows.
- *  For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures.
+ * On QtWayland platforms, this hint controls the flags to set on the windows.
+ * For example, on Sailfish OS "OverridesSystemGestures" disables swipe
+ * gestures.
  *
- *  This variable is a space-separated list of the following values (empty = no flags):
- *    "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager"
+ * This variable is a space-separated list of the following values (empty = no
+ * flags):
+ *
+ * - "OverridesSystemGestures"
+ * - "StaysOnTop"
+ * - "BypassWindowManager"
  */
 #define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS"
 
 /**
- *  \brief  A variable controlling whether the 2D render API is compatible or efficient.
+ * A variable controlling whether the 2D render API is compatible or
+ * efficient.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0"     - Don't use batching to make rendering more efficient.
- *    "1"     - Use batching, but might cause problems if app makes its own direct OpenGL calls.
+ * - "0": Don't use batching to make rendering more efficient.
+ * - "1": Use batching, but might cause problems if app makes its own direct
+ *   OpenGL calls.
  *
- *  Up to SDL 2.0.9, the render API would draw immediately when requested. Now
- *  it batches up draw requests and sends them all to the GPU only when forced
- *  to (during SDL_RenderPresent, when changing render targets, by updating a
- *  texture that the batch needs, etc). This is significantly more efficient,
- *  but it can cause problems for apps that expect to render on top of the
- *  render API's output. As such, SDL will disable batching if a specific
- *  render backend is requested (since this might indicate that the app is
- *  planning to use the underlying graphics API directly). This hint can
- *  be used to explicitly request batching in this instance. It is a contract
- *  that you will either never use the underlying graphics API directly, or
- *  if you do, you will call SDL_RenderFlush() before you do so any current
- *  batch goes to the GPU before your work begins. Not following this contract
- *  will result in undefined behavior.
+ * Up to SDL 2.0.9, the render API would draw immediately when requested. Now
+ * it batches up draw requests and sends them all to the GPU only when forced
+ * to (during SDL_RenderPresent, when changing render targets, by updating a
+ * texture that the batch needs, etc). This is significantly more efficient,
+ * but it can cause problems for apps that expect to render on top of the
+ * render API's output. As such, SDL will disable batching if a specific
+ * render backend is requested (since this might indicate that the app is
+ * planning to use the underlying graphics API directly). This hint can be
+ * used to explicitly request batching in this instance. It is a contract that
+ * you will either never use the underlying graphics API directly, or if you
+ * do, you will call SDL_RenderFlush() before you do so any current batch goes
+ * to the GPU before your work begins. Not following this contract will result
+ * in undefined behavior.
  */
 #define SDL_HINT_RENDER_BATCHING  "SDL_RENDER_BATCHING"
 
 /**
- *  \brief  A variable controlling how the 2D render API renders lines
+ * A variable controlling how the 2D render API renders lines
  *
- *  This variable can be set to the following values:
- *    "0"     - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20)
- *    "1"     - Use the driver point API using Bresenham's line algorithm (correct, draws many points)
- *    "2"     - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20)
- *    "3"     - Use the driver geometry API (correct, draws thicker diagonal lines)
+ * This variable can be set to the following values:
  *
- *  This variable should be set when the renderer is created.
+ * - "0": Use the default line drawing method (Bresenham's line algorithm as
+ *   of SDL 2.0.20)
+ * - "1": Use the driver point API using Bresenham's line algorithm (correct,
+ *   draws many points)
+ * - "2": Use the driver line API (occasionally misses line endpoints based on
+ *   hardware driver quirks, was the default before 2.0.20)
+ * - "3": Use the driver geometry API (correct, draws thicker diagonal lines)
+ *
+ * This variable should be set when the renderer is created.
  */
 #define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD"
 
 /**
- *  \brief  A variable controlling whether to enable Direct3D 11+'s Debug Layer.
+ * A variable controlling whether to enable Direct3D 11+'s Debug Layer.
  *
- *  This variable does not have any effect on the Direct3D 9 based renderer.
+ * This variable does not have any effect on the Direct3D 9 based renderer.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable Debug Layer use
- *    "1"       - Enable Debug Layer use
+ * This variable can be set to the following values:
  *
- *  By default, SDL does not use Direct3D Debug Layer.
+ * - "0": Disable Debug Layer use
+ * - "1": Enable Debug Layer use
+ *
+ * By default, SDL does not use Direct3D Debug Layer.
  */
 #define SDL_HINT_RENDER_DIRECT3D11_DEBUG    "SDL_RENDER_DIRECT3D11_DEBUG"
 
 /**
- *  \brief  A variable controlling whether the Direct3D device is initialized for thread-safe operations.
+ * A variable controlling whether the Direct3D device is initialized for
+ * thread-safe operations.
  *
- *  This variable can be set to the following values:
- *    "0"       - Thread-safety is not enabled (faster)
- *    "1"       - Thread-safety is enabled
+ * This variable can be set to the following values:
  *
- *  By default the Direct3D device is created with thread-safety disabled.
+ * - "0": Thread-safety is not enabled (faster)
+ * - "1": Thread-safety is enabled
+ *
+ * By default the Direct3D device is created with thread-safety disabled.
  */
 #define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE"
 
 /**
- *  \brief  A variable specifying which render driver to use.
+ * A variable specifying which render driver to use.
  *
- *  If the application doesn't pick a specific renderer to use, this variable
- *  specifies the name of the preferred renderer.  If the preferred renderer
- *  can't be initialized, the normal default renderer is used.
+ * If the application doesn't pick a specific renderer to use, this variable
+ * specifies the name of the preferred renderer. If the preferred renderer
+ * can't be initialized, the normal default renderer is used.
  *
- *  This variable is case insensitive and can be set to the following values:
- *    "direct3d"
- *    "direct3d11"
- *    "direct3d12"
- *    "opengl"
- *    "opengles2"
- *    "opengles"
- *    "metal"
- *    "software"
+ * This variable is case insensitive and can be set to the following values:
  *
- *  The default varies by platform, but it's the first one in the list that
- *  is available on the current platform.
+ * - "direct3d"
+ * - "direct3d11"
+ * - "direct3d12"
+ * - "opengl"
+ * - "opengles2"
+ * - "opengles"
+ * - "metal"
+ * - "software"
+ *
+ * The default varies by platform, but it's the first one in the list that is
+ * available on the current platform.
  */
 #define SDL_HINT_RENDER_DRIVER              "SDL_RENDER_DRIVER"
 
 /**
- *  \brief  A variable controlling the scaling policy for SDL_RenderSetLogicalSize.
+ * A variable controlling the scaling policy for SDL_RenderSetLogicalSize.
  *
- *  This variable can be set to the following values:
- *    "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen
- *    "1" or "overscan"  - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen
+ * This variable can be set to the following values:
  *
- *  By default letterbox is used
+ * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on
+ * screen "1" or "overscan" - Will zoom the rendering so it fills the entire
+ * screen, allowing edges to be drawn offscreen
+ *
+ * By default letterbox is used
  */
 #define SDL_HINT_RENDER_LOGICAL_SIZE_MODE       "SDL_RENDER_LOGICAL_SIZE_MODE"
 
 /**
- *  \brief  A variable controlling whether the OpenGL render driver uses shaders if they are available.
+ * A variable controlling whether the OpenGL render driver uses shaders if
+ * they are available.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable shaders
- *    "1"       - Enable shaders
+ * This variable can be set to the following values:
  *
- *  By default shaders are used if OpenGL supports them.
+ * - "0": Disable shaders
+ * - "1": Enable shaders
+ *
+ * By default shaders are used if OpenGL supports them.
  */
 #define SDL_HINT_RENDER_OPENGL_SHADERS      "SDL_RENDER_OPENGL_SHADERS"
 
 /**
- *  \brief  A variable controlling the scaling quality
+ * A variable controlling the scaling quality
  *
- *  This variable can be set to the following values:
- *    "0" or "nearest" - Nearest pixel sampling
- *    "1" or "linear"  - Linear filtering (supported by OpenGL and Direct3D)
- *    "2" or "best"    - Currently this is the same as "linear"
+ * This variable can be set to the following values:
  *
- *  By default nearest pixel sampling is used
+ * - "0" or "nearest": Nearest pixel sampling
+ * - "1" or "linear": Linear filtering (supported by OpenGL and Direct3D)
+ * - "2" or "best": Currently this is the same as "linear"
+ *
+ * By default nearest pixel sampling is used
  */
 #define SDL_HINT_RENDER_SCALE_QUALITY       "SDL_RENDER_SCALE_QUALITY"
 
 /**
- *  \brief  A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing.
+ * A variable controlling whether updates to the SDL screen surface should be
+ * synchronized with the vertical refresh, to avoid tearing.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable vsync
- *    "1"       - Enable vsync
+ * This variable can be set to the following values:
  *
- *  By default SDL does not sync screen surface updates with vertical refresh.
+ * - "0": Disable vsync
+ * - "1": Enable vsync
+ *
+ * By default SDL does not sync screen surface updates with vertical refresh.
  */
 #define SDL_HINT_RENDER_VSYNC               "SDL_RENDER_VSYNC"
 
 /**
- *  \brief  A variable controlling whether the Metal render driver select low power device over default one
+ * A variable controlling whether the Metal render driver select low power
+ * device over default one
  *
- *  This variable can be set to the following values:
- *    "0"       - Use the prefered OS device
- *    "1"       - Select a low power one
+ * This variable can be set to the following values:
  *
- *  By default the prefered OS device is used.
+ * - "0": Use the prefered OS device
+ * - "1": Select a low power one
+ *
+ * By default the prefered OS device is used.
  */
 #define SDL_HINT_RENDER_METAL_PREFER_LOW_POWER_DEVICE "SDL_RENDER_METAL_PREFER_LOW_POWER_DEVICE"
 
 /**
- *  A variable containing a list of ROG gamepad capable mice.
+ * A variable containing a list of ROG gamepad capable mice.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_ROG_GAMEPAD_MICE "SDL_ROG_GAMEPAD_MICE"
 
 /**
- *  A variable containing a list of devices that are not ROG gamepad capable mice. This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list.
+ * A variable containing a list of devices that are not ROG gamepad capable
+ * mice.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_ROG_GAMEPAD_MICE_EXCLUDED "SDL_ROG_GAMEPAD_MICE_EXCLUDED"
 
 /**
- *  \brief  A variable controlling if VSYNC is automatically disable if doesn't reach the enough FPS
+ * A variable controlling if VSYNC is automatically disable if doesn't reach
+ * the enough FPS
  *
- *  This variable can be set to the following values:
- *    "0"       - It will be using VSYNC as defined in the main flag. Default
- *    "1"       - If VSYNC was previously enabled, then it will disable VSYNC if doesn't reach enough speed
+ * This variable can be set to the following values:
  *
- *  By default SDL does not enable the automatic VSYNC
+ * - "0": It will be using VSYNC as defined in the main flag. Default
+ * - "1": If VSYNC was previously enabled, then it will disable VSYNC if
+ *   doesn't reach enough speed
+ *
+ * By default SDL does not enable the automatic VSYNC
  */
 #define SDL_HINT_PS2_DYNAMIC_VSYNC    "SDL_PS2_DYNAMIC_VSYNC"
 
 /**
- * \brief A variable to control whether the return key on the soft keyboard
- *        should hide the soft keyboard on Android and iOS.
+ * A variable to control whether the return key on the soft keyboard should
+ * hide the soft keyboard on Android and iOS.
  *
  * The variable can be set to the following values:
- *   "0"       - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default)
- *   "1"       - The return key will hide the keyboard.
  *
- * The value of this hint is used at runtime, so it can be changed at any time.
+ * - "0": The return key will be handled as a key event. This is the behaviour
+ *   of SDL <= 2.0.3. (default)
+ * - "1": The return key will hide the keyboard.
+ *
+ * The value of this hint is used at runtime, so it can be changed at any
+ * time.
  */
 #define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME"
 
 /**
- * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI
+ * Tell SDL which Dispmanx layer to use on a Raspberry PI
  *
  * Also known as Z-order. The variable can take a negative or positive value.
  * The default is 10000.
@@ -1769,7 +2062,7 @@
 #define SDL_HINT_RPI_VIDEO_LAYER           "SDL_RPI_VIDEO_LAYER"
 
 /**
- *  \brief Specify an "activity name" for screensaver inhibition.
+ * Specify an "activity name" for screensaver inhibition.
  *
  * Some platforms, notably Linux desktops, list the applications which are
  * inhibiting the screensaver or other power-saving features.
@@ -1778,7 +2071,7 @@
  * SDL_DisableScreenSaver() is used (or the screensaver is automatically
  * disabled). The contents of this hint are used when the screensaver is
  * disabled. You should use a string that describes what your program is doing
- * (and, therefore, why the screensaver is disabled).  For example, "Playing a
+ * (and, therefore, why the screensaver is disabled). For example, "Playing a
  * game" or "Watching a video".
  *
  * Setting this to "" or leaving it unset will have SDL use a reasonable
@@ -1789,125 +2082,140 @@
 #define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME"
 
 /**
- *  \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime.
+ * Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as
+ * realtime.
  *
- *  On some platforms, like Linux, a realtime priority thread may be subject to restrictions
- *  that require special handling by the application. This hint exists to let SDL know that
- *  the app is prepared to handle said restrictions.
+ * On some platforms, like Linux, a realtime priority thread may be subject to
+ * restrictions that require special handling by the application. This hint
+ * exists to let SDL know that the app is prepared to handle said
+ * restrictions.
  *
- *  On Linux, SDL will apply the following configuration to any thread that becomes realtime:
- *   * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy,
- *   * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
- *     * Exceeding this limit will result in the kernel sending SIGKILL to the app,
- *     * Refer to the man pages for more information.
+ * On Linux, SDL will apply the following configuration to any thread that
+ * becomes realtime:
  *
- *  This variable can be set to the following values:
- *    "0"       - default platform specific behaviour
- *    "1"       - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy
+ * - The SCHED_RESET_ON_FORK bit will be set on the scheduling policy.
+ * - An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
+ * - Exceeding this limit will result in the kernel sending SIGKILL to the
+ *   app.
+ *
+ * Refer to the man pages for more information.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": default platform specific behaviour
+ * - "1": Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling
+ *   policy
  */
 #define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL"
 
 /**
-*  \brief  A string specifying additional information to use with SDL_SetThreadPriority.
-*
-*  By default SDL_SetThreadPriority will make appropriate system changes in order to
-*  apply a thread priority.  For example on systems using pthreads the scheduler policy
-*  is changed automatically to a policy that works well with a given priority.
-*  Code which has specific requirements can override SDL's default behavior with this hint.
-*
-*  pthread hint values are "current", "other", "fifo" and "rr".
-*  Currently no other platform hint values are defined but may be in the future.
-*
-*  \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro
-*  configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME
-*  after calling SDL_SetThreadPriority().
-*/
+ * A string specifying additional information to use with
+ * SDL_SetThreadPriority.
+ *
+ * By default SDL_SetThreadPriority will make appropriate system changes in
+ * order to apply a thread priority. For example on systems using pthreads the
+ * scheduler policy is changed automatically to a policy that works well with
+ * a given priority. Code which has specific requirements can override SDL's
+ * default behavior with this hint.
+ *
+ * pthread hint values are "current", "other", "fifo" and "rr". Currently no
+ * other platform hint values are defined but may be in the future.
+ */
 #define SDL_HINT_THREAD_PRIORITY_POLICY         "SDL_THREAD_PRIORITY_POLICY"
 
 /**
-*  \brief  A string specifying SDL's threads stack size in bytes or "0" for the backend's default size
-*
-*  Use this hint in case you need to set SDL's threads stack size to other than the default.
-*  This is specially useful if you build SDL against a non glibc libc library (such as musl) which
-*  provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses).
-*  Support for this hint is currently available only in the pthread, Windows, and PSP backend.
-*
-*  Instead of this hint, in 2.0.9 and later, you can use
-*  SDL_CreateThreadWithStackSize(). This hint only works with the classic
-*  SDL_CreateThread().
-*/
+ * A string specifying SDL's threads stack size in bytes or "0" for the
+ * backend's default size
+ *
+ * Use this hint in case you need to set SDL's threads stack size to other
+ * than the default. This is specially useful if you build SDL against a non
+ * glibc libc library (such as musl) which provides a relatively small default
+ * thread stack size (a few kilobytes versus the default 8MB glibc uses).
+ * Support for this hint is currently available only in the pthread, Windows,
+ * and PSP backend.
+ *
+ * Instead of this hint, in 2.0.9 and later, you can use
+ * SDL_CreateThreadWithStackSize(). This hint only works with the classic
+ * SDL_CreateThread().
+ */
 #define SDL_HINT_THREAD_STACK_SIZE              "SDL_THREAD_STACK_SIZE"
 
 /**
- *  \brief A variable that controls the timer resolution, in milliseconds.
+ * A variable that controls the timer resolution, in milliseconds.
  *
- *  The higher resolution the timer, the more frequently the CPU services
- *  timer interrupts, and the more precise delays are, but this takes up
- *  power and CPU time.  This hint is only used on Windows.
+ * The higher resolution the timer, the more frequently the CPU services timer
+ * interrupts, and the more precise delays are, but this takes up power and
+ * CPU time. This hint is only used on Windows.
  *
- *  See this blog post for more information:
- *  http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
+ * See this blog post for more information:
+ * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
  *
- *  If this variable is set to "0", the system timer resolution is not set.
+ * If this variable is set to "0", the system timer resolution is not set.
  *
- *  The default value is "1". This hint may be set at any time.
+ * The default value is "1". This hint may be set at any time.
  */
 #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION"
 
 /**
- *  \brief  A variable controlling whether touch events should generate synthetic mouse events
+ * A variable controlling whether touch events should generate synthetic mouse
+ * events
  *
- *  This variable can be set to the following values:
- *    "0"       - Touch events will not generate mouse events
- *    "1"       - Touch events will generate mouse events
+ * This variable can be set to the following values:
  *
- *  By default SDL will generate mouse events for touch events
+ * - "0": Touch events will not generate mouse events
+ * - "1": Touch events will generate mouse events
+ *
+ * By default SDL will generate mouse events for touch events
  */
 #define SDL_HINT_TOUCH_MOUSE_EVENTS    "SDL_TOUCH_MOUSE_EVENTS"
 
 /**
- *  \brief  A variable controlling which touchpad should generate synthetic mouse events
+ * A variable controlling which touchpad should generate synthetic mouse
+ * events
  *
- *  This variable can be set to the following values:
- *    "0"       - Only front touchpad should generate mouse events. Default
- *    "1"       - Only back touchpad should generate mouse events.
- *    "2"       - Both touchpads should generate mouse events.
+ * This variable can be set to the following values:
  *
- *  By default SDL will generate mouse events for all touch devices
+ * - "0": Only front touchpad should generate mouse events. Default
+ * - "1": Only back touchpad should generate mouse events.
+ * - "2": Both touchpads should generate mouse events.
+ *
+ * By default SDL will generate mouse events for all touch devices
  */
 #define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE    "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE"
 
 /**
- *  \brief  A variable controlling whether the Android / tvOS remotes
- *  should be listed as joystick devices, instead of sending keyboard events.
+ * A variable controlling whether the Android / tvOS remotes should be listed
+ * as joystick devices, instead of sending keyboard events.
  *
- *  This variable can be set to the following values:
- *    "0"       - Remotes send enter/escape/arrow key events
- *    "1"       - Remotes are available as 2 axis, 2 button joysticks (the default).
+ * This variable can be set to the following values:
+ *
+ * - "0": Remotes send enter/escape/arrow key events
+ * - "1": Remotes are available as 2 axis, 2 button joysticks (the default).
  */
 #define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK"
 
 /**
- *  \brief  A variable controlling whether the screensaver is enabled.
+ * A variable controlling whether the screensaver is enabled.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable screensaver
- *    "1"       - Enable screensaver
+ * This variable can be set to the following values:
  *
- *  By default SDL will disable the screensaver.
+ * - "0": Disable screensaver
+ * - "1": Enable screensaver
+ *
+ * By default SDL will disable the screensaver.
  */
 #define SDL_HINT_VIDEO_ALLOW_SCREENSAVER    "SDL_VIDEO_ALLOW_SCREENSAVER"
 
 /**
- * \brief Tell the video driver that we only want a double buffer.
+ * Tell the video driver that we only want a double buffer.
  *
  * By default, most lowlevel 2D APIs will use a triple buffer scheme that
  * wastes no CPU time on waiting for vsync after issuing a flip, but
  * introduces a frame of latency. On the other hand, using a double buffer
  * scheme instead is recommended for cases where low latency is an important
- * factor because we save a whole frame of latency.
- * We do so by waiting for vsync immediately after issuing a flip, usually just
- * after eglSwapBuffers call in the backend's *_SwapWindow function.
+ * factor because we save a whole frame of latency. We do so by waiting for
+ * vsync immediately after issuing a flip, usually just after eglSwapBuffers
+ * call in the backend's *_SwapWindow function.
  *
  * Since it's driver-specific, it's only supported where possible and
  * implemented. Currently supported the following drivers:
@@ -1919,499 +2227,570 @@
 #define SDL_HINT_VIDEO_DOUBLE_BUFFER      "SDL_VIDEO_DOUBLE_BUFFER"
 
 /**
- * \brief A variable controlling whether the EGL window is allowed to be
- * composited as transparent, rather than opaque.
+ * A variable controlling whether the EGL window is allowed to be composited
+ * as transparent, rather than opaque.
  *
  * Most window systems will always render windows opaque, even if the surface
- * format has an alpha channel. This is not always true, however, so by default
- * SDL will try to enforce opaque composition. To override this behavior, you
- * can set this hint to "1".
+ * format has an alpha channel. This is not always true, however, so by
+ * default SDL will try to enforce opaque composition. To override this
+ * behavior, you can set this hint to "1".
  */
 #define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY"
 
 /**
- * \brief A variable controlling whether the graphics context is externally managed.
+ * A variable controlling whether the graphics context is externally managed.
  *
  * This variable can be set to the following values:
- *  "0"         - SDL will manage graphics contexts that are attached to windows.
- *  "1"         - Disable graphics context management on windows.
  *
- * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the
- * context will be automatically saved and restored when pausing the application. Additionally, some
- * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
- * behavior, which is desireable when the application manages the graphics context, such as
- * an externally managed OpenGL context or attaching a Vulkan surface to the window.
+ * - "0": SDL will manage graphics contexts that are attached to windows.
+ * - "1": Disable graphics context management on windows.
+ *
+ * By default SDL will manage OpenGL contexts in certain situations. For
+ * example, on Android the context will be automatically saved and restored
+ * when pausing the application. Additionally, some platforms will assume
+ * usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
+ * behavior, which is desireable when the application manages the graphics
+ * context, such as an externally managed OpenGL context or attaching a Vulkan
+ * surface to the window.
  */
 #define SDL_HINT_VIDEO_EXTERNAL_CONTEXT    "SDL_VIDEO_EXTERNAL_CONTEXT"
 
 /**
- *  \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
+ * If set to 1, then do not allow high-DPI windows.
+ *
+ * ("Retina" on Mac and iOS)
  */
 #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED"
 
 /**
- *  \brief  A variable that dictates policy for fullscreen Spaces on Mac OS X.
+ * A variable that dictates policy for fullscreen Spaces on Mac OS X.
  *
- *  This hint only applies to Mac OS X.
+ * This hint only applies to Mac OS X.
  *
- *  The variable can be set to the following values:
- *    "0"       - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
- *                SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
- *                button on their titlebars).
- *    "1"       - Enable Spaces support (FULLSCREEN_DESKTOP will use them and
- *                SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
- *                button on their titlebars).
+ * The variable can be set to the following values:
  *
- *  The default value is "1". This hint must be set before any windows are created.
+ * - "0": Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
+ *   SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" button on their
+ *   titlebars).
+ * - "1": Enable Spaces support (FULLSCREEN_DESKTOP will use them and
+ *   SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" button on their
+ *   titlebars).
+ *
+ * The default value is "1". This hint must be set before any windows are
+ * created.
  */
 #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES    "SDL_VIDEO_MAC_FULLSCREEN_SPACES"
 
 /**
- *  \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false.
- *  \warning  Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're
- *            seeing if "true" causes more problems than it solves in modern times.
+ * Minimize your SDL_Window if it loses key focus when in fullscreen mode.
  *
+ * Defaults to false.
  */
 #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS   "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS"
 
 /**
- *  \brief  A variable controlling whether the libdecor Wayland backend is allowed to be used.
+ * A variable controlling whether the libdecor Wayland backend is allowed to
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - libdecor use is disabled.
- *    "1"       - libdecor use is enabled (default).
+ * This variable can be set to the following values:
  *
- *  libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.
+ * - "0": libdecor use is disabled.
+ * - "1": libdecor use is enabled (default).
+ *
+ * libdecor is used over xdg-shell when xdg-decoration protocol is
+ * unavailable.
  */
 #define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR"
 
 /**
- *  \brief  A variable controlling whether the libdecor Wayland backend is preferred over native decrations.
+ * A variable controlling whether the libdecor Wayland backend is preferred
+ * over native decorations.
  *
- *  When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is
- *  available. (Note that, by default, libdecor will use xdg-decoration itself if available).
+ * When this hint is set, libdecor will be used to provide window decorations,
+ * even if xdg-decoration is available. (Note that, by default, libdecor will
+ * use xdg-decoration itself if available).
  *
- *  This variable can be set to the following values:
- *    "0"       - libdecor is enabled only if server-side decorations are unavailable.
- *    "1"       - libdecor is always enabled if available.
+ * This variable can be set to the following values:
  *
- *  libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.
+ * - "0": libdecor is enabled only if server-side decorations are unavailable.
+ * - "1": libdecor is always enabled if available.
+ *
+ * libdecor is used over xdg-shell when xdg-decoration protocol is
+ * unavailable.
  */
 #define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR"
 
 /**
- *  \brief  A variable controlling whether video mode emulation is enabled under Wayland.
+ * A variable controlling whether video mode emulation is enabled under
+ * Wayland.
  *
- *  When this hint is set, a standard set of emulated CVT video modes will be exposed for use by the application.
- *  If it is disabled, the only modes exposed will be the logical desktop size and, in the case of a scaled
- *  desktop, the native display resolution.
+ * When this hint is set, a standard set of emulated CVT video modes will be
+ * exposed for use by the application. If it is disabled, the only modes
+ * exposed will be the logical desktop size and, in the case of a scaled
+ * desktop, the native display resolution.
  *
- *  This variable can be set to the following values:
- *    "0"       - Video mode emulation is disabled.
- *    "1"       - Video mode emulation is enabled.
+ * This variable can be set to the following values:
  *
- *  By default video mode emulation is enabled.
+ * - "0": Video mode emulation is disabled.
+ * - "1": Video mode emulation is enabled.
+ *
+ * By default video mode emulation is enabled.
  */
 #define SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION "SDL_VIDEO_WAYLAND_MODE_EMULATION"
 
 /**
- *  \brief  Enable or disable mouse pointer warp emulation, needed by some older games.
+ * Enable or disable mouse pointer warp emulation, needed by some older games.
  *
- *  When this hint is set, any SDL will emulate mouse warps using relative mouse mode.
- *  This is required for some older games (such as Source engine games), which warp the
- *  mouse to the centre of the screen rather than using relative mouse motion. Note that
- *  relative mouse mode may have different mouse acceleration behaviour than pointer warps.
+ * When this hint is set, any SDL will emulate mouse warps using relative
+ * mouse mode. This is required for some older games (such as Source engine
+ * games), which warp the mouse to the centre of the screen rather than using
+ * relative mouse motion. Note that relative mouse mode may have different
+ * mouse acceleration behaviour than pointer warps.
  *
- *  This variable can be set to the following values:
- *    "0"       - All mouse warps fail, as mouse warping is not available under wayland.
- *    "1"       - Some mouse warps will be emulated by forcing relative mouse mode.
+ * This variable can be set to the following values:
  *
- *  If not set, this is automatically enabled unless an application uses relative mouse
- *  mode directly.
+ * - "0": All mouse warps fail, as mouse warping is not available under
+ *   wayland.
+ * - "1": Some mouse warps will be emulated by forcing relative mouse mode.
+ *
+ * If not set, this is automatically enabled unless an application uses
+ * relative mouse mode directly.
  */
 #define SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP "SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP"
 
 /**
-*  \brief  A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
-*
-*  If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has
-*  SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly
-*  created SDL_Window:
-*
-*  1. Its pixel format will be set to the same pixel format as this SDL_Window.  This is
-*  needed for example when sharing an OpenGL context across multiple windows.
-*
-*  2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for
-*  OpenGL rendering.
-*
-*  This variable can be set to the following values:
-*    The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should
-*    share a pixel format with.
-*/
+ * A variable that is the address of another SDL_Window* (as a hex string
+ * formatted with "%p").
+ *
+ * If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is
+ * set to has SDL_WINDOW_OPENGL set (and running on WGL only, currently), then
+ * two things will occur on the newly created SDL_Window:
+ *
+ * 1. Its pixel format will be set to the same pixel format as this
+ * SDL_Window. This is needed for example when sharing an OpenGL context
+ * across multiple windows.
+ *
+ * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be
+ * used for OpenGL rendering.
+ *
+ * This variable can be set to the following values: The address (as a string
+ * "%p") of the SDL_Window* that new windows created with
+ * SDL_CreateWindowFrom() should share a pixel format with.
+ */
 #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT    "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT"
 
 /**
- *  \brief  When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL.
+ * When calling SDL_CreateWindowFrom(), make the window compatible with
+ * OpenGL.
  *
  * This variable can be set to the following values:
- * "0" - Don't add any graphics flags to the SDL_WindowFlags
- * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags
  *
+ * - "0": Don't add any graphics flags to the SDL_WindowFlags
+ * - "1": Add SDL_WINDOW_OPENGL to the SDL_WindowFlags
+ *
  * By default SDL will not make the foreign window compatible with OpenGL.
  */
 #define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL"
 
 /**
- *  \brief  When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan.
+ * When calling SDL_CreateWindowFrom(), make the window compatible with
+ * Vulkan.
  *
  * This variable can be set to the following values:
- * "0" - Don't add any graphics flags to the SDL_WindowFlags
- * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags
  *
+ * - "0": Don't add any graphics flags to the SDL_WindowFlags
+ * - "1": Add SDL_WINDOW_VULKAN to the SDL_WindowFlags
+ *
  * By default SDL will not make the foreign window compatible with Vulkan.
  */
 #define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN"
 
 /**
-*  \brief  A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
-*
-*  SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It
-*  can use two different sets of binaries, those compiled by the user from source
-*  or those provided by the Chrome browser. In the later case, these binaries require
-*  that SDL loads a DLL providing the shader compiler.
-*
-*  This variable can be set to the following values:
-*    "d3dcompiler_46.dll" - default, best for Vista or later.
-*    "d3dcompiler_43.dll" - for XP support.
-*    "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.
-*
-*/
+ * A variable specifying which shader compiler to preload when using the
+ * Chrome ANGLE binaries
+ *
+ * SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It can
+ * use two different sets of binaries, those compiled by the user from source
+ * or those provided by the Chrome browser. In the later case, these binaries
+ * require that SDL loads a DLL providing the shader compiler.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "d3dcompiler_46.dll: default, best for Vista or later.
+ * - "d3dcompiler_43.dll: for XP support.
+ * - "none": do not load any library, useful if you compiled ANGLE from source
+ *   and included the compiler in your binaries.
+ */
 #define SDL_HINT_VIDEO_WIN_D3DCOMPILER              "SDL_VIDEO_WIN_D3DCOMPILER"
 
 /**
- * \brief A variable controlling whether X11 should use GLX or EGL by default
+ * A variable controlling whether X11 should use GLX or EGL by default
  *
  * This variable can be set to the following values:
- * "0" - Use GLX
- * "1" - Use EGL
  *
+ * - "0": Use GLX
+ * - "1": Use EGL
+ *
  * By default SDL will use GLX when both are present.
  */
 #define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL"
 
 /**
- * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used.
+ * A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint
+ * should be used.
  *
  * This variable can be set to the following values:
- * "0" - Disable _NET_WM_BYPASS_COMPOSITOR
- * "1" - Enable _NET_WM_BYPASS_COMPOSITOR
  *
- * By default SDL will use _NET_WM_BYPASS_COMPOSITOR
+ * - "0": Disable _NET_WM_BYPASS_COMPOSITOR
+ * - "1": Enable _NET_WM_BYPASS_COMPOSITOR
  *
+ * By default SDL will use _NET_WM_BYPASS_COMPOSITOR
  */
 #define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR"
 
 /**
- *  \brief  A variable controlling whether the X11 _NET_WM_PING protocol should be supported.
+ * A variable controlling whether the X11 _NET_WM_PING protocol should be
+ * supported.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable _NET_WM_PING
- *    "1"       - Enable _NET_WM_PING
+ * This variable can be set to the following values:
  *
- *  By default SDL will use _NET_WM_PING, but for applications that know they
- *  will not always be able to respond to ping requests in a timely manner they can
- *  turn it off to avoid the window manager thinking the app is hung.
- *  The hint is checked in CreateWindow.
+ * - "0": Disable _NET_WM_PING
+ * - "1": Enable _NET_WM_PING
+ *
+ * By default SDL will use _NET_WM_PING, but for applications that know they
+ * will not always be able to respond to ping requests in a timely manner they
+ * can turn it off to avoid the window manager thinking the app is hung. The
+ * hint is checked in CreateWindow.
  */
 #define SDL_HINT_VIDEO_X11_NET_WM_PING      "SDL_VIDEO_X11_NET_WM_PING"
 
 /**
- *  \brief  A variable forcing the visual ID chosen for new X11 windows
- *
+ * A variable forcing the visual ID chosen for new X11 windows
  */
 #define SDL_HINT_VIDEO_X11_WINDOW_VISUALID      "SDL_VIDEO_X11_WINDOW_VISUALID"
 
 /**
- *  \brief  A no-longer-used variable controlling whether the X11 Xinerama extension should be used.
+ * A no-longer-used variable controlling whether the X11 Xinerama extension
+ * should be used.
  *
- * Before SDL 2.0.24, this would let apps and users disable Xinerama support on X11.
- *  Now SDL never uses Xinerama, and does not check for this hint at all.
- *  The preprocessor define is left here for source compatibility.
+ * Before SDL 2.0.24, this would let apps and users disable Xinerama support
+ * on X11. Now SDL never uses Xinerama, and does not check for this hint at
+ * all. The preprocessor define is left here for source compatibility.
  */
 #define SDL_HINT_VIDEO_X11_XINERAMA         "SDL_VIDEO_X11_XINERAMA"
 
 /**
- *  \brief  A variable controlling whether the X11 XRandR extension should be used.
+ * A variable controlling whether the X11 XRandR extension should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable XRandR
- *    "1"       - Enable XRandR
+ * This variable can be set to the following values:
  *
- *  By default SDL will use XRandR.
+ * - "0": Disable XRandR
+ * - "1": Enable XRandR
+ *
+ * By default SDL will use XRandR.
  */
 #define SDL_HINT_VIDEO_X11_XRANDR           "SDL_VIDEO_X11_XRANDR"
 
 /**
- *  \brief  A no-longer-used variable controlling whether the X11 VidMode extension should be used.
+ * A no-longer-used variable controlling whether the X11 VidMode extension
+ * should be used.
  *
- * Before SDL 2.0.24, this would let apps and users disable XVidMode support on X11.
- *  Now SDL never uses XVidMode, and does not check for this hint at all.
- *  The preprocessor define is left here for source compatibility.
+ * Before SDL 2.0.24, this would let apps and users disable XVidMode support
+ * on X11. Now SDL never uses XVidMode, and does not check for this hint at
+ * all. The preprocessor define is left here for source compatibility.
  */
 #define SDL_HINT_VIDEO_X11_XVIDMODE         "SDL_VIDEO_X11_XVIDMODE"
 
 /**
- *  \brief  Controls how the fact chunk affects the loading of a WAVE file.
+ * Controls how the fact chunk affects the loading of a WAVE file.
  *
- *  The fact chunk stores information about the number of samples of a WAVE
- *  file. The Standards Update from Microsoft notes that this value can be used
- *  to 'determine the length of the data in seconds'. This is especially useful
- *  for compressed formats (for which this is a mandatory chunk) if they produce
- *  multiple sample frames per block and truncating the block is not allowed.
- *  The fact chunk can exactly specify how many sample frames there should be
- *  in this case.
+ * The fact chunk stores information about the number of samples of a WAVE
+ * file. The Standards Update from Microsoft notes that this value can be used
+ * to 'determine the length of the data in seconds'. This is especially useful
+ * for compressed formats (for which this is a mandatory chunk) if they
+ * produce multiple sample frames per block and truncating the block is not
+ * allowed. The fact chunk can exactly specify how many sample frames there
+ * should be in this case.
  *
- *  Unfortunately, most application seem to ignore the fact chunk and so SDL
- *  ignores it by default as well.
+ * Unfortunately, most application seem to ignore the fact chunk and so SDL
+ * ignores it by default as well.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "truncate"    - Use the number of samples to truncate the wave data if
- *                    the fact chunk is present and valid
- *    "strict"      - Like "truncate", but raise an error if the fact chunk
- *                    is invalid, not present for non-PCM formats, or if the
- *                    data chunk doesn't have that many samples
- *    "ignorezero"  - Like "truncate", but ignore fact chunk if the number of
- *                    samples is zero
- *    "ignore"      - Ignore fact chunk entirely (default)
+ * - "truncate": Use the number of samples to truncate the wave data if the
+ *   fact chunk is present and valid
+ * - "strict": Like "truncate", but raise an error if the fact chunk is
+ *   invalid, not present for non-PCM formats, or if the data chunk doesn't
+ *   have that many samples
+ * - "ignorezero": Like "truncate", but ignore fact chunk if the number of
+ *   samples is zero
+ * - "ignore": Ignore fact chunk entirely (default)
  */
 #define SDL_HINT_WAVE_FACT_CHUNK   "SDL_WAVE_FACT_CHUNK"
 
 /**
- *  \brief  Controls how the size of the RIFF chunk affects the loading of a WAVE file.
+ * Controls how the size of the RIFF chunk affects the loading of a WAVE file.
  *
- *  The size of the RIFF chunk (which includes all the sub-chunks of the WAVE
- *  file) is not always reliable. In case the size is wrong, it's possible to
- *  just ignore it and step through the chunks until a fixed limit is reached.
+ * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE
+ * file) is not always reliable. In case the size is wrong, it's possible to
+ * just ignore it and step through the chunks until a fixed limit is reached.
  *
- *  Note that files that have trailing data unrelated to the WAVE file or
- *  corrupt files may slow down the loading process without a reliable boundary.
- *  By default, SDL stops after 10000 chunks to prevent wasting time. Use the
- *  environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.
+ * Note that files that have trailing data unrelated to the WAVE file or
+ * corrupt files may slow down the loading process without a reliable
+ * boundary. By default, SDL stops after 10000 chunks to prevent wasting time.
+ * Use the environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "force"        - Always use the RIFF chunk size as a boundary for the chunk search
- *    "ignorezero"   - Like "force", but a zero size searches up to 4 GiB (default)
- *    "ignore"       - Ignore the RIFF chunk size and always search up to 4 GiB
- *    "maximum"      - Search for chunks until the end of file (not recommended)
+ * - "force": Always use the RIFF chunk size as a boundary for the chunk
+ *   search
+ * - "ignorezero": Like "force", but a zero size searches up to 4 GiB
+ *   (default)
+ * - "ignore": Ignore the RIFF chunk size and always search up to 4 GiB
+ * - "maximum": Search for chunks until the end of file (not recommended)
  */
 #define SDL_HINT_WAVE_RIFF_CHUNK_SIZE   "SDL_WAVE_RIFF_CHUNK_SIZE"
 
 /**
- *  \brief  Controls how a truncated WAVE file is handled.
+ * Controls how a truncated WAVE file is handled.
  *
- *  A WAVE file is considered truncated if any of the chunks are incomplete or
- *  the data chunk size is not a multiple of the block size. By default, SDL
- *  decodes until the first incomplete block, as most applications seem to do.
+ * A WAVE file is considered truncated if any of the chunks are incomplete or
+ * the data chunk size is not a multiple of the block size. By default, SDL
+ * decodes until the first incomplete block, as most applications seem to do.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "verystrict" - Raise an error if the file is truncated
- *    "strict"     - Like "verystrict", but the size of the RIFF chunk is ignored
- *    "dropframe"  - Decode until the first incomplete sample frame
- *    "dropblock"  - Decode until the first incomplete block (default)
+ * - "verystrict": Raise an error if the file is truncated
+ * - "strict": Like "verystrict", but the size of the RIFF chunk is ignored
+ * - "dropframe": Decode until the first incomplete sample frame
+ * - "dropblock": Decode until the first incomplete block (default)
  */
 #define SDL_HINT_WAVE_TRUNCATION   "SDL_WAVE_TRUNCATION"
 
 /**
- * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
- *        The 0x406D1388 Exception is a trick used to inform Visual Studio of a
- *        thread's name, but it tends to cause problems with other debuggers,
- *        and the .NET runtime. Note that SDL 2.0.6 and later will still use
- *        the (safer) SetThreadDescription API, introduced in the Windows 10
- *        Creators Update, if available.
+ * Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
  *
+ * The 0x406D1388 Exception is a trick used to inform Visual Studio of a
+ * thread's name, but it tends to cause problems with other debuggers, and the
+ * .NET runtime. Note that SDL 2.0.6 and later will still use the (safer)
+ * SetThreadDescription API, introduced in the Windows 10 Creators Update, if
+ * available.
+ *
  * The variable can be set to the following values:
- *   "0"       - SDL will raise the 0x406D1388 Exception to name threads.
- *               This is the default behavior of SDL <= 2.0.4.
- *   "1"       - SDL will not raise this exception, and threads will be unnamed. (default)
- *               This is necessary with .NET languages or debuggers that aren't Visual Studio.
+ *
+ * - "0": SDL will raise the 0x406D1388 Exception to name threads. This is the
+ *   default behavior of SDL <= 2.0.4.
+ * - "1": SDL will not raise this exception, and threads will be unnamed.
+ *   (default) This is necessary with .NET languages or debuggers that aren't
+ *   Visual Studio.
  */
 #define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING"
 
 /**
- *  \brief Controls whether menus can be opened with their keyboard shortcut (Alt+mnemonic).
+ * Controls whether menus can be opened with their keyboard shortcut
+ * (Alt+mnemonic).
  *
- *  If the mnemonics are enabled, then menus can be opened by pressing the Alt
- *  key and the corresponding mnemonic (for example, Alt+F opens the File menu).
- *  However, in case an invalid mnemonic is pressed, Windows makes an audible
- *  beep to convey that nothing happened. This is true even if the window has
- *  no menu at all!
+ * If the mnemonics are enabled, then menus can be opened by pressing the Alt
+ * key and the corresponding mnemonic (for example, Alt+F opens the File
+ * menu). However, in case an invalid mnemonic is pressed, Windows makes an
+ * audible beep to convey that nothing happened. This is true even if the
+ * window has no menu at all!
  *
- *  Because most SDL applications don't have menus, and some want to use the Alt
- *  key for other purposes, SDL disables mnemonics (and the beeping) by default.
+ * Because most SDL applications don't have menus, and some want to use the
+ * Alt key for other purposes, SDL disables mnemonics (and the beeping) by
+ * default.
  *
- *  Note: This also affects keyboard events: with mnemonics enabled, when a
- *  menu is opened from the keyboard, you will not receive a KEYUP event for
- *  the mnemonic key, and *might* not receive one for Alt.
+ * Note: This also affects keyboard events: with mnemonics enabled, when a
+ * menu is opened from the keyboard, you will not receive a KEYUP event for
+ * the mnemonic key, and *might* not receive one for Alt.
  *
- *  This variable can be set to the following values:
- *    "0"       - Alt+mnemonic does nothing, no beeping. (default)
- *    "1"       - Alt+mnemonic opens menus, invalid mnemonics produce a beep.
+ * This variable can be set to the following values:
+ *
+ * - "0": Alt+mnemonic does nothing, no beeping. (default)
+ * - "1": Alt+mnemonic opens menus, invalid mnemonics produce a beep.
  */
 #define SDL_HINT_WINDOWS_ENABLE_MENU_MNEMONICS "SDL_WINDOWS_ENABLE_MENU_MNEMONICS"
 
 /**
- *  \brief  A variable controlling whether the windows message loop is processed by SDL
+ * A variable controlling whether the windows message loop is processed by SDL
  *
- *  This variable can be set to the following values:
- *    "0"       - The window message loop is not run
- *    "1"       - The window message loop is processed in SDL_PumpEvents()
+ * This variable can be set to the following values:
  *
- *  By default SDL will process the windows message loop
+ * - "0": The window message loop is not run
+ * - "1": The window message loop is processed in SDL_PumpEvents()
+ *
+ * By default SDL will process the windows message loop
  */
 #define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP"
 
 /**
- * \brief Force SDL to use Critical Sections for mutexes on Windows.
- *        On Windows 7 and newer, Slim Reader/Writer Locks are available.
- *        They offer better performance, allocate no kernel ressources and
- *        use less memory. SDL will fall back to Critical Sections on older
- *        OS versions or if forced to by this hint.
+ * Force SDL to use Critical Sections for mutexes on Windows.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use SRW Locks when available. If not, fall back to Critical Sections. (default)
- *    "1"       - Force the use of Critical Sections in all cases.
+ * On Windows 7 and newer, Slim Reader/Writer Locks are available. They offer
+ * better performance, allocate no kernel resources and use less memory. SDL
+ * will fall back to Critical Sections on older OS versions or if forced to by
+ * this hint.
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use SRW Locks when available. If not, fall back to Critical
+ *   Sections. (default)
+ * - "1": Force the use of Critical Sections in all cases.
  */
 #define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS"
 
 /**
- * \brief Force SDL to use Kernel Semaphores on Windows.
- *        Kernel Semaphores are inter-process and require a context
- *        switch on every interaction. On Windows 8 and newer, the
- *        WaitOnAddress API is available. Using that and atomics to
- *        implement semaphores increases performance.
- *        SDL will fall back to Kernel Objects on older OS versions
- *        or if forced to by this hint.
+ * Force SDL to use Kernel Semaphores on Windows.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default)
- *    "1"       - Force the use of Kernel Objects in all cases.
+ * Kernel Semaphores are inter-process and require a context switch on every
+ * interaction. On Windows 8 and newer, the WaitOnAddress API is available.
+ * Using that and atomics to implement semaphores increases performance. SDL
+ * will fall back to Kernel Objects on older OS versions or if forced to by
+ * this hint.
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use Atomics and WaitOnAddress API when available. If not, fall back
+ *   to Kernel Objects. (default)
+ * - "1": Force the use of Kernel Objects in all cases.
  */
 #define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL"
 
 /**
- * \brief A variable to specify custom icon resource id from RC file on Windows platform
+ * A variable to specify custom icon resource id from RC file on Windows
+ * platform
  */
 #define SDL_HINT_WINDOWS_INTRESOURCE_ICON       "SDL_WINDOWS_INTRESOURCE_ICON"
+
+/**
+ * A variable to specify custom icon resource id from RC file on Windows
+ * platform
+ */
 #define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"
 
 /**
- *  \brief Tell SDL not to generate window-close events for Alt+F4 on Windows.
+ * Tell SDL not to generate window-close events for Alt+F4 on Windows.
  *
  * The variable can be set to the following values:
- *   "0"       - SDL will generate a window-close event when it sees Alt+F4.
- *   "1"       - SDL will only do normal key handling for Alt+F4.
+ *
+ * - "0": SDL will generate a window-close event when it sees Alt+F4.
+ * - "1": SDL will only do normal key handling for Alt+F4.
  */
 #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
 
 /**
- * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
- *        Direct3D 9Ex contains changes to state management that can eliminate device
- *        loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require
- *        some changes to your application to cope with the new behavior, so this
- *        is disabled by default.
+ * Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
  *
- *  This hint must be set before initializing the video subsystem.
+ * Direct3D 9Ex contains changes to state management that can eliminate device
+ * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may
+ * require some changes to your application to cope with the new behavior, so
+ * this is disabled by default.
  *
- *  For more information on Direct3D 9Ex, see:
- *    - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex
- *    - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements
+ * This hint must be set before initializing the video subsystem.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use the original Direct3D 9 API (default)
- *    "1"       - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable)
+ * For more information on Direct3D 9Ex, see: -
+ * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex
+ * -
+ * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use the original Direct3D 9 API (default)
+ * - "1": Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex
+ *   is unavailable)
  */
 #define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX"
 
 /**
- * \brief Controls whether SDL will declare the process to be DPI aware.
+ * Controls whether SDL will declare the process to be DPI aware.
  *
- *  This hint must be set before initializing the video subsystem.
+ * This hint must be set before initializing the video subsystem.
  *
- *  The main purpose of declaring DPI awareness is to disable OS bitmap scaling of SDL windows on monitors with
- *  a DPI scale factor.
+ * The main purpose of declaring DPI awareness is to disable OS bitmap scaling
+ * of SDL windows on monitors with a DPI scale factor.
  *
- *  This hint is equivalent to requesting DPI awareness via external means (e.g. calling SetProcessDpiAwarenessContext)
- *  and does not cause SDL to use a virtualized coordinate system, so it will generally give you 1 SDL coordinate = 1 pixel
- *  even on high-DPI displays.
+ * This hint is equivalent to requesting DPI awareness via external means
+ * (e.g. calling SetProcessDpiAwarenessContext) and does not cause SDL to use
+ * a virtualized coordinate system, so it will generally give you 1 SDL
+ * coordinate = 1 pixel even on high-DPI displays.
  *
- *  For more information, see:
- *  https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows
+ * For more information, see:
+ * https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows
  *
- *  This variable can be set to the following values:
- *    ""             - Do not change the DPI awareness (default).
- *    "unaware"      - Declare the process as DPI unaware. (Windows 8.1 and later).
- *    "system"       - Request system DPI awareness. (Vista and later).
- *    "permonitor"   - Request per-monitor DPI awareness. (Windows 8.1 and later).
- *    "permonitorv2" - Request per-monitor V2 DPI awareness. (Windows 10, version 1607 and later).
- *                     The most visible difference from "permonitor" is that window title bar will be scaled
- *                     to the visually correct size when dragging between monitors with different scale factors.
- *                     This is the preferred DPI awareness level.
+ * This variable can be set to the following values:
  *
- * If the requested DPI awareness is not available on the currently running OS, SDL will try to request the best
- * available match.
+ * - "": Do not change the DPI awareness (default).
+ * - "unaware": Declare the process as DPI unaware. (Windows 8.1 and later).
+ * - "system": Request system DPI awareness. (Vista and later).
+ * - "permonitor": Request per-monitor DPI awareness. (Windows 8.1 and later).
+ * - "permonitorv2": Request per-monitor V2 DPI awareness. (Windows 10,
+ *   version 1607 and later). The most visible difference from "permonitor" is
+ *   that window title bar will be scaled to the visually correct size when
+ *   dragging between monitors with different scale factors. This is the
+ *   preferred DPI awareness level.
+ *
+ * If the requested DPI awareness is not available on the currently running
+ * OS, SDL will try to request the best available match.
  */
 #define SDL_HINT_WINDOWS_DPI_AWARENESS "SDL_WINDOWS_DPI_AWARENESS"
 
 /**
- * \brief Uses DPI-scaled points as the SDL coordinate system on Windows.
+ * Uses DPI-scaled points as the SDL coordinate system on Windows.
  *
- *  This changes the SDL coordinate system units to be DPI-scaled points, rather than pixels everywhere.
- *  This means windows will be appropriately sized, even when created on high-DPI displays with scaling.
+ * This changes the SDL coordinate system units to be DPI-scaled points,
+ * rather than pixels everywhere. This means windows will be appropriately
+ * sized, even when created on high-DPI displays with scaling.
  *
- *  e.g. requesting a 640x480 window from SDL, on a display with 125% scaling in Windows display settings,
- *  will create a window with an 800x600 client area (in pixels).
+ * e.g. requesting a 640x480 window from SDL, on a display with 125% scaling
+ * in Windows display settings, will create a window with an 800x600 client
+ * area (in pixels).
  *
- *  Setting this to "1" implicitly requests process DPI awareness (setting SDL_WINDOWS_DPI_AWARENESS is unnecessary),
- *  and forces SDL_WINDOW_ALLOW_HIGHDPI on all windows.
+ * Setting this to "1" implicitly requests process DPI awareness (setting
+ * SDL_WINDOWS_DPI_AWARENESS is unnecessary), and forces
+ * SDL_WINDOW_ALLOW_HIGHDPI on all windows.
  *
- *  This variable can be set to the following values:
- *    "0"       - SDL coordinates equal Windows coordinates. No automatic window resizing when dragging
- *                between monitors with different scale factors (unless this is performed by
- *                Windows itself, which is the case when the process is DPI unaware).
- *    "1"       - SDL coordinates are in DPI-scaled points. Automatically resize windows as needed on
- *                displays with non-100% scale factors.
+ * This variable can be set to the following values:
+ *
+ * - "0": SDL coordinates equal Windows coordinates. No automatic window
+ *   resizing when dragging between monitors with different scale factors
+ *   (unless this is performed by Windows itself, which is the case when the
+ *   process is DPI unaware).
+ * - "1": SDL coordinates are in DPI-scaled points. Automatically resize
+ *   windows as needed on displays with non-100% scale factors.
  */
 #define SDL_HINT_WINDOWS_DPI_SCALING "SDL_WINDOWS_DPI_SCALING"
 
 /**
- *  \brief  A variable controlling whether the window frame and title bar are interactive when the cursor is hidden
+ * A variable controlling whether the window frame and title bar are
+ * interactive when the cursor is hidden
  *
- *  This variable can be set to the following values:
- *    "0"       - The window frame is not interactive when the cursor is hidden (no move, resize, etc)
- *    "1"       - The window frame is interactive when the cursor is hidden
+ * This variable can be set to the following values:
  *
- *  By default SDL will allow interaction with the window frame when the cursor is hidden
+ * - "0": The window frame is not interactive when the cursor is hidden (no
+ *   move, resize, etc)
+ * - "1": The window frame is interactive when the cursor is hidden
+ *
+ * By default SDL will allow interaction with the window frame when the cursor
+ * is hidden
  */
 #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN    "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
 
 /**
-*  \brief  A variable controlling whether the window is activated when the SDL_ShowWindow function is called
-*
-*  This variable can be set to the following values:
-*    "0"       - The window is activated when the SDL_ShowWindow function is called
-*    "1"       - The window is not activated when the SDL_ShowWindow function is called
-*
-*  By default SDL will activate the window when the SDL_ShowWindow function is called
-*/
+ * A variable controlling whether the window is activated when the
+ * SDL_ShowWindow function is called
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": The window is activated when the SDL_ShowWindow function is called
+ * - "1": The window is not activated when the SDL_ShowWindow function is
+ *   called
+ *
+ * By default SDL will activate the window when the SDL_ShowWindow function is
+ * called
+ */
 #define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN    "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN"
 
-/** \brief Allows back-button-press events on Windows Phone to be marked as handled
+/** Allows back-button-press events on Windows Phone to be marked as handled
  *
  *  Windows Phone devices typically feature a Back button.  When pressed,
  *  the OS will emit back-button-press events, which apps are expected to
@@ -2459,11 +2838,12 @@
  *
  *  More details on back button behavior in Windows Phone apps can be found
  *  at the following page, on Microsoft's developer site:
+ *
  *  http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx
  */
 #define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON"
 
-/** \brief Label text for a WinRT app's privacy policy link
+/** Label text for a WinRT app's privacy policy link
  *
  *  Network-enabled WinRT apps must include a privacy policy.  On Windows 8, 8.1, and RT,
  *  Microsoft mandates that this policy be available via the Windows Settings charm.
@@ -2485,213 +2865,221 @@
 #define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL"
 
 /**
- *  \brief A URL to a WinRT app's privacy policy
+ * A URL to a WinRT app's privacy policy
  *
- *  All network-enabled WinRT apps must make a privacy policy available to its
- *  users.  On Windows 8, 8.1, and RT, Microsoft mandates that this policy be
- *  be available in the Windows Settings charm, as accessed from within the app.
- *  SDL provides code to add a URL-based link there, which can point to the app's
- *  privacy policy.
+ * All network-enabled WinRT apps must make a privacy policy available to its
+ * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be be
+ * available in the Windows Settings charm, as accessed from within the app.
+ * SDL provides code to add a URL-based link there, which can point to the
+ * app's privacy policy.
  *
- *  To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
- *  before calling any SDL_Init() functions.  The contents of the hint should
- *  be a valid URL.  For example, "http://www.example.com".
+ * To setup a URL to an app's privacy policy, set
+ * SDL_HINT_WINRT_PRIVACY_POLICY_URL before calling any SDL_Init() functions.
+ * The contents of the hint should be a valid URL. For example,
+ * "http://www.example.com".
  *
- *  The default value is "", which will prevent SDL from adding a privacy policy
- *  link to the Settings charm.  This hint should only be set during app init.
+ * The default value is "", which will prevent SDL from adding a privacy
+ * policy link to the Settings charm. This hint should only be set during app
+ * init.
  *
- *  The label text of an app's "Privacy Policy" link may be customized via another
- *  hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
+ * The label text of an app's "Privacy Policy" link may be customized via
+ * another hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
  *
- *  Please note that on Windows Phone, Microsoft does not provide standard UI
- *  for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL
- *  will not get used on that platform.  Network-enabled phone apps should display
- *  their privacy policy through some other, in-app means.
+ * Please note that on Windows Phone, Microsoft does not provide standard UI
+ * for displaying a privacy policy link, and as such,
+ * SDL_HINT_WINRT_PRIVACY_POLICY_URL will not get used on that platform.
+ * Network-enabled phone apps should display their privacy policy through some
+ * other, in-app means.
  */
 #define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL"
 
 /**
- *  \brief Mark X11 windows as override-redirect.
+ * Mark X11 windows as override-redirect.
  *
- *  If set, this _might_ increase framerate at the expense of the desktop
- *  not working as expected. Override-redirect windows aren't noticed by the
- *  window manager at all.
+ * If set, this _might_ increase framerate at the expense of the desktop not
+ * working as expected. Override-redirect windows aren't noticed by the window
+ * manager at all.
  *
- *  You should probably only use this for fullscreen windows, and you probably
- *  shouldn't even use it for that. But it's here if you want to try!
+ * You should probably only use this for fullscreen windows, and you probably
+ * shouldn't even use it for that. But it's here if you want to try!
  */
 #define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT"
 
 /**
- *  \brief  A variable that lets you disable the detection and use of Xinput gamepad devices
+ * A variable that lets you disable the detection and use of Xinput gamepad
+ * devices
  *
- *  The variable can be set to the following values:
- *    "0"       - Disable XInput detection (only uses direct input)
- *    "1"       - Enable XInput detection (the default)
+ * The variable can be set to the following values:
+ *
+ * - "0": Disable XInput detection (only uses direct input)
+ * - "1": Enable XInput detection (the default)
  */
 #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED"
 
- /**
-  *  \brief  A variable that lets you disable the detection and use of DirectInput gamepad devices
-  *
-  *  The variable can be set to the following values:
-  *    "0"       - Disable DirectInput detection (only uses XInput)
-  *    "1"       - Enable DirectInput detection (the default)
-  */
+/**
+ * A variable that lets you disable the detection and use of DirectInput
+ * gamepad devices
+ *
+ * The variable can be set to the following values:
+ *
+ * - "0": Disable DirectInput detection (only uses XInput)
+ * - "1": Enable DirectInput detection (the default)
+ */
 #define SDL_HINT_DIRECTINPUT_ENABLED "SDL_DIRECTINPUT_ENABLED"
 
 /**
- *  \brief  A variable that causes SDL to use the old axis and button mapping for XInput devices.
+ * A variable that causes SDL to use the old axis and button mapping for
+ * XInput devices.
  *
- *  This hint is for backwards compatibility only and will be removed in SDL 2.1
+ * This hint is for backwards compatibility only and will be removed in SDL
+ * 2.1
  *
- *  The default value is "0".  This hint must be set before SDL_Init()
+ * The default value is "0". This hint must be set before SDL_Init()
  */
 #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING"
 
 /**
- *  \brief  A variable that causes SDL to not ignore audio "monitors"
+ * A variable that causes SDL to not ignore audio "monitors"
  *
- *  This is currently only used for PulseAudio and ignored elsewhere.
+ * This is currently only used for PulseAudio and ignored elsewhere.
  *
- *  By default, SDL ignores audio devices that aren't associated with physical
- *  hardware. Changing this hint to "1" will expose anything SDL sees that
- *  appears to be an audio source or sink. This will add "devices" to the list
- *  that the user probably doesn't want or need, but it can be useful in
- *  scenarios where you want to hook up SDL to some sort of virtual device,
- *  etc.
+ * By default, SDL ignores audio devices that aren't associated with physical
+ * hardware. Changing this hint to "1" will expose anything SDL sees that
+ * appears to be an audio source or sink. This will add "devices" to the list
+ * that the user probably doesn't want or need, but it can be useful in
+ * scenarios where you want to hook up SDL to some sort of virtual device,
+ * etc.
  *
- *  The default value is "0".  This hint must be set before SDL_Init().
+ * The default value is "0". This hint must be set before SDL_Init().
  *
- *  This hint is available since SDL 2.0.16. Before then, virtual devices are
- *  always ignored.
+ * This hint is available since SDL 2.0.16. Before then, virtual devices are
+ * always ignored.
  */
 #define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS"
 
 /**
- *  \brief  A variable that forces X11 windows to create as a custom type.
+ * A variable that forces X11 windows to create as a custom type.
  *
- *  This is currently only used for X11 and ignored elsewhere.
+ * This is currently only used for X11 and ignored elsewhere.
  *
- *  During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property
- *  to report to the window manager the type of window it wants to create.
- *  This might be set to various things if SDL_WINDOW_TOOLTIP or
- *  SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that
- *  haven't set a specific type, this hint can be used to specify a custom
- *  type. For example, a dock window might set this to
- *  "_NET_WM_WINDOW_TYPE_DOCK".
+ * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property to
+ * report to the window manager the type of window it wants to create. This
+ * might be set to various things if SDL_WINDOW_TOOLTIP or
+ * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that
+ * haven't set a specific type, this hint can be used to specify a custom
+ * type. For example, a dock window might set this to
+ * "_NET_WM_WINDOW_TYPE_DOCK".
  *
- *  If not set or set to "", this hint is ignored. This hint must be set
- *  before the SDL_CreateWindow() call that it is intended to affect.
+ * If not set or set to "", this hint is ignored. This hint must be set before
+ * the SDL_CreateWindow() call that it is intended to affect.
  *
- *  This hint is available since SDL 2.0.22.
+ * This hint is available since SDL 2.0.22.
  */
 #define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE"
 
 /**
- *  \brief  A variable that decides whether to send SDL_QUIT when closing the final window.
+ * A variable that decides whether to send SDL_QUIT when closing the final
+ * window.
  *
- *  By default, SDL sends an SDL_QUIT event when there is only one window
- *  and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most
- *  apps would also take the loss of this window as a signal to terminate the
- *  program.
+ * By default, SDL sends an SDL_QUIT event when there is only one window and
+ * it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most apps
+ * would also take the loss of this window as a signal to terminate the
+ * program.
  *
- *  However, it's not unreasonable in some cases to have the program continue
- *  to live on, perhaps to create new windows later.
+ * However, it's not unreasonable in some cases to have the program continue
+ * to live on, perhaps to create new windows later.
  *
- *  Changing this hint to "0" will cause SDL to not send an SDL_QUIT event
- *  when the final window is requesting to close. Note that in this case,
- *  there are still other legitimate reasons one might get an SDL_QUIT
- *  event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c)
- *  on Unix, etc.
+ * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event when
+ * the final window is requesting to close. Note that in this case, there are
+ * still other legitimate reasons one might get an SDL_QUIT event: choosing
+ * "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) on Unix, etc.
  *
- *  The default value is "1".  This hint can be changed at any time.
+ * The default value is "1". This hint can be changed at any time.
  *
- *  This hint is available since SDL 2.0.22. Before then, you always get
- *  an SDL_QUIT event when closing the final window.
+ * This hint is available since SDL 2.0.22. Before then, you always get an
+ * SDL_QUIT event when closing the final window.
  */
 #define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE"
 
 
 /**
- *  \brief  A variable that decides what video backend to use.
+ * A variable that decides what video backend to use.
  *
- *  By default, SDL will try all available video backends in a reasonable
- *  order until it finds one that can work, but this hint allows the app
- *  or user to force a specific target, such as "x11" if, say, you are
- *  on Wayland but want to try talking to the X server instead.
+ * By default, SDL will try all available video backends in a reasonable order
+ * until it finds one that can work, but this hint allows the app or user to
+ * force a specific target, such as "x11" if, say, you are on Wayland but want
+ * to try talking to the X server instead.
  *
- *  This functionality has existed since SDL 2.0.0 (indeed, before that)
- *  but before 2.0.22 this was an environment variable only. In 2.0.22,
- *  it was upgraded to a full SDL hint, so you can set the environment
- *  variable as usual or programatically set the hint with SDL_SetHint,
- *  which won't propagate to child processes.
+ * This functionality has existed since SDL 2.0.0 (indeed, before that) but
+ * before 2.0.22 this was an environment variable only. In 2.0.22, it was
+ * upgraded to a full SDL hint, so you can set the environment variable as
+ * usual or programatically set the hint with SDL_SetHint, which won't
+ * propagate to child processes.
  *
- *  The default value is unset, in which case SDL will try to figure out
- *  the best video backend on your behalf. This hint needs to be set
- *  before SDL_Init() is called to be useful.
+ * The default value is unset, in which case SDL will try to figure out the
+ * best video backend on your behalf. This hint needs to be set before
+ * SDL_Init() is called to be useful.
  *
- *  This hint is available since SDL 2.0.22. Before then, you could set
- *  the environment variable to get the same effect.
+ * This hint is available since SDL 2.0.22. Before then, you could set the
+ * environment variable to get the same effect.
  */
 #define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER"
 
 /**
- *  \brief  A variable that decides what audio backend to use.
+ * A variable that decides what audio backend to use.
  *
- *  By default, SDL will try all available audio backends in a reasonable
- *  order until it finds one that can work, but this hint allows the app
- *  or user to force a specific target, such as "alsa" if, say, you are
- *  on PulseAudio but want to try talking to the lower level instead.
+ * By default, SDL will try all available audio backends in a reasonable order
+ * until it finds one that can work, but this hint allows the app or user to
+ * force a specific target, such as "alsa" if, say, you are on PulseAudio but
+ * want to try talking to the lower level instead.
  *
- *  This functionality has existed since SDL 2.0.0 (indeed, before that)
- *  but before 2.0.22 this was an environment variable only. In 2.0.22,
- *  it was upgraded to a full SDL hint, so you can set the environment
- *  variable as usual or programatically set the hint with SDL_SetHint,
- *  which won't propagate to child processes.
+ * This functionality has existed since SDL 2.0.0 (indeed, before that) but
+ * before 2.0.22 this was an environment variable only. In 2.0.22, it was
+ * upgraded to a full SDL hint, so you can set the environment variable as
+ * usual or programatically set the hint with SDL_SetHint, which won't
+ * propagate to child processes.
  *
- *  The default value is unset, in which case SDL will try to figure out
- *  the best audio backend on your behalf. This hint needs to be set
- *  before SDL_Init() is called to be useful.
+ * The default value is unset, in which case SDL will try to figure out the
+ * best audio backend on your behalf. This hint needs to be set before
+ * SDL_Init() is called to be useful.
  *
- *  This hint is available since SDL 2.0.22. Before then, you could set
- *  the environment variable to get the same effect.
+ * This hint is available since SDL 2.0.22. Before then, you could set the
+ * environment variable to get the same effect.
  */
 #define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER"
 
 /**
- *  \brief  A variable that decides what KMSDRM device to use.
+ * A variable that decides what KMSDRM device to use.
  *
- *  Internally, SDL might open something like "/dev/dri/cardNN" to
- *  access KMSDRM functionality, where "NN" is a device index number.
+ * Internally, SDL might open something like "/dev/dri/cardNN" to access
+ * KMSDRM functionality, where "NN" is a device index number.
  *
- *  SDL makes a guess at the best index to use (usually zero), but the
- *  app or user can set this hint to a number between 0 and 99 to
- *  force selection.
+ * SDL makes a guess at the best index to use (usually zero), but the app or
+ * user can set this hint to a number between 0 and 99 to force selection.
  *
- *  This hint is available since SDL 2.24.0.
+ * This hint is available since SDL 2.24.0.
  */
 #define SDL_HINT_KMSDRM_DEVICE_INDEX "SDL_KMSDRM_DEVICE_INDEX"
 
 
 /**
- *  \brief  A variable that treats trackpads as touch devices.
+ * A variable that treats trackpads as touch devices.
  *
- *  On macOS (and possibly other platforms in the future), SDL will report
- *  touches on a trackpad as mouse input, which is generally what users
- *  expect from this device; however, these are often actually full
- *  multitouch-capable touch devices, so it might be preferable to some apps
- *  to treat them as such.
+ * On macOS (and possibly other platforms in the future), SDL will report
+ * touches on a trackpad as mouse input, which is generally what users expect
+ * from this device; however, these are often actually full multitouch-capable
+ * touch devices, so it might be preferable to some apps to treat them as
+ * such.
  *
- *  Setting this hint to true will make the trackpad input report as a
- *  multitouch device instead of a mouse. The default is false.
+ * Setting this hint to true will make the trackpad input report as a
+ * multitouch device instead of a mouse. The default is false.
  *
- *  Note that most platforms don't support this hint. As of 2.24.0, it
- *  only supports MacBooks' trackpads on macOS. Others may follow later.
+ * Note that most platforms don't support this hint. As of 2.24.0, it only
+ * supports MacBooks' trackpads on macOS. Others may follow later.
  *
- *  This hint is checked during SDL_Init and can not be changed after.
+ * This hint is checked during SDL_Init and can not be changed after.
  *
- *  This hint is available since SDL 2.24.0.
+ * This hint is available since SDL 2.24.0.
  */
 #define SDL_HINT_TRACKPAD_IS_TOUCH_ONLY "SDL_TRACKPAD_IS_TOUCH_ONLY"
 
@@ -2699,23 +3087,45 @@
  * Cause SDL to call dbus_shutdown() on quit.
  *
  * This is useful as a debug tool to validate memory leaks, but shouldn't ever
- * be set in production applications, as other libraries used by the application
- * might use dbus under the hood and this cause cause crashes if they continue
- * after SDL_Quit().
+ * be set in production applications, as other libraries used by the
+ * application might use dbus under the hood and this cause cause crashes if
+ * they continue after SDL_Quit().
  *
  * This variable can be set to the following values:
- *   "0"       - SDL will not call dbus_shutdown() on quit (default)
- *   "1"       - SDL will call dbus_shutdown() on quit
  *
+ * - "0": SDL will not call dbus_shutdown() on quit (default)
+ * - "1": SDL will call dbus_shutdown() on quit
+ *
  * This hint is available since SDL 2.30.0.
  */
 #define SDL_HINT_SHUTDOWN_DBUS_ON_QUIT "SDL_SHUTDOWN_DBUS_ON_QUIT"
 
+/**
+ * Specify if SDL_RWFromFile should use the resource dir on Apple platforms.
+ *
+ * SDL2 has always done this on Apple platforms, but it can be surprising to
+ * try opening a path to discover that SDL adjusts the path to elsewhere, so
+ * this hint allows that behavior to be disabled.
+ *
+ * If running from a App Bundle, this will be MyApp.app/Contents/Resources. If
+ * running as a normal Unix-like process, this will be the directory where the
+ * running binary lives. Setting this hint to 0 avoids this and just uses the
+ * requested path as-is.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": SDL will not use the app resource directory.
+ * - "1": SDL will use the app's resource directory (default).
+ *
+ * This hint is available since SDL 2.32.0.
+ */
+#define SDL_HINT_APPLE_RWFROMFILE_USE_RESOURCES "SDL_APPLE_RWFROMFILE_USE_RESOURCES"
 
+
 /**
- *  \brief  An enumeration of hint priorities
+ * An enumeration of hint priorities
  */
-typedef enum
+typedef enum SDL_HintPriority
 {
     SDL_HINT_DEFAULT,
     SDL_HINT_NORMAL,
@@ -2730,9 +3140,9 @@
  * value. Hints will replace existing hints of their priority and lower.
  * Environment variables are considered to have override priority.
  *
- * \param name the hint to set
- * \param value the value of the hint variable
- * \param priority the SDL_HintPriority level for the hint
+ * \param name the hint to set.
+ * \param value the value of the hint variable.
+ * \param priority the SDL_HintPriority level for the hint.
  * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -2751,8 +3161,8 @@
  * variable that takes precedence. You can use SDL_SetHintWithPriority() to
  * set the hint with override priority instead.
  *
- * \param name the hint to set
- * \param value the value of the hint variable
+ * \param name the hint to set.
+ * \param value the value of the hint variable.
  * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -2770,7 +3180,7 @@
  * the environment isn't set. Callbacks will be called normally with this
  * change.
  *
- * \param name the hint to set
+ * \param name the hint to set.
  * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.24.0.
@@ -2798,7 +3208,7 @@
 /**
  * Get the value of a hint.
  *
- * \param name the hint to query
+ * \param name the hint to query.
  * \returns the string value of a hint or NULL if the hint isn't set.
  *
  * \since This function is available since SDL 2.0.0.
@@ -2811,8 +3221,8 @@
 /**
  * Get the boolean value of a hint variable.
  *
- * \param name the name of the hint to get the boolean value from
- * \param default_value the value to return if the hint does not exist
+ * \param name the name of the hint to get the boolean value from.
+ * \param default_value the value to return if the hint does not exist.
  * \returns the boolean value of a hint or the provided default value if the
  *          hint does not exist.
  *
@@ -2826,10 +3236,10 @@
 /**
  * Type definition of the hint callback function.
  *
- * \param userdata what was passed as `userdata` to SDL_AddHintCallback()
- * \param name what was passed as `name` to SDL_AddHintCallback()
- * \param oldValue the previous hint value
- * \param newValue the new value hint is to be set to
+ * \param userdata what was passed as `userdata` to SDL_AddHintCallback().
+ * \param name what was passed as `name` to SDL_AddHintCallback().
+ * \param oldValue the previous hint value.
+ * \param newValue the new value hint is to be set to.
  */
 typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
 
@@ -2836,10 +3246,10 @@
 /**
  * Add a function to watch a particular hint.
  *
- * \param name the hint to watch
+ * \param name the hint to watch.
  * \param callback An SDL_HintCallback function that will be called when the
- *                 hint value changes
- * \param userdata a pointer to pass to the callback function
+ *                 hint value changes.
+ * \param userdata a pointer to pass to the callback function.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -2852,10 +3262,10 @@
 /**
  * Remove a function watching a particular hint.
  *
- * \param name the hint being watched
+ * \param name the hint being watched.
  * \param callback An SDL_HintCallback function that will be called when the
- *                 hint value changes
- * \param userdata a pointer being passed to the callback function
+ *                 hint value changes.
+ * \param userdata a pointer being passed to the callback function.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_joystick.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_joystick.h
@@ -20,22 +20,26 @@
 */
 
 /**
- *  \file SDL_joystick.h
+ * # CategoryJoystick
  *
- *  Include file for SDL joystick event handling
+ * Include file for SDL joystick event handling
  *
- * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick
- *   behind a device_index changing as joysticks are plugged and unplugged.
+ * The term "device_index" identifies currently plugged in joystick devices
+ * between 0 and SDL_NumJoysticks(), with the exact joystick behind a
+ * device_index changing as joysticks are plugged and unplugged.
  *
- * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted
- *   then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in.
+ * The term "instance_id" is the current instantiation of a joystick device in
+ * the system, if the joystick is removed and then re-inserted then it will
+ * get a new instance_id, instance_id's are monotonically increasing
+ * identifiers of a joystick plugged in.
  *
  * The term "player_index" is the number assigned to a player on a specific
- *   controller. For XInput controllers this returns the XInput user index.
- *   Many joysticks will not be able to supply this information.
+ * controller. For XInput controllers this returns the XInput user index. Many
+ * joysticks will not be able to supply this information.
  *
- * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of
- *   the device (a X360 wired controller for example). This identifier is platform dependent.
+ * The term JoystickGUID is a stable 128-bit identifier for a joystick device
+ * that does not change over time, it identifies class of the device (a X360
+ * wired controller for example). This identifier is platform dependent.
  */
 
 #ifndef SDL_joystick_h_
@@ -56,7 +60,7 @@
  *  \file SDL_joystick.h
  *
  *  In order to use these functions, SDL_Init() must have been called
- *  with the ::SDL_INIT_JOYSTICK flag.  This causes SDL to scan the system
+ *  with the SDL_INIT_JOYSTICK flag.  This causes SDL to scan the system
  *  for joysticks, and load appropriate drivers.
  *
  *  If you would like to receive joystick updates while the application
@@ -73,15 +77,21 @@
 struct _SDL_Joystick;
 typedef struct _SDL_Joystick SDL_Joystick;
 
-/* A structure that encodes the stable unique id for a joystick device */
+/**
+ * A structure that encodes the stable unique id for a joystick device.
+ *
+ * This is just a standard SDL_GUID by a different name.
+ */
 typedef SDL_GUID SDL_JoystickGUID;
 
 /**
- * This is a unique ID for a joystick for the time it is connected to the system,
- * and is never reused for the lifetime of the application. If the joystick is
- * disconnected and reconnected, it will get a new ID.
+ * This is a unique ID for a joystick for the time it is connected to the
+ * system, and is never reused for the lifetime of the application.
  *
- * The ID value starts at 0 and increments from there. The value -1 is an invalid ID.
+ * If the joystick is disconnected and reconnected, it will get a new ID.
+ *
+ * The ID value starts at 0 and increments from there. The value -1 is an
+ * invalid ID.
  */
 typedef Sint32 SDL_JoystickID;
 
@@ -172,7 +182,7 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system)
+ *                     on the system).
  * \returns the name of the selected joystick. If no name can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -189,7 +199,7 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system)
+ *                     on the system).
  * \returns the path of the selected joystick. If no path can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -215,9 +225,9 @@
  * This function can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the GUID of the selected joystick. If called on an invalid index,
- *          this function returns a zero GUID
+ *          this function returns a zero GUID.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -233,9 +243,9 @@
  * available this function returns 0.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the USB vendor ID of the selected joystick. If called on an
- *          invalid index, this function returns zero
+ *          invalid index, this function returns zero.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -248,9 +258,9 @@
  * available this function returns 0.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the USB product ID of the selected joystick. If called on an
- *          invalid index, this function returns zero
+ *          invalid index, this function returns zero.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -263,9 +273,9 @@
  * isn't available this function returns 0.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the product version of the selected joystick. If called on an
- *          invalid index, this function returns zero
+ *          invalid index, this function returns zero.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -277,9 +287,9 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the SDL_JoystickType of the selected joystick. If called on an
- *          invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`
+ *          invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -291,7 +301,7 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the instance id of the selected joystick. If called on an invalid
  *          index, this function returns -1.
  *
@@ -310,7 +320,7 @@
  * The joystick subsystem must be initialized before a joystick can be opened
  * for use.
  *
- * \param device_index the index of the joystick to query
+ * \param device_index the index of the joystick to query.
  * \returns a joystick identifier or NULL if an error occurred; call
  *          SDL_GetError() for more information.
  *
@@ -324,7 +334,7 @@
 /**
  * Get the SDL_Joystick associated with an instance id.
  *
- * \param instance_id the instance id to get the SDL_Joystick for
+ * \param instance_id the instance id to get the SDL_Joystick for.
  * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError()
  *          for more information.
  *
@@ -335,7 +345,7 @@
 /**
  * Get the SDL_Joystick associated with a player index.
  *
- * \param player_index the player index to get the SDL_Joystick for
+ * \param player_index the player index to get the SDL_Joystick for.
  * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError()
  *          for more information.
  *
@@ -358,8 +368,10 @@
 /**
  * The structure that defines an extended virtual joystick description
  *
- * The caller must zero the structure and then initialize the version with `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to SDL_JoystickAttachVirtualEx()
- *  All other elements of this structure are optional and can be left 0.
+ * The caller must zero the structure and then initialize the version with
+ * `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to
+ * SDL_JoystickAttachVirtualEx() All other elements of this structure are
+ * optional and can be left 0.
  *
  * \sa SDL_JoystickAttachVirtualEx
  */
@@ -390,7 +402,7 @@
 } SDL_VirtualJoystickDesc;
 
 /**
- * \brief The current version of the SDL_VirtualJoystickDesc structure
+ * The current version of the SDL_VirtualJoystickDesc structure
  */
 #define SDL_VIRTUAL_JOYSTICK_DESC_VERSION   1
 
@@ -407,7 +419,7 @@
  * Detach a virtual joystick.
  *
  * \param device_index a value previously returned from
- *                     SDL_JoystickAttachVirtual()
+ *                     SDL_JoystickAttachVirtual().
  * \returns 0 on success, or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.14.
@@ -485,7 +497,7 @@
 /**
  * Get the implementation dependent name of a joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the name of the selected joystick. If no name can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -499,7 +511,7 @@
 /**
  * Get the implementation dependent path of a joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the path of the selected joystick. If no path can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -515,7 +527,7 @@
  * For XInput controllers this returns the XInput user index. Many joysticks
  * will not be able to supply this information.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the player index, or -1 if it's not available.
  *
  * \since This function is available since SDL 2.0.9.
@@ -525,7 +537,7 @@
 /**
  * Set the player index of an opened joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \param player_index Player index to assign to this joystick, or -1 to clear
  *                     the player index and turn off player LEDs.
  *
@@ -538,7 +550,7 @@
  *
  * This function requires an open joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the GUID of the given joystick. If called on an invalid index,
  *          this function returns a zero GUID; call SDL_GetError() for more
  *          information.
@@ -555,7 +567,7 @@
  *
  * If the vendor ID isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the USB vendor ID of the selected joystick, or 0 if unavailable.
  *
  * \since This function is available since SDL 2.0.6.
@@ -567,7 +579,7 @@
  *
  * If the product ID isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the USB product ID of the selected joystick, or 0 if unavailable.
  *
  * \since This function is available since SDL 2.0.6.
@@ -579,7 +591,7 @@
  *
  * If the product version isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the product version of the selected joystick, or 0 if unavailable.
  *
  * \since This function is available since SDL 2.0.6.
@@ -591,7 +603,7 @@
  *
  * If the firmware version isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the firmware version of the selected joystick, or 0 if
  *          unavailable.
  *
@@ -604,7 +616,7 @@
  *
  * Returns the serial number of the joystick, or NULL if it is not available.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the serial number of the selected joystick, or NULL if
  *          unavailable.
  *
@@ -615,7 +627,7 @@
 /**
  * Get the type of an opened joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the SDL_JoystickType of the selected joystick.
  *
  * \since This function is available since SDL 2.0.6.
@@ -627,9 +639,9 @@
  *
  * You should supply at least 33 bytes for pszGUID.
  *
- * \param guid the SDL_JoystickGUID you wish to convert to string
- * \param pszGUID buffer in which to write the ASCII string
- * \param cbGUID the size of pszGUID
+ * \param guid the SDL_JoystickGUID you wish to convert to string.
+ * \param pszGUID buffer in which to write the ASCII string.
+ * \param cbGUID the size of pszGUID.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -646,7 +658,7 @@
  * an invalid GUID, the function will silently succeed, but the GUID generated
  * will not be useful.
  *
- * \param pchGUID string containing an ASCII representation of a GUID
+ * \param pchGUID string containing an ASCII representation of a GUID.
  * \returns a SDL_JoystickGUID structure.
  *
  * \since This function is available since SDL 2.0.0.
@@ -658,15 +670,15 @@
 /**
  * Get the device information encoded in a SDL_JoystickGUID structure
  *
- * \param guid the SDL_JoystickGUID you wish to get info about
+ * \param guid the SDL_JoystickGUID you wish to get info about.
  * \param vendor A pointer filled in with the device VID, or 0 if not
- *               available
+ *               available.
  * \param product A pointer filled in with the device PID, or 0 if not
- *                available
+ *                available.
  * \param version A pointer filled in with the device version, or 0 if not
- *                available
+ *                available.
  * \param crc16 A pointer filled in with a CRC used to distinguish different
- *              products with the same VID/PID, or 0 if not available
+ *              products with the same VID/PID, or 0 if not available.
  *
  * \since This function is available since SDL 2.26.0.
  *
@@ -677,7 +689,7 @@
 /**
  * Get the status of a specified joystick.
  *
- * \param joystick the joystick to query
+ * \param joystick the joystick to query.
  * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not;
  *          call SDL_GetError() for more information.
  *
@@ -691,7 +703,7 @@
 /**
  * Get the instance ID of an opened joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the instance ID of the specified joystick on success or a negative
  *          error code on failure; call SDL_GetError() for more information.
  *
@@ -708,7 +720,7 @@
  * separate buttons or a POV hat, and not axes, but all of this is up to the
  * device and platform.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of axis controls/number of axes on success or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -728,7 +740,7 @@
  *
  * Most joysticks do not have trackballs.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of trackballs on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -741,7 +753,7 @@
 /**
  * Get the number of POV hats on a joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of POV hats on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -755,7 +767,7 @@
 /**
  * Get the number of buttons on a joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of buttons on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -794,10 +806,10 @@
  * `SDL_ENABLE`, this function accepts any value, with any non-zero value that
  * isn't `SDL_QUERY` being treated as `SDL_ENABLE`.
  *
- * If SDL was built with events disabled (extremely uncommon!), this will
- * do nothing and always return `SDL_IGNORE`.
+ * If SDL was built with events disabled (extremely uncommon!), this will do
+ * nothing and always return `SDL_IGNORE`.
  *
- * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`
+ * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`.
  * \returns If `state` is `SDL_QUERY` then the current state is returned,
  *          otherwise `state` is returned (even if it was not one of the
  *          allowed values).
@@ -808,6 +820,7 @@
  */
 extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state);
 
+/* Limits for joystick axes... */
 #define SDL_JOYSTICK_AXIS_MAX   32767
 #define SDL_JOYSTICK_AXIS_MIN   -32768
 
@@ -824,8 +837,8 @@
  * 32767) representing the current position of the axis. It may be necessary
  * to impose certain tolerances on these values to account for jitter.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param axis the axis to query; the axis indices start at index 0
+ * \param joystick an SDL_Joystick structure containing joystick information.
+ * \param axis the axis to query; the axis indices start at index 0.
  * \returns a 16-bit signed integer representing the current position of the
  *          axis or 0 on failure; call SDL_GetError() for more information.
  *
@@ -843,8 +856,8 @@
  *
  * The axis indices start at index 0.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param axis the axis to query; the axis indices start at index 0
+ * \param joystick an SDL_Joystick structure containing joystick information.
+ * \param axis the axis to query; the axis indices start at index 0.
  * \param state Upon return, the initial value is supplied here.
  * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not.
  *
@@ -883,8 +896,8 @@
  * - `SDL_HAT_LEFTUP`
  * - `SDL_HAT_LEFTDOWN`
  *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param hat the hat index to get the state from; indices start at index 0
+ * \param joystick an SDL_Joystick structure containing joystick information.
+ * \param hat the hat index to get the state from; indices start at index 0.
  * \returns the current hat position.
  *
  * \since This function is available since SDL 2.0.0.
@@ -902,10 +915,10 @@
  *
  * Most joysticks do not have trackballs.
  *
- * \param joystick the SDL_Joystick to query
- * \param ball the ball index to query; ball indices start at index 0
- * \param dx stores the difference in the x axis position since the last poll
- * \param dy stores the difference in the y axis position since the last poll
+ * \param joystick the SDL_Joystick to query.
+ * \param ball the ball index to query; ball indices start at index 0.
+ * \param dx stores the difference in the x axis position since the last poll.
+ * \param dy stores the difference in the y axis position since the last poll.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -919,9 +932,9 @@
 /**
  * Get the current state of a button on a joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \param button the button index to get the state from; indices start at
- *               index 0
+ *               index 0.
  * \returns 1 if the specified button is pressed, 0 otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -937,13 +950,13 @@
  * Each call to this function cancels any previous rumble effect, and calling
  * it with 0 intensity stops any rumbling.
  *
- * \param joystick The joystick to vibrate
+ * \param joystick The joystick to vibrate.
  * \param low_frequency_rumble The intensity of the low frequency (left)
- *                             rumble motor, from 0 to 0xFFFF
+ *                             rumble motor, from 0 to 0xFFFF.
  * \param high_frequency_rumble The intensity of the high frequency (right)
- *                              rumble motor, from 0 to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if rumble isn't supported on this joystick
+ *                              rumble motor, from 0 to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if rumble isn't supported on this joystick.
  *
  * \since This function is available since SDL 2.0.9.
  *
@@ -962,13 +975,13 @@
  * want the (more common) whole-controller rumble, use SDL_JoystickRumble()
  * instead.
  *
- * \param joystick The joystick to vibrate
+ * \param joystick The joystick to vibrate.
  * \param left_rumble The intensity of the left trigger rumble motor, from 0
- *                    to 0xFFFF
+ *                    to 0xFFFF.
  * \param right_rumble The intensity of the right trigger rumble motor, from 0
- *                     to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if trigger rumble isn't supported on this joystick
+ *                     to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if trigger rumble isn't supported on this joystick.
  *
  * \since This function is available since SDL 2.0.14.
  *
@@ -982,7 +995,7 @@
  * An example of a joystick LED is the light on the back of a PlayStation 4's
  * DualShock 4 controller.
  *
- * \param joystick The joystick to query
+ * \param joystick The joystick to query.
  * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -992,7 +1005,7 @@
 /**
  * Query whether a joystick has rumble support.
  *
- * \param joystick The joystick to query
+ * \param joystick The joystick to query.
  * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.18.
@@ -1004,7 +1017,7 @@
 /**
  * Query whether a joystick has rumble support on triggers.
  *
- * \param joystick The joystick to query
+ * \param joystick The joystick to query.
  * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.18.
@@ -1019,11 +1032,11 @@
  * An example of a joystick LED is the light on the back of a PlayStation 4's
  * DualShock 4 controller.
  *
- * \param joystick The joystick to update
- * \param red The intensity of the red LED
- * \param green The intensity of the green LED
- * \param blue The intensity of the blue LED
- * \returns 0 on success, -1 if this joystick does not have a modifiable LED
+ * \param joystick The joystick to update.
+ * \param red The intensity of the red LED.
+ * \param green The intensity of the green LED.
+ * \param blue The intensity of the blue LED.
+ * \returns 0 on success, -1 if this joystick does not have a modifiable LED.
  *
  * \since This function is available since SDL 2.0.14.
  */
@@ -1032,10 +1045,11 @@
 /**
  * Send a joystick specific effect packet
  *
- * \param joystick The joystick to affect
- * \param data The data to send to the joystick
- * \param size The size of the data to send to the joystick
- * \returns 0, or -1 if this joystick or driver doesn't support effect packets
+ * \param joystick The joystick to affect.
+ * \param data The data to send to the joystick.
+ * \param size The size of the data to send to the joystick.
+ * \returns 0, or -1 if this joystick or driver doesn't support effect
+ *          packets.
  *
  * \since This function is available since SDL 2.0.16.
  */
@@ -1044,7 +1058,7 @@
 /**
  * Close a joystick previously opened with SDL_JoystickOpen().
  *
- * \param joystick The joystick device to close
+ * \param joystick The joystick device to close.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1055,9 +1069,9 @@
 /**
  * Get the battery level of a joystick as SDL_JoystickPowerLevel.
  *
- * \param joystick the SDL_Joystick to query
+ * \param joystick the SDL_Joystick to query.
  * \returns the current battery level as SDL_JoystickPowerLevel on success or
- *          `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown
+ *          `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown.
  *
  * \since This function is available since SDL 2.0.4.
  */
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keyboard.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keyboard.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_keyboard.h
+ * # CategoryKeyboard
  *
- *  Include file for SDL keyboard event handling
+ * Include file for SDL keyboard event handling
  */
 
 #ifndef SDL_keyboard_h_
@@ -40,14 +40,15 @@
 #endif
 
 /**
- *  \brief The SDL keysym structure, used in key events.
+ * The SDL keysym structure, used in key events.
  *
- *  \note  If you are looking for translated character input, see the ::SDL_TEXTINPUT event.
+ * If you are looking for translated character input, see the SDL_TEXTINPUT
+ * event.
  */
 typedef struct SDL_Keysym
 {
-    SDL_Scancode scancode;      /**< SDL physical key code - see ::SDL_Scancode for details */
-    SDL_Keycode sym;            /**< SDL virtual key code - see ::SDL_Keycode for details */
+    SDL_Scancode scancode;      /**< SDL physical key code - see SDL_Scancode for details */
+    SDL_Keycode sym;            /**< SDL virtual key code - see SDL_Keycode for details */
     Uint16 mod;                 /**< current key modifiers */
     Uint32 unused;
 } SDL_Keysym;
@@ -84,7 +85,7 @@
  * Note: This function doesn't take into account whether shift has been
  * pressed or not.
  *
- * \param numkeys if non-NULL, receives the length of the returned array
+ * \param numkeys if non-NULL, receives the length of the returned array.
  * \returns a pointer to an array of key states.
  *
  * \since This function is available since SDL 2.0.0.
@@ -129,7 +130,7 @@
  * This does not change the keyboard state, only the key modifier flags that
  * SDL reports.
  *
- * \param modstate the desired SDL_Keymod for the keyboard
+ * \param modstate the desired SDL_Keymod for the keyboard.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -143,7 +144,7 @@
  *
  * See SDL_Keycode for details.
  *
- * \param scancode the desired SDL_Scancode to query
+ * \param scancode the desired SDL_Scancode to query.
  * \returns the SDL_Keycode that corresponds to the given SDL_Scancode.
  *
  * \since This function is available since SDL 2.0.0.
@@ -159,7 +160,7 @@
  *
  * See SDL_Scancode for details.
  *
- * \param key the desired SDL_Keycode to query
+ * \param key the desired SDL_Keycode to query.
  * \returns the SDL_Scancode that corresponds to the given SDL_Keycode.
  *
  * \since This function is available since SDL 2.0.0.
@@ -183,7 +184,7 @@
  * unsuitable for creating a stable cross-platform two-way mapping between
  * strings and scancodes.
  *
- * \param scancode the desired SDL_Scancode to query
+ * \param scancode the desired SDL_Scancode to query.
  * \returns a pointer to the name for the scancode. If the scancode doesn't
  *          have a name this function returns an empty string ("").
  *
@@ -197,7 +198,7 @@
 /**
  * Get a scancode from a human-readable name.
  *
- * \param name the human-readable scancode name
+ * \param name the human-readable scancode name.
  * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't
  *          recognized; call SDL_GetError() for more information.
  *
@@ -214,7 +215,7 @@
  *
  * See SDL_Scancode and SDL_Keycode for details.
  *
- * \param key the desired SDL_Keycode to query
+ * \param key the desired SDL_Keycode to query.
  * \returns a pointer to a UTF-8 string that stays valid at least until the
  *          next call to this function. If you need it around any longer, you
  *          must copy it. If the key doesn't have a name, this function
@@ -231,7 +232,7 @@
 /**
  * Get a key code from a human-readable name.
  *
- * \param name the human-readable key name
+ * \param name the human-readable key name.
  * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call
  *          SDL_GetError() for more information.
  *
@@ -253,6 +254,10 @@
  *
  * On some platforms using this function activates the screen keyboard.
  *
+ * On desktop platforms, SDL_StartTextInput() is implicitly called on SDL
+ * video subsystem initialization which will cause SDL_TextInputEvent and
+ * SDL_TextEditingEvent to begin emitting.
+ *
  * \since This function is available since SDL 2.0.0.
  *
  * \sa SDL_SetTextInputRect
@@ -298,10 +303,11 @@
 extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void);
 
 /**
- * Set the rectangle used to type Unicode text inputs. Native input methods
- * will place a window with word suggestions near it, without covering the
- * text being inputted.
- * 
+ * Set the rectangle used to type Unicode text inputs.
+ *
+ * Native input methods will place a window with word suggestions near it,
+ * without covering the text being inputted.
+ *
  * To start text input in a given location, this function is intended to be
  * called before SDL_StartTextInput, although some platforms support moving
  * the rectangle even while text input (and a composition) is active.
@@ -311,7 +317,7 @@
  * any feedback.
  *
  * \param rect the SDL_Rect structure representing the rectangle to receive
- *             text (ignored if NULL)
+ *             text (ignored if NULL).
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -335,7 +341,7 @@
 /**
  * Check whether the screen keyboard is shown for given window.
  *
- * \param window the window for which screen keyboard should be queried
+ * \param window the window for which screen keyboard should be queried.
  * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not.
  *
  * \since This function is available since SDL 2.0.0.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keycode.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keycode.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_keycode.h
+ * # CategoryKeycode
  *
- *  Defines constants which identify keyboard keys and modifiers.
+ * Defines constants which identify keyboard keys and modifiers.
  */
 
 #ifndef SDL_keycode_h_
@@ -32,15 +32,15 @@
 #include <SDL2/SDL_scancode.h>
 
 /**
- *  \brief The SDL virtual key representation.
+ * The SDL virtual key representation.
  *
- *  Values of this type are used to represent keyboard keys using the current
- *  layout of the keyboard.  These values include Unicode values representing
- *  the unmodified character that would be generated by pressing the key, or
- *  an SDLK_* constant for those keys that do not generate characters.
+ * Values of this type are used to represent keyboard keys using the current
+ * layout of the keyboard. These values include Unicode values representing
+ * the unmodified character that would be generated by pressing the key, or an
+ * SDLK_* constant for those keys that do not generate characters.
  *
- *  A special exception is the number keys at the top of the keyboard which
- *  map to SDLK_0...SDLK_9 on AZERTY layouts.
+ * A special exception is the number keys at the top of the keyboard which map
+ * to SDLK_0...SDLK_9 on AZERTY layouts.
  */
 typedef Sint32 SDL_Keycode;
 
@@ -47,7 +47,7 @@
 #define SDLK_SCANCODE_MASK (1<<30)
 #define SDL_SCANCODE_TO_KEYCODE(X)  (X | SDLK_SCANCODE_MASK)
 
-typedef enum
+typedef enum SDL_KeyCode
 {
     SDLK_UNKNOWN = 0,
 
@@ -327,9 +327,9 @@
 } SDL_KeyCode;
 
 /**
- * \brief Enumeration of valid key mods (possibly OR'd together).
+ * Enumeration of valid key mods (possibly OR'd together).
  */
-typedef enum
+typedef enum SDL_Keymod
 {
     KMOD_NONE = 0x0000,
     KMOD_LSHIFT = 0x0001,
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_loadso.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_loadso.h
@@ -19,23 +19,25 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: LoadSO */
+
 /**
- *  \file SDL_loadso.h
+ * # CategoryLoadSO
  *
- *  System dependent library loading routines
+ * System-dependent library loading routines.
  *
- *  Some things to keep in mind:
- *  \li These functions only work on C function names.  Other languages may
- *      have name mangling and intrinsic language support that varies from
- *      compiler to compiler.
- *  \li Make sure you declare your function pointers with the same calling
- *      convention as the actual library function.  Your code will crash
- *      mysteriously if you do not do this.
- *  \li Avoid namespace collisions.  If you load a symbol from the library,
- *      it is not defined whether or not it goes into the global symbol
- *      namespace for the application.  If it does and it conflicts with
- *      symbols in your code or other shared libraries, you will not get
- *      the results you expect. :)
+ * Some things to keep in mind:
+ *
+ * - These functions only work on C function names. Other languages may have
+ *   name mangling and intrinsic language support that varies from compiler to
+ *   compiler.
+ * - Make sure you declare your function pointers with the same calling
+ *   convention as the actual library function. Your code will crash
+ *   mysteriously if you do not do this.
+ * - Avoid namespace collisions. If you load a symbol from the library, it is
+ *   not defined whether or not it goes into the global symbol namespace for
+ *   the application. If it does and it conflicts with symbols in your code or
+ *   other shared libraries, you will not get the results you expect. :)
  */
 
 #ifndef SDL_loadso_h_
@@ -53,7 +55,7 @@
 /**
  * Dynamically load a shared object.
  *
- * \param sofile a system-dependent name of the object file
+ * \param sofile a system-dependent name of the object file.
  * \returns an opaque pointer to the object handle or NULL if there was an
  *          error; call SDL_GetError() for more information.
  *
@@ -79,8 +81,8 @@
  *
  * If the requested function doesn't exist, NULL is returned.
  *
- * \param handle a valid shared object handle returned by SDL_LoadObject()
- * \param name the name of the function to look up
+ * \param handle a valid shared object handle returned by SDL_LoadObject().
+ * \param name the name of the function to look up.
  * \returns a pointer to the function or NULL if there was an error; call
  *          SDL_GetError() for more information.
  *
@@ -95,7 +97,7 @@
 /**
  * Unload a shared object from memory.
  *
- * \param handle a valid shared object handle returned by SDL_LoadObject()
+ * \param handle a valid shared object handle returned by SDL_LoadObject().
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_locale.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_locale.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_locale.h
+ * # CategoryLocale
  *
- *  Include file for SDL locale services
+ * Include file for SDL locale services
  */
 
 #ifndef _SDL_locale_h
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_log.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_log.h
@@ -20,18 +20,19 @@
 */
 
 /**
- *  \file SDL_log.h
+ * # CategoryLog
  *
- *  Simple log messages with categories and priorities.
+ * Simple log messages with categories and priorities.
  *
- *  By default logs are quiet, but if you're debugging SDL you might want:
+ * By default logs are quiet, but if you're debugging SDL you might want:
  *
- *      SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
+ * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
  *
- *  Here's where the messages go on different platforms:
- *      Windows: debug output stream
- *      Android: log output
- *      Others: standard error output (stderr)
+ * Here's where the messages go on different platforms:
+ *
+ * - Windows: debug output stream
+ * - Android: log output
+ * - Others: standard error output (stderr)
  */
 
 #ifndef SDL_log_h_
@@ -47,21 +48,20 @@
 
 
 /**
- *  \brief The maximum size of a log message prior to SDL 2.0.24
+ * The maximum size of a log message prior to SDL 2.0.24
  *
- *  As of 2.0.24 there is no limit to the length of SDL log messages.
+ * As of 2.0.24 there is no limit to the length of SDL log messages.
  */
 #define SDL_MAX_LOG_MESSAGE 4096
 
 /**
- *  \brief The predefined log categories
+ * The predefined log categories
  *
- *  By default the application category is enabled at the INFO level,
- *  the assert category is enabled at the WARN level, test is enabled
- *  at the VERBOSE level and all other categories are enabled at the
- *  ERROR level.
+ * By default the application category is enabled at the INFO level, the
+ * assert category is enabled at the WARN level, test is enabled at the
+ * VERBOSE level and all other categories are enabled at the ERROR level.
  */
-typedef enum
+typedef enum SDL_LogCategory
 {
     SDL_LOG_CATEGORY_APPLICATION,
     SDL_LOG_CATEGORY_ERROR,
@@ -97,9 +97,9 @@
 } SDL_LogCategory;
 
 /**
- *  \brief The predefined log priorities
+ * The predefined log priorities
  */
-typedef enum
+typedef enum SDL_LogPriority
 {
     SDL_LOG_PRIORITY_VERBOSE = 1,
     SDL_LOG_PRIORITY_DEBUG,
@@ -114,7 +114,7 @@
 /**
  * Set the priority of all log categories.
  *
- * \param priority the SDL_LogPriority to assign
+ * \param priority the SDL_LogPriority to assign.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -125,8 +125,8 @@
 /**
  * Set the priority of a particular log category.
  *
- * \param category the category to assign a priority to
- * \param priority the SDL_LogPriority to assign
+ * \param category the category to assign a priority to.
+ * \param priority the SDL_LogPriority to assign.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -139,8 +139,8 @@
 /**
  * Get the priority of a particular log category.
  *
- * \param category the category to query
- * \returns the SDL_LogPriority for the requested category
+ * \param category the category to query.
+ * \returns the SDL_LogPriority for the requested category.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -166,7 +166,7 @@
  * = * \param fmt a printf() style message format string
  *
  * \param ... additional parameters matching % tokens in the `fmt` string, if
- *            any
+ *            any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -184,10 +184,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_VERBOSE.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -205,10 +205,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_DEBUG.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -226,10 +226,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_INFO.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -247,10 +247,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_WARN.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -268,10 +268,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_ERROR.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -289,10 +289,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_CRITICAL.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -310,11 +310,11 @@
 /**
  * Log a message with the specified category and priority.
  *
- * \param category the category of the message
- * \param priority the priority of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param priority the priority of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -334,10 +334,10 @@
 /**
  * Log a message with the specified category and priority.
  *
- * \param category the category of the message
- * \param priority the priority of the message
- * \param fmt a printf() style message format string
- * \param ap a variable argument list
+ * \param category the category of the message.
+ * \param priority the priority of the message.
+ * \param fmt a printf() style message format string.
+ * \param ap a variable argument list.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -359,10 +359,11 @@
  *
  * This function is called by SDL when there is new text to be logged.
  *
- * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction()
- * \param category the category of the message
- * \param priority the priority of the message
- * \param message the message being output
+ * \param userdata what was passed as `userdata` to
+ *                 SDL_LogSetOutputFunction().
+ * \param category the category of the message.
+ * \param priority the priority of the message.
+ * \param message the message being output.
  */
 typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message);
 
@@ -370,9 +371,9 @@
  * Get the current log output function.
  *
  * \param callback an SDL_LogOutputFunction filled in with the current log
- *                 callback
+ *                 callback.
  * \param userdata a pointer filled in with the pointer that is passed to
- *                 `callback`
+ *                 `callback`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -383,8 +384,8 @@
 /**
  * Replace the default log output function with one of your own.
  *
- * \param callback an SDL_LogOutputFunction to call instead of the default
- * \param userdata a pointer that is passed to `callback`
+ * \param callback an SDL_LogOutputFunction to call instead of the default.
+ * \param userdata a pointer that is passed to `callback`.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_main.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_main.h
@@ -25,9 +25,9 @@
 #include <SDL2/SDL_stdinc.h>
 
 /**
- *  \file SDL_main.h
+ * # CategoryMain
  *
- *  Redefine main() on some platforms so that it is called by SDL.
+ * Redefine main() on some platforms so that it is called by SDL.
  */
 
 #ifndef SDL_MAIN_HANDLED
@@ -129,7 +129,7 @@
  *
  *  The application's main() function must be called with C linkage,
  *  and should be declared like this:
- *  \code
+ *  ```c
  *  #ifdef __cplusplus
  *  extern "C"
  *  #endif
@@ -136,7 +136,7 @@
  *  int main(int argc, char *argv[])
  *  {
  *  }
- *  \endcode
+ *  ```
  */
 
 #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE)
@@ -149,7 +149,7 @@
 #endif
 
 /**
- *  The prototype for the application's main() function
+ * The prototype for the application's main() function
  */
 typedef int (*SDL_main_func)(int argc, char *argv[]);
 extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]);
@@ -222,8 +222,8 @@
 /**
  * Initialize and launch an SDL/WinRT application.
  *
- * \param mainFunction the SDL app's C-style main(), an SDL_main_func
- * \param reserved reserved for future use; should be NULL
+ * \param mainFunction the SDL app's C-style main(), an SDL_main_func.
+ * \param reserved reserved for future use; should be NULL.
  * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
  *          more information on the failure.
  *
@@ -238,10 +238,10 @@
 /**
  * Initializes and launches an SDL application.
  *
- * \param argc The argc parameter from the application's main() function
- * \param argv The argv parameter from the application's main() function
- * \param mainFunction The SDL app's C-style main(), an SDL_main_func
- * \return the return value from mainFunction
+ * \param argc The argc parameter from the application's main() function.
+ * \param argv The argv parameter from the application's main() function.
+ * \param mainFunction The SDL app's C-style main(), an SDL_main_func.
+ * \return the return value from mainFunction.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -254,8 +254,8 @@
 /**
  * Initialize and launch an SDL GDK application.
  *
- * \param mainFunction the SDL app's C-style main(), an SDL_main_func
- * \param reserved reserved for future use; should be NULL
+ * \param mainFunction the SDL app's C-style main(), an SDL_main_func.
+ * \param reserved reserved for future use; should be NULL.
  * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
  *          more information on the failure.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_messagebox.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_messagebox.h
@@ -32,9 +32,11 @@
 #endif
 
 /**
- * SDL_MessageBox flags. If supported will display warning icon, etc.
+ * SDL_MessageBox flags.
+ *
+ * If supported will display warning icon, etc.
  */
-typedef enum
+typedef enum SDL_MessageBoxFlags
 {
     SDL_MESSAGEBOX_ERROR                 = 0x00000010,   /**< error dialog */
     SDL_MESSAGEBOX_WARNING               = 0x00000020,   /**< warning dialog */
@@ -46,7 +48,7 @@
 /**
  * Flags for SDL_MessageBoxButtonData.
  */
-typedef enum
+typedef enum SDL_MessageBoxButtonFlags
 {
     SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001,  /**< Marks the default button when return is hit */
     SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002   /**< Marks the default button when escape is hit */
@@ -55,9 +57,9 @@
 /**
  * Individual button data.
  */
-typedef struct
+typedef struct SDL_MessageBoxButtonData
 {
-    Uint32 flags;       /**< ::SDL_MessageBoxButtonFlags */
+    Uint32 flags;       /**< SDL_MessageBoxButtonFlags */
     int buttonid;       /**< User defined button id (value returned via SDL_ShowMessageBox) */
     const char * text;  /**< The UTF-8 button text */
 } SDL_MessageBoxButtonData;
@@ -65,12 +67,12 @@
 /**
  * RGB value used in a message box color scheme
  */
-typedef struct
+typedef struct SDL_MessageBoxColor
 {
     Uint8 r, g, b;
 } SDL_MessageBoxColor;
 
-typedef enum
+typedef enum SDL_MessageBoxColorType
 {
     SDL_MESSAGEBOX_COLOR_BACKGROUND,
     SDL_MESSAGEBOX_COLOR_TEXT,
@@ -83,7 +85,7 @@
 /**
  * A set of colors to use for message box dialogs
  */
-typedef struct
+typedef struct SDL_MessageBoxColorScheme
 {
     SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX];
 } SDL_MessageBoxColorScheme;
@@ -91,9 +93,9 @@
 /**
  * MessageBox structure containing title, text, window, etc.
  */
-typedef struct
+typedef struct SDL_MessageBoxData
 {
-    Uint32 flags;                       /**< ::SDL_MessageBoxFlags */
+    Uint32 flags;                       /**< SDL_MessageBoxFlags */
     SDL_Window *window;                 /**< Parent window, can be NULL */
     const char *title;                  /**< UTF-8 title */
     const char *message;                /**< UTF-8 message text */
@@ -101,7 +103,7 @@
     int numbuttons;
     const SDL_MessageBoxButtonData *buttons;
 
-    const SDL_MessageBoxColorScheme *colorScheme;   /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */
+    const SDL_MessageBoxColorScheme *colorScheme;   /**< SDL_MessageBoxColorScheme, can be NULL to use system settings */
 } SDL_MessageBoxData;
 
 /**
@@ -128,8 +130,9 @@
  * to stderr if you can.
  *
  * \param messageboxdata the SDL_MessageBoxData structure with title, text and
- *                       other options
- * \param buttonid the pointer to which user id of hit button should be copied
+ *                       other options.
+ * \param buttonid the pointer to which user id of hit button should be
+ *                 copied.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -168,10 +171,10 @@
  * concern, check the return value from this function and fall back to writing
  * to stderr if you can.
  *
- * \param flags an SDL_MessageBoxFlags value
- * \param title UTF-8 title text
- * \param message UTF-8 message text
- * \param window the parent window, or NULL for no parent
+ * \param flags an SDL_MessageBoxFlags value.
+ * \param title UTF-8 title text.
+ * \param message UTF-8 message text.
+ * \param window the parent window, or NULL for no parent.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_metal.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_metal.h
@@ -20,9 +20,10 @@
 */
 
 /**
- *  \file SDL_metal.h
+ * # CategoryMetal
  *
- *  Header file for functions to creating Metal layers and views on SDL windows.
+ * Header file for functions to creating Metal layers and views on SDL
+ * windows.
  */
 
 #ifndef SDL_metal_h_
@@ -37,9 +38,9 @@
 #endif
 
 /**
- *  \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS).
+ * A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS).
  *
- *  \note This can be cast directly to an NSView or UIView.
+ * This can be cast directly to an NSView or UIView.
  */
 typedef void *SDL_MetalView;
 
@@ -90,9 +91,9 @@
  * Get the size of a window's underlying drawable in pixels (for use with
  * setting viewport, scissor & etc).
  *
- * \param window SDL_Window from which the drawable size should be queried
- * \param w Pointer to variable for storing the width in pixels, may be NULL
- * \param h Pointer to variable for storing the height in pixels, may be NULL
+ * \param window SDL_Window from which the drawable size should be queried.
+ * \param w Pointer to variable for storing the width in pixels, may be NULL.
+ * \param h Pointer to variable for storing the height in pixels, may be NULL.
  *
  * \since This function is available since SDL 2.0.14.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_misc.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_misc.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_misc.h
+ * # CategoryMisc
  *
- *  \brief Include file for SDL API functions that don't fit elsewhere.
+ * Include file for SDL API functions that don't fit elsewhere.
  */
 
 #ifndef SDL_misc_h_
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mouse.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mouse.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_mouse.h
+ * # CategoryMouse
  *
- *  Include file for SDL mouse event handling.
+ * Include file for SDL mouse event handling.
  */
 
 #ifndef SDL_mouse_h_
@@ -41,9 +41,9 @@
 typedef struct SDL_Cursor SDL_Cursor;   /**< Implementation dependent */
 
 /**
- * \brief Cursor types for SDL_CreateSystemCursor().
+ * Cursor types for SDL_CreateSystemCursor().
  */
-typedef enum
+typedef enum SDL_SystemCursor
 {
     SDL_SYSTEM_CURSOR_ARROW,     /**< Arrow */
     SDL_SYSTEM_CURSOR_IBEAM,     /**< I-beam */
@@ -61,9 +61,9 @@
 } SDL_SystemCursor;
 
 /**
- * \brief Scroll direction types for the Scroll event
+ * Scroll direction types for the Scroll event
  */
-typedef enum
+typedef enum SDL_MouseWheelDirection
 {
     SDL_MOUSEWHEEL_NORMAL,    /**< The scroll direction is normal */
     SDL_MOUSEWHEEL_FLIPPED    /**< The scroll direction is flipped / natural */
@@ -90,9 +90,9 @@
  * either `x` or `y`.
  *
  * \param x the x coordinate of the mouse cursor position relative to the
- *          focus window
+ *          focus window.
  * \param y the y coordinate of the mouse cursor position relative to the
- *          focus window
+ *          focus window.
  * \returns a 32-bit button bitmask of the current button state.
  *
  * \since This function is available since SDL 2.0.0.
@@ -120,9 +120,9 @@
  * reason to use this function, you probably want SDL_GetMouseState() instead.
  *
  * \param x filled in with the current X coord relative to the desktop; can be
- *          NULL
+ *          NULL.
  * \param y filled in with the current Y coord relative to the desktop; can be
- *          NULL
+ *          NULL.
  * \returns the current button state as a bitmask which can be tested using
  *          the SDL_BUTTON(X) macros.
  *
@@ -141,8 +141,8 @@
  * mouse deltas since the last call to SDL_GetRelativeMouseState() or since
  * event initialization. You can pass NULL for either `x` or `y`.
  *
- * \param x a pointer filled with the last recorded x coordinate of the mouse
- * \param y a pointer filled with the last recorded y coordinate of the mouse
+ * \param x a pointer filled with the last recorded x coordinate of the mouse.
+ * \param y a pointer filled with the last recorded y coordinate of the mouse.
  * \returns a 32-bit button bitmask of the relative button state.
  *
  * \since This function is available since SDL 2.0.0.
@@ -162,9 +162,9 @@
  * mouse when used over Microsoft Remote Desktop.
  *
  * \param window the window to move the mouse into, or NULL for the current
- *               mouse focus
- * \param x the x coordinate within the window
- * \param y the y coordinate within the window
+ *               mouse focus.
+ * \param x the x coordinate within the window.
+ * \param y the y coordinate within the window.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -184,8 +184,8 @@
  * Note that this function will appear to succeed, but not actually move the
  * mouse when used over Microsoft Remote Desktop.
  *
- * \param x the x coordinate
- * \param y the y coordinate
+ * \param x the x coordinate.
+ * \param y the y coordinate.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -297,14 +297,14 @@
  * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which
  * provides twelve readily available system cursors to pick from.
  *
- * \param data the color value for each pixel of the cursor
- * \param mask the mask value for each pixel of the cursor
- * \param w the width of the cursor
- * \param h the height of the cursor
+ * \param data the color value for each pixel of the cursor.
+ * \param mask the mask value for each pixel of the cursor.
+ * \param w the width of the cursor.
+ * \param h the height of the cursor.
  * \param hot_x the X-axis location of the upper left corner of the cursor
- *              relative to the actual mouse position
+ *              relative to the actual mouse position.
  * \param hot_y the Y-axis location of the upper left corner of the cursor
- *              relative to the actual mouse position
+ *              relative to the actual mouse position.
  * \returns a new cursor with the specified parameters on success or NULL on
  *          failure; call SDL_GetError() for more information.
  *
@@ -322,9 +322,9 @@
 /**
  * Create a color cursor.
  *
- * \param surface an SDL_Surface structure representing the cursor image
- * \param hot_x the x position of the cursor hot spot
- * \param hot_y the y position of the cursor hot spot
+ * \param surface an SDL_Surface structure representing the cursor image.
+ * \param hot_x the x position of the cursor hot spot.
+ * \param hot_y the y position of the cursor hot spot.
  * \returns the new cursor on success or NULL on failure; call SDL_GetError()
  *          for more information.
  *
@@ -340,7 +340,7 @@
 /**
  * Create a system cursor.
  *
- * \param id an SDL_SystemCursor enum value
+ * \param id an SDL_SystemCursor enum value.
  * \returns a cursor on success or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -358,7 +358,7 @@
  * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if
  * this is desired for any reason.
  *
- * \param cursor a cursor to make active
+ * \param cursor a cursor to make active.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -402,7 +402,7 @@
  * Use this function to free cursor resources created with SDL_CreateCursor(),
  * SDL_CreateColorCursor() or SDL_CreateSystemCursor().
  *
- * \param cursor the cursor to free
+ * \param cursor the cursor to free.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -437,9 +437,9 @@
 /**
  * Used as a mask when testing buttons in buttonstate.
  *
- * - Button 1:  Left mouse button
- * - Button 2:  Middle mouse button
- * - Button 3:  Right mouse button
+ * - Button 1: Left mouse button
+ * - Button 2: Middle mouse button
+ * - Button 3: Right mouse button
  */
 #define SDL_BUTTON(X)       (1 << ((X)-1))
 #define SDL_BUTTON_LEFT     1
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mutex.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mutex.h
@@ -23,9 +23,9 @@
 #define SDL_mutex_h_
 
 /**
- *  \file SDL_mutex.h
+ * # CategoryMutex
  *
- *  Functions to provide thread synchronization primitives.
+ * Functions to provide thread synchronization primitives.
  */
 
 #include <SDL2/SDL_stdinc.h>
@@ -112,13 +112,13 @@
 #endif
 
 /**
- *  Synchronization functions which can time out return this value
- *  if they time out.
+ * Synchronization functions which can time out return this value if they time
+ * out.
  */
 #define SDL_MUTEX_TIMEDOUT  1
 
 /**
- *  This is the timeout value which corresponds to never time out.
+ * This is the timeout value which corresponds to never time out.
  */
 #define SDL_MUTEX_MAXWAIT   (~(Uint32)0)
 
@@ -165,7 +165,7 @@
  * unlock it the same number of times before it is actually made available for
  * other threads in the system (this is known as a "recursive mutex").
  *
- * \param mutex the mutex to lock
+ * \param mutex the mutex to lock.
  * \return 0, or -1 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -182,7 +182,7 @@
  * This technique is useful if you need exclusive access to a resource but
  * don't want to wait for it, and will return to it to try again later.
  *
- * \param mutex the mutex to try to lock
+ * \param mutex the mutex to try to lock.
  * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for
  *          more information.
  *
@@ -224,7 +224,7 @@
  * to destroy a locked mutex, and may result in undefined behavior depending
  * on the platform.
  *
- * \param mutex the mutex to destroy
+ * \param mutex the mutex to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -256,7 +256,7 @@
  * is 0. Each post operation will atomically increment the semaphore value and
  * wake waiting threads and allow them to retry the wait operation.
  *
- * \param initial_value the starting value of the semaphore
+ * \param initial_value the starting value of the semaphore.
  * \returns a new semaphore or NULL on failure; call SDL_GetError() for more
  *          information.
  *
@@ -277,7 +277,7 @@
  * It is not safe to destroy a semaphore if there are threads currently
  * waiting on it.
  *
- * \param sem the semaphore to destroy
+ * \param sem the semaphore to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -301,7 +301,7 @@
  * This function is the equivalent of calling SDL_SemWaitTimeout() with a time
  * length of `SDL_MUTEX_MAXWAIT`.
  *
- * \param sem the semaphore wait on
+ * \param sem the semaphore wait on.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -325,7 +325,7 @@
  * the semaphore doesn't have a positive value, the function immediately
  * returns SDL_MUTEX_TIMEDOUT.
  *
- * \param sem the semaphore to wait on
+ * \param sem the semaphore to wait on.
  * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would
  *          block, or a negative error code on failure; call SDL_GetError()
  *          for more information.
@@ -349,8 +349,8 @@
  * signal or error, or the specified time has elapsed. If the call is
  * successful it will atomically decrement the semaphore value.
  *
- * \param sem the semaphore to wait on
- * \param timeout the length of the timeout, in milliseconds
+ * \param sem the semaphore to wait on.
+ * \param timeout the length of the timeout, in milliseconds.
  * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not
  *          succeed in the allotted time, or a negative error code on failure;
  *          call SDL_GetError() for more information.
@@ -369,7 +369,7 @@
 /**
  * Atomically increment a semaphore's value and wake waiting threads.
  *
- * \param sem the semaphore to increment
+ * \param sem the semaphore to increment.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -387,7 +387,7 @@
 /**
  * Get the current value of a semaphore.
  *
- * \param sem the semaphore to query
+ * \param sem the semaphore to query.
  * \returns the current value of the semaphore.
  *
  * \since This function is available since SDL 2.0.0.
@@ -427,7 +427,7 @@
 /**
  * Destroy a condition variable.
  *
- * \param cond the condition variable to destroy
+ * \param cond the condition variable to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -442,7 +442,7 @@
 /**
  * Restart one of the threads that are waiting on the condition variable.
  *
- * \param cond the condition variable to signal
+ * \param cond the condition variable to signal.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -459,7 +459,7 @@
 /**
  * Restart all threads that are waiting on the condition variable.
  *
- * \param cond the condition variable to signal
+ * \param cond the condition variable to signal.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -486,8 +486,8 @@
  * This function is the equivalent of calling SDL_CondWaitTimeout() with a
  * time length of `SDL_MUTEX_MAXWAIT`.
  *
- * \param cond the condition variable to wait on
- * \param mutex the mutex used to coordinate thread access
+ * \param cond the condition variable to wait on.
+ * \param mutex the mutex used to coordinate thread access.
  * \returns 0 when it is signaled or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -512,10 +512,10 @@
  *
  * The mutex must be locked before calling this function.
  *
- * \param cond the condition variable to wait on
- * \param mutex the mutex used to coordinate thread access
+ * \param cond the condition variable to wait on.
+ * \param mutex the mutex used to coordinate thread access.
  * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT`
- *           to wait indefinitely
+ *           to wait indefinitely.
  * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if
  *          the condition is not signaled in the allotted time, or a negative
  *          error code on failure; call SDL_GetError() for more information.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengl.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengl.h
@@ -19,17 +19,11 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_opengl.h
+/*
+ * This is a simple file to encapsulate the OpenGL API headers.
  *
- *  This is a simple file to encapsulate the OpenGL API headers.
- */
-
-/**
- *  \def NO_SDL_GLEXT
- *
- *  Define this if you have your own version of glext.h and want to disable the
- *  version included in SDL_opengl.h.
+ * Define NO_SDL_GLEXT if you have your own version of glext.h and want
+ * to disable the version included in SDL_opengl.h.
  */
 
 #ifndef SDL_opengl_h_
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles.h
@@ -19,11 +19,10 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_opengles.h
- *
- *  This is a simple file to encapsulate the OpenGL ES 1.X API headers.
+/*
+ * This is a simple file to encapsulate the OpenGL ES 1.X API headers.
  */
+
 #include <SDL2/SDL_config.h>
 
 #ifdef __IPHONEOS__
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2.h
@@ -19,11 +19,10 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_opengles2.h
- *
- *  This is a simple file to encapsulate the OpenGL ES 2.0 API headers.
+/*
+ * This is a simple file to encapsulate the OpenGL ES 2.0 API headers.
  */
+
 #include <SDL2/SDL_config.h>
 
 #if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS)
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_pixels.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_pixels.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_pixels.h
+ * # CategoryPixels
  *
- *  Header for the enumerated pixel format definitions.
+ * Header for the enumerated pixel format definitions.
  */
 
 #ifndef SDL_pixels_h_
@@ -320,9 +320,10 @@
 } SDL_PixelFormatEnum;
 
 /**
- * The bits of this structure can be directly reinterpreted as an integer-packed
- * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888
- * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems).
+ * The bits of this structure can be directly reinterpreted as an
+ * integer-packed color which uses the SDL_PIXELFORMAT_RGBA32 format
+ * (SDL_PIXELFORMAT_ABGR8888 on little-endian systems and
+ * SDL_PIXELFORMAT_RGBA8888 on big-endian systems).
  */
 typedef struct SDL_Color
 {
@@ -342,7 +343,30 @@
 } SDL_Palette;
 
 /**
- *  \note Everything in the pixel format structure is read-only.
+ * A structure that contains pixel format information.
+ *
+ * Everything in the pixel format structure is read-only.
+ *
+ * A pixel format has either a palette or masks. If a palette is used `Rmask`,
+ * `Gmask`, `Bmask`, and `Amask` will be 0.
+ *
+ * An SDL_PixelFormat describes the format of the pixel data stored at the
+ * `pixels` field of an SDL_Surface. Every surface stores an SDL_PixelFormat
+ * in the `format` field.
+ *
+ * If you wish to do pixel level modifications on a surface, then
+ * understanding how SDL stores its color information is essential.
+ *
+ * For information on modern pixel color spaces, see the following Wikipedia
+ * article: http://en.wikipedia.org/wiki/RGBA_color_space
+ *
+ * \sa SDL_ConvertSurface
+ * \sa SDL_GetRGB
+ * \sa SDL_GetRGBA
+ * \sa SDL_MapRGB
+ * \sa SDL_MapRGBA
+ * \sa SDL_AllocFormat
+ * \sa SDL_FreeFormat
  */
 typedef struct SDL_PixelFormat
 {
@@ -370,7 +394,7 @@
 /**
  * Get the human readable name of a pixel format.
  *
- * \param format the pixel format to query
+ * \param format the pixel format to query.
  * \returns the human readable name of the specified pixel format or
  *          `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized.
  *
@@ -381,12 +405,12 @@
 /**
  * Convert one of the enumerated pixel formats to a bpp value and RGBA masks.
  *
- * \param format one of the SDL_PixelFormatEnum values
- * \param bpp a bits per pixel value; usually 15, 16, or 32
- * \param Rmask a pointer filled in with the red mask for the format
- * \param Gmask a pointer filled in with the green mask for the format
- * \param Bmask a pointer filled in with the blue mask for the format
- * \param Amask a pointer filled in with the alpha mask for the format
+ * \param format one of the SDL_PixelFormatEnum values.
+ * \param bpp a bits per pixel value; usually 15, 16, or 32.
+ * \param Rmask a pointer filled in with the red mask for the format.
+ * \param Gmask a pointer filled in with the green mask for the format.
+ * \param Bmask a pointer filled in with the blue mask for the format.
+ * \param Amask a pointer filled in with the alpha mask for the format.
  * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't
  *          possible; call SDL_GetError() for more information.
  *
@@ -407,12 +431,12 @@
  * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't
  * possible.
  *
- * \param bpp a bits per pixel value; usually 15, 16, or 32
- * \param Rmask the red mask for the format
- * \param Gmask the green mask for the format
- * \param Bmask the blue mask for the format
- * \param Amask the alpha mask for the format
- * \returns one of the SDL_PixelFormatEnum values
+ * \param bpp a bits per pixel value; usually 15, 16, or 32.
+ * \param Rmask the red mask for the format.
+ * \param Gmask the green mask for the format.
+ * \param Bmask the blue mask for the format.
+ * \param Amask the alpha mask for the format.
+ * \returns one of the SDL_PixelFormatEnum values.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -431,7 +455,7 @@
  * allocated), and hence should not be modified, especially the palette. Weird
  * errors such as `Blit combination not supported` may occur.
  *
- * \param pixel_format one of the SDL_PixelFormatEnum values
+ * \param pixel_format one of the SDL_PixelFormatEnum values.
  * \returns the new SDL_PixelFormat structure or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -444,7 +468,7 @@
 /**
  * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat().
  *
- * \param format the SDL_PixelFormat structure to free
+ * \param format the SDL_PixelFormat structure to free.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -457,7 +481,7 @@
  *
  * The palette entries are initialized to white.
  *
- * \param ncolors represents the number of color entries in the color palette
+ * \param ncolors represents the number of color entries in the color palette.
  * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if
  *          there wasn't enough memory); call SDL_GetError() for more
  *          information.
@@ -471,8 +495,8 @@
 /**
  * Set the palette for a pixel format structure.
  *
- * \param format the SDL_PixelFormat structure that will use the palette
- * \param palette the SDL_Palette structure that will be used
+ * \param format the SDL_PixelFormat structure that will use the palette.
+ * \param palette the SDL_Palette structure that will be used.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -487,10 +511,10 @@
 /**
  * Set a range of colors in a palette.
  *
- * \param palette the SDL_Palette structure to modify
- * \param colors an array of SDL_Color structures to copy into the palette
- * \param firstcolor the index of the first palette entry to modify
- * \param ncolors the number of entries to modify
+ * \param palette the SDL_Palette structure to modify.
+ * \param colors an array of SDL_Color structures to copy into the palette.
+ * \param firstcolor the index of the first palette entry to modify.
+ * \param ncolors the number of entries to modify.
  * \returns 0 on success or a negative error code if not all of the colors
  *          could be set; call SDL_GetError() for more information.
  *
@@ -506,7 +530,7 @@
 /**
  * Free a palette created with SDL_AllocPalette().
  *
- * \param palette the SDL_Palette structure to be freed
+ * \param palette the SDL_Palette structure to be freed.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -532,11 +556,11 @@
  * format the return value can be assigned to a Uint16, and similarly a Uint8
  * for an 8-bpp format).
  *
- * \param format an SDL_PixelFormat structure describing the pixel format
- * \param r the red component of the pixel in the range 0-255
- * \param g the green component of the pixel in the range 0-255
- * \param b the blue component of the pixel in the range 0-255
- * \returns a pixel value
+ * \param format an SDL_PixelFormat structure describing the pixel format.
+ * \param r the red component of the pixel in the range 0-255.
+ * \param g the green component of the pixel in the range 0-255.
+ * \param b the blue component of the pixel in the range 0-255.
+ * \returns a pixel value.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -566,12 +590,12 @@
  * for an 8-bpp format).
  *
  * \param format an SDL_PixelFormat structure describing the format of the
- *               pixel
- * \param r the red component of the pixel in the range 0-255
- * \param g the green component of the pixel in the range 0-255
- * \param b the blue component of the pixel in the range 0-255
- * \param a the alpha component of the pixel in the range 0-255
- * \returns a pixel value
+ *               pixel.
+ * \param r the red component of the pixel in the range 0-255.
+ * \param g the green component of the pixel in the range 0-255.
+ * \param b the blue component of the pixel in the range 0-255.
+ * \param a the alpha component of the pixel in the range 0-255.
+ * \returns a pixel value.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -591,12 +615,12 @@
  * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff,
  * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]).
  *
- * \param pixel a pixel value
+ * \param pixel a pixel value.
  * \param format an SDL_PixelFormat structure describing the format of the
- *               pixel
- * \param r a pointer filled in with the red component
- * \param g a pointer filled in with the green component
- * \param b a pointer filled in with the blue component
+ *               pixel.
+ * \param r a pointer filled in with the red component.
+ * \param g a pointer filled in with the green component.
+ * \param b a pointer filled in with the blue component.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -619,13 +643,13 @@
  * If the surface has no alpha component, the alpha will be returned as 0xff
  * (100% opaque).
  *
- * \param pixel a pixel value
+ * \param pixel a pixel value.
  * \param format an SDL_PixelFormat structure describing the format of the
- *               pixel
- * \param r a pointer filled in with the red component
- * \param g a pointer filled in with the green component
- * \param b a pointer filled in with the blue component
- * \param a a pointer filled in with the alpha component
+ *               pixel.
+ * \param r a pointer filled in with the red component.
+ * \param g a pointer filled in with the green component.
+ * \param b a pointer filled in with the blue component.
+ * \param a a pointer filled in with the alpha component.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -641,8 +665,8 @@
 /**
  * Calculate a 256 entry gamma ramp for a gamma value.
  *
- * \param gamma a gamma value where 0.0 is black and 1.0 is identity
- * \param ramp an array of 256 values filled in with the gamma ramp
+ * \param gamma a gamma value where 0.0 is black and 1.0 is identity.
+ * \param ramp an array of 256 values filled in with the gamma ramp.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_platform.h
+ * # CategoryPlatform
  *
- *  Try to get a standard set of platform defines.
+ * Try to get a standard set of platform defines.
  */
 
 #ifndef SDL_platform_h_
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_power.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_power.h
@@ -23,9 +23,9 @@
 #define SDL_power_h_
 
 /**
- *  \file SDL_power.h
+ * # CategoryPower
  *
- *  Header for the SDL power management routines.
+ * Header for the SDL power management routines.
  */
 
 #include <SDL2/SDL_stdinc.h>
@@ -37,9 +37,9 @@
 #endif
 
 /**
- *  The basic state for the system's power supply.
+ * The basic state for the system's power supply.
  */
-typedef enum
+typedef enum SDL_PowerState
 {
     SDL_POWERSTATE_UNKNOWN,      /**< cannot determine power status */
     SDL_POWERSTATE_ON_BATTERY,   /**< Not plugged in, running on the battery */
@@ -66,10 +66,10 @@
  *
  * \param seconds seconds of battery life left, you can pass a NULL here if
  *                you don't care, will return -1 if we can't determine a
- *                value, or we're not running on a battery
+ *                value, or we're not running on a battery.
  * \param percent percentage of battery life left, between 0 and 100, you can
  *                pass a NULL here if you don't care, will return -1 if we
- *                can't determine a value, or we're not running on a battery
+ *                can't determine a value, or we're not running on a battery.
  * \returns an SDL_PowerState enum representing the current battery state.
  *
  * \since This function is available since SDL 2.0.0.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_quit.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_quit.h
@@ -20,9 +20,20 @@
 */
 
 /**
- *  \file SDL_quit.h
+ * # CategoryQuit
  *
- *  Include file for SDL quit event handling.
+ * An SDL_QUIT event is generated when the user tries to close the application
+ * window. If it is ignored or filtered out, the window will remain open. If
+ * it is not ignored or filtered, it is queued normally and the window is
+ * allowed to close. When the window is closed, screen updates will complete,
+ * but have no effect.
+ *
+ * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) and
+ * SIGTERM (system termination request), if handlers do not already exist,
+ * that generate SDL_QUIT events as well. There is no way to determine the
+ * cause of an SDL_QUIT event, but setting a signal handler in your
+ * application will override the default generation of quit events for that
+ * signal.
  */
 
 #ifndef SDL_quit_h_
@@ -30,25 +41,6 @@
 
 #include <SDL2/SDL_stdinc.h>
 #include <SDL2/SDL_error.h>
-
-/**
- *  \file SDL_quit.h
- *
- *  An ::SDL_QUIT event is generated when the user tries to close the application
- *  window.  If it is ignored or filtered out, the window will remain open.
- *  If it is not ignored or filtered, it is queued normally and the window
- *  is allowed to close.  When the window is closed, screen updates will
- *  complete, but have no effect.
- *
- *  SDL_Init() installs signal handlers for SIGINT (keyboard interrupt)
- *  and SIGTERM (system termination request), if handlers do not already
- *  exist, that generate ::SDL_QUIT events as well.  There is no way
- *  to determine the cause of an ::SDL_QUIT event, but setting a signal
- *  handler in your application will override the default generation of
- *  quit events for that signal.
- *
- *  \sa SDL_Quit()
- */
 
 /* There are no functions directly affecting the quit event */
 
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rect.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rect.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_rect.h
+ * # CategoryRect
  *
- *  Header file for SDL_rect definition and management functions.
+ * Header file for SDL_rect definition and management functions.
  */
 
 #ifndef SDL_rect_h_
@@ -135,8 +135,8 @@
  *
  * If either pointer is NULL the function will return SDL_FALSE.
  *
- * \param A an SDL_Rect structure representing the first rectangle
- * \param B an SDL_Rect structure representing the second rectangle
+ * \param A an SDL_Rect structure representing the first rectangle.
+ * \param B an SDL_Rect structure representing the second rectangle.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -151,10 +151,10 @@
  *
  * If `result` is NULL then this function will return SDL_FALSE.
  *
- * \param A an SDL_Rect structure representing the first rectangle
- * \param B an SDL_Rect structure representing the second rectangle
+ * \param A an SDL_Rect structure representing the first rectangle.
+ * \param B an SDL_Rect structure representing the second rectangle.
  * \param result an SDL_Rect structure filled in with the intersection of
- *               rectangles `A` and `B`
+ *               rectangles `A` and `B`.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -168,10 +168,10 @@
 /**
  * Calculate the union of two rectangles.
  *
- * \param A an SDL_Rect structure representing the first rectangle
- * \param B an SDL_Rect structure representing the second rectangle
+ * \param A an SDL_Rect structure representing the first rectangle.
+ * \param B an SDL_Rect structure representing the second rectangle.
  * \param result an SDL_Rect structure filled in with the union of rectangles
- *               `A` and `B`
+ *               `A` and `B`.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -186,11 +186,11 @@
  * considered.
  *
  * \param points an array of SDL_Point structures representing points to be
- *               enclosed
- * \param count the number of structures in the `points` array
- * \param clip an SDL_Rect used for clipping or NULL to enclose all points
+ *               enclosed.
+ * \param count the number of structures in the `points` array.
+ * \param clip an SDL_Rect used for clipping or NULL to enclose all points.
  * \param result an SDL_Rect structure filled in with the minimal enclosing
- *               rectangle
+ *               rectangle.
  * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the
  *          points were outside of the clipping rectangle.
  *
@@ -210,11 +210,11 @@
  * both ends will be clipped to the boundary of the rectangle and the new
  * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary.
  *
- * \param rect an SDL_Rect structure representing the rectangle to intersect
- * \param X1 a pointer to the starting X-coordinate of the line
- * \param Y1 a pointer to the starting Y-coordinate of the line
- * \param X2 a pointer to the ending X-coordinate of the line
- * \param Y2 a pointer to the ending Y-coordinate of the line
+ * \param rect an SDL_Rect structure representing the rectangle to intersect.
+ * \param X1 a pointer to the starting X-coordinate of the line.
+ * \param Y1 a pointer to the starting Y-coordinate of the line.
+ * \param X2 a pointer to the ending X-coordinate of the line.
+ * \param Y2 a pointer to the ending Y-coordinate of the line.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -274,8 +274,8 @@
  *
  * If either pointer is NULL the function will return SDL_FALSE.
  *
- * \param A an SDL_FRect structure representing the first rectangle
- * \param B an SDL_FRect structure representing the second rectangle
+ * \param A an SDL_FRect structure representing the first rectangle.
+ * \param B an SDL_FRect structure representing the second rectangle.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.22.
@@ -290,10 +290,10 @@
  *
  * If `result` is NULL then this function will return SDL_FALSE.
  *
- * \param A an SDL_FRect structure representing the first rectangle
- * \param B an SDL_FRect structure representing the second rectangle
+ * \param A an SDL_FRect structure representing the first rectangle.
+ * \param B an SDL_FRect structure representing the second rectangle.
  * \param result an SDL_FRect structure filled in with the intersection of
- *               rectangles `A` and `B`
+ *               rectangles `A` and `B`.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.22.
@@ -307,10 +307,10 @@
 /**
  * Calculate the union of two rectangles with float precision.
  *
- * \param A an SDL_FRect structure representing the first rectangle
- * \param B an SDL_FRect structure representing the second rectangle
+ * \param A an SDL_FRect structure representing the first rectangle.
+ * \param B an SDL_FRect structure representing the second rectangle.
  * \param result an SDL_FRect structure filled in with the union of rectangles
- *               `A` and `B`
+ *               `A` and `B`.
  *
  * \since This function is available since SDL 2.0.22.
  */
@@ -326,11 +326,11 @@
  * considered.
  *
  * \param points an array of SDL_FPoint structures representing points to be
- *               enclosed
- * \param count the number of structures in the `points` array
- * \param clip an SDL_FRect used for clipping or NULL to enclose all points
+ *               enclosed.
+ * \param count the number of structures in the `points` array.
+ * \param clip an SDL_FRect used for clipping or NULL to enclose all points.
  * \param result an SDL_FRect structure filled in with the minimal enclosing
- *               rectangle
+ *               rectangle.
  * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the
  *          points were outside of the clipping rectangle.
  *
@@ -351,11 +351,11 @@
  * both ends will be clipped to the boundary of the rectangle and the new
  * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary.
  *
- * \param rect an SDL_FRect structure representing the rectangle to intersect
- * \param X1 a pointer to the starting X-coordinate of the line
- * \param Y1 a pointer to the starting Y-coordinate of the line
- * \param X2 a pointer to the ending X-coordinate of the line
- * \param Y2 a pointer to the ending Y-coordinate of the line
+ * \param rect an SDL_FRect structure representing the rectangle to intersect.
+ * \param X1 a pointer to the starting X-coordinate of the line.
+ * \param Y1 a pointer to the starting Y-coordinate of the line.
+ * \param X2 a pointer to the ending X-coordinate of the line.
+ * \param Y2 a pointer to the ending Y-coordinate of the line.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.22.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_render.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_render.h
@@ -20,29 +20,30 @@
 */
 
 /**
- *  \file SDL_render.h
+ * # CategoryRender
  *
- *  Header file for SDL 2D rendering functions.
+ * Header file for SDL 2D rendering functions.
  *
- *  This API supports the following features:
- *      * single pixel points
- *      * single pixel lines
- *      * filled rectangles
- *      * texture images
+ * This API supports the following features:
  *
- *  The primitives may be drawn in opaque, blended, or additive modes.
+ * - single pixel points
+ * - single pixel lines
+ * - filled rectangles
+ * - texture images
  *
- *  The texture images may be drawn in opaque, blended, or additive modes.
- *  They can have an additional color tint or alpha modulation applied to
- *  them, and may also be stretched with linear interpolation.
+ * The primitives may be drawn in opaque, blended, or additive modes.
  *
- *  This API is designed to accelerate simple 2D operations. You may
- *  want more functionality such as polygons and particle effects and
- *  in that case you should use SDL's OpenGL/Direct3D support or one
- *  of the many good 3D engines.
+ * The texture images may be drawn in opaque, blended, or additive modes. They
+ * can have an additional color tint or alpha modulation applied to them, and
+ * may also be stretched with linear interpolation.
  *
- *  These functions must be called from the main thread.
- *  See this bug for details: https://github.com/libsdl-org/SDL/issues/986
+ * This API is designed to accelerate simple 2D operations. You may want more
+ * functionality such as polygons and particle effects and in that case you
+ * should use SDL's OpenGL/Direct3D support or one of the many good 3D
+ * engines.
+ *
+ * These functions must be called from the main thread. See this bug for
+ * details: https://github.com/libsdl-org/SDL/issues/986
  */
 
 #ifndef SDL_render_h_
@@ -61,7 +62,7 @@
 /**
  * Flags used when creating a rendering context
  */
-typedef enum
+typedef enum SDL_RendererFlags
 {
     SDL_RENDERER_SOFTWARE = 0x00000001,         /**< The renderer is a software fallback */
     SDL_RENDERER_ACCELERATED = 0x00000002,      /**< The renderer uses hardware
@@ -78,7 +79,7 @@
 typedef struct SDL_RendererInfo
 {
     const char *name;           /**< The name of the renderer */
-    Uint32 flags;               /**< Supported ::SDL_RendererFlags */
+    Uint32 flags;               /**< Supported SDL_RendererFlags */
     Uint32 num_texture_formats; /**< The number of available texture formats */
     Uint32 texture_formats[16]; /**< The available texture formats */
     int max_texture_width;      /**< The maximum texture width */
@@ -86,7 +87,7 @@
 } SDL_RendererInfo;
 
 /**
- *  Vertex structure
+ * Vertex structure
  */
 typedef struct SDL_Vertex
 {
@@ -98,7 +99,7 @@
 /**
  * The scaling mode for a texture.
  */
-typedef enum
+typedef enum SDL_ScaleMode
 {
     SDL_ScaleModeNearest, /**< nearest pixel sampling */
     SDL_ScaleModeLinear,  /**< linear filtering */
@@ -108,7 +109,7 @@
 /**
  * The access pattern allowed for a texture.
  */
-typedef enum
+typedef enum SDL_TextureAccess
 {
     SDL_TEXTUREACCESS_STATIC,    /**< Changes rarely, not lockable */
     SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */
@@ -118,7 +119,7 @@
 /**
  * The texture channel modulation used in SDL_RenderCopy().
  */
-typedef enum
+typedef enum SDL_TextureModulate
 {
     SDL_TEXTUREMODULATE_NONE = 0x00000000,     /**< No modulation */
     SDL_TEXTUREMODULATE_COLOR = 0x00000001,    /**< srcC = srcC * color */
@@ -128,7 +129,7 @@
 /**
  * Flip constants for SDL_RenderCopyEx
  */
-typedef enum
+typedef enum SDL_RendererFlip
 {
     SDL_FLIP_NONE = 0x00000000,     /**< Do not flip */
     SDL_FLIP_HORIZONTAL = 0x00000001,    /**< flip horizontally */
@@ -171,9 +172,9 @@
 /**
  * Get info about a specific 2D rendering driver for the current display.
  *
- * \param index the index of the driver to query information about
+ * \param index the index of the driver to query information about.
  * \param info an SDL_RendererInfo structure to be filled with information on
- *             the rendering driver
+ *             the rendering driver.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -188,12 +189,12 @@
 /**
  * Create a window and default renderer.
  *
- * \param width the width of the window
- * \param height the height of the window
+ * \param width the width of the window.
+ * \param height the height of the window.
  * \param window_flags the flags used to create the window (see
- *                     SDL_CreateWindow())
- * \param window a pointer filled with the window, or NULL on error
- * \param renderer a pointer filled with the renderer, or NULL on error
+ *                     SDL_CreateWindow()).
+ * \param window a pointer filled with the window, or NULL on error.
+ * \param renderer a pointer filled with the renderer, or NULL on error.
  * \returns 0 on success, or -1 on error; call SDL_GetError() for more
  *          information.
  *
@@ -210,10 +211,10 @@
 /**
  * Create a 2D rendering context for a window.
  *
- * \param window the window where rendering is displayed
+ * \param window the window where rendering is displayed.
  * \param index the index of the rendering driver to initialize, or -1 to
- *              initialize the first one supporting the requested flags
- * \param flags 0, or one or more SDL_RendererFlags OR'd together
+ *              initialize the first one supporting the requested flags.
+ * \param flags 0, or one or more SDL_RendererFlags OR'd together.
  * \returns a valid rendering context or NULL if there was an error; call
  *          SDL_GetError() for more information.
  *
@@ -236,7 +237,7 @@
  * SDL_Window as the final destination and not an SDL_Surface.
  *
  * \param surface the SDL_Surface structure representing the surface where
- *                rendering is done
+ *                rendering is done.
  * \returns a valid rendering context or NULL if there was an error; call
  *          SDL_GetError() for more information.
  *
@@ -251,7 +252,7 @@
 /**
  * Get the renderer associated with a window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the rendering context on success or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -264,7 +265,7 @@
 /**
  * Get the window associated with a renderer.
  *
- * \param renderer the renderer to query
+ * \param renderer the renderer to query.
  * \returns the window on success or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -275,9 +276,9 @@
 /**
  * Get information about a rendering context.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param info an SDL_RendererInfo structure filled with information about the
- *             current renderer
+ *             current renderer.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -295,9 +296,9 @@
  * has more pixels than the window that contains it, so use this instead of
  * SDL_GetWindowSize() to decide how much drawing area you have.
  *
- * \param renderer the rendering context
- * \param w an int filled with the width
- * \param h an int filled with the height
+ * \param renderer the rendering context.
+ * \param w an int filled with the width.
+ * \param h an int filled with the height.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -314,11 +315,11 @@
  * You can set the texture scaling method by setting
  * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture.
  *
- * \param renderer the rendering context
- * \param format one of the enumerated values in SDL_PixelFormatEnum
- * \param access one of the enumerated values in SDL_TextureAccess
- * \param w the width of the texture in pixels
- * \param h the height of the texture in pixels
+ * \param renderer the rendering context.
+ * \param format one of the enumerated values in SDL_PixelFormatEnum.
+ * \param access one of the enumerated values in SDL_TextureAccess.
+ * \param w the width of the texture in pixels.
+ * \param h the height of the texture in pixels.
  * \returns a pointer to the created texture or NULL if no rendering context
  *          was active, the format was unsupported, or the width or height
  *          were out of range; call SDL_GetError() for more information.
@@ -347,9 +348,9 @@
  * format of the surface. Use SDL_QueryTexture() to query the pixel format of
  * the texture.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param surface the SDL_Surface structure containing pixel data used to fill
- *                the texture
+ *                the texture.
  * \returns the created texture or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -364,7 +365,7 @@
 /**
  * Query the attributes of a texture.
  *
- * \param texture the texture to query
+ * \param texture the texture to query.
  * \param format a pointer filled in with the raw format of the texture; the
  *               actual format may differ, but pixel transfers will use this
  *               format (one of the SDL_PixelFormatEnum values). This argument
@@ -399,10 +400,10 @@
  * Color modulation is not always supported by the renderer; it will return -1
  * if color modulation is not supported.
  *
- * \param texture the texture to update
- * \param r the red color value multiplied into copy operations
- * \param g the green color value multiplied into copy operations
- * \param b the blue color value multiplied into copy operations
+ * \param texture the texture to update.
+ * \param r the red color value multiplied into copy operations.
+ * \param g the green color value multiplied into copy operations.
+ * \param b the blue color value multiplied into copy operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -418,10 +419,10 @@
 /**
  * Get the additional color value multiplied into render copy operations.
  *
- * \param texture the texture to query
- * \param r a pointer filled in with the current red color value
- * \param g a pointer filled in with the current green color value
- * \param b a pointer filled in with the current blue color value
+ * \param texture the texture to query.
+ * \param r a pointer filled in with the current red color value.
+ * \param g a pointer filled in with the current green color value.
+ * \param b a pointer filled in with the current blue color value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -445,8 +446,8 @@
  * Alpha modulation is not always supported by the renderer; it will return -1
  * if alpha modulation is not supported.
  *
- * \param texture the texture to update
- * \param alpha the source alpha value multiplied into copy operations
+ * \param texture the texture to update.
+ * \param alpha the source alpha value multiplied into copy operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -461,8 +462,8 @@
 /**
  * Get the additional alpha value multiplied into render copy operations.
  *
- * \param texture the texture to query
- * \param alpha a pointer filled in with the current alpha value
+ * \param texture the texture to query.
+ * \param alpha a pointer filled in with the current alpha value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -480,8 +481,8 @@
  * If the blend mode is not supported, the closest supported mode is chosen
  * and this function returns -1.
  *
- * \param texture the texture to update
- * \param blendMode the SDL_BlendMode to use for texture blending
+ * \param texture the texture to update.
+ * \param blendMode the SDL_BlendMode to use for texture blending.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -496,8 +497,8 @@
 /**
  * Get the blend mode used for texture copy operations.
  *
- * \param texture the texture to query
- * \param blendMode a pointer filled in with the current SDL_BlendMode
+ * \param texture the texture to query.
+ * \param blendMode a pointer filled in with the current SDL_BlendMode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -579,12 +580,12 @@
  * While this function will work with streaming textures, for optimization
  * reasons you may not get the pixels back if you lock the texture afterward.
  *
- * \param texture the texture to update
+ * \param texture the texture to update.
  * \param rect an SDL_Rect structure representing the area to update, or NULL
- *             to update the entire texture
- * \param pixels the raw pixel data in the format of the texture
+ *             to update the entire texture.
+ * \param pixels the raw pixel data in the format of the texture.
  * \param pitch the number of bytes in a row of pixel data, including padding
- *              between lines
+ *              between lines.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -606,18 +607,18 @@
  * block of Y and U/V planes in the proper order, but this function is
  * available if your pixel data is not contiguous.
  *
- * \param texture the texture to update
+ * \param texture the texture to update.
  * \param rect a pointer to the rectangle of pixels to update, or NULL to
- *             update the entire texture
- * \param Yplane the raw pixel data for the Y plane
+ *             update the entire texture.
+ * \param Yplane the raw pixel data for the Y plane.
  * \param Ypitch the number of bytes between rows of pixel data for the Y
- *               plane
- * \param Uplane the raw pixel data for the U plane
+ *               plane.
+ * \param Uplane the raw pixel data for the U plane.
  * \param Upitch the number of bytes between rows of pixel data for the U
- *               plane
- * \param Vplane the raw pixel data for the V plane
+ *               plane.
+ * \param Vplane the raw pixel data for the V plane.
  * \param Vpitch the number of bytes between rows of pixel data for the V
- *               plane
+ *               plane.
  * \returns 0 on success or -1 if the texture is not valid; call
  *          SDL_GetError() for more information.
  *
@@ -638,7 +639,7 @@
  * block of NV12/21 planes in the proper order, but this function is available
  * if your pixel data is not contiguous.
  *
- * \param texture the texture to update
+ * \param texture the texture to update.
  * \param rect a pointer to the rectangle of pixels to update, or NULL to
  *             update the entire texture.
  * \param Yplane the raw pixel data for the Y plane.
@@ -668,13 +669,13 @@
  * changes.
  *
  * \param texture the texture to lock for access, which was created with
- *                `SDL_TEXTUREACCESS_STREAMING`
+ *                `SDL_TEXTUREACCESS_STREAMING`.
  * \param rect an SDL_Rect structure representing the area to lock for access;
- *             NULL to lock the entire texture
+ *             NULL to lock the entire texture.
  * \param pixels this is filled in with a pointer to the locked pixels,
- *               appropriately offset by the locked area
+ *               appropriately offset by the locked area.
  * \param pitch this is filled in with the pitch of the locked pixels; the
- *              pitch is the length of one row in bytes
+ *              pitch is the length of one row in bytes.
  * \returns 0 on success or a negative error code if the texture is not valid
  *          or was not created with `SDL_TEXTUREACCESS_STREAMING`; call
  *          SDL_GetError() for more information.
@@ -706,13 +707,13 @@
  * or SDL_DestroyTexture(). The caller should not free it.
  *
  * \param texture the texture to lock for access, which was created with
- *                `SDL_TEXTUREACCESS_STREAMING`
+ *                `SDL_TEXTUREACCESS_STREAMING`.
  * \param rect a pointer to the rectangle to lock for access. If the rect is
- *             NULL, the entire texture will be locked
+ *             NULL, the entire texture will be locked.
  * \param surface this is filled in with an SDL surface representing the
- *                locked area
+ *                locked area.
  * \returns 0 on success, or -1 if the texture is not valid or was not created
- *          with `SDL_TEXTUREACCESS_STREAMING`
+ *          with `SDL_TEXTUREACCESS_STREAMING`.
  *
  * \since This function is available since SDL 2.0.12.
  *
@@ -734,7 +735,7 @@
  * Which is to say: locking and immediately unlocking a texture can result in
  * corrupted textures, depending on the renderer in use.
  *
- * \param texture a texture locked by SDL_LockTexture()
+ * \param texture a texture locked by SDL_LockTexture().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -745,7 +746,7 @@
 /**
  * Determine whether a renderer supports the use of render targets.
  *
- * \param renderer the renderer that will be checked
+ * \param renderer the renderer that will be checked.
  * \returns SDL_TRUE if supported or SDL_FALSE if not.
  *
  * \since This function is available since SDL 2.0.0.
@@ -763,9 +764,12 @@
  *
  * The default render target is the window for which the renderer was created.
  * To stop rendering to a texture and render to the window again, call this
- * function with a NULL `texture`.
+ * function with a NULL `texture`. This will reset the renderer's viewport,
+ * clipping rectangle, and scaling settings to the state they were in before
+ * setting a non-NULL `texture` target, losing any changes made in the
+ * meantime.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param texture the targeted texture, which must be created with the
  *                `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the
  *                window instead of a texture.
@@ -785,7 +789,7 @@
  * The default render target is the window for which the renderer was created,
  * and is reported a NULL here.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \returns the current render target or NULL for the default render target.
  *
  * \since This function is available since SDL 2.0.0.
@@ -810,9 +814,9 @@
  * If this function results in scaling or subpixel drawing by the rendering
  * backend, it will be handled using the appropriate quality hints.
  *
- * \param renderer the renderer for which resolution should be set
- * \param w the width of the logical resolution
- * \param h the height of the logical resolution
+ * \param renderer the renderer for which resolution should be set.
+ * \param w the width of the logical resolution.
+ * \param h the height of the logical resolution.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -833,9 +837,9 @@
  * When using a target texture: Never return 0 for `w` and `h` at first. Then
  * it returns the logical width and height that are set.
  *
- * \param renderer a rendering context
- * \param w an int to be filled with the width
- * \param h an int to be filled with the height
+ * \param renderer a rendering context.
+ * \param w an int to be filled with the width.
+ * \param h an int to be filled with the height.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -850,8 +854,8 @@
  * when a resolution is between two multiples of a logical size, the viewport
  * size is rounded down to the lower multiple.
  *
- * \param renderer the renderer for which integer scaling should be set
- * \param enable enable or disable the integer scaling for rendering
+ * \param renderer the renderer for which integer scaling should be set.
+ * \param enable enable or disable the integer scaling for rendering.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -866,7 +870,7 @@
 /**
  * Get whether integer scales are forced for resolution-independent rendering.
  *
- * \param renderer the renderer from which integer scaling should be queried
+ * \param renderer the renderer from which integer scaling should be queried.
  * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on
  *          failure; call SDL_GetError() for more information.
  *
@@ -882,9 +886,9 @@
  * When the window is resized, the viewport is reset to fill the entire new
  * window size.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect the SDL_Rect structure representing the drawing area, or NULL
- *             to set the viewport to the entire target
+ *             to set the viewport to the entire target.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -898,8 +902,8 @@
 /**
  * Get the drawing area for the current target.
  *
- * \param renderer the rendering context
- * \param rect an SDL_Rect structure filled in with the current drawing area
+ * \param renderer the rendering context.
+ * \param rect an SDL_Rect structure filled in with the current drawing area.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -912,9 +916,9 @@
  * Set the clip rectangle for rendering on the specified target.
  *
  * \param renderer the rendering context for which clip rectangle should be
- *                 set
+ *                 set.
  * \param rect an SDL_Rect structure representing the clip area, relative to
- *             the viewport, or NULL to disable clipping
+ *             the viewport, or NULL to disable clipping.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -930,9 +934,9 @@
  * Get the clip rectangle for the current target.
  *
  * \param renderer the rendering context from which clip rectangle should be
- *                 queried
+ *                 queried.
  * \param rect an SDL_Rect structure filled in with the current clipping area
- *             or an empty rectangle if clipping is disabled
+ *             or an empty rectangle if clipping is disabled.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -945,7 +949,7 @@
 /**
  * Get whether clipping is enabled on the given renderer.
  *
- * \param renderer the renderer from which clip state should be queried
+ * \param renderer the renderer from which clip state should be queried.
  * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call
  *          SDL_GetError() for more information.
  *
@@ -968,9 +972,9 @@
  * will be handled using the appropriate quality hints. For best results use
  * integer scaling factors.
  *
- * \param renderer a rendering context
- * \param scaleX the horizontal scaling factor
- * \param scaleY the vertical scaling factor
+ * \param renderer a rendering context.
+ * \param scaleX the horizontal scaling factor.
+ * \param scaleY the vertical scaling factor.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -985,9 +989,9 @@
 /**
  * Get the drawing scale for the current target.
  *
- * \param renderer the renderer from which drawing scale should be queried
- * \param scaleX a pointer filled in with the horizontal scaling factor
- * \param scaleY a pointer filled in with the vertical scaling factor
+ * \param renderer the renderer from which drawing scale should be queried.
+ * \param scaleX a pointer filled in with the horizontal scaling factor.
+ * \param scaleY a pointer filled in with the vertical scaling factor.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1004,11 +1008,11 @@
  * and logical renderer size set
  *
  * \param renderer the renderer from which the logical coordinates should be
- *                 calculated
- * \param windowX the real X coordinate in the window
- * \param windowY the real Y coordinate in the window
- * \param logicalX the pointer filled with the logical x coordinate
- * \param logicalY the pointer filled with the logical y coordinate
+ *                 calculated.
+ * \param windowX the real X coordinate in the window.
+ * \param windowY the real Y coordinate in the window.
+ * \param logicalX the pointer filled with the logical x coordinate.
+ * \param logicalY the pointer filled with the logical y coordinate.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1030,11 +1034,11 @@
  * and logical renderer size set
  *
  * \param renderer the renderer from which the window coordinates should be
- *                 calculated
- * \param logicalX the logical x coordinate
- * \param logicalY the logical y coordinate
- * \param windowX the pointer filled with the real X coordinate in the window
- * \param windowY the pointer filled with the real Y coordinate in the window
+ *                 calculated.
+ * \param logicalX the logical x coordinate.
+ * \param logicalY the logical y coordinate.
+ * \param windowX the pointer filled with the real X coordinate in the window.
+ * \param windowY the pointer filled with the real Y coordinate in the window.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1053,13 +1057,13 @@
  * Set the color for drawing or filling rectangles, lines, and points, and for
  * SDL_RenderClear().
  *
- * \param renderer the rendering context
- * \param r the red value used to draw on the rendering target
- * \param g the green value used to draw on the rendering target
- * \param b the blue value used to draw on the rendering target
+ * \param renderer the rendering context.
+ * \param r the red value used to draw on the rendering target.
+ * \param g the green value used to draw on the rendering target.
+ * \param b the blue value used to draw on the rendering target.
  * \param a the alpha value used to draw on the rendering target; usually
  *          `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to
- *          specify how the alpha channel is used
+ *          specify how the alpha channel is used.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1083,15 +1087,15 @@
 /**
  * Get the color used for drawing operations (Rect, Line and Clear).
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param r a pointer filled in with the red value used to draw on the
- *          rendering target
+ *          rendering target.
  * \param g a pointer filled in with the green value used to draw on the
- *          rendering target
+ *          rendering target.
  * \param b a pointer filled in with the blue value used to draw on the
- *          rendering target
+ *          rendering target.
  * \param a a pointer filled in with the alpha value used to draw on the
- *          rendering target; usually `SDL_ALPHA_OPAQUE` (255)
+ *          rendering target; usually `SDL_ALPHA_OPAQUE` (255).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1108,8 +1112,8 @@
  *
  * If the blend mode is not supported, the closest supported mode is chosen.
  *
- * \param renderer the rendering context
- * \param blendMode the SDL_BlendMode to use for blending
+ * \param renderer the rendering context.
+ * \param blendMode the SDL_BlendMode to use for blending.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1131,8 +1135,8 @@
 /**
  * Get the blend mode used for drawing operations.
  *
- * \param renderer the rendering context
- * \param blendMode a pointer filled in with the current SDL_BlendMode
+ * \param renderer the rendering context.
+ * \param blendMode a pointer filled in with the current SDL_BlendMode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1149,7 +1153,7 @@
  * This function clears the entire rendering target, ignoring the viewport and
  * the clip rectangle.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1165,9 +1169,9 @@
  * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple,
  * use SDL_RenderDrawPoints() instead.
  *
- * \param renderer the rendering context
- * \param x the x coordinate of the point
- * \param y the y coordinate of the point
+ * \param renderer the rendering context.
+ * \param x the x coordinate of the point.
+ * \param y the y coordinate of the point.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1190,10 +1194,10 @@
 /**
  * Draw multiple points on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param points an array of SDL_Point structures that represent the points to
- *               draw
- * \param count the number of points to draw
+ *               draw.
+ * \param count the number of points to draw.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1220,11 +1224,11 @@
  * SDL_RenderDrawLine() draws the line to include both end points. If you want
  * to draw multiple, connecting lines use SDL_RenderDrawLines() instead.
  *
- * \param renderer the rendering context
- * \param x1 the x coordinate of the start point
- * \param y1 the y coordinate of the start point
- * \param x2 the x coordinate of the end point
- * \param y2 the y coordinate of the end point
+ * \param renderer the rendering context.
+ * \param x1 the x coordinate of the start point.
+ * \param y1 the y coordinate of the start point.
+ * \param x2 the x coordinate of the end point.
+ * \param y2 the y coordinate of the end point.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1247,10 +1251,10 @@
 /**
  * Draw a series of connected lines on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param points an array of SDL_Point structures representing points along
- *               the lines
- * \param count the number of points, drawing count-1 lines
+ *               the lines.
+ * \param count the number of points, drawing count-1 lines.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1274,9 +1278,9 @@
 /**
  * Draw a rectangle on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect an SDL_Rect structure representing the rectangle to draw, or
- *             NULL to outline the entire rendering target
+ *             NULL to outline the entire rendering target.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1299,10 +1303,10 @@
 /**
  * Draw some number of rectangles on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rects an array of SDL_Rect structures representing the rectangles to
- *              be drawn
- * \param count the number of rectangles
+ *              be drawn.
+ * \param count the number of rectangles.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1330,9 +1334,9 @@
  * color's alpha value is ignored unless blending is enabled with the
  * appropriate call to SDL_SetRenderDrawBlendMode().
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect the SDL_Rect structure representing the rectangle to fill, or
- *             NULL for the entire rendering target
+ *             NULL for the entire rendering target.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1356,10 +1360,10 @@
  * Fill some number of rectangles on the current rendering target with the
  * drawing color.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rects an array of SDL_Rect structures representing the rectangles to
- *              be filled
- * \param count the number of rectangles
+ *              be filled.
+ * \param count the number of rectangles.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1390,12 +1394,13 @@
  * The texture alpha is affected based on its alpha modulation set by
  * SDL_SetTextureAlphaMod().
  *
- * \param renderer the rendering context
- * \param texture the source texture
- * \param srcrect the source SDL_Rect structure or NULL for the entire texture
+ * \param renderer the rendering context.
+ * \param texture the source texture.
+ * \param srcrect the source SDL_Rect structure or NULL for the entire
+ *                texture.
  * \param dstrect the destination SDL_Rect structure or NULL for the entire
  *                rendering target; the texture will be stretched to fill the
- *                given rectangle
+ *                given rectangle.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1428,18 +1433,19 @@
  * The texture alpha is affected based on its alpha modulation set by
  * SDL_SetTextureAlphaMod().
  *
- * \param renderer the rendering context
- * \param texture the source texture
- * \param srcrect the source SDL_Rect structure or NULL for the entire texture
+ * \param renderer the rendering context.
+ * \param texture the source texture.
+ * \param srcrect the source SDL_Rect structure or NULL for the entire
+ *                texture.
  * \param dstrect the destination SDL_Rect structure or NULL for the entire
- *                rendering target
+ *                rendering target.
  * \param angle an angle in degrees that indicates the rotation that will be
- *              applied to dstrect, rotating it in a clockwise direction
+ *              applied to dstrect, rotating it in a clockwise direction.
  * \param center a pointer to a point indicating the point around which
  *               dstrect will be rotated (if NULL, rotation will be done
- *               around `dstrect.w / 2`, `dstrect.h / 2`)
+ *               around `dstrect.w / 2`, `dstrect.h / 2`).
  * \param flip a SDL_RendererFlip value stating which flipping actions should
- *             be performed on the texture
+ *             be performed on the texture.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1465,7 +1471,7 @@
  * \param renderer The renderer which should draw a point.
  * \param x The x coordinate of the point.
  * \param y The y coordinate of the point.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1476,9 +1482,9 @@
  * Draw multiple points on the current rendering target at subpixel precision.
  *
  * \param renderer The renderer which should draw multiple points.
- * \param points The points to draw
- * \param count The number of points to draw
- * \return 0 on success, or -1 on error
+ * \param points The points to draw.
+ * \param count The number of points to draw.
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1494,7 +1500,7 @@
  * \param y1 The y coordinate of the start point.
  * \param x2 The x coordinate of the end point.
  * \param y2 The y coordinate of the end point.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1506,9 +1512,9 @@
  * subpixel precision.
  *
  * \param renderer The renderer which should draw multiple lines.
- * \param points The points along the lines
- * \param count The number of points, drawing count-1 lines
- * \return 0 on success, or -1 on error
+ * \param points The points along the lines.
+ * \param count The number of points, drawing count-1 lines.
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1522,7 +1528,7 @@
  * \param renderer The renderer which should draw a rectangle.
  * \param rect A pointer to the destination rectangle, or NULL to outline the
  *             entire rendering target.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1536,7 +1542,7 @@
  * \param renderer The renderer which should draw multiple rectangles.
  * \param rects A pointer to an array of destination rectangles.
  * \param count The number of rectangles.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1551,7 +1557,7 @@
  * \param renderer The renderer which should fill a rectangle.
  * \param rect A pointer to the destination rectangle, or NULL for the entire
  *             rendering target.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1565,7 +1571,7 @@
  * \param renderer The renderer which should fill multiple rectangles.
  * \param rects A pointer to an array of destination rectangles.
  * \param count The number of rectangles.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1583,7 +1589,7 @@
  *                texture.
  * \param dstrect A pointer to the destination rectangle, or NULL for the
  *                entire rendering target.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1603,13 +1609,13 @@
  * \param dstrect A pointer to the destination rectangle, or NULL for the
  *                entire rendering target.
  * \param angle An angle in degrees that indicates the rotation that will be
- *              applied to dstrect, rotating it in a clockwise direction
+ *              applied to dstrect, rotating it in a clockwise direction.
  * \param center A pointer to a point indicating the point around which
  *               dstrect will be rotated (if NULL, rotation will be done
  *               around dstrect.w/2, dstrect.h/2).
  * \param flip An SDL_RendererFlip value stating which flipping actions should
- *             be performed on the texture
- * \return 0 on success, or -1 on error
+ *             be performed on the texture.
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1634,7 +1640,7 @@
  *                array, if NULL all vertices will be rendered in sequential
  *                order.
  * \param num_indices Number of indices.
- * \return 0 on success, or -1 if the operation is not supported
+ * \return 0 on success, or -1 if the operation is not supported.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1653,18 +1659,18 @@
  *
  * \param renderer The rendering context.
  * \param texture (optional) The SDL texture to use.
- * \param xy Vertex positions
- * \param xy_stride Byte size to move from one element to the next element
- * \param color Vertex colors (as SDL_Color)
- * \param color_stride Byte size to move from one element to the next element
- * \param uv Vertex normalized texture coordinates
- * \param uv_stride Byte size to move from one element to the next element
+ * \param xy Vertex positions.
+ * \param xy_stride Byte size to move from one element to the next element.
+ * \param color Vertex colors (as SDL_Color).
+ * \param color_stride Byte size to move from one element to the next element.
+ * \param uv Vertex normalized texture coordinates.
+ * \param uv_stride Byte size to move from one element to the next element.
  * \param num_vertices Number of vertices.
  * \param indices (optional) An array of indices into the 'vertices' arrays,
  *                if NULL all vertices will be rendered in sequential order.
  * \param num_indices Number of indices.
- * \param size_indices Index size: 1 (byte), 2 (short), 4 (int)
- * \return 0 on success, or -1 if the operation is not supported
+ * \param size_indices Index size: 1 (byte), 2 (short), 4 (int).
+ * \return 0 on success, or -1 if the operation is not supported.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1693,13 +1699,13 @@
  * but it might contain additional padding (for example, 24bit RGB Windows
  * Bitmap data pads all rows to multiples of 4 bytes).
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect an SDL_Rect structure representing the area to read, or NULL
- *             for the entire render target
+ *             for the entire render target.
  * \param format an SDL_PixelFormatEnum value of the desired format of the
- *               pixel data, or 0 to use the format of the rendering target
- * \param pixels a pointer to the pixel data to copy into
- * \param pitch the pitch of the `pixels` parameter
+ *               pixel data, or 0 to use the format of the rendering target.
+ * \param pixels a pointer to the pixel data to copy into.
+ * \param pitch the pitch of the `pixels` parameter.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1729,7 +1735,7 @@
  * starting each new frame's drawing, even if you plan to overwrite every
  * pixel.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  *
  * \threadsafety You may only call this function on the main thread. If this
  *               happens to work on a background thread on any given platform
@@ -1738,6 +1744,7 @@
  *
  * \since This function is available since SDL 2.0.0.
  *
+ * \sa SDL_CreateRenderer
  * \sa SDL_RenderClear
  * \sa SDL_RenderDrawLine
  * \sa SDL_RenderDrawLines
@@ -1758,7 +1765,7 @@
  * Passing NULL or an otherwise invalid texture will set the SDL error message
  * to "Invalid texture".
  *
- * \param texture the texture to destroy
+ * \param texture the texture to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1773,7 +1780,7 @@
  * If `renderer` is NULL, this function will return immediately after setting
  * the SDL error message to "Invalid renderer". See SDL_GetError().
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1804,7 +1811,7 @@
  * and earlier, as earlier versions did not queue rendering commands at all,
  * instead flushing them to the OS immediately.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1835,11 +1842,11 @@
  * re-order the color channels in the shaders phase, so the uploaded texture
  * may have swapped color channels.
  *
- * \param texture the texture to bind to the current OpenGL/ES/ES2 context
+ * \param texture the texture to bind to the current OpenGL/ES/ES2 context.
  * \param texw a pointer to a float value which will be filled with the
- *             texture width or NULL if you don't need that value
+ *             texture width or NULL if you don't need that value.
  * \param texh a pointer to a float value which will be filled with the
- *             texture height or NULL if you don't need that value
+ *             texture height or NULL if you don't need that value.
  * \returns 0 on success, or -1 if the operation is not supported; call
  *          SDL_GetError() for more information.
  *
@@ -1855,8 +1862,9 @@
  *
  * See SDL_GL_BindTexture() for examples on how to use these functions
  *
- * \param texture the texture to unbind from the current OpenGL/ES/ES2 context
- * \returns 0 on success, or -1 if the operation is not supported
+ * \param texture the texture to unbind from the current OpenGL/ES/ES2
+ *                context.
+ * \returns 0 on success, or -1 if the operation is not supported.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1871,9 +1879,9 @@
  * This function returns `void *`, so SDL doesn't have to include Metal's
  * headers, but it can be safely cast to a `CAMetalLayer *`.
  *
- * \param renderer The renderer to query
+ * \param renderer The renderer to query.
  * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a
- *          Metal renderer
+ *          Metal renderer.
  *
  * \since This function is available since SDL 2.0.8.
  *
@@ -1892,7 +1900,7 @@
  * hidden/minimized/offscreen. This doesn't apply to command encoders for
  * render targets, just the window's backbuffer. Check your return values!
  *
- * \param renderer The renderer to query
+ * \param renderer The renderer to query.
  * \returns an `id<MTLRenderCommandEncoder>` on success, or NULL if the
  *          renderer isn't a Metal renderer or there was an error.
  *
@@ -1905,9 +1913,9 @@
 /**
  * Toggle VSync of the given renderer.
  *
- * \param renderer The renderer to toggle
- * \param vsync 1 for on, 0 for off. All other values are reserved
- * \returns a 0 int on success, or non-zero on failure
+ * \param renderer The renderer to toggle.
+ * \param vsync 1 for on, 0 for off. All other values are reserved.
+ * \returns a 0 int on success, or non-zero on failure.
  *
  * \since This function is available since SDL 2.0.18.
  */
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rwops.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rwops.h
@@ -19,11 +19,13 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: RWOPS */
+
 /**
- *  \file SDL_rwops.h
+ * # CategoryRWOPS
  *
- *  This file provides a general interface for SDL to read and write
- *  data streams.  It can easily be extended to files, memory, etc.
+ * This file provides a general interface for SDL to read and write data
+ * streams. It can easily be extended to files, memory, etc.
  */
 
 #ifndef SDL_rwops_h_
@@ -57,7 +59,7 @@
     Sint64 (SDLCALL * size) (struct SDL_RWops * context);
 
     /**
-     *  Seek to \c offset relative to \c whence, one of stdio's whence values:
+     *  Seek to `offset` relative to `whence`, one of stdio's whence values:
      *  RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END
      *
      *  \return the final offset in the data stream, or -1 on error.
@@ -66,8 +68,8 @@
                              int whence);
 
     /**
-     *  Read up to \c maxnum objects each of size \c size from the data
-     *  stream to the area pointed at by \c ptr.
+     *  Read up to `maxnum` objects each of size `size` from the data
+     *  stream to the area pointed at by `ptr`.
      *
      *  \return the number of objects read, or 0 at error or end of file.
      */
@@ -75,8 +77,8 @@
                              size_t size, size_t maxnum);
 
     /**
-     *  Write exactly \c num objects each of size \c size from the area
-     *  pointed at by \c ptr to data stream.
+     *  Write exactly `num` objects each of size `size` from the area
+     *  pointed at by `ptr` to data stream.
      *
      *  \return the number of objects written, or 0 at error or end of file.
      */
@@ -186,7 +188,7 @@
  *
  * Closing the SDL_RWops will close the file handle SDL is holding internally.
  *
- * \param file a UTF-8 string representing the filename to open
+ * \param file a UTF-8 string representing the filename to open.
  * \param mode an ASCII string representing the mode to be used for opening
  *             the file.
  * \returns a pointer to the SDL_RWops structure that is created, or NULL on
@@ -224,10 +226,10 @@
  * `FILE*`, depending on what system headers are available to SDL. It is
  * always intended to be the `FILE*` type from the C runtime's stdio.h.
  *
- * \param fp the `FILE*` that feeds the SDL_RWops stream
+ * \param fp the `FILE*` that feeds the SDL_RWops stream.
  * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops,
  *                  SDL_FALSE to leave the `FILE*` open when the RWops is
- *                  closed
+ *                  closed.
  * \returns a pointer to the SDL_RWops structure that is created, or NULL on
  *          failure; call SDL_GetError() for more information.
  *
@@ -260,8 +262,8 @@
  * If you need to make sure the RWops never writes to the memory buffer, you
  * should use SDL_RWFromConstMem() with a read-only buffer of memory instead.
  *
- * \param mem a pointer to a buffer to feed an SDL_RWops stream
- * \param size the buffer size, in bytes
+ * \param mem a pointer to a buffer to feed an SDL_RWops stream.
+ * \param size the buffer size, in bytes.
  * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call
  *          SDL_GetError() for more information.
  *
@@ -295,8 +297,8 @@
  * If you need to write to a memory buffer, you should use SDL_RWFromMem()
  * with a writable buffer of memory instead.
  *
- * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream
- * \param size the buffer size, in bytes
+ * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream.
+ * \param size the buffer size, in bytes.
  * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call
  *          SDL_GetError() for more information.
  *
@@ -358,7 +360,7 @@
  * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must
  * be responsible for managing that memory in their **close** method.
  *
- * \param area the SDL_RWops structure to be freed
+ * \param area the SDL_RWops structure to be freed.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -366,6 +368,7 @@
  */
 extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area);
 
+/* Possible `whence` values for SDL_RWops seeking... */
 #define RW_SEEK_SET 0       /**< Seek from the beginning of data */
 #define RW_SEEK_CUR 1       /**< Seek relative to current read point */
 #define RW_SEEK_END 2       /**< Seek relative to the end of data */
@@ -375,7 +378,7 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context the SDL_RWops to get the size of the data stream from
+ * \param context the SDL_RWops to get the size of the data stream from.
  * \returns the size of the data stream in the SDL_RWops on success, -1 if
  *          unknown or a negative error code on failure; call SDL_GetError()
  *          for more information.
@@ -402,10 +405,10 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context a pointer to an SDL_RWops structure
+ * \param context a pointer to an SDL_RWops structure.
  * \param offset an offset in bytes, relative to **whence** location; can be
- *               negative
- * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END`
+ *               negative.
+ * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END`.
  * \returns the final offset in the data stream after the seek or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
@@ -432,7 +435,7 @@
  * Prior to SDL 2.0.10, this function was a macro.
  *
  * \param context a SDL_RWops data stream object from which to get the current
- *                offset
+ *                offset.
  * \returns the current offset in the stream, or -1 if the information can not
  *          be determined.
  *
@@ -462,10 +465,10 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context a pointer to an SDL_RWops structure
- * \param ptr a pointer to a buffer to read data into
- * \param size the size of each object to read, in bytes
- * \param maxnum the maximum number of objects to be read
+ * \param context a pointer to an SDL_RWops structure.
+ * \param ptr a pointer to a buffer to read data into.
+ * \param size the size of each object to read, in bytes.
+ * \param maxnum the maximum number of objects to be read.
  * \returns the number of objects read, or 0 at error or end of file; call
  *          SDL_GetError() for more information.
  *
@@ -496,10 +499,10 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context a pointer to an SDL_RWops structure
- * \param ptr a pointer to a buffer containing data to write
- * \param size the size of an object to write, in bytes
- * \param num the number of objects to write
+ * \param context a pointer to an SDL_RWops structure.
+ * \param ptr a pointer to a buffer containing data to write.
+ * \param size the size of an object to write, in bytes.
+ * \param num the number of objects to write.
  * \returns the number of objects written, which will be less than **num** on
  *          error; call SDL_GetError() for more information.
  *
@@ -530,7 +533,7 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context SDL_RWops structure to close
+ * \param context SDL_RWops structure to close.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -555,9 +558,9 @@
  *
  * The data should be freed with SDL_free().
  *
- * \param src the SDL_RWops to read all available data from
- * \param datasize if not NULL, will store the number of bytes read
- * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning
+ * \param src the SDL_RWops to read all available data from.
+ * \param datasize if not NULL, will store the number of bytes read.
+ * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning.
  * \returns the data, or NULL if there was an error.
  *
  * \since This function is available since SDL 2.0.6.
@@ -578,8 +581,8 @@
  * Prior to SDL 2.0.10, this function was a macro wrapping around
  * SDL_LoadFile_RW.
  *
- * \param file the path to read all available data from
- * \param datasize if not NULL, will store the number of bytes read
+ * \param file the path to read all available data from.
+ * \param datasize if not NULL, will store the number of bytes read.
  * \returns the data, or NULL if there was an error.
  *
  * \since This function is available since SDL 2.0.10.
@@ -596,7 +599,7 @@
 /**
  * Use this function to read a byte from an SDL_RWops.
  *
- * \param src the SDL_RWops to read from
+ * \param src the SDL_RWops to read from.
  * \returns the read byte on success or 0 on failure; call SDL_GetError() for
  *          more information.
  *
@@ -613,7 +616,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 16 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -629,7 +632,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 16 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -645,7 +648,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 32 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -661,7 +664,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 32 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -677,7 +680,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 64 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -693,7 +696,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 64 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -713,8 +716,8 @@
 /**
  * Use this function to write a byte to an SDL_RWops.
  *
- * \param dst the SDL_RWops to write to
- * \param value the byte value to write
+ * \param dst the SDL_RWops to write to.
+ * \param value the byte value to write.
  * \returns 1 on success or 0 on failure; call SDL_GetError() for more
  *          information.
  *
@@ -732,8 +735,8 @@
  * specifies native format, and the data written will be in little-endian
  * format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -749,8 +752,8 @@
  * SDL byteswaps the data only if necessary, so the application always
  * specifies native format, and the data written will be in big-endian format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -767,8 +770,8 @@
  * specifies native format, and the data written will be in little-endian
  * format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -784,8 +787,8 @@
  * SDL byteswaps the data only if necessary, so the application always
  * specifies native format, and the data written will be in big-endian format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -802,8 +805,8 @@
  * specifies native format, and the data written will be in little-endian
  * format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -819,8 +822,8 @@
  * SDL byteswaps the data only if necessary, so the application always
  * specifies native format, and the data written will be in big-endian format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_scancode.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_scancode.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_scancode.h
+ * # CategoryScancode
  *
- *  Defines keyboard scancodes.
+ * Defines keyboard scancodes.
  */
 
 #ifndef SDL_scancode_h_
@@ -31,16 +31,16 @@
 #include <SDL2/SDL_stdinc.h>
 
 /**
- *  \brief The SDL keyboard scancode representation.
+ * The SDL keyboard scancode representation.
  *
- *  Values of this type are used to represent keyboard keys, among other places
- *  in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the
- *  SDL_Event structure.
+ * Values of this type are used to represent keyboard keys, among other places
+ * in the SDL_Keysym::scancode key.keysym.scancode field of the SDL_Event
+ * structure.
  *
- *  The values in this enumeration are based on the USB usage page standard:
- *  https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
+ * The values in this enumeration are based on the USB usage page standard:
+ * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
  */
-typedef enum
+typedef enum SDL_Scancode
 {
     SDL_SCANCODE_UNKNOWN = 0,
 
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_sensor.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_sensor.h
@@ -20,10 +20,9 @@
 */
 
 /**
- *  \file SDL_sensor.h
+ * # CategorySensor
  *
- *  Include file for SDL sensor event handling
- *
+ * Include file for SDL sensor event handling
  */
 
 #ifndef SDL_sensor_h_
@@ -44,7 +43,7 @@
  *  \brief SDL_sensor.h
  *
  *  In order to use these functions, SDL_Init() must have been called
- *  with the ::SDL_INIT_SENSOR flag.  This causes SDL to scan the system
+ *  with the SDL_INIT_SENSOR flag.  This causes SDL to scan the system
  *  for sensors, and load appropriate drivers.
  */
 
@@ -52,21 +51,67 @@
 typedef struct _SDL_Sensor SDL_Sensor;
 
 /**
- * This is a unique ID for a sensor for the time it is connected to the system,
- * and is never reused for the lifetime of the application.
+ * This is a unique ID for a sensor for the time it is connected to the
+ * system, and is never reused for the lifetime of the application.
  *
- * The ID value starts at 0 and increments from there. The value -1 is an invalid ID.
+ * The ID value starts at 0 and increments from there. The value -1 is an
+ * invalid ID.
  */
 typedef Sint32 SDL_SensorID;
 
-/* The different sensors defined by SDL
+/**
+ * The different sensors defined by SDL.
  *
  * Additional sensors may be available, using platform dependent semantics.
  *
- * Hare are the additional Android sensors:
+ * Here are the additional Android sensors:
+ *
  * https://developer.android.com/reference/android/hardware/SensorEvent.html#values
+ *
+ * Accelerometer sensor notes:
+ *
+ * The accelerometer returns the current acceleration in SI meters per second
+ * squared. This measurement includes the force of gravity, so a device at
+ * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the
+ * earth, which is a positive Y value.
+ *
+ * - `values[0]`: Acceleration on the x axis
+ * - `values[1]`: Acceleration on the y axis
+ * - `values[2]`: Acceleration on the z axis
+ *
+ * For phones and tablets held in natural orientation and game controllers
+ * held in front of you, the axes are defined as follows:
+ *
+ * - -X ... +X : left ... right
+ * - -Y ... +Y : bottom ... top
+ * - -Z ... +Z : farther ... closer
+ *
+ * The accelerometer axis data is not changed when the device is rotated.
+ *
+ * Gyroscope sensor notes:
+ *
+ * The gyroscope returns the current rate of rotation in radians per second.
+ * The rotation is positive in the counter-clockwise direction. That is, an
+ * observer looking from a positive location on one of the axes would see
+ * positive rotation on that axis when it appeared to be rotating
+ * counter-clockwise.
+ *
+ * - `values[0]`: Angular speed around the x axis (pitch)
+ * - `values[1]`: Angular speed around the y axis (yaw)
+ * - `values[2]`: Angular speed around the z axis (roll)
+ *
+ * For phones and tablets held in natural orientation and game controllers
+ * held in front of you, the axes are defined as follows:
+ *
+ * - -X ... +X : left ... right
+ * - -Y ... +Y : bottom ... top
+ * - -Z ... +Z : farther ... closer
+ *
+ * The gyroscope axis data is not changed when the device is rotated.
+ *
+ * \sa SDL_GetDisplayOrientation
  */
-typedef enum
+typedef enum SDL_SensorType
 {
     SDL_SENSOR_INVALID = -1,    /**< Returned for an invalid sensor */
     SDL_SENSOR_UNKNOWN,         /**< Unknown sensor type */
@@ -79,53 +124,15 @@
 } SDL_SensorType;
 
 /**
- * Accelerometer sensor
+ * A constant to represent standard gravity for accelerometer sensors.
  *
- * The accelerometer returns the current acceleration in SI meters per
- * second squared. This measurement includes the force of gravity, so
- * a device at rest will have an value of SDL_STANDARD_GRAVITY away
- * from the center of the earth, which is a positive Y value.
- *
- * values[0]: Acceleration on the x axis
- * values[1]: Acceleration on the y axis
- * values[2]: Acceleration on the z axis
- *
- * For phones held in portrait mode and game controllers held in front of you,
- * the axes are defined as follows:
- * -X ... +X : left ... right
- * -Y ... +Y : bottom ... top
- * -Z ... +Z : farther ... closer
- * 
- * The axis data is not changed when the phone is rotated.
- *
- * \sa SDL_GetDisplayOrientation()
+ * The accelerometer returns the current acceleration in SI meters per second
+ * squared. This measurement includes the force of gravity, so a device at
+ * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the
+ * earth, which is a positive Y value.
  */
 #define SDL_STANDARD_GRAVITY    9.80665f
 
-/**
- * Gyroscope sensor
- *
- * The gyroscope returns the current rate of rotation in radians per second.
- * The rotation is positive in the counter-clockwise direction. That is,
- * an observer looking from a positive location on one of the axes would
- * see positive rotation on that axis when it appeared to be rotating
- * counter-clockwise.
- *
- * values[0]: Angular speed around the x axis (pitch)
- * values[1]: Angular speed around the y axis (yaw)
- * values[2]: Angular speed around the z axis (roll)
- *
- * For phones held in portrait mode and game controllers held in front of you,
- * the axes are defined as follows:
- * -X ... +X : left ... right
- * -Y ... +Y : bottom ... top
- * -Z ... +Z : farther ... closer
- * 
- * The axis data is not changed when the phone or controller is rotated.
- *
- * \sa SDL_GetDisplayOrientation()
- */
-
 /* Function prototypes */
 
 /**
@@ -155,7 +162,7 @@
 /**
  * Get the implementation dependent name of a sensor.
  *
- * \param device_index The sensor to obtain name from
+ * \param device_index The sensor to obtain name from.
  * \returns the sensor name, or NULL if `device_index` is out of range.
  *
  * \since This function is available since SDL 2.0.9.
@@ -165,7 +172,7 @@
 /**
  * Get the type of a sensor.
  *
- * \param device_index The sensor to get the type from
+ * \param device_index The sensor to get the type from.
  * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is
  *          out of range.
  *
@@ -176,7 +183,7 @@
 /**
  * Get the platform dependent type of a sensor.
  *
- * \param device_index The sensor to check
+ * \param device_index The sensor to check.
  * \returns the sensor platform dependent type, or -1 if `device_index` is out
  *          of range.
  *
@@ -187,7 +194,7 @@
 /**
  * Get the instance ID of a sensor.
  *
- * \param device_index The sensor to get instance id from
+ * \param device_index The sensor to get instance id from.
  * \returns the sensor instance ID, or -1 if `device_index` is out of range.
  *
  * \since This function is available since SDL 2.0.9.
@@ -197,7 +204,7 @@
 /**
  * Open a sensor for use.
  *
- * \param device_index The sensor to open
+ * \param device_index The sensor to open.
  * \returns an SDL_Sensor sensor object, or NULL if an error occurred.
  *
  * \since This function is available since SDL 2.0.9.
@@ -207,7 +214,7 @@
 /**
  * Return the SDL_Sensor associated with an instance id.
  *
- * \param instance_id The sensor from instance id
+ * \param instance_id The sensor from instance id.
  * \returns an SDL_Sensor object.
  *
  * \since This function is available since SDL 2.0.9.
@@ -217,7 +224,7 @@
 /**
  * Get the implementation dependent name of a sensor
  *
- * \param sensor The SDL_Sensor object
+ * \param sensor The SDL_Sensor object.
  * \returns the sensor name, or NULL if `sensor` is NULL.
  *
  * \since This function is available since SDL 2.0.9.
@@ -227,7 +234,7 @@
 /**
  * Get the type of a sensor.
  *
- * \param sensor The SDL_Sensor object to inspect
+ * \param sensor The SDL_Sensor object to inspect.
  * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is
  *          NULL.
  *
@@ -238,7 +245,7 @@
 /**
  * Get the platform dependent type of a sensor.
  *
- * \param sensor The SDL_Sensor object to inspect
+ * \param sensor The SDL_Sensor object to inspect.
  * \returns the sensor platform dependent type, or -1 if `sensor` is NULL.
  *
  * \since This function is available since SDL 2.0.9.
@@ -248,7 +255,7 @@
 /**
  * Get the instance ID of a sensor.
  *
- * \param sensor The SDL_Sensor object to inspect
+ * \param sensor The SDL_Sensor object to inspect.
  * \returns the sensor instance ID, or -1 if `sensor` is NULL.
  *
  * \since This function is available since SDL 2.0.9.
@@ -260,9 +267,9 @@
  *
  * The number of values and interpretation of the data is sensor dependent.
  *
- * \param sensor The SDL_Sensor object to query
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ * \param sensor The SDL_Sensor object to query.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \returns 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.9.
@@ -275,11 +282,11 @@
  *
  * The number of values and interpretation of the data is sensor dependent.
  *
- * \param sensor The SDL_Sensor object to query
+ * \param sensor The SDL_Sensor object to query.
  * \param timestamp A pointer filled with the timestamp in microseconds of the
- *                  current sensor reading if available, or 0 if not
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ *                  current sensor reading if available, or 0 if not.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \returns 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.26.0.
@@ -289,7 +296,7 @@
 /**
  * Close a sensor previously opened with SDL_SensorOpen().
  *
- * \param sensor The SDL_Sensor object to close
+ * \param sensor The SDL_Sensor object to close.
  *
  * \since This function is available since SDL 2.0.9.
  */
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_shape.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_shape.h
@@ -48,18 +48,18 @@
  * and flags.
  *
  * \param title The title of the window, in UTF-8 encoding.
- * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or
- *          ::SDL_WINDOWPOS_UNDEFINED.
- * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or
- *          ::SDL_WINDOWPOS_UNDEFINED.
+ * \param x The x position of the window, SDL_WINDOWPOS_CENTERED, or
+ *          SDL_WINDOWPOS_UNDEFINED.
+ * \param y The y position of the window, SDL_WINDOWPOS_CENTERED, or
+ *          SDL_WINDOWPOS_UNDEFINED.
  * \param w The width of the window.
  * \param h The height of the window.
  * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with
- *              any of the following: ::SDL_WINDOW_OPENGL,
- *              ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN,
- *              ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED,
- *              ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set,
- *              and ::SDL_WINDOW_FULLSCREEN is always unset.
+ *              any of the following: SDL_WINDOW_OPENGL,
+ *              SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_HIDDEN,
+ *              SDL_WINDOW_RESIZABLE, SDL_WINDOW_MAXIMIZED,
+ *              SDL_WINDOW_MINIMIZED, SDL_WINDOW_BORDERLESS is always set, and
+ *              SDL_WINDOW_FULLSCREEN is always unset.
  * \return the window created, or NULL if window creation failed.
  *
  * \since This function is available since SDL 2.0.0.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_stdinc.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_stdinc.h
@@ -19,10 +19,12 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: StdInc */
+
 /**
- *  \file SDL_stdinc.h
+ * # CategoryStdInc
  *
- *  This is a general header that includes C language support.
+ * This is a general header that includes C language support.
  */
 
 #ifndef SDL_stdinc_h_
@@ -129,15 +131,19 @@
 #endif
 
 /**
- *  The number of elements in an array.
+ * The number of elements in an array.
  */
 #define SDL_arraysize(array)    (sizeof(array)/sizeof(array[0]))
 #define SDL_TABLESIZE(table)    SDL_arraysize(table)
 
 /**
- *  Macro useful for building other macros with strings in them
+ * Macro useful for building other macros with strings in them
  *
- *  e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n")
+ * e.g:
+ *
+ * ```c
+ * #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n")
+ * ```
  */
 #define SDL_STRINGIFY_ARG(arg)  #arg
 
@@ -185,55 +191,62 @@
 #endif
 
 /**
- * \brief A signed 8-bit integer type.
+ * A signed 8-bit integer type.
  */
+typedef int8_t Sint8;
 #define SDL_MAX_SINT8   ((Sint8)0x7F)           /* 127 */
 #define SDL_MIN_SINT8   ((Sint8)(~0x7F))        /* -128 */
-typedef int8_t Sint8;
+
 /**
- * \brief An unsigned 8-bit integer type.
+ * An unsigned 8-bit integer type.
  */
+typedef uint8_t Uint8;
 #define SDL_MAX_UINT8   ((Uint8)0xFF)           /* 255 */
 #define SDL_MIN_UINT8   ((Uint8)0x00)           /* 0 */
-typedef uint8_t Uint8;
+
 /**
- * \brief A signed 16-bit integer type.
+ * A signed 16-bit integer type.
  */
+typedef int16_t Sint16;
 #define SDL_MAX_SINT16  ((Sint16)0x7FFF)        /* 32767 */
 #define SDL_MIN_SINT16  ((Sint16)(~0x7FFF))     /* -32768 */
-typedef int16_t Sint16;
+
 /**
- * \brief An unsigned 16-bit integer type.
+ * An unsigned 16-bit integer type.
  */
+typedef uint16_t Uint16;
 #define SDL_MAX_UINT16  ((Uint16)0xFFFF)        /* 65535 */
 #define SDL_MIN_UINT16  ((Uint16)0x0000)        /* 0 */
-typedef uint16_t Uint16;
+
 /**
- * \brief A signed 32-bit integer type.
+ * A signed 32-bit integer type.
  */
+typedef int32_t Sint32;
 #define SDL_MAX_SINT32  ((Sint32)0x7FFFFFFF)    /* 2147483647 */
 #define SDL_MIN_SINT32  ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */
-typedef int32_t Sint32;
+
 /**
- * \brief An unsigned 32-bit integer type.
+ * An unsigned 32-bit integer type.
  */
+typedef uint32_t Uint32;
 #define SDL_MAX_UINT32  ((Uint32)0xFFFFFFFFu)   /* 4294967295 */
 #define SDL_MIN_UINT32  ((Uint32)0x00000000)    /* 0 */
-typedef uint32_t Uint32;
 
 /**
- * \brief A signed 64-bit integer type.
+ * A signed 64-bit integer type.
  */
+typedef int64_t Sint64;
 #define SDL_MAX_SINT64  ((Sint64)0x7FFFFFFFFFFFFFFFll)      /* 9223372036854775807 */
 #define SDL_MIN_SINT64  ((Sint64)(~0x7FFFFFFFFFFFFFFFll))   /* -9223372036854775808 */
-typedef int64_t Sint64;
+
 /**
- * \brief An unsigned 64-bit integer type.
+ * An unsigned 64-bit integer type.
  */
+typedef uint64_t Uint64;
 #define SDL_MAX_UINT64  ((Uint64)0xFFFFFFFFFFFFFFFFull)     /* 18446744073709551615 */
 #define SDL_MIN_UINT64  ((Uint64)(0x0000000000000000ull))   /* 0 */
-typedef uint64_t Uint64;
 
+
 /* @} *//* Basic data types */
 
 /**
@@ -415,8 +428,8 @@
 
 /** \cond */
 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
-#if !defined(__ANDROID__) && !defined(__VITA__) && !defined(__3DS__)
-   /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */
+#if !defined(__VITA__) && !defined(__3DS__)
+/* TODO: include/SDL_stdinc.h:422: error: size of array 'SDL_dummy_enum' is negative */
 typedef enum
 {
     DUMMY_ENUM_VALUE
@@ -491,8 +504,9 @@
 extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
 extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite);
 
-extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
-extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
+typedef int (SDLCALL *SDL_CompareCallback)(const void *, const void *);
+extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, SDL_CompareCallback compare);
+extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback compare);
 
 extern DECLSPEC int SDLCALL SDL_abs(int x);
 
@@ -521,6 +535,7 @@
 
 extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len);
 
+/* Some safe(r) macros for zero'ing structures... */
 #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
 #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
 #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x)))
@@ -706,6 +721,8 @@
                                                const char *fromcode,
                                                const char *inbuf,
                                                size_t inbytesleft);
+
+/* Some helper macros for common cases... */
 #define SDL_iconv_utf8_locale(S)    SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
 #define SDL_iconv_utf8_ucs2(S)      (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)
 #define SDL_iconv_utf8_ucs4(S)      (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
@@ -733,6 +750,9 @@
 size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size);
 #endif
 
+/* strdup is not ANSI but POSIX, and its prototype might be hidden... */
+char *strdup(const char *str);
+
 /* Starting LLVM 16, the analyser errors out if these functions do not have
    their prototype defined (clang-diagnostic-implicit-function-declaration) */
 #include <stdlib.h>
@@ -778,9 +798,10 @@
 }
 
 /**
- * If a * b would overflow, return -1. Otherwise store a * b via ret
- * and return 0.
+ * If a * b would overflow, return -1.
  *
+ * Otherwise store a * b via ret and return 0.
+ *
  * \since This function is available since SDL 2.24.0.
  */
 SDL_FORCE_INLINE int SDL_size_mul_overflow (size_t a,
@@ -808,8 +829,9 @@
 #endif
 
 /**
- * If a + b would overflow, return -1. Otherwise store a + b via ret
- * and return 0.
+ * If a + b would overflow, return -1.
+ *
+ * Otherwise store a + b via ret and return 0.
  *
  * \since This function is available since SDL 2.24.0.
  */
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_surface.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_surface.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_surface.h
+ * # CategorySurface
  *
- *  Header file for ::SDL_Surface definition and management functions.
+ * Header file for SDL_Surface definition and management functions.
  */
 
 #ifndef SDL_surface_h_
@@ -43,7 +43,7 @@
 /**
  *  \name Surface flags
  *
- *  These are the currently supported flags for the ::SDL_Surface.
+ *  These are the currently supported flags for the SDL_Surface.
  *
  *  \internal
  *  Used internally (read-only).
@@ -57,7 +57,7 @@
 /* @} *//* Surface flags */
 
 /**
- *  Evaluates to true if the surface needs to be locked before access.
+ * Evaluates to true if the surface needs to be locked before access.
  */
 #define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0)
 
@@ -64,10 +64,10 @@
 typedef struct SDL_BlitMap SDL_BlitMap;  /* this is an opaque type. */
 
 /**
- * \brief A collection of pixels used in software blitting.
+ * A collection of pixels used in software blitting.
  *
- * \note  This structure should be treated as read-only, except for \c pixels,
- *        which, if not NULL, contains the raw pixel data for the surface.
+ * This structure should be treated as read-only, except for `pixels`, which,
+ * if not NULL, contains the raw pixel data for the surface.
  */
 typedef struct SDL_Surface
 {
@@ -97,15 +97,15 @@
 } SDL_Surface;
 
 /**
- * \brief The type of function used for surface blitting functions.
+ * The type of function used for surface blitting functions.
  */
 typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect,
                                  struct SDL_Surface * dst, SDL_Rect * dstrect);
 
 /**
- * \brief The formula used for converting between YUV and RGB
+ * The formula used for converting between YUV and RGB
  */
-typedef enum
+typedef enum SDL_YUV_CONVERSION_MODE
 {
     SDL_YUV_CONVERSION_JPEG,        /**< Full range JPEG */
     SDL_YUV_CONVERSION_BT601,       /**< BT.601 (the default) */
@@ -140,14 +140,14 @@
  * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a
  * different `blendMode`.
  *
- * \param flags the flags are unused and should be set to 0
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
- * \param Rmask the red mask for the pixels
- * \param Gmask the green mask for the pixels
- * \param Bmask the blue mask for the pixels
- * \param Amask the alpha mask for the pixels
+ * \param flags the flags are unused and should be set to 0.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
+ * \param Rmask the red mask for the pixels.
+ * \param Gmask the green mask for the pixels.
+ * \param Bmask the blue mask for the pixels.
+ * \param Amask the alpha mask for the pixels.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -171,10 +171,10 @@
  * of providing pixel color masks, you provide it with a predefined format
  * from SDL_PixelFormatEnum.
  *
- * \param flags the flags are unused and should be set to 0
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
+ * \param flags the flags are unused and should be set to 0.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
  * \param format the SDL_PixelFormatEnum for the new surface's pixel format.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
@@ -198,15 +198,15 @@
  * No copy is made of the pixel data. Pixel data is not managed automatically;
  * you must free the surface before you free the pixel data.
  *
- * \param pixels a pointer to existing pixel data
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
- * \param pitch the pitch of the surface in bytes
- * \param Rmask the red mask for the pixels
- * \param Gmask the green mask for the pixels
- * \param Bmask the blue mask for the pixels
- * \param Amask the alpha mask for the pixels
+ * \param pixels a pointer to existing pixel data.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
+ * \param pitch the pitch of the surface in bytes.
+ * \param Rmask the red mask for the pixels.
+ * \param Gmask the green mask for the pixels.
+ * \param Bmask the blue mask for the pixels.
+ * \param Amask the alpha mask for the pixels.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -214,6 +214,7 @@
  *
  * \sa SDL_CreateRGBSurface
  * \sa SDL_CreateRGBSurfaceWithFormat
+ * \sa SDL_CreateRGBSurfaceWithFormatFrom
  * \sa SDL_FreeSurface
  */
 extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels,
@@ -239,11 +240,11 @@
  * No copy is made of the pixel data. Pixel data is not managed automatically;
  * you must free the surface before you free the pixel data.
  *
- * \param pixels a pointer to existing pixel data
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
- * \param pitch the pitch of the surface in bytes
+ * \param pixels a pointer to existing pixel data.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
+ * \param pitch the pitch of the surface in bytes.
  * \param format the SDL_PixelFormatEnum for the new surface's pixel format.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
@@ -278,8 +279,8 @@
  *
  * A single palette can be shared with many surfaces.
  *
- * \param surface the SDL_Surface structure to update
- * \param palette the SDL_Palette structure to use
+ * \param surface the SDL_Surface structure to update.
+ * \param palette the SDL_Palette structure to use.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -300,7 +301,7 @@
  * 0, then you can read and write to the surface at any time, and the pixel
  * format of the surface will not change.
  *
- * \param surface the SDL_Surface structure to be locked
+ * \param surface the SDL_Surface structure to be locked.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -314,7 +315,7 @@
 /**
  * Release a surface after directly accessing the pixels.
  *
- * \param surface the SDL_Surface structure to be unlocked
+ * \param surface the SDL_Surface structure to be unlocked.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -329,11 +330,11 @@
  * result in a memory leak.
  *
  * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile.
- * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap
+ * Alternatively, you might also use the macro SDL_LoadBMP to load a bitmap
  * from a file, convert it to an SDL_Surface and then close the file.
  *
- * \param src the data stream for the surface
- * \param freesrc non-zero to close the stream after being read
+ * \param src the data stream for the surface.
+ * \param freesrc non-zero to close the stream after being read.
  * \returns a pointer to a new SDL_Surface structure or NULL if there was an
  *          error; call SDL_GetError() for more information.
  *
@@ -363,9 +364,9 @@
  * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are
  * not supported.
  *
- * \param surface the SDL_Surface structure containing the image to be saved
- * \param dst a data stream to save to
- * \param freedst non-zero to close the stream after being written
+ * \param surface the SDL_Surface structure containing the image to be saved.
+ * \param dst a data stream to save to.
+ * \param freedst non-zero to close the stream after being written.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -378,9 +379,9 @@
     (SDL_Surface * surface, SDL_RWops * dst, int freedst);
 
 /**
- *  Save a surface to a file.
+ * Save a surface to a file.
  *
- *  Convenience macro.
+ * Convenience macro.
  */
 #define SDL_SaveBMP(surface, file) \
         SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1)
@@ -391,8 +392,8 @@
  * If RLE is enabled, color key and alpha blending blits are much faster, but
  * the surface must be locked before directly accessing the pixels.
  *
- * \param surface the SDL_Surface structure to optimize
- * \param flag 0 to disable, non-zero to enable RLE acceleration
+ * \param surface the SDL_Surface structure to optimize.
+ * \param flag 0 to disable, non-zero to enable RLE acceleration.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -410,7 +411,7 @@
  *
  * It is safe to pass a NULL `surface` here; it will return SDL_FALSE.
  *
- * \param surface the SDL_Surface structure to query
+ * \param surface the SDL_Surface structure to query.
  * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -432,9 +433,9 @@
  * RLE acceleration can substantially speed up blitting of images with large
  * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details.
  *
- * \param surface the SDL_Surface structure to update
- * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key
- * \param key the transparent pixel
+ * \param surface the SDL_Surface structure to update.
+ * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key.
+ * \param key the transparent pixel.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -451,7 +452,7 @@
  *
  * It is safe to pass a NULL `surface` here; it will return SDL_FALSE.
  *
- * \param surface the SDL_Surface structure to query
+ * \param surface the SDL_Surface structure to query.
  * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.9.
@@ -469,8 +470,8 @@
  *
  * If the surface doesn't have color key enabled this function returns -1.
  *
- * \param surface the SDL_Surface structure to query
- * \param key a pointer filled in with the transparent pixel
+ * \param surface the SDL_Surface structure to query.
+ * \param key a pointer filled in with the transparent pixel.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -491,10 +492,10 @@
  *
  * `srcC = srcC * (color / 255)`
  *
- * \param surface the SDL_Surface structure to update
- * \param r the red color value multiplied into blit operations
- * \param g the green color value multiplied into blit operations
- * \param b the blue color value multiplied into blit operations
+ * \param surface the SDL_Surface structure to update.
+ * \param r the red color value multiplied into blit operations.
+ * \param g the green color value multiplied into blit operations.
+ * \param b the blue color value multiplied into blit operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -510,10 +511,10 @@
 /**
  * Get the additional color value multiplied into blit operations.
  *
- * \param surface the SDL_Surface structure to query
- * \param r a pointer filled in with the current red color value
- * \param g a pointer filled in with the current green color value
- * \param b a pointer filled in with the current blue color value
+ * \param surface the SDL_Surface structure to query.
+ * \param r a pointer filled in with the current red color value.
+ * \param g a pointer filled in with the current green color value.
+ * \param b a pointer filled in with the current blue color value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -534,8 +535,8 @@
  *
  * `srcA = srcA * (alpha / 255)`
  *
- * \param surface the SDL_Surface structure to update
- * \param alpha the alpha value multiplied into blit operations
+ * \param surface the SDL_Surface structure to update.
+ * \param alpha the alpha value multiplied into blit operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -550,8 +551,8 @@
 /**
  * Get the additional alpha value used in blit operations.
  *
- * \param surface the SDL_Surface structure to query
- * \param alpha a pointer filled in with the current alpha value
+ * \param surface the SDL_Surface structure to query.
+ * \param alpha a pointer filled in with the current alpha value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -570,8 +571,8 @@
  * existing data, the blendmode of the SOURCE surface should be set to
  * `SDL_BLENDMODE_NONE`.
  *
- * \param surface the SDL_Surface structure to update
- * \param blendMode the SDL_BlendMode to use for blit blending
+ * \param surface the SDL_Surface structure to update.
+ * \param blendMode the SDL_BlendMode to use for blit blending.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -585,8 +586,8 @@
 /**
  * Get the blend mode used for blit operations.
  *
- * \param surface the SDL_Surface structure to query
- * \param blendMode a pointer filled in with the current SDL_BlendMode
+ * \param surface the SDL_Surface structure to query.
+ * \param blendMode a pointer filled in with the current SDL_BlendMode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -606,9 +607,9 @@
  * Note that blits are automatically clipped to the edges of the source and
  * destination surfaces.
  *
- * \param surface the SDL_Surface structure to be clipped
+ * \param surface the SDL_Surface structure to be clipped.
  * \param rect the SDL_Rect structure representing the clipping rectangle, or
- *             NULL to disable clipping
+ *             NULL to disable clipping.
  * \returns SDL_TRUE if the rectangle intersects the surface, otherwise
  *          SDL_FALSE and blits will be completely clipped.
  *
@@ -627,9 +628,9 @@
  * rectangle is drawn into.
  *
  * \param surface the SDL_Surface structure representing the surface to be
- *                clipped
+ *                clipped.
  * \param rect an SDL_Rect structure filled in with the clipping rectangle for
- *             the surface
+ *             the surface.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -658,11 +659,11 @@
  * surface. The new, optimized surface can then be used as the source for
  * future blits, making them faster.
  *
- * \param src the existing SDL_Surface structure to convert
+ * \param src the existing SDL_Surface structure to convert.
  * \param fmt the SDL_PixelFormat structure that the new surface is optimized
- *            for
+ *            for.
  * \param flags the flags are unused and should be set to 0; this is a
- *              leftover from SDL 1.2's API
+ *              leftover from SDL 1.2's API.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -683,11 +684,11 @@
  * it might be easier to call but it doesn't have access to palette
  * information for the destination surface, in case that would be important.
  *
- * \param src the existing SDL_Surface structure to convert
+ * \param src the existing SDL_Surface structure to convert.
  * \param pixel_format the SDL_PixelFormatEnum that the new surface is
- *                     optimized for
+ *                     optimized for.
  * \param flags the flags are unused and should be set to 0; this is a
- *              leftover from SDL 1.2's API
+ *              leftover from SDL 1.2's API.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -703,14 +704,14 @@
 /**
  * Copy a block of pixels of one format to another format.
  *
- * \param width the width of the block to copy, in pixels
- * \param height the height of the block to copy, in pixels
- * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format
- * \param src a pointer to the source pixels
- * \param src_pitch the pitch of the source pixels, in bytes
- * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format
- * \param dst a pointer to be filled in with new pixel data
- * \param dst_pitch the pitch of the destination pixels, in bytes
+ * \param width the width of the block to copy, in pixels.
+ * \param height the height of the block to copy, in pixels.
+ * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format.
+ * \param src a pointer to the source pixels.
+ * \param src_pitch the pitch of the source pixels, in bytes.
+ * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format.
+ * \param dst a pointer to be filled in with new pixel data.
+ * \param dst_pitch the pitch of the destination pixels, in bytes.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -729,14 +730,14 @@
  *
  * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888.
  *
- * \param width the width of the block to convert, in pixels
- * \param height the height of the block to convert, in pixels
- * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format
- * \param src a pointer to the source pixels
- * \param src_pitch the pitch of the source pixels, in bytes
- * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format
- * \param dst a pointer to be filled in with premultiplied pixel data
- * \param dst_pitch the pitch of the destination pixels, in bytes
+ * \param width the width of the block to convert, in pixels.
+ * \param height the height of the block to convert, in pixels.
+ * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format.
+ * \param src a pointer to the source pixels.
+ * \param src_pitch the pitch of the source pixels, in bytes.
+ * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format.
+ * \param dst a pointer to be filled in with premultiplied pixel data.
+ * \param dst_pitch the pitch of the destination pixels, in bytes.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -760,10 +761,10 @@
  * SDL_SetClipRect()), then this function will fill based on the intersection
  * of the clip rectangle and `rect`.
  *
- * \param dst the SDL_Surface structure that is the drawing target
+ * \param dst the SDL_Surface structure that is the drawing target.
  * \param rect the SDL_Rect structure representing the rectangle to fill, or
- *             NULL to fill the entire surface
- * \param color the color to fill with
+ *             NULL to fill the entire surface.
+ * \param color the color to fill with.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -786,10 +787,10 @@
  * SDL_SetClipRect()), then this function will fill based on the intersection
  * of the clip rectangle and `rect`.
  *
- * \param dst the SDL_Surface structure that is the drawing target
- * \param rects an array of SDL_Rects representing the rectangles to fill.
- * \param count the number of rectangles in the array
- * \param color the color to fill with
+ * \param dst the SDL_Surface structure that is the drawing target.
+ * \param rects an array of SDL_Rect representing the rectangles to fill.
+ * \param count the number of rectangles in the array.
+ * \param color the color to fill with.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -801,62 +802,64 @@
     (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color);
 
 /* !!! FIXME: merge this documentation with the wiki */
+
 /**
- *  Performs a fast blit from the source surface to the destination surface.
+ * Performs a fast blit from the source surface to the destination surface.
  *
- *  This assumes that the source and destination rectangles are
- *  the same size.  If either \c srcrect or \c dstrect are NULL, the entire
- *  surface (\c src or \c dst) is copied.  The final blit rectangles are saved
- *  in \c srcrect and \c dstrect after all clipping is performed.
+ * This assumes that the source and destination rectangles are the same size.
+ * If either `srcrect` or `dstrect` are NULL, the entire surface (`src` or
+ * `dst`) is copied. The final blit rectangles are saved in `srcrect` and
+ * `dstrect` after all clipping is performed.
  *
- *  \returns 0 if the blit is successful, otherwise it returns -1.
+ * The blit function should not be called on a locked surface.
  *
- *  The blit function should not be called on a locked surface.
+ * The blit semantics for surfaces with and without blending and colorkey are
+ * defined as follows:
  *
- *  The blit semantics for surfaces with and without blending and colorkey
- *  are defined as follows:
- *  \verbatim
-    RGBA->RGB:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source alpha-channel and per-surface alpha)
-        SDL_SRCCOLORKEY ignored.
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy RGB.
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        RGB values of the source color key, ignoring alpha in the
-        comparison.
-
-    RGB->RGBA:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source per-surface alpha)
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy RGB, set destination alpha to source per-surface alpha value.
-      both:
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        source color key.
-
-    RGBA->RGBA:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source alpha-channel and per-surface alpha)
-        SDL_SRCCOLORKEY ignored.
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy all of RGBA to the destination.
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        RGB values of the source color key, ignoring alpha in the
-        comparison.
-
-    RGB->RGB:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source per-surface alpha)
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy RGB.
-      both:
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        source color key.
-    \endverbatim
+ * ```
+ *   RGBA->RGB:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source alpha-channel and per-surface alpha)
+ *       SDL_SRCCOLORKEY ignored.
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy RGB.
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       RGB values of the source color key, ignoring alpha in the
+ *       comparison.
  *
- *  You should call SDL_BlitSurface() unless you know exactly how SDL
- *  blitting works internally and how to use the other blit functions.
+ *   RGB->RGBA:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source per-surface alpha)
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy RGB, set destination alpha to source per-surface alpha value.
+ *     both:
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       source color key.
+ *
+ *   RGBA->RGBA:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source alpha-channel and per-surface alpha)
+ *       SDL_SRCCOLORKEY ignored.
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy all of RGBA to the destination.
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       RGB values of the source color key, ignoring alpha in the
+ *       comparison.
+ *
+ *   RGB->RGB:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source per-surface alpha)
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy RGB.
+ *     both:
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       source color key.
+ * ```
+ *
+ * You should call SDL_BlitSurface() unless you know exactly how SDL blitting
+ * works internally and how to use the other blit functions.
+ *
+ * \returns 0 if the blit is successful, otherwise it returns -1.
  */
 #define SDL_BlitSurface SDL_UpperBlit
 
@@ -883,12 +886,12 @@
  * Unless you know what you're doing, you should be using SDL_BlitSurface()
  * instead.
  *
- * \param src the SDL_Surface structure to be copied from
+ * \param src the SDL_Surface structure to be copied from.
  * \param srcrect the SDL_Rect structure representing the rectangle to be
- *                copied, or NULL to copy the entire surface
- * \param dst the SDL_Surface structure that is the blit target
+ *                copied, or NULL to copy the entire surface.
+ * \param dst the SDL_Surface structure that is the blit target.
  * \param dstrect the SDL_Rect structure representing the rectangle that is
- *                copied into
+ *                copied into.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -925,8 +928,6 @@
                                             const SDL_Rect * dstrect);
 
 
-#define SDL_BlitScaled SDL_UpperBlitScaled
-
 /**
  * Perform a scaled surface copy to a destination surface.
  *
@@ -941,6 +942,9 @@
     (SDL_Surface * src, const SDL_Rect * srcrect,
     SDL_Surface * dst, SDL_Rect * dstrect);
 
+#define SDL_BlitScaled SDL_UpperBlitScaled
+
+
 /**
  * Perform low-level surface scaled blitting only.
  *
@@ -947,12 +951,12 @@
  * This is a semi-private function and it performs low-level surface blitting,
  * assuming the input rectangles have already been clipped.
  *
- * \param src the SDL_Surface structure to be copied from
+ * \param src the SDL_Surface structure to be copied from.
  * \param srcrect the SDL_Rect structure representing the rectangle to be
- *                copied
- * \param dst the SDL_Surface structure that is the blit target
+ *                copied.
+ * \param dst the SDL_Surface structure that is the blit target.
  * \param dstrect the SDL_Rect structure representing the rectangle that is
- *                copied into
+ *                copied into.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_system.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_system.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_system.h
+ * # CategorySystem
  *
- *  Include file for platform specific SDL API functions
+ * Include file for platform specific SDL API functions
  */
 
 #ifndef SDL_system_h_
@@ -49,7 +49,7 @@
  * Set a callback for every Windows message, run before TranslateMessage().
  *
  * \param callback The SDL_WindowsMessageHook function to call.
- * \param userdata a pointer to pass to every iteration of `callback`
+ * \param userdata a pointer to pass to every iteration of `callback`.
  *
  * \since This function is available since SDL 2.0.4.
  */
@@ -66,7 +66,7 @@
  * controls on which monitor a full screen application will appear.
  *
  * \param displayIndex the display index for which to get the D3D9 adapter
- *                     index
+ *                     index.
  * \returns the D3D9 adapter index on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -82,7 +82,7 @@
  * Once you are done using the device, you should release it to avoid a
  * resource leak.
  *
- * \param renderer the renderer from which to get the associated D3D device
+ * \param renderer the renderer from which to get the associated D3D device.
  * \returns the D3D9 device associated with given renderer or NULL if it is
  *          not a D3D9 renderer; call SDL_GetError() for more information.
  *
@@ -98,7 +98,7 @@
  * Once you are done using the device, you should release it to avoid a
  * resource leak.
  *
- * \param renderer the renderer from which to get the associated D3D11 device
+ * \param renderer the renderer from which to get the associated D3D11 device.
  * \returns the D3D11 device associated with given renderer or NULL if it is
  *          not a D3D11 renderer; call SDL_GetError() for more information.
  *
@@ -118,7 +118,7 @@
  * Once you are done using the device, you should release it to avoid a
  * resource leak.
  *
- * \param renderer the renderer from which to get the associated D3D12 device
+ * \param renderer the renderer from which to get the associated D3D12 device.
  * \returns the D3D12 device associated with given renderer or NULL if it is
  *          not a D3D12 renderer; call SDL_GetError() for more information.
  *
@@ -140,9 +140,9 @@
  * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it
  * returns an SDL_bool.
  *
- * \param displayIndex the display index for which to get both indices
- * \param adapterIndex a pointer to be filled in with the adapter index
- * \param outputIndex a pointer to be filled in with the output index
+ * \param displayIndex the display index for which to get both indices.
+ * \param adapterIndex a pointer to be filled in with the adapter index.
+ * \param outputIndex a pointer to be filled in with the output index.
  * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError()
  *          for more information.
  *
@@ -176,7 +176,7 @@
  * \param threadID The Unix thread ID to change priority of.
  * \param sdlPriority The new SDL_ThreadPriority value.
  * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR,
- *                    SCHED_OTHER, etc...)
+ *                    SCHED_OTHER, etc...).
  * \returns 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.18.
@@ -188,7 +188,7 @@
 /* Platform specific functions for iOS */
 #ifdef __IPHONEOS__
 
-#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam)
+typedef void (SDLCALL *SDL_iOSAnimationCallback)(void*);
 
 /**
  * Use this function to set the animation callback on Apple iOS.
@@ -210,9 +210,9 @@
  * This functions is also accessible using the macro
  * SDL_iOSSetAnimationCallback() since SDL 2.0.4.
  *
- * \param window the window for which the animation callback should be set
+ * \param window the window for which the animation callback should be set.
  * \param interval the number of frames after which **callback** will be
- *                 called
+ *                 called.
  * \param callback the function to call for every frame.
  * \param callbackParam a pointer that is passed to `callback`.
  * \returns 0 on success or a negative error code on failure; call
@@ -222,10 +222,11 @@
  *
  * \sa SDL_iPhoneSetEventPump
  */
-extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (SDLCALL *callback)(void*), void *callbackParam);
+extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam);
 
-#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)
+#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam)
 
+
 /**
  * Use this function to enable or disable the SDL event pump on Apple iOS.
  *
@@ -234,7 +235,7 @@
  * This functions is also accessible using the macro SDL_iOSSetEventPump()
  * since SDL 2.0.4.
  *
- * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it
+ * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -242,6 +243,9 @@
  */
 extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled);
 
+#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)
+
+/* end of iOS-specific functions. */
 #endif /* __IPHONEOS__ */
 
 
@@ -356,9 +360,9 @@
 extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void);
 
 /**
-   See the official Android developer guide for more information:
-   http://developer.android.com/guide/topics/data/data-storage.html
-*/
+ * See the official Android developer guide for more information:
+ * http://developer.android.com/guide/topics/data/data-storage.html
+ */
 #define SDL_ANDROID_EXTERNAL_STORAGE_READ   0x01
 #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE  0x02
 
@@ -441,11 +445,11 @@
  *
  * https://developer.android.com/reference/android/view/Gravity
  *
- * \param message text message to be shown
- * \param duration 0=short, 1=long
+ * \param message text message to be shown.
+ * \param duration 0=short, 1=long.
  * \param gravity where the notification should appear on the screen.
- * \param xoffset set this parameter only when gravity >=0
- * \param yoffset set this parameter only when gravity >=0
+ * \param xoffset set this parameter only when gravity >=0.
+ * \param yoffset set this parameter only when gravity >=0.
  * \returns 0 if success, -1 if any error occurs.
  *
  * \since This function is available since SDL 2.0.16.
@@ -457,8 +461,8 @@
  *
  * Override "boolean onUnhandledMessage(Message msg)" to handle the message.
  *
- * \param command user command that must be greater or equal to 0x8000
- * \param param user parameter
+ * \param command user command that must be greater or equal to 0x8000.
+ * \param param user parameter.
  *
  * \since This function is available since SDL 2.0.22.
  */
@@ -470,9 +474,9 @@
 #ifdef __WINRT__
 
 /**
- *  \brief WinRT / Windows Phone path types
+ * WinRT / Windows Phone path types
  */
-typedef enum
+typedef enum SDL_WinRT_Path
 {
     /** \brief The installed app's root directory.
         Files here are likely to be read-only. */
@@ -494,9 +498,9 @@
 
 
 /**
- *  \brief WinRT Device Family
+ * WinRT Device Family
  */
-typedef enum
+typedef enum SDL_WinRT_DeviceFamily
 {
     /** \brief Unknown family  */
     SDL_WINRT_DEVICEFAMILY_UNKNOWN,
@@ -524,7 +528,7 @@
  *
  * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
  *
- * \param pathType the type of path to retrieve, one of SDL_WinRT_Path
+ * \param pathType the type of path to retrieve, one of SDL_WinRT_Path.
  * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if
  *          the path is not available for any reason; call SDL_GetError() for
  *          more information.
@@ -547,7 +551,7 @@
  *
  * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
  *
- * \param pathType the type of path to retrieve, one of SDL_WinRT_Path
+ * \param pathType the type of path to retrieve, one of SDL_WinRT_Path.
  * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if
  *          the path is not available for any reason; call SDL_GetError() for
  *          more information.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_syswm.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_syswm.h
@@ -19,10 +19,17 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_syswm.h
+/* WIKI CATEGORY: SYSWM */
+
+/*
+ * # CategorySYSWM
  *
- *  Include file for SDL custom system window manager hooks.
+ * Include file for SDL custom system window manager hooks.
+ *
+ * Your application has access to a special type of event SDL_SYSWMEVENT,
+ * which contains window-manager specific information and arrives whenever
+ * an unhandled window event occurs.  This event is ignored by default, but
+ * you can enable it with SDL_EventState().
  */
 
 #ifndef SDL_syswm_h_
@@ -33,14 +40,6 @@
 #include <SDL2/SDL_video.h>
 #include <SDL2/SDL_version.h>
 
-/**
- *  \brief SDL_syswm.h
- *
- *  Your application has access to a special type of event ::SDL_SYSWMEVENT,
- *  which contains window-manager specific information and arrives whenever
- *  an unhandled window event occurs.  This event is ignored by default, but
- *  you can enable it with SDL_EventState().
- */
 struct SDL_SysWMinfo;
 
 #if !defined(SDL_PROTOTYPES_ONLY)
@@ -129,10 +128,11 @@
 #endif
 
 #if !defined(SDL_PROTOTYPES_ONLY)
+
 /**
- *  These are the various supported windowing subsystems
+ * These are the various supported windowing subsystems
  */
-typedef enum
+typedef enum SDL_SYSWM_TYPE
 {
     SDL_SYSWM_UNKNOWN,
     SDL_SYSWM_WINDOWS,
@@ -152,7 +152,7 @@
 } SDL_SYSWM_TYPE;
 
 /**
- *  The custom event structure.
+ * The custom event structure.
  */
 struct SDL_SysWMmsg
 {
@@ -218,10 +218,10 @@
 };
 
 /**
- *  The custom window manager information structure.
+ * The custom window manager information structure.
  *
- *  When this structure is returned, it holds information about which
- *  low level system it is using, and will be one of SDL_SYSWM_TYPE.
+ * When this structure is returned, it holds information about which low level
+ * system it is using, and will be one of SDL_SYSWM_TYPE.
  */
 struct SDL_SysWMinfo
 {
@@ -363,8 +363,8 @@
  * `SDL_VERSION(&info.version)`, and then this function will fill in the rest
  * of the structure with information about the given window.
  *
- * \param window the window about which information is being requested
- * \param info an SDL_SysWMinfo structure filled in with window information
+ * \param window the window about which information is being requested.
+ * \param info an SDL_SysWMinfo structure filled in with window information.
  * \returns SDL_TRUE if the function is implemented and the `version` member
  *          of the `info` struct is valid, or SDL_FALSE if the information
  *          could not be retrieved; call SDL_GetError() for more information.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_thread.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_thread.h
@@ -23,9 +23,9 @@
 #define SDL_thread_h_
 
 /**
- *  \file SDL_thread.h
+ * # CategoryThread
  *
- *  Header for the SDL thread management routines.
+ * Header for the SDL thread management routines.
  */
 
 #include <SDL2/SDL_stdinc.h>
@@ -63,16 +63,18 @@
 typedef unsigned int SDL_TLSID;
 
 /**
- *  The SDL thread priority.
+ * The SDL thread priority.
  *
- *  SDL will make system changes as necessary in order to apply the thread priority.
- *  Code which attempts to control thread state related to priority should be aware
- *  that calling SDL_SetThreadPriority may alter such state.
- *  SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior.
+ * SDL will make system changes as necessary in order to apply the thread
+ * priority. Code which attempts to control thread state related to priority
+ * should be aware that calling SDL_SetThreadPriority may alter such state.
+ * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this
+ * behavior.
  *
- *  \note On many systems you require special privileges to set high or time critical priority.
+ * On many systems you require special privileges to set high or time critical
+ * priority.
  */
-typedef enum {
+typedef enum SDL_ThreadPriority {
     SDL_THREAD_PRIORITY_LOW,
     SDL_THREAD_PRIORITY_NORMAL,
     SDL_THREAD_PRIORITY_HIGH,
@@ -82,7 +84,7 @@
 /**
  * The function passed to SDL_CreateThread().
  *
- * \param data what was passed as `data` to SDL_CreateThread()
+ * \param data what was passed as `data` to SDL_CreateThread().
  * \returns a value that can be reported through SDL_WaitThread().
  */
 typedef int (SDLCALL * SDL_ThreadFunction) (void *data);
@@ -192,9 +194,9 @@
  * SDL_CreateThreadWithStackSize(fn, name, 0, data);
  * ```
  *
- * \param fn the SDL_ThreadFunction function to call in the new thread
- * \param name the name of the thread
- * \param data a pointer that is passed to `fn`
+ * \param fn the SDL_ThreadFunction function to call in the new thread.
+ * \param name the name of the thread.
+ * \param data a pointer that is passed to `fn`.
  * \returns an opaque pointer to the new thread object on success, NULL if the
  *          new thread could not be created; call SDL_GetError() for more
  *          information.
@@ -238,10 +240,10 @@
  * function, but for backwards compatibility, this is currently a separate
  * function.
  *
- * \param fn the SDL_ThreadFunction function to call in the new thread
- * \param name the name of the thread
+ * \param fn the SDL_ThreadFunction function to call in the new thread.
+ * \param name the name of the thread.
  * \param stacksize the size, in bytes, to allocate for the new thread stack.
- * \param data a pointer that is passed to `fn`
+ * \param data a pointer that is passed to `fn`.
  * \returns an opaque pointer to the new thread object on success, NULL if the
  *          new thread could not be created; call SDL_GetError() for more
  *          information.
@@ -261,7 +263,7 @@
  * This is internal memory, not to be freed by the caller, and remains valid
  * until the specified thread is cleaned up by SDL_WaitThread().
  *
- * \param thread the thread to query
+ * \param thread the thread to query.
  * \returns a pointer to a UTF-8 string that names the specified thread, or
  *          NULL if it doesn't have a name.
  *
@@ -296,7 +298,7 @@
  * If SDL is running on a platform that does not support threads the return
  * value will always be zero.
  *
- * \param thread the thread to query
+ * \param thread the thread to query.
  * \returns the ID of the specified thread, or the ID of the current thread if
  *          `thread` is NULL.
  *
@@ -313,7 +315,7 @@
  * promote the thread to a higher priority) at all, and some require you to be
  * an administrator account. Be prepared for this to fail.
  *
- * \param priority the SDL_ThreadPriority to set
+ * \param priority the SDL_ThreadPriority to set.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -344,7 +346,7 @@
  * afterward.
  *
  * \param thread the SDL_Thread pointer that was returned from the
- *               SDL_CreateThread() call that started this thread
+ *               SDL_CreateThread() call that started this thread.
  * \param status pointer to an integer that will receive the value returned
  *               from the thread function by its 'return', or NULL to not
  *               receive such value back.
@@ -383,7 +385,7 @@
  * It is safe to pass NULL to this function; it is a no-op.
  *
  * \param thread the SDL_Thread pointer that was returned from the
- *               SDL_CreateThread() call that started this thread
+ *               SDL_CreateThread() call that started this thread.
  *
  * \since This function is available since SDL 2.0.2.
  *
@@ -410,7 +412,7 @@
 /**
  * Get the current thread's value associated with a thread local storage ID.
  *
- * \param id the thread local storage ID
+ * \param id the thread local storage ID.
  * \returns the value associated with the ID for the current thread or NULL if
  *          no value has been set; call SDL_GetError() for more information.
  *
@@ -421,6 +423,8 @@
  */
 extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id);
 
+typedef void (SDLCALL *SDL_TLSDestructorCallback)(void*);
+
 /**
  * Set the current thread's value associated with a thread local storage ID.
  *
@@ -432,10 +436,10 @@
  *
  * where its parameter `value` is what was passed as `value` to SDL_TLSSet().
  *
- * \param id the thread local storage ID
- * \param value the value to associate with the ID for the current thread
+ * \param id the thread local storage ID.
+ * \param value the value to associate with the ID for the current thread.
  * \param destructor a function called when the thread exits, to free the
- *                   value
+ *                   value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -444,7 +448,7 @@
  * \sa SDL_TLSCreate
  * \sa SDL_TLSGet
  */
-extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*));
+extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, SDL_TLSDestructorCallback destructor);
 
 /**
  * Cleanup all TLS data for this thread.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_timer.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_timer.h
@@ -23,9 +23,9 @@
 #define SDL_timer_h_
 
 /**
- *  \file SDL_timer.h
+ * # CategoryTimer
  *
- *  Header for the SDL time management routines.
+ * Header for the SDL time management routines.
  */
 
 #include <SDL2/SDL_stdinc.h>
@@ -89,8 +89,8 @@
  * days, but should _not_ be used with SDL_GetTicks64(), which does not have
  * that problem.
  *
- * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could
- * do this:
+ * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could do
+ * this:
  *
  * ```c
  * const Uint32 timeout = SDL_GetTicks() + 100;
@@ -99,9 +99,9 @@
  * }
  * ```
  *
- * Note that this does not handle tick differences greater
- * than 2^31 so take care when using the above kind of code
- * with large timeout delays (tens of days).
+ * Note that this does not handle tick differences greater than 2^31 so take
+ * care when using the above kind of code with large timeout delays (tens of
+ * days).
  */
 #define SDL_TICKS_PASSED(A, B)  ((Sint32)((B) - (A)) <= 0)
 
@@ -140,7 +140,7 @@
  * waits at least the specified time, but possibly longer due to OS
  * scheduling.
  *
- * \param ms the number of milliseconds to delay
+ * \param ms the number of milliseconds to delay.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -149,10 +149,10 @@
 /**
  * Function prototype for the timer callback function.
  *
- * The callback function is passed the current timer interval and returns
- * the next timer interval. If the returned value is the same as the one
- * passed in, the periodic alarm continues, otherwise a new alarm is
- * scheduled. If the callback returns 0, the periodic alarm is cancelled.
+ * The callback function is passed the current timer interval and returns the
+ * next timer interval. If the returned value is the same as the one passed
+ * in, the periodic alarm continues, otherwise a new alarm is scheduled. If
+ * the callback returns 0, the periodic alarm is cancelled.
  */
 typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param);
 
@@ -182,10 +182,10 @@
  * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your
  * callback needs to adjust for variances.
  *
- * \param interval the timer delay, in milliseconds, passed to `callback`
+ * \param interval the timer delay, in milliseconds, passed to `callback`.
  * \param callback the SDL_TimerCallback function to call when the specified
- *                 `interval` elapses
- * \param param a pointer that is passed to `callback`
+ *                 `interval` elapses.
+ * \param param a pointer that is passed to `callback`.
  * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more
  *          information.
  *
@@ -200,7 +200,7 @@
 /**
  * Remove a timer created with SDL_AddTimer().
  *
- * \param id the ID of the timer to remove
+ * \param id the ID of the timer to remove.
  * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't
  *          found.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_touch.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_touch.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_touch.h
+ * # CategoryTouch
  *
- *  Include file for SDL touch event handling.
+ * Include file for SDL touch event handling.
  */
 
 #ifndef SDL_touch_h_
@@ -85,7 +85,7 @@
 /**
  * Get the touch ID with the given index.
  *
- * \param index the touch device index
+ * \param index the touch device index.
  * \returns the touch ID with the given index on success or 0 if the index is
  *          invalid; call SDL_GetError() for more information.
  *
@@ -113,7 +113,7 @@
 /**
  * Get the number of active fingers for a given touch device.
  *
- * \param touchID the ID of a touch device
+ * \param touchID the ID of a touch device.
  * \returns the number of active fingers for a given touch device on success
  *          or 0 on failure; call SDL_GetError() for more information.
  *
@@ -128,8 +128,8 @@
  *
  * The returned resource is owned by SDL and should not be deallocated.
  *
- * \param touchID the ID of the requested touch device
- * \param index the index of the requested finger
+ * \param touchID the ID of the requested touch device.
+ * \param index the index of the requested finger.
  * \returns a pointer to the SDL_Finger object or NULL if no object at the
  *          given ID and index could be found.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_types.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_types.h
@@ -19,11 +19,6 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_types.h
- *
- *  \deprecated
- */
-
 /* DEPRECATED */
+
 #include <SDL2/SDL_stdinc.h>
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_version.h
+ * # CategoryVersion
  *
- *  This header defines the current SDL version.
+ * This header defines the current SDL version.
  */
 
 #ifndef SDL_version_h_
@@ -40,10 +40,9 @@
  * Information about the version of SDL in use.
  *
  * Represents the library's version as three levels: major revision
- * (increments with massive changes, additions, and enhancements),
- * minor revision (increments with backwards-compatible changes to the
- * major revision), and patchlevel (increments with fixes to the minor
- * revision).
+ * (increments with massive changes, additions, and enhancements), minor
+ * revision (increments with backwards-compatible changes to the major
+ * revision), and patchlevel (increments with fixes to the minor revision).
  *
  * \sa SDL_VERSION
  * \sa SDL_GetVersion
@@ -58,18 +57,17 @@
 /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL
 */
 #define SDL_MAJOR_VERSION   2
-#define SDL_MINOR_VERSION   30
-#define SDL_PATCHLEVEL      12
+#define SDL_MINOR_VERSION   32
+#define SDL_PATCHLEVEL      2
 
 /**
  * Macro to determine SDL version program was compiled against.
  *
- * This macro fills in a SDL_version structure with the version of the
- * library you compiled against. This is determined by what header the
- * compiler uses. Note that if you dynamically linked the library, you might
- * have a slightly newer or older version at runtime. That version can be
- * determined with SDL_GetVersion(), which, unlike SDL_VERSION(),
- * is not a macro.
+ * This macro fills in a SDL_version structure with the version of the library
+ * you compiled against. This is determined by what header the compiler uses.
+ * Note that if you dynamically linked the library, you might have a slightly
+ * newer or older version at runtime. That version can be determined with
+ * SDL_GetVersion(), which, unlike SDL_VERSION(), is not a macro.
  *
  * \param x A pointer to a SDL_version struct to initialize.
  *
@@ -85,30 +83,33 @@
 
 /* TODO: Remove this whole block in SDL 3 */
 #if SDL_MAJOR_VERSION < 3
+
 /**
- *  This macro turns the version numbers into a numeric value:
- *  \verbatim
-    (1,2,3) -> (1203)
-    \endverbatim
+ * This macro turns the version numbers into a numeric value:
  *
- *  This assumes that there will never be more than 100 patchlevels.
+ * ```
+ * (1,2,3) -> (1203)
+ * ```
  *
- *  In versions higher than 2.9.0, the minor version overflows into
- *  the thousands digit: for example, 2.23.0 is encoded as 4300,
- *  and 2.255.99 would be encoded as 25799.
- *  This macro will not be available in SDL 3.x.
+ * This assumes that there will never be more than 100 patchlevels.
+ *
+ * In versions higher than 2.9.0, the minor version overflows into the
+ * thousands digit: for example, 2.23.0 is encoded as 4300, and 2.255.99 would
+ * be encoded as 25799.
+ *
+ * This macro will not be available in SDL 3.x.
  */
 #define SDL_VERSIONNUM(X, Y, Z)                     \
     ((X)*1000 + (Y)*100 + (Z))
 
 /**
- *  This is the version number macro for the current SDL version.
+ * This is the version number macro for the current SDL version.
  *
- *  In versions higher than 2.9.0, the minor version overflows into
- *  the thousands digit: for example, 2.23.0 is encoded as 4300.
- *  This macro will not be available in SDL 3.x.
+ * In versions higher than 2.9.0, the minor version overflows into the
+ * thousands digit: for example, 2.23.0 is encoded as 4300. This macro will
+ * not be available in SDL 3.x.
  *
- *  Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead.
+ * Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead.
  */
 #define SDL_COMPILEDVERSION \
     SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL)
@@ -115,7 +116,7 @@
 #endif /* SDL_MAJOR_VERSION < 3 */
 
 /**
- *  This macro will evaluate to true if compiled with SDL at least X.Y.Z.
+ * This macro will evaluate to true if compiled with SDL at least X.Y.Z.
  */
 #define SDL_VERSION_ATLEAST(X, Y, Z) \
     ((SDL_MAJOR_VERSION >= X) && \
@@ -132,7 +133,7 @@
  *
  * This function may be called safely at any time, even before SDL_Init().
  *
- * \param ver the SDL_version structure that contains the version information
+ * \param ver the SDL_version structure that contains the version information.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_video.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_video.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_video.h
+ * # CategoryVideo
  *
- *  Header file for SDL video functions.
+ * Header file for SDL video functions.
  */
 
 #ifndef SDL_video_h_
@@ -40,17 +40,17 @@
 #endif
 
 /**
- *  \brief  The structure that defines a display mode
+ * The structure that defines a display mode
  *
- *  \sa SDL_GetNumDisplayModes()
- *  \sa SDL_GetDisplayMode()
- *  \sa SDL_GetDesktopDisplayMode()
- *  \sa SDL_GetCurrentDisplayMode()
- *  \sa SDL_GetClosestDisplayMode()
- *  \sa SDL_SetWindowDisplayMode()
- *  \sa SDL_GetWindowDisplayMode()
+ * \sa SDL_GetNumDisplayModes
+ * \sa SDL_GetDisplayMode
+ * \sa SDL_GetDesktopDisplayMode
+ * \sa SDL_GetCurrentDisplayMode
+ * \sa SDL_GetClosestDisplayMode
+ * \sa SDL_SetWindowDisplayMode
+ * \sa SDL_GetWindowDisplayMode
  */
-typedef struct
+typedef struct SDL_DisplayMode
 {
     Uint32 format;              /**< pixel format */
     int w;                      /**< width, in screen coordinates */
@@ -60,46 +60,46 @@
 } SDL_DisplayMode;
 
 /**
- *  \brief The type used to identify a window
+ * The opaque type used to identify a window.
  *
- *  \sa SDL_CreateWindow()
- *  \sa SDL_CreateWindowFrom()
- *  \sa SDL_DestroyWindow()
- *  \sa SDL_FlashWindow()
- *  \sa SDL_GetWindowData()
- *  \sa SDL_GetWindowFlags()
- *  \sa SDL_GetWindowGrab()
- *  \sa SDL_GetWindowKeyboardGrab()
- *  \sa SDL_GetWindowMouseGrab()
- *  \sa SDL_GetWindowPosition()
- *  \sa SDL_GetWindowSize()
- *  \sa SDL_GetWindowTitle()
- *  \sa SDL_HideWindow()
- *  \sa SDL_MaximizeWindow()
- *  \sa SDL_MinimizeWindow()
- *  \sa SDL_RaiseWindow()
- *  \sa SDL_RestoreWindow()
- *  \sa SDL_SetWindowData()
- *  \sa SDL_SetWindowFullscreen()
- *  \sa SDL_SetWindowGrab()
- *  \sa SDL_SetWindowKeyboardGrab()
- *  \sa SDL_SetWindowMouseGrab()
- *  \sa SDL_SetWindowIcon()
- *  \sa SDL_SetWindowPosition()
- *  \sa SDL_SetWindowSize()
- *  \sa SDL_SetWindowBordered()
- *  \sa SDL_SetWindowResizable()
- *  \sa SDL_SetWindowTitle()
- *  \sa SDL_ShowWindow()
+ * \sa SDL_CreateWindow
+ * \sa SDL_CreateWindowFrom
+ * \sa SDL_DestroyWindow
+ * \sa SDL_FlashWindow
+ * \sa SDL_GetWindowData
+ * \sa SDL_GetWindowFlags
+ * \sa SDL_GetWindowGrab
+ * \sa SDL_GetWindowKeyboardGrab
+ * \sa SDL_GetWindowMouseGrab
+ * \sa SDL_GetWindowPosition
+ * \sa SDL_GetWindowSize
+ * \sa SDL_GetWindowTitle
+ * \sa SDL_HideWindow
+ * \sa SDL_MaximizeWindow
+ * \sa SDL_MinimizeWindow
+ * \sa SDL_RaiseWindow
+ * \sa SDL_RestoreWindow
+ * \sa SDL_SetWindowData
+ * \sa SDL_SetWindowFullscreen
+ * \sa SDL_SetWindowGrab
+ * \sa SDL_SetWindowKeyboardGrab
+ * \sa SDL_SetWindowMouseGrab
+ * \sa SDL_SetWindowIcon
+ * \sa SDL_SetWindowPosition
+ * \sa SDL_SetWindowSize
+ * \sa SDL_SetWindowBordered
+ * \sa SDL_SetWindowResizable
+ * \sa SDL_SetWindowTitle
+ * \sa SDL_ShowWindow
  */
 typedef struct SDL_Window SDL_Window;
 
 /**
- *  \brief The flags on a window
+ * The flags on a window
  *
- *  \sa SDL_GetWindowFlags()
+ * \sa SDL_GetWindowFlags
  */
-typedef enum
+typedef enum SDL_WindowFlags
 {
     SDL_WINDOW_FULLSCREEN = 0x00000001,         /**< fullscreen window */
     SDL_WINDOW_OPENGL = 0x00000002,             /**< window usable with OpenGL context */
@@ -131,7 +131,7 @@
 } SDL_WindowFlags;
 
 /**
- *  \brief Used to indicate that you don't care what the window position is.
+ * Used to indicate that you don't care what the window position is.
  */
 #define SDL_WINDOWPOS_UNDEFINED_MASK    0x1FFF0000u
 #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X)  (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
@@ -140,7 +140,7 @@
             (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK)
 
 /**
- *  \brief Used to indicate that the window position should be centered.
+ * Used to indicate that the window position should be centered.
  */
 #define SDL_WINDOWPOS_CENTERED_MASK    0x2FFF0000u
 #define SDL_WINDOWPOS_CENTERED_DISPLAY(X)  (SDL_WINDOWPOS_CENTERED_MASK|(X))
@@ -149,9 +149,9 @@
             (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK)
 
 /**
- *  \brief Event subtype for window events
+ * Event subtype for window events
  */
-typedef enum
+typedef enum SDL_WindowEventID
 {
     SDL_WINDOWEVENT_NONE,           /**< Never used */
     SDL_WINDOWEVENT_SHOWN,          /**< Window has been shown */
@@ -180,9 +180,9 @@
 } SDL_WindowEventID;
 
 /**
- *  \brief Event subtype for display events
+ * Event subtype for display events
  */
-typedef enum
+typedef enum SDL_DisplayEventID
 {
     SDL_DISPLAYEVENT_NONE,          /**< Never used */
     SDL_DISPLAYEVENT_ORIENTATION,   /**< Display orientation has changed to data1 */
@@ -192,9 +192,9 @@
 } SDL_DisplayEventID;
 
 /**
- *  \brief Display orientation
+ * Display orientation
  */
-typedef enum
+typedef enum SDL_DisplayOrientation
 {
     SDL_ORIENTATION_UNKNOWN,            /**< The display orientation can't be determined */
     SDL_ORIENTATION_LANDSCAPE,          /**< The display is in landscape mode, with the right side up, relative to portrait mode */
@@ -204,9 +204,9 @@
 } SDL_DisplayOrientation;
 
 /**
- *  \brief Window flash operation
+ * Window flash operation
  */
-typedef enum
+typedef enum SDL_FlashOperation
 {
     SDL_FLASH_CANCEL,                   /**< Cancel any window flash state */
     SDL_FLASH_BRIEFLY,                  /**< Flash the window briefly to get attention */
@@ -214,46 +214,78 @@
 } SDL_FlashOperation;
 
 /**
- *  \brief An opaque handle to an OpenGL context.
+ * An opaque handle to an OpenGL context.
+ *
+ * \sa SDL_GL_CreateContext
  */
 typedef void *SDL_GLContext;
 
 /**
- *  \brief OpenGL configuration attributes
+ * OpenGL configuration attributes.
+ *
+ * While you can set most OpenGL attributes normally, the attributes listed
+ * above must be known before SDL creates the window that will be used with
+ * the OpenGL context. These attributes are set and read with
+ * SDL_GL_SetAttribute and SDL_GL_GetAttribute.
+ *
+ * In some cases, these attributes are minimum requests; the GL does not
+ * promise to give you exactly what you asked for. It's possible to ask for a
+ * 16-bit depth buffer and get a 24-bit one instead, for example, or to ask
+ * for no stencil buffer and still have one available. Context creation should
+ * fail if the GL can't provide your requested attributes at a minimum, but
+ * you should check to see exactly what you got.
+ *
+ *
+ * [Multisample anti-aliasing](http://en.wikipedia.org/wiki/Multisample_anti-aliasing)
+ * is a type of full screen anti-aliasing. Multipsampling defaults to off but
+ * can be turned on by setting SDL_GL_MULTISAMPLEBUFFERS to 1 and
+ * SDL_GL_MULTISAMPLESAMPLES to a value greater than 0. Typical values are 2
+ * and 4.
+ *
+ * SDL_GL_CONTEXT_PROFILE_MASK determines the type of context created, while
+ * both SDL_GL_CONTEXT_MAJOR_VERSION and SDL_GL_CONTEXT_MINOR_VERSION
+ * determine which version. All three attributes must be set prior to creating
+ * the first window, and in general you can't change the value of
+ * SDL_GL_CONTEXT_PROFILE_MASK without first destroying all windows created
+ * with the previous setting.
+ *
+ * SDL_GL_CONTEXT_RELEASE_BEHAVIOR can be set to
+ * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE or
+ * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH.
  */
-typedef enum
+typedef enum SDL_GLattr
 {
-    SDL_GL_RED_SIZE,
-    SDL_GL_GREEN_SIZE,
-    SDL_GL_BLUE_SIZE,
-    SDL_GL_ALPHA_SIZE,
-    SDL_GL_BUFFER_SIZE,
-    SDL_GL_DOUBLEBUFFER,
-    SDL_GL_DEPTH_SIZE,
-    SDL_GL_STENCIL_SIZE,
-    SDL_GL_ACCUM_RED_SIZE,
-    SDL_GL_ACCUM_GREEN_SIZE,
-    SDL_GL_ACCUM_BLUE_SIZE,
-    SDL_GL_ACCUM_ALPHA_SIZE,
-    SDL_GL_STEREO,
-    SDL_GL_MULTISAMPLEBUFFERS,
-    SDL_GL_MULTISAMPLESAMPLES,
-    SDL_GL_ACCELERATED_VISUAL,
-    SDL_GL_RETAINED_BACKING,
-    SDL_GL_CONTEXT_MAJOR_VERSION,
-    SDL_GL_CONTEXT_MINOR_VERSION,
-    SDL_GL_CONTEXT_EGL,
-    SDL_GL_CONTEXT_FLAGS,
-    SDL_GL_CONTEXT_PROFILE_MASK,
-    SDL_GL_SHARE_WITH_CURRENT_CONTEXT,
-    SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,
-    SDL_GL_CONTEXT_RELEASE_BEHAVIOR,
+    SDL_GL_RED_SIZE,                    /**< the minimum number of bits for the red channel of the color buffer; defaults to 3. */
+    SDL_GL_GREEN_SIZE,                  /**< the minimum number of bits for the green channel of the color buffer; defaults to 3. */
+    SDL_GL_BLUE_SIZE,                   /**< the minimum number of bits for the blue channel of the color buffer; defaults to 2. */
+    SDL_GL_ALPHA_SIZE,                  /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 0. */
+    SDL_GL_BUFFER_SIZE,                 /**< the minimum number of bits for frame buffer size; defaults to 0. */
+    SDL_GL_DOUBLEBUFFER,                /**< whether the output is single or double buffered; defaults to double buffering on. */
+    SDL_GL_DEPTH_SIZE,                  /**< the minimum number of bits in the depth buffer; defaults to 16. */
+    SDL_GL_STENCIL_SIZE,                /**< the minimum number of bits in the stencil buffer; defaults to 0. */
+    SDL_GL_ACCUM_RED_SIZE,              /**< the minimum number of bits for the red channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_ACCUM_GREEN_SIZE,            /**< the minimum number of bits for the green channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_ACCUM_BLUE_SIZE,             /**< the minimum number of bits for the blue channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_ACCUM_ALPHA_SIZE,            /**< the minimum number of bits for the alpha channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_STEREO,                      /**< whether the output is stereo 3D; defaults to off. */
+    SDL_GL_MULTISAMPLEBUFFERS,          /**< the number of buffers used for multisample anti-aliasing; defaults to 0. */
+    SDL_GL_MULTISAMPLESAMPLES,          /**< the number of samples used around the current pixel used for multisample anti-aliasing. */
+    SDL_GL_ACCELERATED_VISUAL,          /**< set to 1 to require hardware acceleration, set to 0 to force software rendering; defaults to allow either. */
+    SDL_GL_RETAINED_BACKING,            /**< not used (deprecated). */
+    SDL_GL_CONTEXT_MAJOR_VERSION,       /**< OpenGL context major version. */
+    SDL_GL_CONTEXT_MINOR_VERSION,       /**< OpenGL context minor version. */
+    SDL_GL_CONTEXT_EGL,                 /**< deprecated: set SDL_GL_CONTEXT_PROFILE_MASK to SDL_GL_CONTEXT_PROFILE_ES to enable instead. */
+    SDL_GL_CONTEXT_FLAGS,               /**< some combination of 0 or more of elements of the SDL_GLcontextFlag enumeration; defaults to 0. */
+    SDL_GL_CONTEXT_PROFILE_MASK,        /**< type of GL context (Core, Compatibility, ES). See SDL_GLprofile; default value depends on platform. */
+    SDL_GL_SHARE_WITH_CURRENT_CONTEXT,  /**< OpenGL context sharing; defaults to 0. */
+    SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,    /**< requests sRGB capable visual; defaults to 0. (>= SDL 2.0.1) */
+    SDL_GL_CONTEXT_RELEASE_BEHAVIOR,    /**< sets context the release behavior; defaults to 1. (>= SDL 2.0.4) */
     SDL_GL_CONTEXT_RESET_NOTIFICATION,
     SDL_GL_CONTEXT_NO_ERROR,
     SDL_GL_FLOATBUFFERS
 } SDL_GLattr;
 
-typedef enum
+typedef enum SDL_GLprofile
 {
     SDL_GL_CONTEXT_PROFILE_CORE           = 0x0001,
     SDL_GL_CONTEXT_PROFILE_COMPATIBILITY  = 0x0002,
@@ -260,7 +292,7 @@
     SDL_GL_CONTEXT_PROFILE_ES             = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
 } SDL_GLprofile;
 
-typedef enum
+typedef enum SDL_GLcontextFlag
 {
     SDL_GL_CONTEXT_DEBUG_FLAG              = 0x0001,
     SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002,
@@ -268,13 +300,13 @@
     SDL_GL_CONTEXT_RESET_ISOLATION_FLAG    = 0x0008
 } SDL_GLcontextFlag;
 
-typedef enum
+typedef enum SDL_GLcontextReleaseFlag
 {
     SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE   = 0x0000,
     SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH  = 0x0001
 } SDL_GLcontextReleaseFlag;
 
-typedef enum
+typedef enum SDL_GLContextResetNotification
 {
     SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000,
     SDL_GL_CONTEXT_RESET_LOSE_CONTEXT    = 0x0001
@@ -300,7 +332,7 @@
  * The video drivers are presented in the order in which they are normally
  * checked during initialization.
  *
- * \param index the index of a video driver
+ * \param index the index of a video driver.
  * \returns the name of the video driver with the given **index**.
  *
  * \since This function is available since SDL 2.0.0.
@@ -327,7 +359,7 @@
  * specific `driver_name`.
  *
  * \param driver_name the name of a video driver to initialize, or NULL for
- *                    the default driver
+ *                    the default driver.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -380,7 +412,7 @@
  * Get the name of a display in UTF-8 encoding.
  *
  * \param displayIndex the index of display from which the name should be
- *                     queried
+ *                     queried.
  * \returns the name of a display or NULL for an invalid display index or
  *          failure; call SDL_GetError() for more information.
  *
@@ -395,8 +427,8 @@
  *
  * The primary display (`displayIndex` zero) is always located at 0,0.
  *
- * \param displayIndex the index of the display to query
- * \param rect the SDL_Rect structure filled in with the display bounds
+ * \param displayIndex the index of the display to query.
+ * \param rect the SDL_Rect structure filled in with the display bounds.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -425,8 +457,8 @@
  * range.
  *
  * \param displayIndex the index of the display to query the usable bounds
- *                     from
- * \param rect the SDL_Rect structure filled in with the display bounds
+ *                     from.
+ * \param rect the SDL_Rect structure filled in with the display bounds.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -456,13 +488,13 @@
  * more consistent, reliable, and clear.
  *
  * \param displayIndex the index of the display from which DPI information
- *                     should be queried
+ *                     should be queried.
  * \param ddpi a pointer filled in with the diagonal DPI of the display; may
- *             be NULL
+ *             be NULL.
  * \param hdpi a pointer filled in with the horizontal DPI of the display; may
- *             be NULL
+ *             be NULL.
  * \param vdpi a pointer filled in with the vertical DPI of the display; may
- *             be NULL
+ *             be NULL.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -475,7 +507,7 @@
 /**
  * Get the orientation of a display.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \returns The SDL_DisplayOrientation enum value of the display, or
  *          `SDL_ORIENTATION_UNKNOWN` if it isn't available.
  *
@@ -491,7 +523,7 @@
  * The `displayIndex` needs to be in the range from 0 to
  * SDL_GetNumVideoDisplays() - 1.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \returns a number >= 1 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -513,10 +545,10 @@
  * - packed pixel layout -> largest to smallest
  * - refresh rate -> highest to lowest
  *
- * \param displayIndex the index of the display to query
- * \param modeIndex the index of the display mode to query
+ * \param displayIndex the index of the display to query.
+ * \param modeIndex the index of the display mode to query.
  * \param mode an SDL_DisplayMode structure filled in with the mode at
- *             `modeIndex`
+ *             `modeIndex`.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -535,9 +567,9 @@
  * function will return the previous native display mode, and not the current
  * display mode.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \param mode an SDL_DisplayMode structure filled in with the current display
- *             mode
+ *             mode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -557,9 +589,9 @@
  * function will return the current display mode, and not the previous native
  * display mode.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \param mode an SDL_DisplayMode structure filled in with the current display
- *             mode
+ *             mode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -583,11 +615,11 @@
  * and finally checking the refresh rate. If all the available modes are too
  * small, then NULL is returned.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \param mode an SDL_DisplayMode structure containing the desired display
- *             mode
+ *             mode.
  * \param closest an SDL_DisplayMode structure filled in with the closest
- *                match of the available display modes
+ *                match of the available display modes.
  * \returns the passed in value `closest` or NULL if no matching video mode
  *          was available; call SDL_GetError() for more information.
  *
@@ -601,7 +633,7 @@
 /**
  * Get the index of the display containing a point
  *
- * \param point the point to query
+ * \param point the point to query.
  * \returns the index of the display containing the point or a negative error
  *          code on failure; call SDL_GetError() for more information.
  *
@@ -615,7 +647,7 @@
 /**
  * Get the index of the display primarily containing a rect
  *
- * \param rect the rect to query
+ * \param rect the rect to query.
  * \returns the index of the display entirely containing the rect or closest
  *          to the center of the rect on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
@@ -630,7 +662,7 @@
 /**
  * Get the index of the display associated with a window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the index of the display containing the center of the window on
  *          success or a negative error code on failure; call SDL_GetError()
  *          for more information.
@@ -649,10 +681,10 @@
  * change the window size when the window is not fullscreen, use
  * SDL_SetWindowSize().
  *
- * \param window the window to affect
+ * \param window the window to affect.
  * \param mode the SDL_DisplayMode structure representing the mode to use, or
  *             NULL to use the window's dimensions and the desktop's format
- *             and refresh rate
+ *             and refresh rate.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -667,9 +699,9 @@
 /**
  * Query the display mode to use when a window is visible at fullscreen.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param mode an SDL_DisplayMode structure filled in with the fullscreen
- *             display mode
+ *             display mode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -686,8 +718,8 @@
  *
  * Data returned should be freed with SDL_free.
  *
- * \param window the window to query
- * \param size the size of the ICC profile
+ * \param window the window to query.
+ * \param size the size of the ICC profile.
  * \returns the raw ICC profile data on success or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -698,7 +730,7 @@
 /**
  * Get the pixel format associated with the window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the pixel format of the window on success or
  *          SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more
  *          information.
@@ -762,15 +794,15 @@
  * loader or link to a dynamic library version. This limitation may be removed
  * in a future version of SDL.
  *
- * \param title the title of the window, in UTF-8 encoding
+ * \param title the title of the window, in UTF-8 encoding.
  * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or
- *          `SDL_WINDOWPOS_UNDEFINED`
+ *          `SDL_WINDOWPOS_UNDEFINED`.
  * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or
- *          `SDL_WINDOWPOS_UNDEFINED`
- * \param w the width of the window, in screen coordinates
- * \param h the height of the window, in screen coordinates
- * \param flags 0, or one or more SDL_WindowFlags OR'd together
- * \returns the window that was created or NULL on failure; call
+ *          `SDL_WINDOWPOS_UNDEFINED`.
+ * \param w the width of the window, in screen coordinates.
+ * \param h the height of the window, in screen coordinates.
+ * \param flags 0, or one or more SDL_WindowFlags OR'd together.
+ * \returns the `SDL_Window` that was created or NULL on failure; call
  *          SDL_GetError() for more information.
  *
  * \since This function is available since SDL 2.0.0.
@@ -790,7 +822,7 @@
  * before using SDL_CreateWindowFrom().
  *
  * \param data a pointer to driver-dependent window creation data, typically
- *             your native window cast to a void*
+ *             your native window cast to a void*.
  * \returns the window that was created or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -807,7 +839,7 @@
  * The numeric ID is what SDL_WindowEvent references, and is necessary to map
  * these events to specific SDL_Window objects.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the ID of the window on success or 0 on failure; call
  *          SDL_GetError() for more information.
  *
@@ -823,7 +855,7 @@
  * The numeric ID is what SDL_WindowEvent references, and is necessary to map
  * these events to specific SDL_Window objects.
  *
- * \param id the ID of the window
+ * \param id the ID of the window.
  * \returns the window associated with `id` or NULL if it doesn't exist; call
  *          SDL_GetError() for more information.
  *
@@ -836,8 +868,8 @@
 /**
  * Get the window flags.
  *
- * \param window the window to query
- * \returns a mask of the SDL_WindowFlags associated with `window`
+ * \param window the window to query.
+ * \returns a mask of the SDL_WindowFlags associated with `window`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -856,8 +888,8 @@
  *
  * This string is expected to be in UTF-8 encoding.
  *
- * \param window the window to change
- * \param title the desired window title in UTF-8 format
+ * \param window the window to change.
+ * \param title the desired window title in UTF-8 format.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -869,7 +901,7 @@
 /**
  * Get the title of a window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the title of the window in UTF-8 format or "" if there is no
  *          title.
  *
@@ -882,8 +914,8 @@
 /**
  * Set the icon for a window.
  *
- * \param window the window to change
- * \param icon an SDL_Surface structure containing the icon for the window
+ * \param window the window to change.
+ * \param icon an SDL_Surface structure containing the icon for the window.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -895,9 +927,9 @@
  *
  * `name` is case-sensitive.
  *
- * \param window the window to associate with the pointer
- * \param name the name of the pointer
- * \param userdata the associated pointer
+ * \param window the window to associate with the pointer.
+ * \param name the name of the pointer.
+ * \param userdata the associated pointer.
  * \returns the previous value associated with `name`.
  *
  * \since This function is available since SDL 2.0.0.
@@ -911,8 +943,8 @@
 /**
  * Retrieve the data pointer associated with a window.
  *
- * \param window the window to query
- * \param name the name of the pointer
+ * \param window the window to query.
+ * \param name the name of the pointer.
  * \returns the value associated with `name`.
  *
  * \since This function is available since SDL 2.0.0.
@@ -927,11 +959,11 @@
  *
  * The window coordinate origin is the upper left of the display.
  *
- * \param window the window to reposition
+ * \param window the window to reposition.
  * \param x the x coordinate of the window in screen coordinates, or
- *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`
+ *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`.
  * \param y the y coordinate of the window in screen coordinates, or
- *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`
+ *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -946,11 +978,11 @@
  * If you do not need the value for one of the positions a NULL may be passed
  * in the `x` or `y` parameter.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param x a pointer filled in with the x position of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  * \param y a pointer filled in with the y position of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -970,11 +1002,11 @@
  * Fullscreen windows automatically match the size of the display mode, and
  * you should use SDL_SetWindowDisplayMode() to change their size.
  *
- * \param window the window to change
+ * \param window the window to change.
  * \param w the width of the window in pixels, in screen coordinates, must be
- *          > 0
+ *          > 0.
  * \param h the height of the window in pixels, in screen coordinates, must be
- *          > 0
+ *          > 0.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -996,11 +1028,11 @@
  * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the
  * real client area size in pixels.
  *
- * \param window the window to query the width and height from
+ * \param window the window to query the width and height from.
  * \param w a pointer filled in with the width of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  * \param h a pointer filled in with the height of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1027,15 +1059,15 @@
  * This function also returns -1 if getting the information is not supported.
  *
  * \param window the window to query the size values of the border
- *               (decorations) from
+ *               (decorations) from.
  * \param top pointer to variable for storing the size of the top border; NULL
- *            is permitted
+ *            is permitted.
  * \param left pointer to variable for storing the size of the left border;
- *             NULL is permitted
+ *             NULL is permitted.
  * \param bottom pointer to variable for storing the size of the bottom
- *               border; NULL is permitted
+ *               border; NULL is permitted.
  * \param right pointer to variable for storing the size of the right border;
- *              NULL is permitted
+ *              NULL is permitted.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1055,10 +1087,11 @@
  * platform with high-DPI support (Apple calls this "Retina"), and not
  * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
  *
- * \param window the window from which the drawable size should be queried
- * \param w a pointer to variable for storing the width in pixels, may be NULL
+ * \param window the window from which the drawable size should be queried.
+ * \param w a pointer to variable for storing the width in pixels, may be
+ *          NULL.
  * \param h a pointer to variable for storing the height in pixels, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.26.0.
  *
@@ -1071,9 +1104,9 @@
 /**
  * Set the minimum size of a window's client area.
  *
- * \param window the window to change
- * \param min_w the minimum width of the window in pixels
- * \param min_h the minimum height of the window in pixels
+ * \param window the window to change.
+ * \param min_w the minimum width of the window in pixels.
+ * \param min_h the minimum height of the window in pixels.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1086,11 +1119,11 @@
 /**
  * Get the minimum size of a window's client area.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param w a pointer filled in with the minimum width of the window, may be
- *          NULL
+ *          NULL.
  * \param h a pointer filled in with the minimum height of the window, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1103,9 +1136,9 @@
 /**
  * Set the maximum size of a window's client area.
  *
- * \param window the window to change
- * \param max_w the maximum width of the window in pixels
- * \param max_h the maximum height of the window in pixels
+ * \param window the window to change.
+ * \param max_w the maximum width of the window in pixels.
+ * \param max_h the maximum height of the window in pixels.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1118,11 +1151,11 @@
 /**
  * Get the maximum size of a window's client area.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param w a pointer filled in with the maximum width of the window, may be
- *          NULL
+ *          NULL.
  * \param h a pointer filled in with the maximum height of the window, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1141,8 +1174,8 @@
  *
  * You can't change the border state of a fullscreen window.
  *
- * \param window the window of which to change the border state
- * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border
+ * \param window the window of which to change the border state.
+ * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1160,8 +1193,8 @@
  *
  * You can't change the resizable state of a fullscreen window.
  *
- * \param window the window of which to change the resizable state
- * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow
+ * \param window the window of which to change the resizable state.
+ * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow.
  *
  * \since This function is available since SDL 2.0.5.
  *
@@ -1176,9 +1209,9 @@
  * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This
  * will bring the window to the front and keep the window above the rest.
  *
- * \param window The window of which to change the always on top state
+ * \param window The window of which to change the always on top state.
  * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to
- *               disable
+ *               disable.
  *
  * \since This function is available since SDL 2.0.16.
  *
@@ -1190,7 +1223,7 @@
 /**
  * Show a window.
  *
- * \param window the window to show
+ * \param window the window to show.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1202,7 +1235,7 @@
 /**
  * Hide a window.
  *
- * \param window the window to hide
+ * \param window the window to hide.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1213,7 +1246,7 @@
 /**
  * Raise a window above other windows and set the input focus.
  *
- * \param window the window to raise
+ * \param window the window to raise.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -1222,7 +1255,7 @@
 /**
  * Make a window as large as possible.
  *
- * \param window the window to maximize
+ * \param window the window to maximize.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1234,7 +1267,7 @@
 /**
  * Minimize a window to an iconic representation.
  *
- * \param window the window to minimize
+ * \param window the window to minimize.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1246,7 +1279,7 @@
 /**
  * Restore the size and position of a minimized or maximized window.
  *
- * \param window the window to restore
+ * \param window the window to restore.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1262,8 +1295,12 @@
  * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen
  * that takes the size of the desktop; and 0 for windowed mode.
  *
- * \param window the window to change
- * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0
+ * Note that for some renderers, this function may trigger an
+ * SDL_RENDER_TARGETS_RESET event. Your application should be prepared to
+ * handle this event by reuploading textures!
+ *
+ * \param window the window to change.
+ * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1297,11 +1334,15 @@
  * This surface will be invalidated if the window is resized. After resizing a
  * window this function must be called again to return a valid surface.
  *
+ * Note that on some platforms the pixels pointer of the surface may be
+ * modified after each call to SDL_UpdateWindowSurface(), so that the platform
+ * code can implement efficient double or triple buffering.
+ *
  * You may not combine this with 3D or the rendering API on this window.
  *
  * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the surface associated with the window, or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1322,7 +1363,7 @@
  *
  * This function is equivalent to the SDL 1.2 API SDL_Flip().
  *
- * \param window the window to update
+ * \param window the window to update.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1343,13 +1384,13 @@
  *
  * Note that this function will update _at least_ the rectangles specified,
  * but this is only intended as an optimization; in practice, this might
- * update more of the screen (or all of the screen!), depending on what
- * method SDL uses to send pixels to the system.
+ * update more of the screen (or all of the screen!), depending on what method
+ * SDL uses to send pixels to the system.
  *
- * \param window the window to update
+ * \param window the window to update.
  * \param rects an array of SDL_Rect structures representing areas of the
- *              surface to copy, in pixels
- * \param numrects the number of rectangles
+ *              surface to copy, in pixels.
+ * \param numrects the number of rectangles.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1365,7 +1406,7 @@
 /**
  * Destroy the surface associated with the window.
  *
- * \param window the window to update
+ * \param window the window to update.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1386,8 +1427,8 @@
  * If the caller enables a grab while another window is currently grabbed, the
  * other window loses its grab in favor of the caller's window.
  *
- * \param window the window for which the input grab mode should be set
- * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input
+ * \param window the window for which the input grab mode should be set.
+ * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1448,7 +1489,7 @@
 /**
  * Get a window's input grab mode.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -1460,7 +1501,7 @@
 /**
  * Get a window's keyboard grab mode.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.16.
@@ -1473,7 +1514,7 @@
 /**
  * Get a window's mouse grab mode.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.16.
@@ -1517,7 +1558,7 @@
 /**
  * Get the mouse confinement rectangle of a window.
  *
- * \param window The window to query
+ * \param window The window to query.
  * \returns A pointer to the mouse confinement rectangle of a window, or NULL
  *          if there isn't one.
  *
@@ -1542,9 +1583,9 @@
  * something similar.
  *
  * \param window the window used to select the display whose brightness will
- *               be changed
+ *               be changed.
  * \param brightness the brightness (gamma multiplier) value to set where 0.0
- *                   is completely dark and 1.0 is normal brightness
+ *                   is completely dark and 1.0 is normal brightness.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1564,7 +1605,7 @@
  * this display can be retrieved using SDL_GetWindowDisplayIndex().)
  *
  * \param window the window used to select the display whose brightness will
- *               be queried
+ *               be queried.
  * \returns the brightness for the display where 0.0 is completely dark and
  *          1.0 is normal brightness.
  *
@@ -1582,8 +1623,8 @@
  *
  * This function also returns -1 if setting the opacity isn't supported.
  *
- * \param window the window which will be made transparent or opaque
- * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque)
+ * \param window the window which will be made transparent or opaque.
+ * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1603,8 +1644,8 @@
  *
  * This function also returns -1 if an invalid window was provided.
  *
- * \param window the window to get the current opacity value from
- * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque)
+ * \param window the window to get the current opacity value from.
+ * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1617,8 +1658,8 @@
 /**
  * Set the window as a modal for another window.
  *
- * \param modal_window the window that should be set modal
- * \param parent_window the parent window for the modal window
+ * \param modal_window the window that should be set modal.
+ * \param parent_window the parent window for the modal window.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1633,7 +1674,7 @@
  * this with caution, as you might give focus to a window that is completely
  * obscured by other windows.
  *
- * \param window the window that should get the input focus
+ * \param window the window that should get the input focus.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1659,13 +1700,13 @@
  * ramp set will not follow the window if it is moved to another display.
  *
  * \param window the window used to select the display whose gamma ramp will
- *               be changed
+ *               be changed.
  * \param red a 256 element array of 16-bit quantities representing the
- *            translation table for the red channel, or NULL
+ *            translation table for the red channel, or NULL.
  * \param green a 256 element array of 16-bit quantities representing the
- *              translation table for the green channel, or NULL
+ *              translation table for the green channel, or NULL.
  * \param blue a 256 element array of 16-bit quantities representing the
- *             translation table for the blue channel, or NULL
+ *             translation table for the blue channel, or NULL.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1687,13 +1728,13 @@
  * this display can be retrieved using SDL_GetWindowDisplayIndex().)
  *
  * \param window the window used to select the display whose gamma ramp will
- *               be queried
+ *               be queried.
  * \param red a 256 element array of 16-bit quantities filled in with the
- *            translation table for the red channel, or NULL
+ *            translation table for the red channel, or NULL.
  * \param green a 256 element array of 16-bit quantities filled in with the
- *              translation table for the green channel, or NULL
+ *              translation table for the green channel, or NULL.
  * \param blue a 256 element array of 16-bit quantities filled in with the
- *             translation table for the blue channel, or NULL
+ *             translation table for the blue channel, or NULL.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1711,7 +1752,7 @@
  *
  * \sa SDL_HitTest
  */
-typedef enum
+typedef enum SDL_HitTestResult
 {
     SDL_HITTEST_NORMAL,  /**< Region is normal. No special properties. */
     SDL_HITTEST_DRAGGABLE,  /**< Region can drag entire window. */
@@ -1728,9 +1769,9 @@
 /**
  * Callback used for hit-testing.
  *
- * \param win the SDL_Window where hit-testing was set on
- * \param area an SDL_Point which should be hit-tested
- * \param data what was passed as `callback_data` to SDL_SetWindowHitTest()
+ * \param win the SDL_Window where hit-testing was set on.
+ * \param area an SDL_Point which should be hit-tested.
+ * \param data what was passed as `callback_data` to SDL_SetWindowHitTest().
  * \return an SDL_HitTestResult value.
  *
  * \sa SDL_SetWindowHitTest
@@ -1771,9 +1812,9 @@
  * can fire at any time, you should try to keep your callback efficient,
  * devoid of allocations, etc.
  *
- * \param window the window to set hit-testing on
- * \param callback the function to call when doing a hit-test
- * \param callback_data an app-defined void pointer passed to **callback**
+ * \param window the window to set hit-testing on.
+ * \param callback the function to call when doing a hit-test.
+ * \param callback_data an app-defined void pointer passed to **callback**.
  * \returns 0 on success or -1 on error (including unsupported); call
  *          SDL_GetError() for more information.
  *
@@ -1786,8 +1827,8 @@
 /**
  * Request a window to demand attention from the user.
  *
- * \param window the window to be flashed
- * \param operation the flash operation
+ * \param window the window to be flashed.
+ * \param operation the flash operation.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1801,7 +1842,7 @@
  * If `window` is NULL, this function will return immediately after setting
  * the SDL error message to "Invalid window". See SDL_GetError().
  *
- * \param window the window to destroy
+ * \param window the window to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1872,7 +1913,7 @@
  * program from the dynamic library using SDL_GL_GetProcAddress().
  *
  * \param path the platform dependent OpenGL library name, or NULL to open the
- *             default OpenGL library
+ *             default OpenGL library.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1924,7 +1965,7 @@
  *   code. This will ensure the proper calling convention is followed on
  *   platforms where this matters (Win32) thereby avoiding stack corruption.
  *
- * \param proc the name of an OpenGL function
+ * \param proc the name of an OpenGL function.
  * \returns a pointer to the named OpenGL function. The returned pointer
  *          should be cast to the appropriate function signature.
  *
@@ -1959,7 +2000,7 @@
  * context and save that information somewhere instead of calling the function
  * every time you need to know.
  *
- * \param extension the name of the extension to check
+ * \param extension the name of the extension to check.
  * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -1985,8 +2026,9 @@
  * SDL_GL_GetAttribute() to check the values after creating the OpenGL
  * context, since the values obtained can differ from the requested ones.
  *
- * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set
- * \param value the desired value for the attribute
+ * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to
+ *             set.
+ * \param value the desired value for the attribute.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -2000,8 +2042,9 @@
 /**
  * Get the actual value for an attribute from the current context.
  *
- * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get
- * \param value a pointer filled in with the current value of `attr`
+ * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to
+ *             get.
+ * \param value a pointer filled in with the current value of `attr`.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -2023,7 +2066,7 @@
  *
  * SDL_GLContext is an alias for `void *`. It's opaque to the application.
  *
- * \param window the window to associate with the context
+ * \param window the window to associate with the context.
  * \returns the OpenGL context associated with `window` or NULL on error; call
  *          SDL_GetError() for more details.
  *
@@ -2040,8 +2083,8 @@
  *
  * The context must have been created with a compatible window.
  *
- * \param window the window to associate with the context
- * \param context the OpenGL context to associate with the window
+ * \param window the window to associate with the context.
+ * \param context the OpenGL context to associate with the window.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -2084,10 +2127,11 @@
  * platform with high-DPI support (Apple calls this "Retina"), and not
  * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
  *
- * \param window the window from which the drawable size should be queried
- * \param w a pointer to variable for storing the width in pixels, may be NULL
+ * \param window the window from which the drawable size should be queried.
+ * \param w a pointer to variable for storing the width in pixels, may be
+ *          NULL.
  * \param h a pointer to variable for storing the height in pixels, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.0.1.
  *
@@ -2116,7 +2160,7 @@
  * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync
  *
  * \param interval 0 for immediate updates, 1 for updates synchronized with
- *                 the vertical retrace, -1 for adaptive vsync
+ *                 the vertical retrace, -1 for adaptive vsync.
  * \returns 0 on success or -1 if setting the swap interval is not supported;
  *          call SDL_GetError() for more information.
  *
@@ -2153,7 +2197,7 @@
  * glBindFramebuffer(), this is the default and you won't have to do anything
  * extra.
  *
- * \param window the window to change
+ * \param window the window to change.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -2162,7 +2206,7 @@
 /**
  * Delete an OpenGL context.
  *
- * \param context the OpenGL context to be deleted
+ * \param context the OpenGL context to be deleted.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_vulkan.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_vulkan.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_vulkan.h
+ * # CategoryVulkan
  *
- *  Header file for functions to creating Vulkan surfaces on SDL windows.
+ * Header file for functions to creating Vulkan surfaces on SDL windows.
  */
 
 #ifndef SDL_vulkan_h_
@@ -101,13 +101,13 @@
  * supported. Either do not link to the Vulkan loader or link to a dynamic
  * library version.
  *
- * \param path The platform dependent Vulkan loader library name or NULL
+ * \param path The platform dependent Vulkan loader library name or NULL.
  * \returns 0 on success or -1 if the library couldn't be loaded; call
  *          SDL_GetError() for more information.
  *
  * \since This function is available since SDL 2.0.6.
  *
- * \sa SDL_Vulkan_GetVkInstanceProcAddr
+ * \sa SDL_Vulkan_GetVkGetInstanceProcAddr
  * \sa SDL_Vulkan_UnloadLibrary
  */
 extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path);
@@ -150,11 +150,11 @@
  * however, this parameter will likely be removed in future releases
  *
  * \param window A window for which the required Vulkan instance extensions
- *               should be retrieved (will be deprecated in a future release)
+ *               should be retrieved (will be deprecated in a future release).
  * \param pCount A pointer to an unsigned int corresponding to the number of
- *               extensions to be returned
+ *               extensions to be returned.
  * \param pNames NULL or a pointer to an array to be filled with required
- *               Vulkan instance extensions
+ *               Vulkan instance extensions.
  * \returns SDL_TRUE on success, SDL_FALSE on error.
  *
  * \since This function is available since SDL 2.0.6.
@@ -172,10 +172,10 @@
  * `instance` must have been created with extensions returned by
  * SDL_Vulkan_GetInstanceExtensions() enabled.
  *
- * \param window The window to which to attach the Vulkan surface
- * \param instance The Vulkan instance handle
+ * \param window The window to which to attach the Vulkan surface.
+ * \param instance The Vulkan instance handle.
  * \param surface A pointer to a VkSurfaceKHR handle to output the newly
- *                created surface
+ *                created surface.
  * \returns SDL_TRUE on success, SDL_FALSE on error.
  *
  * \since This function is available since SDL 2.0.6.
@@ -195,9 +195,9 @@
  * platform with high-DPI support (Apple calls this "Retina"), and not
  * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
  *
- * \param window an SDL_Window for which the size is to be queried
- * \param w Pointer to the variable to write the width to or NULL
- * \param h Pointer to the variable to write the height to or NULL
+ * \param window an SDL_Window for which the size is to be queried.
+ * \param w Pointer to the variable to write the width to or NULL.
+ * \param h Pointer to the variable to write the height to or NULL.
  *
  * \since This function is available since SDL 2.0.6.
  *
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/begin_code.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/begin_code.h
@@ -19,12 +19,12 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: BeginCode */
+
 /**
- *  \file begin_code.h
- *
- *  This file sets things up for C dynamic library function definitions,
- *  static inlined functions, and structures aligned at 4-byte alignment.
- *  If you don't like ugly C preprocessor code, don't look at this file. :)
+ * begin_code.h sets things up for C dynamic library function definitions,
+ * static inlined functions, and structures aligned at 4-byte alignment.
+ * If you don't like ugly C preprocessor code, don't look at this file. :)
  */
 
 /* This shouldn't be nested -- included it around code only. */
@@ -172,7 +172,7 @@
     (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L)
 #define SDL_FALLTHROUGH [[fallthrough]]
 #else
-#if defined(__has_attribute)
+#if defined(__has_attribute) && !defined(__SUNPRO_C) && !defined(__SUNPRO_CC)
 #define SDL_HAS_FALLTHROUGH __has_attribute(__fallthrough__)
 #else
 #define SDL_HAS_FALLTHROUGH 0
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist
@@ -19,7 +19,7 @@
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.30.12</string>
+	<string>2.32.2</string>
 	<key>CFBundleSignature</key>
 	<string>SDLX</string>
 	<key>CFBundleSupportedPlatforms</key>
@@ -27,7 +27,7 @@
 		<string>MacOSX</string>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>2.30.12</string>
+	<string>2.32.2</string>
 	<key>DTCompiler</key>
 	<string>com.apple.compilers.llvm.clang.1_0</string>
 	<key>DTPlatformBuild</key>
binary files a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/SDL2 b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/SDL2 differ
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources
@@ -14,7 +14,7 @@
 		</data>
 		<key>Resources/Info.plist</key>
 		<data>
-		jESzPNfAE68YVYa1JqAGzzZlVgk=
+		Dy9w1XfagXeZ0e81ZSWsFJg+azY=
 		</data>
 		<key>Resources/License.txt</key>
 		<data>
@@ -35,11 +35,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			szoTZ+UW6M4zlTQFrRMblKZbAy0=
+			kXZkl2ZSSQyVrmrJOXBRaAtXY0I=
 			</data>
 			<key>hash2</key>
 			<data>
-			bW2HEtw13tGn38QlBSvwA6gqlSHRuiD+dJmGvPkelmU=
+			xDumk5UiAj/35enjtwvoNz9i9FWhFvojHs4+59cpnbI=
 			</data>
 		</dict>
 		<key>Headers/SDL_assert.h</key>
@@ -46,11 +46,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			rIyJvCWybknhk6vSENqN18jIXXA=
+			lr3sQSBPznWi8vveV34dIyAW8BM=
 			</data>
 			<key>hash2</key>
 			<data>
-			2g8v9qkDCkSpBiAmIM4CuT20SJU21cGGNdPzoxI7XZY=
+			BGNHXTS5rBD3wuyUkKhgbl50o8FUh12u96oFkrA4KFo=
 			</data>
 		</dict>
 		<key>Headers/SDL_atomic.h</key>
@@ -57,11 +57,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			n7wOXwjIdrZYkzJyuv/Y+Iz+wkg=
+			R5vrwDefFJeaJsnGkly4WqJ7UPw=
 			</data>
 			<key>hash2</key>
 			<data>
-			qmxBKFsgCFIVc8om5S815bks2PaEknnPcjSIamG4edk=
+			DgHR+hJ6x1M3+NB4wUNI4S8Xj2awpMe4dWD1hJ6C+Ak=
 			</data>
 		</dict>
 		<key>Headers/SDL_audio.h</key>
@@ -68,11 +68,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			poAS7VnlUFhxdrBEKFP4EvukNUU=
+			vD35LoraUn0dXRtYXURSOA2fmzo=
 			</data>
 			<key>hash2</key>
 			<data>
-			Tsdxv5wWcs2R359gukhwdjDEUXCs80rfKHUudM9L/NY=
+			7GEn/t1dKLeDAz+dClqETucnBCg0JQiRgVOxmOn7JFM=
 			</data>
 		</dict>
 		<key>Headers/SDL_bits.h</key>
@@ -79,11 +79,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			ZIGoNNpWlYXPn4pUApnxGg2zXSs=
+			m/yLRLFvcyhpnaReaUyzn+DrKjY=
 			</data>
 			<key>hash2</key>
 			<data>
-			5oKpBJOEvM17BJXzxC/YQhhCoW2RD6ZZe22I0cPz7lc=
+			o2NLdv2ji2kQE1gvsKNW/xcd1txMxhXGRX6D9LXZpA0=
 			</data>
 		</dict>
 		<key>Headers/SDL_blendmode.h</key>
@@ -90,11 +90,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			VM6EnTGffUqd6Nqmue+3NLj8Wq0=
+			ZhDDvn1XJCv+eMyWGDNz26CFI58=
 			</data>
 			<key>hash2</key>
 			<data>
-			xkHYVT2V/aQU64IgEtGDbEbqaBVlScaGPY4h29/ZGU8=
+			bQjeL6hATkceL0ngnlzrYY2Zp7jNdLW26Cr3Mt7eM6o=
 			</data>
 		</dict>
 		<key>Headers/SDL_clipboard.h</key>
@@ -101,11 +101,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			U8R4Lp+xppbP1QXWGc+NQPKcTKQ=
+			uq20kABjWOFzXdejk/Q8rC8a5AM=
 			</data>
 			<key>hash2</key>
 			<data>
-			rpwSMt3xs+tfmYr5oSYxJYE/Airao0Merl7SdMQBz0w=
+			u9qUforELEcJfq+QEHCgZ3wd8g5tPW9JI1+zj4xEm5E=
 			</data>
 		</dict>
 		<key>Headers/SDL_config.h</key>
@@ -112,11 +112,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			DsoHCm+xZ9YPKm8rb+A0i3/aRyM=
+			hI+pWoBtzhWnuh9kOELW4J4hs8o=
 			</data>
 			<key>hash2</key>
 			<data>
-			5mMRwuIB32Sk1g4B7rFzZRn7FG6U+iHS6khOAucoLFM=
+			s/hYepaQobM/ewrw1MULpg/LKbyWnIHEVZQ4sbSY7ws=
 			</data>
 		</dict>
 		<key>Headers/SDL_config_macosx.h</key>
@@ -145,11 +145,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			cHwIsNWoaM5oT9ErxuvCSDDXLHA=
+			C0H58cl/xghA4cpTvltFa5zADSc=
 			</data>
 			<key>hash2</key>
 			<data>
-			hKt0HxrpiGrTEB12/thJmpdlbDQ2JtZdcnC/hH0TT5w=
+			JpncPWHkqqQ39WvjWBFvdMLGOAhlGvwtEdtEflUSwwQ=
 			</data>
 		</dict>
 		<key>Headers/SDL_endian.h</key>
@@ -156,11 +156,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			90rCMZNthI+iguNWrit8fVSPjsM=
+			Oo+H5bGafn8oIzZ5A2DI+6yJsNI=
 			</data>
 			<key>hash2</key>
 			<data>
-			YSBWifRu40lnlyJekPyT1ideEfog865npUsdSLtRh/A=
+			ejsqpRB8uahMk/Zo2KMVUes2H9nWrrSMDXtypIMmAUE=
 			</data>
 		</dict>
 		<key>Headers/SDL_error.h</key>
@@ -167,11 +167,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			h6fXKviOtmcCQIkqzwjMAtC7I7w=
+			ZxWtU4QHHrwxJbxAg+0wA/BX2OA=
 			</data>
 			<key>hash2</key>
 			<data>
-			p4CBIXT/A+jDRwtHaUH3xB0bwNV0aJ/e9jqSexmtG2c=
+			SsWIV+Yerb7smmRk25OcD33qX1UCM94jrw0iu38zQco=
 			</data>
 		</dict>
 		<key>Headers/SDL_events.h</key>
@@ -178,11 +178,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			OCy3CH+HASANGBaV5Nu/qet8ML8=
+			34TF6C56a/HKmGg7hzyO88NJle4=
 			</data>
 			<key>hash2</key>
 			<data>
-			bNPw20oLa45oKb93b7PaRFgBXrnx93opB0J8KktsYIE=
+			2Po+gCuGCGxgmR6DdLPrWu2deTHFLhWAFPZUCkap8Mo=
 			</data>
 		</dict>
 		<key>Headers/SDL_filesystem.h</key>
@@ -189,11 +189,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			qfFFwMlK9JJLK43hGykgojoAsik=
+			5OC/DWaJoiaHRxExqCHZ1QPRP4Y=
 			</data>
 			<key>hash2</key>
 			<data>
-			Mo+N4byz35KXr7OpoEXNnIlHUFbhUPrp7mcJOUH0yvw=
+			tZpKt7pLk5yKvjAiPMqdoeFsNWGZlwY390pZAzyeCLM=
 			</data>
 		</dict>
 		<key>Headers/SDL_gamecontroller.h</key>
@@ -200,11 +200,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			hc3zeQXp9ZWClvAWbSFLPfxaYZg=
+			I/FIRlgGO0GQxPa7tmoA9QbfT8s=
 			</data>
 			<key>hash2</key>
 			<data>
-			tApp2V4YNcSI1EKEXWbNgVkXEqrCfpXOP76ympkShlg=
+			kcdn3wsLxbvOYUIfT6RjZ6PVwEJyiP19UHCVZ1SK0Xg=
 			</data>
 		</dict>
 		<key>Headers/SDL_gesture.h</key>
@@ -211,11 +211,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			uzP8E0LPqR5s3nir8tN5uIvPB14=
+			clELTT6eZHcdLgYclKLVVihe3vU=
 			</data>
 			<key>hash2</key>
 			<data>
-			LqlvJygqx6CgQ/7V4j3X8I9oBzD6upSqiNQc4chNQs4=
+			jcGQi63lLK6d0mKPptalC8oIPHIYkJXVFmB+Ph03FIc=
 			</data>
 		</dict>
 		<key>Headers/SDL_guid.h</key>
@@ -222,11 +222,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			hmhZ70ul+daU2/X6QcLpFsZWcNE=
+			dgThPofjZztWJ48hlLrifr+7Dtc=
 			</data>
 			<key>hash2</key>
 			<data>
-			0ak+kH41rPl6mJ7/e4DxbksZ0mo0FkC1l1gQBU5sVzQ=
+			+2lkD4yu0yhf1fO7Cbd91+Zw7rsW1R7oVeT9Z6YOwZU=
 			</data>
 		</dict>
 		<key>Headers/SDL_haptic.h</key>
@@ -233,11 +233,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			2SW7LfyRaUAv3iO6Gg8x82UQPnk=
+			yhzVxf1Kdqq1Xr2Sg+pJbTqkwQ0=
 			</data>
 			<key>hash2</key>
 			<data>
-			VSTYzwTdPnxWbeRwnam7P6hXOkkuGsjxEtv34lksIfM=
+			q4GVfzAB4sSEDj+jIPWp9Xw2B3HauyTHo/o060eaygQ=
 			</data>
 		</dict>
 		<key>Headers/SDL_hidapi.h</key>
@@ -244,11 +244,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			wys7GscP2S3hOuBJaX7Zs1rdABY=
+			z+fSffaSHzN3Y/+Fvx/Q3ZxzlvM=
 			</data>
 			<key>hash2</key>
 			<data>
-			EFTAY5N/RDQ/l28iXt6YU82o4wQfksEvg9NHCe87wiQ=
+			CBbGekbczUMw0zOsfPZwjkntaN1nlc4fho8S5LTQbTc=
 			</data>
 		</dict>
 		<key>Headers/SDL_hints.h</key>
@@ -255,11 +255,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			8grraRkgHQCHCeiTiFmmdVxOnyA=
+			x8pHmxmobsfIdGQ3U8T/wVTr4pc=
 			</data>
 			<key>hash2</key>
 			<data>
-			AvgwtPXKim1Z0DtKiaBF5gErJem9LXMXEQ0mXFTD29Y=
+			6tHFNKbAt52Tfvnd9I5945Lgf9zMlRYqeRuWrPW2wfo=
 			</data>
 		</dict>
 		<key>Headers/SDL_joystick.h</key>
@@ -266,11 +266,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			TpEuc3Jj0ZNykIfsJzn5u+eDRKc=
+			6XHQGqWAhtUqF+5nJXvM5qTYwRE=
 			</data>
 			<key>hash2</key>
 			<data>
-			RCaBlGhjqJhVypyXq7qibu9CY0LVoabsd3EHwkETjbU=
+			uKjhvX3KIhPTT/lpAu1Y3q/KMqIQXVfi2H+VFfmb4mg=
 			</data>
 		</dict>
 		<key>Headers/SDL_keyboard.h</key>
@@ -277,11 +277,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			g+MPSprjm7vcMsMd/wLkdd9NrU4=
+			Ml+MLe134SMquN/d5bx948jSG2k=
 			</data>
 			<key>hash2</key>
 			<data>
-			90sol8kJnKmwp1A7cSjHjF97xEjGliZgL4XRAVwRp2I=
+			SO9J+my4T35L6w60ZTEC98mabEy2W14U3bXg8ZMSodQ=
 			</data>
 		</dict>
 		<key>Headers/SDL_keycode.h</key>
@@ -288,11 +288,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			K1YmjsaJPtnAbzM0NtV+49y5ij4=
+			m7xeznNONTBfKkVWp/d041JqNxc=
 			</data>
 			<key>hash2</key>
 			<data>
-			ejuRyCNpmBcZPDN7TVguQ9bnjKrixfZBAnHuu27+2hU=
+			wl5XcoxPLKXuZfRaVMHaN5CjnygVgrSNowFRESevpd8=
 			</data>
 		</dict>
 		<key>Headers/SDL_loadso.h</key>
@@ -299,11 +299,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			CMc5En/AnoWgyx3aLIoSGCFh/jA=
+			5L842bJf5iUWjoTpu+UQFgKa09I=
 			</data>
 			<key>hash2</key>
 			<data>
-			6FlCQsL/t9rotWnnRwIp0W9T4Nx6bY+Y3Slfn54kWWU=
+			zryjqdnh9zWQRgbBLaH8ZzFYHxS0/wEeBXqq9KW8wds=
 			</data>
 		</dict>
 		<key>Headers/SDL_locale.h</key>
@@ -310,11 +310,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			Ns0HLxFujODEB/R96m+GovJ26C4=
+			PIHUy1X2+y0z6c3pxt/ge6pBcvo=
 			</data>
 			<key>hash2</key>
 			<data>
-			qYrdic2N30C0i6VaXgTjOAUK96ZppaLI/D2X37s1WFI=
+			/rfGMxdMoHftVV0QUdzzyMCV5DNBVAJ2t2fDfmXGEo0=
 			</data>
 		</dict>
 		<key>Headers/SDL_log.h</key>
@@ -321,11 +321,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			6kYjboxWHr/OWH2wjc9kOyMN5Q0=
+			+/4vJepf9ntrZJr5bivvVp/QUio=
 			</data>
 			<key>hash2</key>
 			<data>
-			1qRi5NQkl7LG3RiMF7Hma9NdikGlSK+U/wrtVz0r0BE=
+			CIY407VUnS9pLPMOxgjJpAGcv3zny3Ls+Y7yhVO0qqE=
 			</data>
 		</dict>
 		<key>Headers/SDL_main.h</key>
@@ -332,11 +332,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			fcGrpNPxH380Jq7ZnPzdwa1KbWE=
+			E0g/VXfi2wtzpgsPenS2Si+WzoU=
 			</data>
 			<key>hash2</key>
 			<data>
-			dpFEnHvFCDQ0zn8PLGsZJ9raacYsCVeV0EESDv4jdjg=
+			t7yYbM3kL+w4Cjbt6cIcyLJ59lDFO7YwlCxbNXPf7/8=
 			</data>
 		</dict>
 		<key>Headers/SDL_messagebox.h</key>
@@ -343,11 +343,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			PncaWDlEQvYS9yr8gAOrW1E5C7U=
+			S/UqHw1xzOq/G5whAbsqqR83zFE=
 			</data>
 			<key>hash2</key>
 			<data>
-			75/uf2pgUcYzuu9q/wH/0Lrw28eFAXKk4EJSARuaPlc=
+			9aB/qv/nBBV7BOwuqIY4MXSD6bpDrkA4afejIwfNBp8=
 			</data>
 		</dict>
 		<key>Headers/SDL_metal.h</key>
@@ -354,11 +354,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			A6LJSU5rn6dAFNKKfx+k2KETKZw=
+			fmU5Aftuv130e3jkyJpHaPg3eqM=
 			</data>
 			<key>hash2</key>
 			<data>
-			UOhX5Cr2WkRCSjrQ//B0XfYajA9m70rRlVMdIVSS8Ug=
+			hwRNMv854qroz8h1X0Aaab5nt3a6JLY0GSILyvaBvCk=
 			</data>
 		</dict>
 		<key>Headers/SDL_misc.h</key>
@@ -365,11 +365,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			sXjqdYBIrnK8e/od5QQ6xwxgOkw=
+			R+Xst5koKUN3c8Q7ABjNFogS7S4=
 			</data>
 			<key>hash2</key>
 			<data>
-			ltOY0ilt30GRNyuE7T2AW94K97CAE6s4wLZdpLDVIls=
+			lczD5q4vVNJ0MwkE9oLIYaZsWesbVlAu1cLQ1Dg+nmM=
 			</data>
 		</dict>
 		<key>Headers/SDL_mouse.h</key>
@@ -376,11 +376,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			MmWu0BJarAuo75epPR/XXrVP2Ic=
+			n11vFqL98fGtKLlIjg5mmNQIL68=
 			</data>
 			<key>hash2</key>
 			<data>
-			bF5OAcFh2FLZAWCOxbcAyHd1VcTgaUUE/Ekg566Q+IA=
+			MDPaWpoGwlvOF7QxkDl0rh6bjsPhvf4oRwDOdTzWjTA=
 			</data>
 		</dict>
 		<key>Headers/SDL_mutex.h</key>
@@ -387,11 +387,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			gCz3Nv9EzRbH6H8P1AwUlu/OIZ8=
+			+P42iYJpHbiwGZ7bBhCJFWSQgos=
 			</data>
 			<key>hash2</key>
 			<data>
-			g4nhEgVsnXaaodfdhR0GJly8Xq82AlVx/8andTSlS4U=
+			EcYUNrtTCWC+fr7AUjZLpWNxq0TH0NmEZ3LkjVV9/TE=
 			</data>
 		</dict>
 		<key>Headers/SDL_name.h</key>
@@ -409,11 +409,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			Q90bBafFHszLeE8yBNeHm12QdlQ=
+			3leUh6Gq18sJB4BEcKQy+iQolc0=
 			</data>
 			<key>hash2</key>
 			<data>
-			BPd3egmtGYAVuwj0YHngqICGDqQy3Nzh/8NTTHD0yAY=
+			k8R1LV5eKvkCsaMBHfJ1lNNI7I/dqmIbqr+qjbsRn64=
 			</data>
 		</dict>
 		<key>Headers/SDL_opengl_glext.h</key>
@@ -431,11 +431,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			n4pNuXLYivjIgXTeEtm8ZQ6qKnk=
+			P5Pj7wk9Nf1ixGBxO3GiEwSI0TU=
 			</data>
 			<key>hash2</key>
 			<data>
-			e/2z/uWUAJUOn6BiAvYcFJzzuPANQw+V1f+PlKxOu1U=
+			7UPklt2GVWwjaLS9BScuAQJ1VnJfzyOWQ7XffOUgKF4=
 			</data>
 		</dict>
 		<key>Headers/SDL_opengles2.h</key>
@@ -442,11 +442,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			z4dMiAEn9NQnUdUMteX76RJ6N5M=
+			iaFWK+305+CdfRcsenhRwwxW348=
 			</data>
 			<key>hash2</key>
 			<data>
-			/y6K6JOn+tGufX9VQj1HRct0mtVv1OsrLB/V60KuRwM=
+			p6YaZQLVlsW+Xtmwq2apbUUN0V5PQBqbL+Kb50ty874=
 			</data>
 		</dict>
 		<key>Headers/SDL_opengles2_gl2.h</key>
@@ -497,11 +497,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			1fIwoEe2ktQb6D5A7PQ7mi2Oqec=
+			HOeOsR1S852BPw+GyoQxCu8dnrk=
 			</data>
 			<key>hash2</key>
 			<data>
-			7geaawuRwA91yelwtNBEl0b/VR+r/CSr84vVYa1YIM4=
+			DMnCgERmRqNhjIu8bEnce3WOlhLueJ7/2VQlkld0cqM=
 			</data>
 		</dict>
 		<key>Headers/SDL_platform.h</key>
@@ -508,11 +508,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			F8OSz+awKv1XDtEakTW8vo55/Vs=
+			2EuaPqxxPCCnhQT8TgXVlAGPVd0=
 			</data>
 			<key>hash2</key>
 			<data>
-			SNI/VCAQ35ReFL9qF5xj8Lhu4a/Prm53nTK7tRA1jhg=
+			/UdCUiELMW5LpnyQtiRIrltB0fmsOUuo5PcJfihUSP4=
 			</data>
 		</dict>
 		<key>Headers/SDL_power.h</key>
@@ -519,11 +519,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			+yLHw43h1fJujEDgyY7jpN1txU0=
+			OcflGeCM0fbVTFzZKWdM1eKVKlg=
 			</data>
 			<key>hash2</key>
 			<data>
-			IjPm5fw8G4fGmIEDbiQukZxBn9rYKt8OSIutX9QfZuA=
+			u80xdoA8Qm6LjBYuxop4mIHrpcCya4BL5oxrH9I+DaM=
 			</data>
 		</dict>
 		<key>Headers/SDL_quit.h</key>
@@ -530,11 +530,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			qT1qlKVJIRMfIje3cQSmKU9SjAo=
+			UesdW/A6uv3gPVlX0rttt2qUYY8=
 			</data>
 			<key>hash2</key>
 			<data>
-			EysJnWaW2IwfC6s/E8x2vKwbbwbfiW8j7/OjKcfrPp8=
+			1orkEGymBZUzW8+XfZkjeGEbgKcXPxZkwleDgdTXWFU=
 			</data>
 		</dict>
 		<key>Headers/SDL_rect.h</key>
@@ -541,11 +541,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			AyXLTBMooPXNWI9syN7FLtZ8EGQ=
+			0tzoAGRmXs2qe4YGcW7xEB44mgI=
 			</data>
 			<key>hash2</key>
 			<data>
-			s8YsZal0Dzfp45WhQh2Sop4hJ/lPGeHUwTHZS4M8+Pc=
+			4a+aTUFeNyT8FcphJmUM2TJsOqpZr5pDXXmKjQWfwLA=
 			</data>
 		</dict>
 		<key>Headers/SDL_render.h</key>
@@ -552,11 +552,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			aWAMDKmt93Ao4AU5feyBSJnbpyg=
+			ixhZ1LVMllogghoxkbkrnjkmfm0=
 			</data>
 			<key>hash2</key>
 			<data>
-			0syhQHuuYccT9K/0c1YSSs7AIFZdWaj1XpbK6XTjIvg=
+			YKCPJJ9GkJ8hiZ95O876mXtZ5SvBv5ViiUsgYkuykPs=
 			</data>
 		</dict>
 		<key>Headers/SDL_revision.h</key>
@@ -574,11 +574,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			Ki47XgLI9PP9BsgCOocGnLd8YJk=
+			RoEkA5bj0f8XwVQyVcYHxlRLH+M=
 			</data>
 			<key>hash2</key>
 			<data>
-			nLeSv+IRZOlqDFrK+Kq/oTCotwGs/McKAHZPlhMm0k0=
+			x/9RNtJfolHcK7DxJwPH3corQGd2BbzC8PgvzzHSxX8=
 			</data>
 		</dict>
 		<key>Headers/SDL_scancode.h</key>
@@ -585,11 +585,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			MagJ1t5D9cUUdjfJxO4SSxKn/s0=
+			uT6v61MI9lFx99szDhZfL4N/rGc=
 			</data>
 			<key>hash2</key>
 			<data>
-			v84LnU16TV6RKwAcwhP0j+ypcZ8tYazJ5x41L8WXH9E=
+			MzwGUSgeP0Cmj7z20owSg5EsfpwV9yfG7bIFUqgzric=
 			</data>
 		</dict>
 		<key>Headers/SDL_sensor.h</key>
@@ -596,11 +596,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			ekOOqi8kKKNwFU1pgFpq1V+YR4w=
+			5r6P94IS5vfiIJMZhrMZNpabid0=
 			</data>
 			<key>hash2</key>
 			<data>
-			lR1mKNtje2LhTqfwh06Adf1aF8XPb7ZSQnwLlDND9F4=
+			gAFmGVEIFr3q+SQiXmHBctnS1qMa9guogUbp2JDeDdk=
 			</data>
 		</dict>
 		<key>Headers/SDL_shape.h</key>
@@ -607,11 +607,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			+IzMhEcjMEVIuOFt1uwMqmL6v7E=
+			jmzKazW1l/+89mfDEsa68yfO+M0=
 			</data>
 			<key>hash2</key>
 			<data>
-			7M4n2rfnvCfTE5+nS/tJp6iA35L6czERKuv9iQlC/n0=
+			zrlHT6aGBYNFY5OOhnuPp6/HUIq32NzHq7RcHEnY4ww=
 			</data>
 		</dict>
 		<key>Headers/SDL_stdinc.h</key>
@@ -618,11 +618,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			8QMuXJYqaxRMPcv5u+iv7E67LBs=
+			ghpA/MCplmhdO4hJb25EXKh4+s4=
 			</data>
 			<key>hash2</key>
 			<data>
-			EdsumpR5mB5VaJVsyvZgYGJ0BLa9jA5lm66/V+hOo+o=
+			cSrXM8EyC4v/PujaxFfax4TvFm2zt24dFebf53otApM=
 			</data>
 		</dict>
 		<key>Headers/SDL_surface.h</key>
@@ -629,11 +629,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			hcQ0Xf+oe5CIPdK/p0s3EYvn1Jw=
+			4Ep9Q21aB+MvJ4ohfIaIobCiERU=
 			</data>
 			<key>hash2</key>
 			<data>
-			L4fQk7WiPrvRH2KN1BAREdwHFF/iFV0vbhi+Yfk2ck0=
+			HBm9M4a5z2TAO7jYrEREEBPmFIZ10He+SyiAhJ90C6M=
 			</data>
 		</dict>
 		<key>Headers/SDL_system.h</key>
@@ -640,11 +640,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			4BQqRt25rE6gz3HZIqrWc0sVChs=
+			kBnA4mSoS+aU91if04kxha03KHY=
 			</data>
 			<key>hash2</key>
 			<data>
-			mt+VVfR8xWZ6HFwR2IPTsVioxlle1/l7BM8/QlhlhNs=
+			EV4kDREc7p2kR4LtHoOuY6J2Rsm+KX65ZQv58y+QVz8=
 			</data>
 		</dict>
 		<key>Headers/SDL_syswm.h</key>
@@ -651,11 +651,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			eGil06WtbiBMBrBlfGTfU59ilGI=
+			yIC4ZT4qln13hliROuzUyx3FhyY=
 			</data>
 			<key>hash2</key>
 			<data>
-			cExBYrufNgnE2h2D/+g4e9P78tw78U6lwPt/6SAh99o=
+			rXp/rtBhEjRJoZnGV9F6IrAIdoE5WJdtUtwNypSUF7E=
 			</data>
 		</dict>
 		<key>Headers/SDL_thread.h</key>
@@ -662,11 +662,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			nhxs2YXZEAAABhCCly6FBwJyIVw=
+			OFKWGOtypbrEI7UTrkw42voWf20=
 			</data>
 			<key>hash2</key>
 			<data>
-			jProCOb6lntIte2C8xsnYMedNUYCaMgCk4kzf1JkRhY=
+			7qn2qV503yS1JbYFUB2HvCHoN1AzetzjrmZWZIIf3qo=
 			</data>
 		</dict>
 		<key>Headers/SDL_timer.h</key>
@@ -673,11 +673,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			F4SP5Obcx3huEZ4MP3zlMh+gVdw=
+			GIT08iK8cG99/tVgSH4+ACwG9mU=
 			</data>
 			<key>hash2</key>
 			<data>
-			jzrSTcXaNBjpj1IKY/ADhiiuudJe7gZw9ND2Oa0FyW4=
+			Q8Bv8+1i2eKfGySzfRXZT03Clzce9l8uP9QDjGTzzVc=
 			</data>
 		</dict>
 		<key>Headers/SDL_touch.h</key>
@@ -684,11 +684,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			6vhIvHe/ZmQnHrZDIOngBL+KLVU=
+			QmkTEEIiL2jICJu6ecf2wLwyhAU=
 			</data>
 			<key>hash2</key>
 			<data>
-			/Q/C0mRXFy4EXe69A+ygrV60pojHzI+UEh1hpw7a5Uw=
+			MOw1u2X8Zk9fljCdbfSRRyEXEbgT+caV26N+T0NjF0s=
 			</data>
 		</dict>
 		<key>Headers/SDL_types.h</key>
@@ -695,11 +695,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			+ft8hvbcKHar7v/aTUNeVxAyw0Y=
+			Uh90u3TkJONniC7ql41abwXUPa4=
 			</data>
 			<key>hash2</key>
 			<data>
-			qmvIcFXNA1r8zfJC5XZYLn3FCLq9YWQVZ2CmTxPRKw4=
+			jrJoMRTqqOrdJC6jL9UHPmZHjACvE7fU8poxxLLjKd8=
 			</data>
 		</dict>
 		<key>Headers/SDL_version.h</key>
@@ -706,11 +706,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			I/lyzuAeveDmThBIuOC4DUgKMic=
+			0p5YxpDU0ZKVW3O7oaiUEbQvQgM=
 			</data>
 			<key>hash2</key>
 			<data>
-			EBYxbRDZpHP9GSqf6WgKA0v/IKaOgflKPE2VV6/fRxY=
+			EtiQXi0LseubTFgUWQb2VmPg9hMBLtbyUYL/q744sqo=
 			</data>
 		</dict>
 		<key>Headers/SDL_video.h</key>
@@ -717,11 +717,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			UlQTZYCQoY31S36HghsdeKBfe1I=
+			pbav/kF15VNS1e5QTP2fYMa9u+E=
 			</data>
 			<key>hash2</key>
 			<data>
-			eCHeiPp27E6Uuy+yVWhAnMv90n9T18stOMqH8xRtw1Q=
+			XyZkUty0lOswE4c3LokQs92335pjv6Mdqu/eFkB0XNo=
 			</data>
 		</dict>
 		<key>Headers/SDL_vulkan.h</key>
@@ -728,11 +728,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			bsq9F6bHSfRUZWqi6pyhcJfFdv8=
+			gLQPn/TnSR9Mw0SzIieM7cyPPQY=
 			</data>
 			<key>hash2</key>
 			<data>
-			orVndhc5fB+XucpAcaS8hFxijBDU2oR4F1jhbc7Ju1k=
+			gqb0mAn18Ax0d7+3MwoDmO2kMJ2wXR900U/Kxs7QP8A=
 			</data>
 		</dict>
 		<key>Headers/begin_code.h</key>
@@ -739,11 +739,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			7za3SOa60MgSMnFyUMAE51KiJVU=
+			F5WwG4LxINu6xsjkDri880RDPAQ=
 			</data>
 			<key>hash2</key>
 			<data>
-			C2GhWOTumDTaCzX+9soBe5KEB8QOvC++hIQQc4whBbE=
+			mAPasp+0UizjUAq3iSYOliLfYwfOkPkq0gwYCOGcTns=
 			</data>
 		</dict>
 		<key>Headers/close_code.h</key>
@@ -783,11 +783,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			jESzPNfAE68YVYa1JqAGzzZlVgk=
+			Dy9w1XfagXeZ0e81ZSWsFJg+azY=
 			</data>
 			<key>hash2</key>
 			<data>
-			qm21JRCtQ5em6iywJ3ZXyBn3vKdbwBOfTmIOo+GAAH8=
+			BAddkaN2r4dEHPxmdAwZ33wKCEuHqn1y3xUe9sQ/wtY=
 			</data>
 		</dict>
 		<key>Resources/License.txt</key>
binary files a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/Current b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/Current differ
binary files a/release/win32/SDL2.dll b/release/win32/SDL2.dll differ
binary files a/release/win64/SDL2.dll b/release/win64/SDL2.dll differ
binary files a/vs2019_project/ft2-clone/SDL2.dll b/vs2019_project/ft2-clone/SDL2.dll differ
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL.h
@@ -25,7 +25,6 @@
  *  Main include header for the SDL library
  */
 
-
 #ifndef SDL_h_
 #define SDL_h_
 
@@ -70,6 +69,8 @@
 extern "C" {
 #endif
 
+/* WIKI CATEGORY: Init */
+
 /* As of version 0.5, SDL is loaded dynamically into the application */
 
 /**
@@ -130,7 +131,7 @@
  * call SDL_Quit() to force shutdown). If a subsystem is already loaded then
  * this call will increase the ref-count and return.
  *
- * \param flags subsystem initialization flags
+ * \param flags subsystem initialization flags.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_assert.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_assert.h
@@ -61,6 +61,8 @@
     #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" )
 #elif defined(__APPLE__) && defined(__arm__)
     #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" )
+#elif defined(_WIN32) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__arm64__) || defined(__aarch64__)) )
+    #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #0xF000\n\t" )
 #elif defined(__386__) && defined(__WATCOMC__)
     #define SDL_TriggerBreakpoint() { _asm { int 0x03 } }
 #elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__)
@@ -191,8 +193,8 @@
  * A callback that fires when an SDL assertion fails.
  *
  * \param data a pointer to the SDL_AssertData structure corresponding to the
- *             current assertion
- * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler()
+ *             current assertion.
+ * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler().
  * \returns an SDL_AssertState value indicating how to handle the failure.
  */
 typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)(
@@ -212,8 +214,8 @@
  * This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
  *
  * \param handler the SDL_AssertionHandler function to call when an assertion
- *                fails or NULL for the default handler
- * \param userdata a pointer that is passed to `handler`
+ *                fails or NULL for the default handler.
+ * \param userdata a pointer that is passed to `handler`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -254,7 +256,7 @@
  * data, it is safe to pass a NULL pointer to this function to ignore it.
  *
  * \param puserdata pointer which is filled with the "userdata" pointer that
- *                  was passed to SDL_SetAssertionHandler()
+ *                  was passed to SDL_SetAssertionHandler().
  * \returns the SDL_AssertionHandler that is called when an assert triggers.
  *
  * \since This function is available since SDL 2.0.2.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_atomic.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_atomic.h
@@ -20,39 +20,30 @@
 */
 
 /**
- * \file SDL_atomic.h
+ * # CategoryAtomic
  *
  * Atomic operations.
  *
- * IMPORTANT:
- * If you are not an expert in concurrent lockless programming, you should
- * only be using the atomic lock and reference counting functions in this
- * file.  In all other cases you should be protecting your data structures
- * with full mutexes.
+ * IMPORTANT: If you are not an expert in concurrent lockless programming, you
+ * should not be using any functions in this file. You should be protecting
+ * your data structures with full mutexes instead.
  *
- * The list of "safe" functions to use are:
- *  SDL_AtomicLock()
- *  SDL_AtomicUnlock()
- *  SDL_AtomicIncRef()
- *  SDL_AtomicDecRef()
+ * ***Seriously, here be dragons!***
  *
- * Seriously, here be dragons!
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * You can find out a little more about lockless programming and the subtle
+ * issues that can arise here:
+ * https://learn.microsoft.com/en-us/windows/win32/dxtecharts/lockless-programming
  *
- * You can find out a little more about lockless programming and the
- * subtle issues that can arise here:
- * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx
- *
  * There's also lots of good information here:
- * http://www.1024cores.net/home/lock-free-algorithms
- * http://preshing.com/
  *
- * These operations may or may not actually be implemented using
- * processor specific atomic operations. When possible they are
- * implemented as true processor specific atomic operations. When that
- * is not possible the are implemented using locks that *do* use the
- * available atomic operations.
+ * - https://www.1024cores.net/home/lock-free-algorithms
+ * - https://preshing.com/
  *
+ * These operations may or may not actually be implemented using processor
+ * specific atomic operations. When possible they are implemented as true
+ * processor specific atomic operations. When that is not possible the are
+ * implemented using locks that *do* use the available atomic operations.
+ *
  * All of the atomic operations that modify memory are full memory barriers.
  */
 
@@ -94,7 +85,7 @@
  * ***Please note that spinlocks are dangerous if you don't know what you're
  * doing. Please be careful using any sort of spinlock!***
  *
- * \param lock a pointer to a lock variable
+ * \param lock a pointer to a lock variable.
  * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already
  *          held.
  *
@@ -111,7 +102,7 @@
  * ***Please note that spinlocks are dangerous if you don't know what you're
  * doing. Please be careful using any sort of spinlock!***
  *
- * \param lock a pointer to a lock variable
+ * \param lock a pointer to a lock variable.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -128,7 +119,7 @@
  * ***Please note that spinlocks are dangerous if you don't know what you're
  * doing. Please be careful using any sort of spinlock!***
  *
- * \param lock a pointer to a lock variable
+ * \param lock a pointer to a lock variable.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -257,10 +248,13 @@
 
 
 /**
- * \brief A type representing an atomic integer value.  It is a struct
- *        so people don't accidentally use numeric operations on it.
+ * A type representing an atomic integer value.
+ *
+ * It is a struct so people don't accidentally use numeric operations on it.
  */
-typedef struct { int value; } SDL_atomic_t;
+typedef struct SDL_atomic_t {
+    int value;
+} SDL_atomic_t;
 
 /**
  * Set an atomic variable to a new value if it is currently an old value.
@@ -268,9 +262,9 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable to be modified
- * \param oldval the old value
- * \param newval the new value
+ * \param a a pointer to an SDL_atomic_t variable to be modified.
+ * \param oldval the old value.
+ * \param newval the new value.
  * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -289,8 +283,8 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable to be modified
- * \param v the desired value
+ * \param a a pointer to an SDL_atomic_t variable to be modified.
+ * \param v the desired value.
  * \returns the previous value of the atomic variable.
  *
  * \since This function is available since SDL 2.0.2.
@@ -305,7 +299,7 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable
+ * \param a a pointer to an SDL_atomic_t variable.
  * \returns the current value of an atomic variable.
  *
  * \since This function is available since SDL 2.0.2.
@@ -322,8 +316,8 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to an SDL_atomic_t variable to be modified
- * \param v the desired value to add
+ * \param a a pointer to an SDL_atomic_t variable to be modified.
+ * \param v the desired value to add.
  * \returns the previous value of the atomic variable.
  *
  * \since This function is available since SDL 2.0.2.
@@ -356,9 +350,9 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to a pointer
- * \param oldval the old pointer value
- * \param newval the new pointer value
+ * \param a a pointer to a pointer.
+ * \param oldval the old pointer value.
+ * \param newval the new pointer value.
  * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -375,8 +369,8 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to a pointer
- * \param v the desired pointer value
+ * \param a a pointer to a pointer.
+ * \param v the desired pointer value.
  * \returns the previous value of the pointer.
  *
  * \since This function is available since SDL 2.0.2.
@@ -392,7 +386,7 @@
  * ***Note: If you don't know what this function is for, you shouldn't use
  * it!***
  *
- * \param a a pointer to a pointer
+ * \param a a pointer to a pointer.
  * \returns the current value of a pointer.
  *
  * \since This function is available since SDL 2.0.2.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_audio.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_audio.h
@@ -22,9 +22,9 @@
 /* !!! FIXME: several functions in here need Doxygen comments. */
 
 /**
- *  \file SDL_audio.h
+ * # CategoryAudio
  *
- *  Access to the raw audio mixing buffer for the SDL library.
+ * Access to the raw audio mixing buffer for the SDL library.
  */
 
 #ifndef SDL_audio_h_
@@ -44,24 +44,24 @@
 #endif
 
 /**
- *  \brief Audio format flags.
+ * Audio format flags.
  *
- *  These are what the 16 bits in SDL_AudioFormat currently mean...
- *  (Unspecified bits are always zero).
+ * These are what the 16 bits in SDL_AudioFormat currently mean...
+ * (Unspecified bits are always zero).
  *
- *  \verbatim
-    ++-----------------------sample is signed if set
-    ||
-    ||       ++-----------sample is bigendian if set
-    ||       ||
-    ||       ||          ++---sample is float if set
-    ||       ||          ||
-    ||       ||          || +---sample bit size---+
-    ||       ||          || |                     |
-    15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
-    \endverbatim
+ * ```
+ * ++-----------------------sample is signed if set
+ * ||
+ * ||       ++-----------sample is bigendian if set
+ * ||       ||
+ * ||       ||          ++---sample is float if set
+ * ||       ||          ||
+ * ||       ||          || +---sample bit size---+
+ * ||       ||          || |                     |
+ * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
+ * ```
  *
- *  There are macros in SDL 2.0 and later to query these bits.
+ * There are macros in SDL 2.0 and later to query these bits.
  */
 typedef Uint16 SDL_AudioFormat;
 
@@ -149,33 +149,30 @@
 /* @} *//* Audio flags */
 
 /**
- *  This function is called when the audio device needs more data.
+ * This function is called when the audio device needs more data.
  *
- *  \param userdata An application-specific parameter saved in
- *                  the SDL_AudioSpec structure
- *  \param stream A pointer to the audio data buffer.
- *  \param len    The length of that buffer in bytes.
- *
- *  Once the callback returns, the buffer will no longer be valid.
- *  Stereo samples are stored in a LRLRLR ordering.
- *
- *  You can choose to avoid callbacks and use SDL_QueueAudio() instead, if
- *  you like. Just open your audio device with a NULL callback.
+ * \param userdata An application-specific parameter saved in the
+ *                 SDL_AudioSpec structure.
+ * \param stream A pointer to the audio data buffer.
+ * \param len Length of **stream** in bytes.
  */
 typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,
                                             int len);
 
 /**
- *  The calculated values in this structure are calculated by SDL_OpenAudio().
+ * The calculated values in this structure are calculated by SDL_OpenAudio().
  *
- *  For multi-channel audio, the default SDL channel mapping is:
- *  2:  FL  FR                          (stereo)
- *  3:  FL  FR LFE                      (2.1 surround)
- *  4:  FL  FR  BL  BR                  (quad)
- *  5:  FL  FR LFE  BL  BR              (4.1 surround)
- *  6:  FL  FR  FC LFE  SL  SR          (5.1 surround - last two can also be BL BR)
- *  7:  FL  FR  FC LFE  BC  SL  SR      (6.1 surround)
- *  8:  FL  FR  FC LFE  BL  BR  SL  SR  (7.1 surround)
+ * For multi-channel audio, the default SDL channel mapping is:
+ *
+ * ```
+ * 2:  FL  FR                          (stereo)
+ * 3:  FL  FR LFE                      (2.1 surround)
+ * 4:  FL  FR  BL  BR                  (quad)
+ * 5:  FL  FR LFE  BL  BR              (4.1 surround)
+ * 6:  FL  FR  FC LFE  SL  SR          (5.1 surround - last two can also be BL BR)
+ * 7:  FL  FR  FC LFE  BC  SL  SR      (6.1 surround)
+ * 8:  FL  FR  FC LFE  BL  BR  SL  SR  (7.1 surround)
+ * ```
  */
 typedef struct SDL_AudioSpec
 {
@@ -196,11 +193,11 @@
                                           SDL_AudioFormat format);
 
 /**
- *  \brief Upper limit of filters in SDL_AudioCVT
+ * Upper limit of filters in SDL_AudioCVT
  *
- *  The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is
- *  currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers,
- *  one of which is the terminating NULL pointer.
+ * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is
+ * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, one
+ * of which is the terminating NULL pointer.
  */
 #define SDL_AUDIOCVT_MAX_FILTERS 9
 
@@ -287,7 +284,7 @@
  * meant to be proper names.
  *
  * \param index the index of the audio driver; the value ranges from 0 to
- *              SDL_GetNumAudioDrivers() - 1
+ *              SDL_GetNumAudioDrivers() - 1.
  * \returns the name of the audio driver at the requested index, or NULL if an
  *          invalid index was specified.
  *
@@ -314,7 +311,7 @@
  * specific need to designate the audio driver you want to use. You should
  * normally use SDL_Init() or SDL_InitSubSystem().
  *
- * \param driver_name the name of the desired audio driver
+ * \param driver_name the name of the desired audio driver.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -408,13 +405,13 @@
                                           SDL_AudioSpec * obtained);
 
 /**
- *  SDL Audio Device IDs.
+ * SDL Audio Device IDs.
  *
- *  A successful call to SDL_OpenAudio() is always device id 1, and legacy
- *  SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls
- *  always returns devices >= 2 on success. The legacy calls are good both
- *  for backwards compatibility and when you don't care about multiple,
- *  specific, or capture devices.
+ * A successful call to SDL_OpenAudio() is always device id 1, and legacy SDL
+ * audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls
+ * always returns devices >= 2 on success. The legacy calls are good both for
+ * backwards compatibility and when you don't care about multiple, specific,
+ * or capture devices.
  */
 typedef Uint32 SDL_AudioDeviceID;
 
@@ -452,7 +449,7 @@
  * ```
  *
  * \param iscapture zero to request playback devices, non-zero to request
- *                  recording devices
+ *                  recording devices.
  * \returns the number of available devices exposed by the current driver or
  *          -1 if an explicit list of devices can't be determined. A return
  *          value of -1 does not necessarily mean an error condition.
@@ -478,7 +475,7 @@
  * invalid next time any of several other SDL functions are called.
  *
  * \param index the index of the audio device; valid values range from 0 to
- *              SDL_GetNumAudioDevices() - 1
+ *              SDL_GetNumAudioDevices() - 1.
  * \param iscapture non-zero to query the list of recording devices, zero to
  *                  query the list of output devices.
  * \returns the name of the audio device at the requested index, or NULL on
@@ -504,11 +501,11 @@
  * count.
  *
  * \param index the index of the audio device; valid values range from 0 to
- *              SDL_GetNumAudioDevices() - 1
+ *              SDL_GetNumAudioDevices() - 1.
  * \param iscapture non-zero to query the list of recording devices, zero to
  *                  query the list of output devices.
  * \param spec The SDL_AudioSpec to be initialized by this function.
- * \returns 0 on success, nonzero on error
+ * \returns 0 on success, nonzero on error.
  *
  * \since This function is available since SDL 2.0.16.
  *
@@ -542,7 +539,7 @@
  * \param spec The SDL_AudioSpec to be initialized by this function.
  * \param iscapture non-zero to query the default recording device, zero to
  *                  query the default output device.
- * \returns 0 on success, nonzero on error
+ * \returns 0 on success, nonzero on error.
  *
  * \since This function is available since SDL 2.24.0.
  *
@@ -645,12 +642,12 @@
  *               driver-specific name as appropriate. NULL requests the most
  *               reasonable default device.
  * \param iscapture non-zero to specify a device should be opened for
- *                  recording, not playback
+ *                  recording, not playback.
  * \param desired an SDL_AudioSpec structure representing the desired output
- *                format; see SDL_OpenAudio() for more information
+ *                format; see SDL_OpenAudio() for more information.
  * \param obtained an SDL_AudioSpec structure filled in with the actual output
- *                 format; see SDL_OpenAudio() for more information
- * \param allowed_changes 0, or one or more flags OR'd together
+ *                 format; see SDL_OpenAudio() for more information.
+ * \param allowed_changes 0, or one or more flags OR'd together.
  * \returns a valid device ID that is > 0 on success or 0 on failure; call
  *          SDL_GetError() for more information.
  *
@@ -712,7 +709,7 @@
  * Use this function to get the current audio state of an audio device.
  *
  * \param dev the ID of an audio device previously opened with
- *            SDL_OpenAudioDevice()
+ *            SDL_OpenAudioDevice().
  * \returns the SDL_AudioStatus of the specified audio device.
  *
  * \since This function is available since SDL 2.0.0.
@@ -745,7 +742,7 @@
  *
  * ...and is only useful if you used the legacy SDL_OpenAudio() function.
  *
- * \param pause_on non-zero to pause, 0 to unpause
+ * \param pause_on non-zero to pause, 0 to unpause.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -775,8 +772,8 @@
  * callback, you shouldn't pause the audio device, as it will lead to dropouts
  * in the audio playback. Instead, you should use SDL_LockAudioDevice().
  *
- * \param dev a device opened by SDL_OpenAudioDevice()
- * \param pause_on non-zero to pause, 0 to unpause
+ * \param dev a device opened by SDL_OpenAudioDevice().
+ * \param pause_on non-zero to pause, 0 to unpause.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -841,14 +838,14 @@
  * SDL_LoadWAV("sample.wav", &spec, &buf, &len);
  * ```
  *
- * \param src The data source for the WAVE data
- * \param freesrc If non-zero, SDL will _always_ free the data source
+ * \param src The data source for the WAVE data.
+ * \param freesrc If non-zero, SDL will _always_ free the data source.
  * \param spec An SDL_AudioSpec that will be filled in with the wave file's
- *             format details
+ *             format details.
  * \param audio_buf A pointer filled with the audio data, allocated by the
  *                  function.
  * \param audio_len A pointer filled with the length of the audio data buffer
- *                  in bytes
+ *                  in bytes.
  * \returns This function, if successfully called, returns `spec`, which will
  *          be filled with the audio data format of the wave source data.
  *          `audio_buf` will be filled with a pointer to an allocated buffer
@@ -874,8 +871,9 @@
                                                       Uint32 * audio_len);
 
 /**
- *  Loads a WAV from a file.
- *  Compatibility convenience function.
+ * Loads a WAV from a file.
+ *
+ * Compatibility convenience function.
  */
 #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \
     SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len)
@@ -888,7 +886,7 @@
  * this function with a NULL pointer.
  *
  * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or
- *                  SDL_LoadWAV_RW()
+ *                  SDL_LoadWAV_RW().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -912,15 +910,16 @@
  * and then can call SDL_ConvertAudio() to complete the conversion.
  *
  * \param cvt an SDL_AudioCVT structure filled in with audio conversion
- *            information
+ *            information.
  * \param src_format the source format of the audio data; for more info see
- *                   SDL_AudioFormat
- * \param src_channels the number of channels in the source
- * \param src_rate the frequency (sample-frames-per-second) of the source
+ *                   SDL_AudioFormat.
+ * \param src_channels the number of channels in the source.
+ * \param src_rate the frequency (sample-frames-per-second) of the source.
  * \param dst_format the destination format of the audio data; for more info
- *                   see SDL_AudioFormat
- * \param dst_channels the number of channels in the destination
- * \param dst_rate the frequency (sample-frames-per-second) of the destination
+ *                   see SDL_AudioFormat.
+ * \param dst_channels the number of channels in the destination.
+ * \param dst_rate the frequency (sample-frames-per-second) of the
+ *                 destination.
  * \returns 1 if the audio filter is prepared, 0 if no conversion is needed,
  *          or a negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -991,12 +990,12 @@
 /**
  * Create a new audio stream.
  *
- * \param src_format The format of the source audio
- * \param src_channels The number of channels of the source audio
- * \param src_rate The sampling rate of the source audio
- * \param dst_format The format of the desired audio output
- * \param dst_channels The number of channels of the desired audio output
- * \param dst_rate The sampling rate of the desired audio output
+ * \param src_format The format of the source audio.
+ * \param src_channels The number of channels of the source audio.
+ * \param src_rate The sampling rate of the source audio.
+ * \param dst_format The format of the desired audio output.
+ * \param dst_channels The number of channels of the desired audio output.
+ * \param dst_rate The sampling rate of the desired audio output.
  * \returns 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.7.
@@ -1018,9 +1017,9 @@
 /**
  * Add data to be converted/resampled to the stream.
  *
- * \param stream The stream the audio data is being added to
- * \param buf A pointer to the audio data to add
- * \param len The number of bytes to write to the stream
+ * \param stream The stream the audio data is being added to.
+ * \param buf A pointer to the audio data to add.
+ * \param len The number of bytes to write to the stream.
  * \returns 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.7.
@@ -1037,10 +1036,10 @@
 /**
  * Get converted/resampled data from the stream
  *
- * \param stream The stream the audio is being requested from
- * \param buf A buffer to fill with audio data
- * \param len The maximum number of bytes to fill
- * \returns the number of bytes read from the stream, or -1 on error
+ * \param stream The stream the audio is being requested from.
+ * \param buf A buffer to fill with audio data.
+ * \param len The maximum number of bytes to fill.
+ * \returns the number of bytes read from the stream, or -1 on error.
  *
  * \since This function is available since SDL 2.0.7.
  *
@@ -1118,6 +1117,9 @@
  */
 extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream);
 
+/**
+ * Maximum volume allowed in calls to SDL_MixAudio and SDL_MixAudioFormat.
+ */
 #define SDL_MIX_MAXVOLUME 128
 
 /**
@@ -1132,11 +1134,11 @@
  * ...where `format` is the obtained format of the audio device from the
  * legacy SDL_OpenAudio() function.
  *
- * \param dst the destination for the mixed audio
- * \param src the source audio buffer to be mixed
- * \param len the length of the audio buffer in bytes
+ * \param dst the destination for the mixed audio.
+ * \param src the source audio buffer to be mixed.
+ * \param len the length of the audio buffer in bytes.
  * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME
- *               for full audio volume
+ *               for full audio volume.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1165,13 +1167,13 @@
  * SDL_MixAudioFormat() is really only needed when you're mixing a single
  * audio stream with a volume adjustment.
  *
- * \param dst the destination for the mixed audio
- * \param src the source audio buffer to be mixed
+ * \param dst the destination for the mixed audio.
+ * \param src the source audio buffer to be mixed.
  * \param format the SDL_AudioFormat structure representing the desired audio
- *               format
- * \param len the length of the audio buffer in bytes
+ *               format.
+ * \param len the length of the audio buffer in bytes.
  * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME
- *               for full audio volume
+ *               for full audio volume.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -1215,9 +1217,9 @@
  * from planar audio formats into a non-planar one (see SDL_AudioFormat)
  * before queuing audio.
  *
- * \param dev the device ID to which we will queue audio
- * \param data the data to queue to the device for later playback
- * \param len the number of bytes (not samples!) to which `data` points
+ * \param dev the device ID to which we will queue audio.
+ * \param data the data to queue to the device for later playback.
+ * \param len the number of bytes (not samples!) to which `data` points.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1263,9 +1265,9 @@
  * You should not call SDL_LockAudio() on the device before dequeueing; SDL
  * handles locking internally for this function.
  *
- * \param dev the device ID from which we will dequeue audio
- * \param data a pointer into where audio data should be copied
- * \param len the number of bytes (not samples!) to which (data) points
+ * \param dev the device ID from which we will dequeue audio.
+ * \param data a pointer into where audio data should be copied.
+ * \param len the number of bytes (not samples!) to which (data) points.
  * \returns the number of bytes dequeued, which could be less than requested;
  *          call SDL_GetError() for more information.
  *
@@ -1299,7 +1301,7 @@
  * You should not call SDL_LockAudio() on the device before querying; SDL
  * handles locking internally for this function.
  *
- * \param dev the device ID of which we will query queued audio size
+ * \param dev the device ID of which we will query queued audio size.
  * \returns the number of bytes (not samples!) of queued audio.
  *
  * \since This function is available since SDL 2.0.4.
@@ -1334,7 +1336,7 @@
  *
  * This function always succeeds and thus returns void.
  *
- * \param dev the device ID of which to clear the audio queue
+ * \param dev the device ID of which to clear the audio queue.
  *
  * \since This function is available since SDL 2.0.4.
  *
@@ -1406,7 +1408,7 @@
  * at once, not only will you block the audio callback, you'll block the other
  * thread.
  *
- * \param dev the ID of the device to be locked
+ * \param dev the ID of the device to be locked.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1439,7 +1441,7 @@
  *
  * This function should be paired with a previous SDL_LockAudioDevice() call.
  *
- * \param dev the ID of the device to be unlocked
+ * \param dev the ID of the device to be unlocked.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1481,7 +1483,7 @@
  * The device ID is invalid as soon as the device is closed, and is eligible
  * for reuse in a new SDL_OpenAudioDevice() call immediately.
  *
- * \param dev an audio device previously opened with SDL_OpenAudioDevice()
+ * \param dev an audio device previously opened with SDL_OpenAudioDevice().
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_bits.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_bits.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_bits.h
+ * # CategoryBits
  *
- *  Functions for fiddling with bits and bitmasks.
+ * Functions for fiddling with bits and bitmasks.
  */
 
 #ifndef SDL_bits_h_
@@ -56,6 +56,12 @@
     modify exact [eax] nomemory;
 #endif
 
+/**
+ * Use this function to get the index of the most significant (set) bit in a
+ *
+ * \param x the number to find the MSB of.
+ * \returns the index of the most significant bit of x, or -1 if x is 0.
+ */
 SDL_FORCE_INLINE int
 SDL_MostSignificantBitIndex32(Uint32 x)
 {
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_blendmode.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_blendmode.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_blendmode.h
+ * # CategoryBlendmode
  *
- *  Header file declaring the SDL_BlendMode enumeration
+ * Header file declaring the SDL_BlendMode enumeration
  */
 
 #ifndef SDL_blendmode_h_
@@ -35,9 +35,9 @@
 #endif
 
 /**
- *  \brief The blend mode used in SDL_RenderCopy() and drawing operations.
+ * The blend mode used in SDL_RenderCopy() and drawing operations.
  */
-typedef enum
+typedef enum SDL_BlendMode
 {
     SDL_BLENDMODE_NONE = 0x00000000,     /**< no blending
                                               dstRGBA = srcRGBA */
@@ -60,9 +60,10 @@
 } SDL_BlendMode;
 
 /**
- *  \brief The blend operation used when combining source and destination pixel components
+ * The blend operation used when combining source and destination pixel
+ * components
  */
-typedef enum
+typedef enum SDL_BlendOperation
 {
     SDL_BLENDOPERATION_ADD              = 0x1,  /**< dst + src: supported by all renderers */
     SDL_BLENDOPERATION_SUBTRACT         = 0x2,  /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */
@@ -72,9 +73,9 @@
 } SDL_BlendOperation;
 
 /**
- *  \brief The normalized factor used to multiply pixel components
+ * The normalized factor used to multiply pixel components
  */
-typedef enum
+typedef enum SDL_BlendFactor
 {
     SDL_BLENDFACTOR_ZERO                = 0x1,  /**< 0, 0, 0, 0 */
     SDL_BLENDFACTOR_ONE                 = 0x2,  /**< 1, 1, 1, 1 */
@@ -158,18 +159,18 @@
  * case.
  *
  * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and
- *                       blue components of the source pixels
+ *                       blue components of the source pixels.
  * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and
- *                       blue components of the destination pixels
+ *                       blue components of the destination pixels.
  * \param colorOperation the SDL_BlendOperation used to combine the red,
  *                       green, and blue components of the source and
- *                       destination pixels
+ *                       destination pixels.
  * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of
- *                       the source pixels
+ *                       the source pixels.
  * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of
- *                       the destination pixels
+ *                       the destination pixels.
  * \param alphaOperation the SDL_BlendOperation used to combine the alpha
- *                       component of the source and destination pixels
+ *                       component of the source and destination pixels.
  * \returns an SDL_BlendMode that represents the chosen factors and
  *          operations.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_clipboard.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_clipboard.h
@@ -20,7 +20,7 @@
 */
 
 /**
- * \file SDL_clipboard.h
+ * # CategoryClipboard
  *
  * Include file for SDL clipboard handling
  */
@@ -41,7 +41,7 @@
 /**
  * Put UTF-8 text into the clipboard.
  *
- * \param text the text to store in the clipboard
+ * \param text the text to store in the clipboard.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -85,7 +85,7 @@
 /**
  * Put UTF-8 text into the primary selection.
  *
- * \param text the text to store in the primary selection
+ * \param text the text to store in the primary selection.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config.h
@@ -24,9 +24,7 @@
 
 #include "SDL_platform.h"
 
-/**
- *  \file SDL_config.h
- */
+/* WIKI CATEGORY: - */
 
 /* Add any platform that doesn't build using the configure system. */
 #if defined(__WIN32__)
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_cpuinfo.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_cpuinfo.h
@@ -19,10 +19,16 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: CPUInfo */
+
 /**
- *  \file SDL_cpuinfo.h
+ * # CategoryCPUInfo
  *
- *  CPU feature detection for SDL.
+ * CPU feature detection for SDL.
+ *
+ * These functions are largely concerned with reporting if the system has
+ * access to various SIMD instruction sets, but also has other important info
+ * to share, such as number of logical CPU cores.
  */
 
 #ifndef SDL_cpuinfo_h_
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_egl.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_egl.h
@@ -19,11 +19,10 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_egl.h
- *
- *  This is a simple file to encapsulate the EGL API headers.
+/*
+ * This is a simple file to encapsulate the EGL API headers.
  */
+
 #if !defined(_MSC_VER) && !defined(__ANDROID__) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS)
 
 #if defined(__vita__) || defined(__psp2__)
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_endian.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_endian.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_endian.h
+ * # CategoryEndian
  *
- *  Functions for reading and writing endian-specific values
+ * Functions for reading and writing endian-specific values
  */
 
 #ifndef SDL_endian_h_
@@ -59,6 +59,15 @@
 #ifdef __linux__
 #include <endian.h>
 #define SDL_BYTEORDER  __BYTE_ORDER
+#elif defined(__sun) && defined(__SVR4)  /* Solaris */
+#include <sys/byteorder.h>
+#if defined(_LITTLE_ENDIAN)
+#define SDL_BYTEORDER   SDL_LIL_ENDIAN
+#elif defined(_BIG_ENDIAN)
+#define SDL_BYTEORDER   SDL_BIG_ENDIAN
+#else
+#error Unsupported endianness
+#endif
 #elif defined(__OpenBSD__) || defined(__DragonFly__)
 #include <endian.h>
 #define SDL_BYTEORDER  BYTE_ORDER
@@ -79,7 +88,7 @@
     defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
     (defined(__MIPS__) && defined(__MIPSEB__)) || \
     defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \
-    defined(__sparc__)
+    defined(__sparc__) || defined(__sparc)
 #define SDL_BYTEORDER   SDL_BIG_ENDIAN
 #else
 #define SDL_BYTEORDER   SDL_LIL_ENDIAN
@@ -180,6 +189,16 @@
   parm   [ax]   \
   modify [ax];
 #else
+
+/**
+ * Use this function to swap the byte order of a 16-bit value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapBE16
+ * \sa SDL_SwapLE16
+ */
 SDL_FORCE_INLINE Uint16
 SDL_Swap16(Uint16 x)
 {
@@ -231,6 +250,16 @@
   parm   [eax] \
   modify [eax];
 #else
+
+/**
+ * Use this function to swap the byte order of a 32-bit value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapBE32
+ * \sa SDL_SwapLE32
+ */
 SDL_FORCE_INLINE Uint32
 SDL_Swap32(Uint32 x)
 {
@@ -276,6 +305,16 @@
   parm [eax edx]  \
   modify [eax edx];
 #else
+
+/**
+ * Use this function to swap the byte order of a 64-bit value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapBE64
+ * \sa SDL_SwapLE64
+ */
 SDL_FORCE_INLINE Uint64
 SDL_Swap64(Uint64 x)
 {
@@ -293,6 +332,15 @@
 #endif
 
 
+/**
+ * Use this function to swap the byte order of a floating point value.
+ *
+ * \param x the value to be swapped.
+ * \returns the swapped value.
+ *
+ * \sa SDL_SwapFloatBE
+ * \sa SDL_SwapFloatLE
+ */
 SDL_FORCE_INLINE float
 SDL_SwapFloat(float x)
 {
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_error.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_error.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_error.h
+ * # CategoryError
  *
- *  Simple error message routines for SDL.
+ * Simple error message routines for SDL.
  */
 
 #ifndef SDL_error_h_
@@ -53,9 +53,9 @@
  * }
  * ```
  *
- * \param fmt a printf()-style message format string
+ * \param fmt a printf()-style message format string.
  * \param ... additional parameters matching % tokens in the `fmt` string, if
- *            any
+ *            any.
  * \returns always -1.
  *
  * \since This function is available since SDL 2.0.0.
@@ -109,8 +109,8 @@
  * otherwise operates exactly the same as SDL_GetError().
  *
  * \param errstr A buffer to fill with the last error message that was set for
- *               the current thread
- * \param maxlen The size of the buffer pointed to by the errstr parameter
+ *               the current thread.
+ * \param maxlen The size of the buffer pointed to by the errstr parameter.
  * \returns the pointer passed in as the `errstr` parameter.
  *
  * \since This function is available since SDL 2.0.14.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_events.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_events.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_events.h
+ * # CategoryEvents
  *
- *  Include file for SDL event handling.
+ * Include file for SDL event handling.
  */
 
 #ifndef SDL_events_h_
@@ -52,7 +52,7 @@
 /**
  * The types of events that can be delivered.
  */
-typedef enum
+typedef enum SDL_EventType
 {
     SDL_FIRSTEVENT     = 0,     /**< Unused (do not remove) */
 
@@ -167,7 +167,7 @@
     /* Internal events */
     SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */
 
-    /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use,
+    /** Events SDL_USEREVENT through SDL_LASTEVENT are for your use,
      *  and should be allocated with SDL_RegisterEvents()
      */
     SDL_USEREVENT    = 0x8000,
@@ -179,7 +179,7 @@
 } SDL_EventType;
 
 /**
- *  \brief Fields shared by every event
+ * Fields shared by every event
  */
 typedef struct SDL_CommonEvent
 {
@@ -188,14 +188,14 @@
 } SDL_CommonEvent;
 
 /**
- *  \brief Display state change event data (event.display.*)
+ * Display state change event data (event.display.*)
  */
 typedef struct SDL_DisplayEvent
 {
-    Uint32 type;        /**< ::SDL_DISPLAYEVENT */
+    Uint32 type;        /**< SDL_DISPLAYEVENT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 display;     /**< The associated display index */
-    Uint8 event;        /**< ::SDL_DisplayEventID */
+    Uint8 event;        /**< SDL_DisplayEventID */
     Uint8 padding1;
     Uint8 padding2;
     Uint8 padding3;
@@ -203,14 +203,14 @@
 } SDL_DisplayEvent;
 
 /**
- *  \brief Window state change event data (event.window.*)
+ * Window state change event data (event.window.*)
  */
 typedef struct SDL_WindowEvent
 {
-    Uint32 type;        /**< ::SDL_WINDOWEVENT */
+    Uint32 type;        /**< SDL_WINDOWEVENT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The associated window */
-    Uint8 event;        /**< ::SDL_WindowEventID */
+    Uint8 event;        /**< SDL_WindowEventID */
     Uint8 padding1;
     Uint8 padding2;
     Uint8 padding3;
@@ -219,14 +219,14 @@
 } SDL_WindowEvent;
 
 /**
- *  \brief Keyboard button event structure (event.key.*)
+ * Keyboard button event structure (event.key.*)
  */
 typedef struct SDL_KeyboardEvent
 {
-    Uint32 type;        /**< ::SDL_KEYDOWN or ::SDL_KEYUP */
+    Uint32 type;        /**< SDL_KEYDOWN or SDL_KEYUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with keyboard focus, if any */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 repeat;       /**< Non-zero if this is a key repeat */
     Uint8 padding2;
     Uint8 padding3;
@@ -234,12 +234,13 @@
 } SDL_KeyboardEvent;
 
 #define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32)
+
 /**
- *  \brief Keyboard text editing event structure (event.edit.*)
+ * Keyboard text editing event structure (event.edit.*)
  */
 typedef struct SDL_TextEditingEvent
 {
-    Uint32 type;                                /**< ::SDL_TEXTEDITING */
+    Uint32 type;                                /**< SDL_TEXTEDITING */
     Uint32 timestamp;                           /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;                            /**< The window with keyboard focus, if any */
     char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE];  /**< The editing text */
@@ -248,12 +249,12 @@
 } SDL_TextEditingEvent;
 
 /**
- *  \brief Extended keyboard text editing event structure (event.editExt.*) when text would be
- *  truncated if stored in the text buffer SDL_TextEditingEvent
+ * Extended keyboard text editing event structure (event.editExt.*) when text
+ * would be truncated if stored in the text buffer SDL_TextEditingEvent
  */
 typedef struct SDL_TextEditingExtEvent
 {
-    Uint32 type;                                /**< ::SDL_TEXTEDITING_EXT */
+    Uint32 type;                                /**< SDL_TEXTEDITING_EXT */
     Uint32 timestamp;                           /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;                            /**< The window with keyboard focus, if any */
     char* text;                                 /**< The editing text, which should be freed with SDL_free(), and will not be NULL */
@@ -261,24 +262,43 @@
     Sint32 length;                              /**< The length of selected editing text */
 } SDL_TextEditingExtEvent;
 
+/**
+ * The maximum bytes of text that can be supplied in an SDL_TextInputEvent.
+ */
 #define SDL_TEXTINPUTEVENT_TEXT_SIZE (32)
+
 /**
- *  \brief Keyboard text input event structure (event.text.*)
+ * Keyboard text input event structure (event.text.*)
+ *
+ * `text` is limited to SDL_TEXTINPUTEVENT_TEXT_SIZE bytes. If the incoming
+ * string is larger than this, SDL will split it and send it in pieces, across
+ * multiple events. The string is in UTF-8 format, and if split, SDL
+ * guarantees that it will not split in the middle of a UTF-8 sequence, so any
+ * event will only contain complete codepoints. However, if there are several
+ * codepoints that go together into a single glyph (like an emoji "thumbs up"
+ * followed by a skin color), they may be split between events.
+ *
+ * This event will never be delivered unless text input is enabled by calling
+ * SDL_StartTextInput(). Text input is enabled by default on desktop
+ * platforms, and disabled by default on mobile platforms!
+ *
+ * \sa SDL_StartTextInput
+ * \sa SDL_StopTextInput
  */
 typedef struct SDL_TextInputEvent
 {
-    Uint32 type;                              /**< ::SDL_TEXTINPUT */
+    Uint32 type;                              /**< SDL_TEXTINPUT */
     Uint32 timestamp;                         /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;                          /**< The window with keyboard focus, if any */
-    char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];  /**< The input text */
+    char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];  /**< The input text; UTF-8 encoded. */
 } SDL_TextInputEvent;
 
 /**
- *  \brief Mouse motion event structure (event.motion.*)
+ * Mouse motion event structure (event.motion.*)
  */
 typedef struct SDL_MouseMotionEvent
 {
-    Uint32 type;        /**< ::SDL_MOUSEMOTION */
+    Uint32 type;        /**< SDL_MOUSEMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with mouse focus, if any */
     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
@@ -290,16 +310,16 @@
 } SDL_MouseMotionEvent;
 
 /**
- *  \brief Mouse button event structure (event.button.*)
+ * Mouse button event structure (event.button.*)
  */
 typedef struct SDL_MouseButtonEvent
 {
-    Uint32 type;        /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */
+    Uint32 type;        /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with mouse focus, if any */
     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
     Uint8 button;       /**< The mouse button index */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 clicks;       /**< 1 for single-click, 2 for double-click, etc. */
     Uint8 padding1;
     Sint32 x;           /**< X coordinate, relative to window */
@@ -307,11 +327,11 @@
 } SDL_MouseButtonEvent;
 
 /**
- *  \brief Mouse wheel event structure (event.wheel.*)
+ * Mouse wheel event structure (event.wheel.*)
  */
 typedef struct SDL_MouseWheelEvent
 {
-    Uint32 type;        /**< ::SDL_MOUSEWHEEL */
+    Uint32 type;        /**< SDL_MOUSEWHEEL */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The window with mouse focus, if any */
     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
@@ -325,11 +345,11 @@
 } SDL_MouseWheelEvent;
 
 /**
- *  \brief Joystick axis motion event structure (event.jaxis.*)
+ * Joystick axis motion event structure (event.jaxis.*)
  */
 typedef struct SDL_JoyAxisEvent
 {
-    Uint32 type;        /**< ::SDL_JOYAXISMOTION */
+    Uint32 type;        /**< SDL_JOYAXISMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 axis;         /**< The joystick axis index */
@@ -341,11 +361,11 @@
 } SDL_JoyAxisEvent;
 
 /**
- *  \brief Joystick trackball motion event structure (event.jball.*)
+ * Joystick trackball motion event structure (event.jball.*)
  */
 typedef struct SDL_JoyBallEvent
 {
-    Uint32 type;        /**< ::SDL_JOYBALLMOTION */
+    Uint32 type;        /**< SDL_JOYBALLMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 ball;         /**< The joystick trackball index */
@@ -357,18 +377,18 @@
 } SDL_JoyBallEvent;
 
 /**
- *  \brief Joystick hat position change event structure (event.jhat.*)
+ * Joystick hat position change event structure (event.jhat.*)
  */
 typedef struct SDL_JoyHatEvent
 {
-    Uint32 type;        /**< ::SDL_JOYHATMOTION */
+    Uint32 type;        /**< SDL_JOYHATMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 hat;          /**< The joystick hat index */
     Uint8 value;        /**< The hat position value.
-                         *   \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP
-                         *   \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT
-                         *   \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN
+                         *   \sa SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP
+                         *   \sa SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT
+                         *   \sa SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
                          *
                          *   Note that zero means the POV is centered.
                          */
@@ -377,35 +397,40 @@
 } SDL_JoyHatEvent;
 
 /**
- *  \brief Joystick button event structure (event.jbutton.*)
+ * Joystick button event structure (event.jbutton.*)
  */
 typedef struct SDL_JoyButtonEvent
 {
-    Uint32 type;        /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */
+    Uint32 type;        /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 button;       /**< The joystick button index */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 padding1;
     Uint8 padding2;
 } SDL_JoyButtonEvent;
 
 /**
- *  \brief Joystick device event structure (event.jdevice.*)
+ * Joystick device event structure (event.jdevice.*)
+ *
+ * SDL will send JOYSTICK_ADDED events for devices that are already plugged in
+ * during SDL_Init.
+ *
+ * \sa SDL_ControllerDeviceEvent
  */
 typedef struct SDL_JoyDeviceEvent
 {
-    Uint32 type;        /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */
+    Uint32 type;        /**< SDL_JOYDEVICEADDED or SDL_JOYDEVICEREMOVED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Sint32 which;       /**< The joystick device index for the ADDED event, instance id for the REMOVED event */
 } SDL_JoyDeviceEvent;
 
 /**
- *  \brief Joysick battery level change event structure (event.jbattery.*)
+ * Joysick battery level change event structure (event.jbattery.*)
  */
 typedef struct SDL_JoyBatteryEvent
 {
-    Uint32 type;        /**< ::SDL_JOYBATTERYUPDATED */
+    Uint32 type;        /**< SDL_JOYBATTERYUPDATED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     SDL_JoystickPowerLevel level; /**< The joystick battery level */
@@ -412,11 +437,11 @@
 } SDL_JoyBatteryEvent;
 
 /**
- *  \brief Game controller axis motion event structure (event.caxis.*)
+ * Game controller axis motion event structure (event.caxis.*)
  */
 typedef struct SDL_ControllerAxisEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERAXISMOTION */
+    Uint32 type;        /**< SDL_CONTROLLERAXISMOTION */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 axis;         /**< The controller axis (SDL_GameControllerAxis) */
@@ -429,15 +454,15 @@
 
 
 /**
- *  \brief Game controller button event structure (event.cbutton.*)
+ * Game controller button event structure (event.cbutton.*)
  */
 typedef struct SDL_ControllerButtonEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */
+    Uint32 type;        /**< SDL_CONTROLLERBUTTONDOWN or SDL_CONTROLLERBUTTONUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Uint8 button;       /**< The controller button (SDL_GameControllerButton) */
-    Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */
+    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
     Uint8 padding1;
     Uint8 padding2;
 } SDL_ControllerButtonEvent;
@@ -444,21 +469,27 @@
 
 
 /**
- *  \brief Controller device event structure (event.cdevice.*)
+ * Controller device event structure (event.cdevice.*)
+ *
+ * Joysticks that are supported game controllers receive both an
+ * SDL_JoyDeviceEvent and an SDL_ControllerDeviceEvent.
+ *
+ * SDL will send CONTROLLERDEVICEADDED events for joysticks that are already
+ * plugged in during SDL_Init() and are recognized as game controllers.
  */
 typedef struct SDL_ControllerDeviceEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, ::SDL_CONTROLLERDEVICEREMAPPED, or ::SDL_CONTROLLERSTEAMHANDLEUPDATED */
+    Uint32 type;        /**< SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_CONTROLLERDEVICEREMAPPED, or SDL_CONTROLLERSTEAMHANDLEUPDATED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Sint32 which;       /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */
 } SDL_ControllerDeviceEvent;
 
 /**
- *  \brief Game controller touchpad event structure (event.ctouchpad.*)
+ * Game controller touchpad event structure (event.ctouchpad.*)
  */
 typedef struct SDL_ControllerTouchpadEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */
+    Uint32 type;        /**< SDL_CONTROLLERTOUCHPADDOWN or SDL_CONTROLLERTOUCHPADMOTION or SDL_CONTROLLERTOUCHPADUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
     Sint32 touchpad;    /**< The index of the touchpad */
@@ -469,24 +500,24 @@
 } SDL_ControllerTouchpadEvent;
 
 /**
- *  \brief Game controller sensor event structure (event.csensor.*)
+ * Game controller sensor event structure (event.csensor.*)
  */
 typedef struct SDL_ControllerSensorEvent
 {
-    Uint32 type;        /**< ::SDL_CONTROLLERSENSORUPDATE */
+    Uint32 type;        /**< SDL_CONTROLLERSENSORUPDATE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_JoystickID which; /**< The joystick instance id */
-    Sint32 sensor;      /**< The type of the sensor, one of the values of ::SDL_SensorType */
+    Sint32 sensor;      /**< The type of the sensor, one of the values of SDL_SensorType */
     float data[3];      /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */
     Uint64 timestamp_us; /**< The timestamp of the sensor reading in microseconds, if the hardware provides this information. */
 } SDL_ControllerSensorEvent;
 
 /**
- *  \brief Audio device event structure (event.adevice.*)
+ * Audio device event structure (event.adevice.*)
  */
 typedef struct SDL_AudioDeviceEvent
 {
-    Uint32 type;        /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */
+    Uint32 type;        /**< SDL_AUDIODEVICEADDED, or SDL_AUDIODEVICEREMOVED */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 which;       /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */
     Uint8 iscapture;    /**< zero if an output device, non-zero if a capture device. */
@@ -497,11 +528,11 @@
 
 
 /**
- *  \brief Touch finger event structure (event.tfinger.*)
+ * Touch finger event structure (event.tfinger.*)
  */
 typedef struct SDL_TouchFingerEvent
 {
-    Uint32 type;        /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */
+    Uint32 type;        /**< SDL_FINGERMOTION or SDL_FINGERDOWN or SDL_FINGERUP */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_TouchID touchId; /**< The touch device id */
     SDL_FingerID fingerId;
@@ -515,11 +546,11 @@
 
 
 /**
- *  \brief Multiple Finger Gesture Event (event.mgesture.*)
+ * Multiple Finger Gesture Event (event.mgesture.*)
  */
 typedef struct SDL_MultiGestureEvent
 {
-    Uint32 type;        /**< ::SDL_MULTIGESTURE */
+    Uint32 type;        /**< SDL_MULTIGESTURE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_TouchID touchId; /**< The touch device id */
     float dTheta;
@@ -532,11 +563,11 @@
 
 
 /**
- * \brief Dollar Gesture Event (event.dgesture.*)
+ * Dollar Gesture Event (event.dgesture.*)
  */
 typedef struct SDL_DollarGestureEvent
 {
-    Uint32 type;        /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */
+    Uint32 type;        /**< SDL_DOLLARGESTURE or SDL_DOLLARRECORD */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_TouchID touchId; /**< The touch device id */
     SDL_GestureID gestureId;
@@ -548,13 +579,15 @@
 
 
 /**
- *  \brief An event used to request a file open by the system (event.drop.*)
- *         This event is enabled by default, you can disable it with SDL_EventState().
- *  \note If this event is enabled, you must free the filename in the event.
+ * An event used to request a file open by the system (event.drop.*)
+ *
+ * This event is enabled by default, you can disable it with SDL_EventState().
+ *
+ * If this event is enabled, you must free the filename in the event.
  */
 typedef struct SDL_DropEvent
 {
-    Uint32 type;        /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */
+    Uint32 type;        /**< SDL_DROPBEGIN or SDL_DROPFILE or SDL_DROPTEXT or SDL_DROPCOMPLETE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     char *file;         /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */
     Uint32 windowID;    /**< The window that was dropped on, if any */
@@ -562,11 +595,11 @@
 
 
 /**
- *  \brief Sensor event structure (event.sensor.*)
+ * Sensor event structure (event.sensor.*)
  */
 typedef struct SDL_SensorEvent
 {
-    Uint32 type;        /**< ::SDL_SENSORUPDATE */
+    Uint32 type;        /**< SDL_SENSORUPDATE */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Sint32 which;       /**< The instance ID of the sensor */
     float data[6];      /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */
@@ -574,20 +607,20 @@
 } SDL_SensorEvent;
 
 /**
- *  \brief The "quit requested" event
+ * The "quit requested" event
  */
 typedef struct SDL_QuitEvent
 {
-    Uint32 type;        /**< ::SDL_QUIT */
+    Uint32 type;        /**< SDL_QUIT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
 } SDL_QuitEvent;
 
 /**
- *  \brief A user-defined event type (event.user.*)
+ * A user-defined event type (event.user.*)
  */
 typedef struct SDL_UserEvent
 {
-    Uint32 type;        /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */
+    Uint32 type;        /**< SDL_USEREVENT through SDL_LASTEVENT-1 */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     Uint32 windowID;    /**< The associated window if any */
     Sint32 code;        /**< User defined event code */
@@ -600,20 +633,24 @@
 typedef struct SDL_SysWMmsg SDL_SysWMmsg;
 
 /**
- *  \brief A video driver dependent system event (event.syswm.*)
- *         This event is disabled by default, you can enable it with SDL_EventState()
+ * A video driver dependent system event (event.syswm.*)
  *
- *  \note If you want to use this event, you should include SDL_syswm.h.
+ * This event is disabled by default, you can enable it with SDL_EventState()
+ *
+ * If you want to use this event, you should include SDL_syswm.h.
  */
 typedef struct SDL_SysWMEvent
 {
-    Uint32 type;        /**< ::SDL_SYSWMEVENT */
+    Uint32 type;        /**< SDL_SYSWMEVENT */
     Uint32 timestamp;   /**< In milliseconds, populated using SDL_GetTicks() */
     SDL_SysWMmsg *msg;  /**< driver dependent data, defined in SDL_syswm.h */
 } SDL_SysWMEvent;
 
 /**
- *  \brief General event structure
+ * General event structure
+ *
+ * The SDL_Event structure is the core of all event handling in SDL. SDL_Event
+ * is a union of all event structures used in SDL.
  */
 typedef union SDL_Event
 {
@@ -696,7 +733,7 @@
 extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
 
 /* @{ */
-typedef enum
+typedef enum SDL_eventaction
 {
     SDL_ADDEVENT,
     SDL_PEEKEVENT,
@@ -723,15 +760,15 @@
  *
  * This function is thread-safe.
  *
- * \param events destination buffer for the retrieved events
+ * \param events destination buffer for the retrieved events.
  * \param numevents if action is SDL_ADDEVENT, the number of events to add
  *                  back to the event queue; if action is SDL_PEEKEVENT or
- *                  SDL_GETEVENT, the maximum number of events to retrieve
- * \param action action to take; see [[#action|Remarks]] for details
+ *                  SDL_GETEVENT, the maximum number of events to retrieve.
+ * \param action action to take; see [[#action|Remarks]] for details.
  * \param minType minimum value of the event type to be considered;
- *                SDL_FIRSTEVENT is a safe choice
+ *                SDL_FIRSTEVENT is a safe choice.
  * \param maxType maximum value of the event type to be considered;
- *                SDL_LASTEVENT is a safe choice
+ *                SDL_LASTEVENT is a safe choice.
  * \returns the number of events actually stored or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -752,7 +789,7 @@
  * If you need to check for a range of event types, use SDL_HasEvents()
  * instead.
  *
- * \param type the type of event to be queried; see SDL_EventType for details
+ * \param type the type of event to be queried; see SDL_EventType for details.
  * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if
  *          events matching `type` are not present.
  *
@@ -769,9 +806,9 @@
  * If you need to check for a single event type, use SDL_HasEvent() instead.
  *
  * \param minType the low end of event type to be queried, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  * \param maxType the high end of event type to be queried, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are
  *          present, or SDL_FALSE if not.
  *
@@ -795,7 +832,7 @@
  * sure that all pending OS events are flushed, you can call SDL_PumpEvents()
  * on the main thread immediately before the flush call.
  *
- * \param type the type of event to be cleared; see SDL_EventType for details
+ * \param type the type of event to be cleared; see SDL_EventType for details.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -818,9 +855,9 @@
  * on the main thread immediately before the flush call.
  *
  * \param minType the low end of event type to be cleared, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  * \param maxType the high end of event type to be cleared, inclusive; see
- *                SDL_EventType for details
+ *                SDL_EventType for details.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -861,7 +898,7 @@
  * ```
  *
  * \param event the SDL_Event structure to be filled with the next event from
- *              the queue, or NULL
+ *              the queue, or NULL.
  * \returns 1 if there is a pending event or 0 if there are none available.
  *
  * \since This function is available since SDL 2.0.0.
@@ -885,7 +922,7 @@
  * this function in the thread that initialized the video subsystem.
  *
  * \param event the SDL_Event structure to be filled in with the next event
- *              from the queue, or NULL
+ *              from the queue, or NULL.
  * \returns 1 on success or 0 if there was an error while waiting for events;
  *          call SDL_GetError() for more information.
  *
@@ -908,9 +945,9 @@
  * this function in the thread that initialized the video subsystem.
  *
  * \param event the SDL_Event structure to be filled in with the next event
- *              from the queue, or NULL
+ *              from the queue, or NULL.
  * \param timeout the maximum number of milliseconds to wait for the next
- *                available event
+ *                available event.
  * \returns 1 on success or 0 if there was an error while waiting for events;
  *          call SDL_GetError() for more information. This also returns 0 if
  *          the timeout elapsed without an event arriving.
@@ -945,7 +982,7 @@
  * get an event type that does not conflict with other code that also wants
  * its own custom event types.
  *
- * \param event the SDL_Event to be added to the queue
+ * \param event the SDL_Event to be added to the queue.
  * \returns 1 on success, 0 if the event was filtered, or a negative error
  *          code on failure; call SDL_GetError() for more information. A
  *          common reason for error is the event queue being full.
@@ -961,11 +998,11 @@
 /**
  * A function pointer used for callbacks that watch the event queue.
  *
- * \param userdata what was passed as `userdata` to SDL_SetEventFilter()
- *        or SDL_AddEventWatch, etc
- * \param event the event that triggered the callback
- * \returns 1 to permit event to be added to the queue, and 0 to disallow
- *          it. When used with SDL_AddEventWatch, the return value is ignored.
+ * \param userdata what was passed as `userdata` to SDL_SetEventFilter() or
+ *                 SDL_AddEventWatch, etc.
+ * \param event the event that triggered the callback.
+ * \returns 1 to permit event to be added to the queue, and 0 to disallow it.
+ *          When used with SDL_AddEventWatch, the return value is ignored.
  *
  * \sa SDL_SetEventFilter
  * \sa SDL_AddEventWatch
@@ -988,7 +1025,7 @@
  * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the
  * application at the next event poll.
  *
- * There is one caveat when dealing with the ::SDL_QuitEvent event type. The
+ * There is one caveat when dealing with the SDL_QuitEvent event type. The
  * event filter is only called when the window manager desires to close the
  * application window. If the event filter returns 1, then the window will be
  * closed, otherwise the window will remain open if possible.
@@ -1003,8 +1040,8 @@
  * the event filter, but events pushed onto the queue with SDL_PeepEvents() do
  * not.
  *
- * \param filter An SDL_EventFilter function to call when an event happens
- * \param userdata a pointer that is passed to `filter`
+ * \param filter An SDL_EventFilter function to call when an event happens.
+ * \param userdata a pointer that is passed to `filter`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1023,9 +1060,9 @@
  * This function can be used to "chain" filters, by saving the existing filter
  * before replacing it with a function that will call that saved filter.
  *
- * \param filter the current callback function will be stored here
+ * \param filter the current callback function will be stored here.
  * \param userdata the pointer that is passed to the current event filter will
- *                 be stored here
+ *                 be stored here.
  * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set.
  *
  * \since This function is available since SDL 2.0.0.
@@ -1054,7 +1091,7 @@
  * through SDL_PeepEvents().
  *
  * \param filter an SDL_EventFilter function to call when an event happens.
- * \param userdata a pointer that is passed to `filter`
+ * \param userdata a pointer that is passed to `filter`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1070,8 +1107,8 @@
  * This function takes the same input as SDL_AddEventWatch() to identify and
  * delete the corresponding callback.
  *
- * \param filter the function originally passed to SDL_AddEventWatch()
- * \param userdata the pointer originally passed to SDL_AddEventWatch()
+ * \param filter the function originally passed to SDL_AddEventWatch().
+ * \param userdata the pointer originally passed to SDL_AddEventWatch().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1088,8 +1125,8 @@
  * this function does not change the filter permanently, it only uses the
  * supplied filter until this function returns.
  *
- * \param filter the SDL_EventFilter function to call when an event happens
- * \param userdata a pointer that is passed to `filter`
+ * \param filter the SDL_EventFilter function to call when an event happens.
+ * \param userdata a pointer that is passed to `filter`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1115,8 +1152,8 @@
  *   from the event queue and will not be filtered
  * - `SDL_ENABLE`: the event will be processed normally
  *
- * \param type the type of event; see SDL_EventType for details
- * \param state how to process the event
+ * \param type the type of event; see SDL_EventType for details.
+ * \param state how to process the event.
  * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state
  *          of the event before this function makes any changes to it.
  *
@@ -1138,7 +1175,7 @@
  * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or
  * 0xFFFFFFFF), but is clearer to write.
  *
- * \param numevents the number of events to be allocated
+ * \param numevents the number of events to be allocated.
  * \returns the beginning event number, or (Uint32)-1 if there are not enough
  *          user-defined events left.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_filesystem.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_filesystem.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_filesystem.h
+ * # CategoryFilesystem
  *
- *  \brief Include file for filesystem SDL API functions
+ * Include file for filesystem SDL API functions
  */
 
 #ifndef SDL_filesystem_h_
@@ -126,8 +126,8 @@
  * The pointer returned is owned by the caller. Please call SDL_free() on the
  * pointer when done with it.
  *
- * \param org the name of your organization
- * \param app the name of your application
+ * \param org the name of your organization.
+ * \param app the name of your application.
  * \returns a UTF-8 string of the user directory in platform-dependent
  *          notation. NULL if there's a problem (creating directory failed,
  *          etc.).
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gamecontroller.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gamecontroller.h
@@ -19,10 +19,12 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: GameController */
+
 /**
- *  \file SDL_gamecontroller.h
+ * # CategoryGameController
  *
- *  Include file for SDL game controller event handling
+ * Include file for SDL game controller event handling
  */
 
 #ifndef SDL_gamecontroller_h_
@@ -44,7 +46,7 @@
  *  \file SDL_gamecontroller.h
  *
  *  In order to use these functions, SDL_Init() must have been called
- *  with the ::SDL_INIT_GAMECONTROLLER flag.  This causes SDL to scan the system
+ *  with the SDL_INIT_GAMECONTROLLER flag.  This causes SDL to scan the system
  *  for game controllers, and load appropriate drivers.
  *
  *  If you would like to receive controller updates while the application
@@ -58,7 +60,7 @@
 struct _SDL_GameController;
 typedef struct _SDL_GameController SDL_GameController;
 
-typedef enum
+typedef enum SDL_GameControllerType
 {
     SDL_CONTROLLER_TYPE_UNKNOWN = 0,
     SDL_CONTROLLER_TYPE_XBOX360,
@@ -77,7 +79,7 @@
     SDL_CONTROLLER_TYPE_MAX
 } SDL_GameControllerType;
 
-typedef enum
+typedef enum SDL_GameControllerBindType
 {
     SDL_CONTROLLER_BINDTYPE_NONE = 0,
     SDL_CONTROLLER_BINDTYPE_BUTTON,
@@ -86,7 +88,7 @@
 } SDL_GameControllerBindType;
 
 /**
- *  Get the SDL joystick layer binding for this controller button/axis mapping
+ * Get the SDL joystick layer binding for this controller button/axis mapping
  */
 typedef struct SDL_GameControllerButtonBind
 {
@@ -144,6 +146,10 @@
  * If a new mapping is loaded for an already known controller GUID, the later
  * version will overwrite the one currently loaded.
  *
+ * If this function is called before SDL_Init, SDL will generate an
+ * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged
+ * in at the time that SDL_Init is called.
+ *
  * Mappings not belonging to the current platform or with no platform field
  * specified will be ignored (i.e. mappings for Linux will be ignored in
  * Windows, etc).
@@ -152,8 +158,8 @@
  * processing it, so take this into consideration if you are in a memory
  * constrained environment.
  *
- * \param rw the data stream for the mappings to be added
- * \param freerw non-zero to close the stream after being read
+ * \param rw the data stream for the mappings to be added.
+ * \param freerw non-zero to close the stream after being read.
  * \returns the number of mappings added or -1 on error; call SDL_GetError()
  *          for more information.
  *
@@ -162,13 +168,15 @@
  * \sa SDL_GameControllerAddMapping
  * \sa SDL_GameControllerAddMappingsFromFile
  * \sa SDL_GameControllerMappingForGUID
+ * \sa SDL_CONTROLLERDEVICEADDED
  */
 extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw);
 
 /**
- *  Load a set of mappings from a file, filtered by the current SDL_GetPlatform()
+ * Load a set of mappings from a file, filtered by the current
+ * SDL_GetPlatform()
  *
- *  Convenience macro.
+ * Convenience macro.
  */
 #define SDL_GameControllerAddMappingsFromFile(file)   SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1)
 
@@ -190,7 +198,11 @@
  * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7"
  * ```
  *
- * \param mappingString the mapping string
+ * If this function is called before SDL_Init, SDL will generate an
+ * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged
+ * in at the time that SDL_Init is called.
+ *
+ * \param mappingString the mapping string.
  * \returns 1 if a new mapping is added, 0 if an existing mapping is updated,
  *          -1 on error; call SDL_GetError() for more information.
  *
@@ -198,6 +210,7 @@
  *
  * \sa SDL_GameControllerMapping
  * \sa SDL_GameControllerMappingForGUID
+ * \sa SDL_CONTROLLERDEVICEADDED
  */
 extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString);
 
@@ -225,7 +238,7 @@
  *
  * The returned string must be freed with SDL_free().
  *
- * \param guid a structure containing the GUID for which a mapping is desired
+ * \param guid a structure containing the GUID for which a mapping is desired.
  * \returns a mapping string or NULL on error; call SDL_GetError() for more
  *          information.
  *
@@ -244,7 +257,7 @@
  * Details about mappings are discussed with SDL_GameControllerAddMapping().
  *
  * \param gamecontroller the game controller you want to get the current
- *                       mapping for
+ *                       mapping for.
  * \returns a string that has the controller's mapping or NULL if no mapping
  *          is available; call SDL_GetError() for more information.
  *
@@ -262,7 +275,7 @@
  * SDL_JoystickOpen().
  *
  * \param joystick_index the device_index of a device, up to
- *                       SDL_NumJoysticks()
+ *                       SDL_NumJoysticks().
  * \returns SDL_TRUE if the given joystick is supported by the game controller
  *          interface, SDL_FALSE if it isn't or it's an invalid index.
  *
@@ -282,7 +295,7 @@
  * SDL_JoystickOpen().
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the implementation-dependent name for the game controller, or NULL
  *          if there is no name or the index is invalid.
  *
@@ -303,7 +316,7 @@
  * SDL_JoystickOpen().
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the implementation-dependent path for the game controller, or NULL
  *          if there is no path or the index is invalid.
  *
@@ -319,7 +332,7 @@
  * This can be called before any controllers are opened.
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the controller type.
  *
  * \since This function is available since SDL 2.0.12.
@@ -332,7 +345,7 @@
  * This can be called before any controllers are opened.
  *
  * \param joystick_index the device_index of a device, from zero to
- *                       SDL_NumJoysticks()-1
+ *                       SDL_NumJoysticks()-1.
  * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if
  *          no mapping is available.
  *
@@ -352,7 +365,7 @@
  * be used there instead.
  *
  * \param joystick_index the device_index of a device, up to
- *                       SDL_NumJoysticks()
+ *                       SDL_NumJoysticks().
  * \returns a gamecontroller identifier or NULL if an error occurred; call
  *          SDL_GetError() for more information.
  *
@@ -367,7 +380,7 @@
 /**
  * Get the SDL_GameController associated with an instance id.
  *
- * \param joyid the instance id to get the SDL_GameController for
+ * \param joyid the instance id to get the SDL_GameController for.
  * \returns an SDL_GameController on success or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -399,7 +412,7 @@
  * it takes a controller identifier instead of the (unstable) device index.
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  * \returns the implementation dependent name for the game controller, or NULL
  *          if there is no name or the identifier passed is invalid.
  *
@@ -417,7 +430,7 @@
  * it takes a controller identifier instead of the (unstable) device index.
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  * \returns the implementation dependent path for the game controller, or NULL
  *          if there is no path or the identifier passed is invalid.
  *
@@ -527,8 +540,8 @@
 /**
  * Get the Steam Input handle of an opened controller, if available.
  *
- * Returns an InputHandle_t for the controller that can be used with Steam Input API:
- * https://partner.steamgames.com/doc/api/ISteamInput
+ * Returns an InputHandle_t for the controller that can be used with Steam
+ * Input API: https://partner.steamgames.com/doc/api/ISteamInput
  *
  * \param gamecontroller the game controller object to query.
  * \returns the gamepad handle, or 0 if unavailable.
@@ -542,7 +555,7 @@
  * Check if a controller has been opened and is currently connected.
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  * \returns SDL_TRUE if the controller has been opened and is currently
  *          connected, or SDL_FALSE if not.
  *
@@ -567,7 +580,7 @@
  * cause SDL to crash.
  *
  * \param gamecontroller the game controller object that you want to get a
- *                       joystick from
+ *                       joystick from.
  * \returns a SDL_Joystick object; call SDL_GetError() for more information.
  *
  * \since This function is available since SDL 2.0.0.
@@ -584,7 +597,7 @@
  * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0,
  * and 1 will have any effect. Other numbers will just be returned.
  *
- * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`
+ * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`.
  * \returns the same value passed to the function, with exception to -1
  *          (SDL_QUERY), which will return the current state.
  *
@@ -607,17 +620,19 @@
 
 
 /**
- *  The list of axes available from a controller
+ * The list of axes available from a controller
  *
- *  Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX,
- *  and are centered within ~8000 of zero, though advanced UI will allow users to set
- *  or autodetect the dead zone, which varies between controllers.
+ * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to
+ * SDL_JOYSTICK_AXIS_MAX, and are centered within ~8000 of zero, though
+ * advanced UI will allow users to set or autodetect the dead zone, which
+ * varies between controllers.
  *
- *  Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX
- *  (fully pressed) when reported by SDL_GameControllerGetAxis(). Note that this is not the
- *  same range that will be reported by the lower-level SDL_GetJoystickAxis().
+ * Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX (fully
+ * pressed) when reported by SDL_GameControllerGetAxis(). Note that this is
+ * not the same range that will be reported by the lower-level
+ * SDL_GetJoystickAxis().
  */
-typedef enum
+typedef enum SDL_GameControllerAxis
 {
     SDL_CONTROLLER_AXIS_INVALID = -1,
     SDL_CONTROLLER_AXIS_LEFTX,
@@ -641,7 +656,7 @@
  * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`,
  * respectively.
  *
- * \param str string representing a SDL_GameController axis
+ * \param str string representing a SDL_GameController axis.
  * \returns the SDL_GameControllerAxis enum corresponding to the input string,
  *          or `SDL_CONTROLLER_AXIS_INVALID` if no match was found.
  *
@@ -656,7 +671,7 @@
  *
  * The caller should not SDL_free() the returned string.
  *
- * \param axis an enum value for a given SDL_GameControllerAxis
+ * \param axis an enum value for a given SDL_GameControllerAxis.
  * \returns a string for the given axis, or NULL if an invalid axis is
  *          specified. The string returned is of the format used by
  *          SDL_GameController mapping strings.
@@ -670,8 +685,8 @@
 /**
  * Get the SDL joystick layer binding for a controller axis mapping.
  *
- * \param gamecontroller a game controller
- * \param axis an axis enum value (one of the SDL_GameControllerAxis values)
+ * \param gamecontroller a game controller.
+ * \param axis an axis enum value (one of the SDL_GameControllerAxis values).
  * \returns a SDL_GameControllerButtonBind describing the bind. On failure
  *          (like the given Controller axis doesn't exist on the device), its
  *          `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`.
@@ -690,8 +705,8 @@
  * This merely reports whether the controller's mapping defined this axis, as
  * that is all the information SDL has about the physical device.
  *
- * \param gamecontroller a game controller
- * \param axis an axis enum value (an SDL_GameControllerAxis value)
+ * \param gamecontroller a game controller.
+ * \param axis an axis enum value (an SDL_GameControllerAxis value).
  * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -704,16 +719,15 @@
  *
  * The axis indices start at index 0.
  *
- * For thumbsticks, the state is a value ranging from -32768 (up/left)
- * to 32767 (down/right).
+ * For thumbsticks, the state is a value ranging from -32768 (up/left) to
+ * 32767 (down/right).
  *
- * Triggers range from 0 when released to 32767 when fully pressed, and
- * never return a negative value. Note that this differs from the value
- * reported by the lower-level SDL_GetJoystickAxis(), which normally uses
- * the full range.
+ * Triggers range from 0 when released to 32767 when fully pressed, and never
+ * return a negative value. Note that this differs from the value reported by
+ * the lower-level SDL_JoystickGetAxis(), which normally uses the full range.
  *
- * \param gamecontroller a game controller
- * \param axis an axis index (one of the SDL_GameControllerAxis values)
+ * \param gamecontroller a game controller.
+ * \param axis an axis index (one of the SDL_GameControllerAxis values).
  * \returns axis state (including 0) on success or 0 (also) on failure; call
  *          SDL_GetError() for more information.
  *
@@ -725,9 +739,9 @@
 SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis);
 
 /**
- *  The list of buttons available from a controller
+ * The list of buttons available from a controller
  */
-typedef enum
+typedef enum SDL_GameControllerButton
 {
     SDL_CONTROLLER_BUTTON_INVALID = -1,
     SDL_CONTROLLER_BUTTON_A,
@@ -762,7 +776,7 @@
  * SDL_GameController mapping. You do not normally need to call this function
  * unless you are parsing SDL_GameController mappings in your own code.
  *
- * \param str string representing a SDL_GameController axis
+ * \param str string representing a SDL_GameController axis.
  * \returns the SDL_GameControllerButton enum corresponding to the input
  *          string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found.
  *
@@ -775,7 +789,7 @@
  *
  * The caller should not SDL_free() the returned string.
  *
- * \param button an enum value for a given SDL_GameControllerButton
+ * \param button an enum value for a given SDL_GameControllerButton.
  * \returns a string for the given button, or NULL if an invalid button is
  *          specified. The string returned is of the format used by
  *          SDL_GameController mapping strings.
@@ -789,8 +803,8 @@
 /**
  * Get the SDL joystick layer binding for a controller button mapping.
  *
- * \param gamecontroller a game controller
- * \param button an button enum value (an SDL_GameControllerButton value)
+ * \param gamecontroller a game controller.
+ * \param button an button enum value (an SDL_GameControllerButton value).
  * \returns a SDL_GameControllerButtonBind describing the bind. On failure
  *          (like the given Controller button doesn't exist on the device),
  *          its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`.
@@ -809,8 +823,8 @@
  * This merely reports whether the controller's mapping defined this button,
  * as that is all the information SDL has about the physical device.
  *
- * \param gamecontroller a game controller
- * \param button a button enum value (an SDL_GameControllerButton value)
+ * \param gamecontroller a game controller.
+ * \param button a button enum value (an SDL_GameControllerButton value).
  * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -821,8 +835,8 @@
 /**
  * Get the current state of a button on a game controller.
  *
- * \param gamecontroller a game controller
- * \param button a button index (one of the SDL_GameControllerButton values)
+ * \param gamecontroller a game controller.
+ * \param button a button index (one of the SDL_GameControllerButton values).
  * \returns 1 for pressed state or 0 for not pressed state or error; call
  *          SDL_GetError() for more information.
  *
@@ -858,8 +872,8 @@
 /**
  * Return whether a game controller has a particular sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -869,9 +883,9 @@
 /**
  * Set whether data reporting for a game controller sensor is enabled.
  *
- * \param gamecontroller The controller to update
- * \param type The type of sensor to enable/disable
- * \param enabled Whether data reporting should be enabled
+ * \param gamecontroller The controller to update.
+ * \param type The type of sensor to enable/disable.
+ * \param enabled Whether data reporting should be enabled.
  * \returns 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.14.
@@ -881,8 +895,8 @@
 /**
  * Query whether sensor data reporting is enabled for a game controller.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -893,8 +907,8 @@
  * Get the data rate (number of events per second) of a game controller
  * sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \return the data rate, or 0.0f if the data rate is not available.
  *
  * \since This function is available since SDL 2.0.16.
@@ -907,10 +921,10 @@
  * The number of values and interpretation of the data is sensor dependent.
  * See SDL_sensor.h for the details for each type of sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \return 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.14.
@@ -924,12 +938,12 @@
  * The number of values and interpretation of the data is sensor dependent.
  * See SDL_sensor.h for the details for each type of sensor.
  *
- * \param gamecontroller The controller to query
- * \param type The type of sensor to query
+ * \param gamecontroller The controller to query.
+ * \param type The type of sensor to query.
  * \param timestamp A pointer filled with the timestamp in microseconds of the
- *                  current sensor reading if available, or 0 if not
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ *                  current sensor reading if available, or 0 if not.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \return 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.26.0.
@@ -942,13 +956,13 @@
  * Each call to this function cancels any previous rumble effect, and calling
  * it with 0 intensity stops any rumbling.
  *
- * \param gamecontroller The controller to vibrate
+ * \param gamecontroller The controller to vibrate.
  * \param low_frequency_rumble The intensity of the low frequency (left)
- *                             rumble motor, from 0 to 0xFFFF
+ *                             rumble motor, from 0 to 0xFFFF.
  * \param high_frequency_rumble The intensity of the high frequency (right)
- *                              rumble motor, from 0 to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if rumble isn't supported on this controller
+ *                              rumble motor, from 0 to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if rumble isn't supported on this controller.
  *
  * \since This function is available since SDL 2.0.9.
  *
@@ -967,13 +981,13 @@
  * want the (more common) whole-controller rumble, use
  * SDL_GameControllerRumble() instead.
  *
- * \param gamecontroller The controller to vibrate
+ * \param gamecontroller The controller to vibrate.
  * \param left_rumble The intensity of the left trigger rumble motor, from 0
- *                    to 0xFFFF
+ *                    to 0xFFFF.
  * \param right_rumble The intensity of the right trigger rumble motor, from 0
- *                     to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if trigger rumble isn't supported on this controller
+ *                     to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if trigger rumble isn't supported on this controller.
  *
  * \since This function is available since SDL 2.0.14.
  *
@@ -984,9 +998,9 @@
 /**
  * Query whether a game controller has an LED.
  *
- * \param gamecontroller The controller to query
+ * \param gamecontroller The controller to query.
  * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a
- *          modifiable LED
+ *          modifiable LED.
  *
  * \since This function is available since SDL 2.0.14.
  */
@@ -995,9 +1009,9 @@
 /**
  * Query whether a game controller has rumble support.
  *
- * \param gamecontroller The controller to query
+ * \param gamecontroller The controller to query.
  * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble
- *          support
+ *          support.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1008,9 +1022,9 @@
 /**
  * Query whether a game controller has rumble support on triggers.
  *
- * \param gamecontroller The controller to query
+ * \param gamecontroller The controller to query.
  * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger
- *          rumble support
+ *          rumble support.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1021,11 +1035,11 @@
 /**
  * Update a game controller's LED color.
  *
- * \param gamecontroller The controller to update
- * \param red The intensity of the red LED
- * \param green The intensity of the green LED
- * \param blue The intensity of the blue LED
- * \returns 0, or -1 if this controller does not have a modifiable LED
+ * \param gamecontroller The controller to update.
+ * \param red The intensity of the red LED.
+ * \param green The intensity of the green LED.
+ * \param blue The intensity of the blue LED.
+ * \returns 0, or -1 if this controller does not have a modifiable LED.
  *
  * \since This function is available since SDL 2.0.14.
  */
@@ -1034,11 +1048,11 @@
 /**
  * Send a controller specific effect packet
  *
- * \param gamecontroller The controller to affect
- * \param data The data to send to the controller
- * \param size The size of the data to send to the controller
+ * \param gamecontroller The controller to affect.
+ * \param data The data to send to the controller.
+ * \param size The size of the data to send to the controller.
  * \returns 0, or -1 if this controller or driver doesn't support effect
- *          packets
+ *          packets.
  *
  * \since This function is available since SDL 2.0.16.
  */
@@ -1048,7 +1062,7 @@
  * Close a game controller previously opened with SDL_GameControllerOpen().
  *
  * \param gamecontroller a game controller identifier previously returned by
- *                       SDL_GameControllerOpen()
+ *                       SDL_GameControllerOpen().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1060,9 +1074,9 @@
  * Return the sfSymbolsName for a given button on a game controller on Apple
  * platforms.
  *
- * \param gamecontroller the controller to query
- * \param button a button on the game controller
- * \returns the sfSymbolsName or NULL if the name can't be found
+ * \param gamecontroller the controller to query.
+ * \param button a button on the game controller.
+ * \returns the sfSymbolsName or NULL if the name can't be found.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1074,9 +1088,9 @@
  * Return the sfSymbolsName for a given axis on a game controller on Apple
  * platforms.
  *
- * \param gamecontroller the controller to query
- * \param axis an axis on the game controller
- * \returns the sfSymbolsName or NULL if the name can't be found
+ * \param gamecontroller the controller to query.
+ * \param axis an axis on the game controller.
+ * \returns the sfSymbolsName or NULL if the name can't be found.
  *
  * \since This function is available since SDL 2.0.18.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gesture.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gesture.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_gesture.h
+ * # CategoryGesture
  *
- *  Include file for SDL gesture event handling.
+ * Include file for SDL gesture event handling.
  */
 
 #ifndef SDL_gesture_h_
@@ -51,7 +51,7 @@
  * If the parameter `touchId` is -1 (i.e., all devices), this function will
  * always return 1, regardless of whether there actually are any devices.
  *
- * \param touchId the touch device id, or -1 for all touch devices
+ * \param touchId the touch device id, or -1 for all touch devices.
  * \returns 1 on success or 0 if the specified device could not be found.
  *
  * \since This function is available since SDL 2.0.0.
@@ -64,7 +64,7 @@
 /**
  * Save all currently loaded Dollar Gesture templates.
  *
- * \param dst a SDL_RWops to save to
+ * \param dst a SDL_RWops to save to.
  * \returns the number of saved templates on success or 0 on failure; call
  *          SDL_GetError() for more information.
  *
@@ -78,8 +78,8 @@
 /**
  * Save a currently loaded Dollar Gesture template.
  *
- * \param gestureId a gesture id
- * \param dst a SDL_RWops to save to
+ * \param gestureId a gesture id.
+ * \param dst a SDL_RWops to save to.
  * \returns 1 on success or 0 on failure; call SDL_GetError() for more
  *          information.
  *
@@ -94,8 +94,8 @@
 /**
  * Load Dollar Gesture templates from a file.
  *
- * \param touchId a touch id
- * \param src a SDL_RWops to load from
+ * \param touchId a touch id.
+ * \param src a SDL_RWops to load from.
  * \returns the number of loaded templates on success or a negative error code
  *          (or 0) on failure; call SDL_GetError() for more information.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_guid.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_guid.h
@@ -19,10 +19,13 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: GUID */
+
 /**
- *  \file SDL_guid.h
+ * # CategoryGUID
  *
- *  Include file for handling ::SDL_GUID values.
+ * A GUID is a 128-bit value that represents something that is uniquely
+ * identifiable by this value: "globally unique."
  */
 
 #ifndef SDL_guid_h_
@@ -38,21 +41,25 @@
 #endif
 
 /**
- * An SDL_GUID is a 128-bit identifier for an input device that
- *   identifies that device across runs of SDL programs on the same
- *   platform.  If the device is detached and then re-attached to a
- *   different port, or if the base system is rebooted, the device
- *   should still report the same GUID.
+ * An SDL_GUID is a 128-bit identifier.
  *
- * GUIDs are as precise as possible but are not guaranteed to
- *   distinguish physically distinct but equivalent devices.  For
- *   example, two game controllers from the same vendor with the same
- *   product ID and revision may have the same GUID.
+ * This is an acronym for "Globally Unique ID."
  *
- * GUIDs may be platform-dependent (i.e., the same device may report
- *   different GUIDs on different operating systems).
+ * While a GUID can be used to assign a unique value to almost anything, in
+ * SDL these are largely used to identify input devices across runs of SDL
+ * programs on the same platform.If the device is detached and then
+ * re-attached to a different port, or if the base system is rebooted, the
+ * device should still report the same GUID.
+ *
+ * GUIDs are as precise as possible but are not guaranteed to distinguish
+ * physically distinct but equivalent devices. For example, two game
+ * controllers from the same vendor with the same product ID and revision may
+ * have the same GUID.
+ *
+ * GUIDs may be platform-dependent (i.e., the same device may report different
+ * GUIDs on different operating systems).
  */
-typedef struct {
+typedef struct SDL_GUID {
     Uint8 data[16];
 } SDL_GUID;
 
@@ -59,13 +66,13 @@
 /* Function prototypes */
 
 /**
- * Get an ASCII string representation for a given ::SDL_GUID.
+ * Get an ASCII string representation for a given SDL_GUID.
  *
  * You should supply at least 33 bytes for pszGUID.
  *
- * \param guid the ::SDL_GUID you wish to convert to string
- * \param pszGUID buffer in which to write the ASCII string
- * \param cbGUID the size of pszGUID
+ * \param guid the SDL_GUID you wish to convert to string.
+ * \param pszGUID buffer in which to write the ASCII string.
+ * \param cbGUID the size of pszGUID.
  *
  * \since This function is available since SDL 2.24.0.
  *
@@ -74,14 +81,14 @@
 extern DECLSPEC void SDLCALL SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID);
 
 /**
- * Convert a GUID string into a ::SDL_GUID structure.
+ * Convert a GUID string into a SDL_GUID structure.
  *
  * Performs no error checking. If this function is given a string containing
  * an invalid GUID, the function will silently succeed, but the GUID generated
  * will not be useful.
  *
- * \param pchGUID string containing an ASCII representation of a GUID
- * \returns a ::SDL_GUID structure.
+ * \param pchGUID string containing an ASCII representation of a GUID.
+ * \returns a SDL_GUID structure.
  *
  * \since This function is available since SDL 2.24.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_haptic.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_haptic.h
@@ -20,24 +20,25 @@
 */
 
 /**
- *  \file SDL_haptic.h
+ * # CategoryHaptic
  *
- *  \brief The SDL haptic subsystem allows you to control haptic (force feedback)
- *         devices.
+ * SDL haptic subsystem allows you to control haptic (force feedback) devices.
  *
- *  The basic usage is as follows:
- *   - Initialize the subsystem (::SDL_INIT_HAPTIC).
- *   - Open a haptic device.
- *    - SDL_HapticOpen() to open from index.
- *    - SDL_HapticOpenFromJoystick() to open from an existing joystick.
- *   - Create an effect (::SDL_HapticEffect).
- *   - Upload the effect with SDL_HapticNewEffect().
- *   - Run the effect with SDL_HapticRunEffect().
- *   - (optional) Free the effect with SDL_HapticDestroyEffect().
- *   - Close the haptic device with SDL_HapticClose().
+ * The basic usage is as follows:
  *
- * \par Simple rumble example:
- * \code
+ * - Initialize the subsystem (SDL_INIT_HAPTIC).
+ * - Open a haptic device.
+ * - SDL_HapticOpen() to open from index.
+ * - SDL_HapticOpenFromJoystick() to open from an existing joystick.
+ * - Create an effect (SDL_HapticEffect).
+ * - Upload the effect with SDL_HapticNewEffect().
+ * - Run the effect with SDL_HapticRunEffect().
+ * - (optional) Free the effect with SDL_HapticDestroyEffect().
+ * - Close the haptic device with SDL_HapticClose().
+ *
+ * Simple rumble example:
+ *
+ * ```c
  *    SDL_Haptic *haptic;
  *
  *    // Open the device
@@ -56,10 +57,11 @@
  *
  *    // Clean up
  *    SDL_HapticClose( haptic );
- * \endcode
+ * ```
  *
- * \par Complete example:
- * \code
+ * Complete example:
+ *
+ * ```c
  * int test_haptic( SDL_Joystick * joystick ) {
  *    SDL_Haptic *haptic;
  *    SDL_HapticEffect effect;
@@ -101,7 +103,7 @@
  *
  *    return 0; // Success
  * }
- * \endcode
+ * ```
  */
 
 #ifndef SDL_haptic_h_
@@ -154,31 +156,29 @@
 /* @{ */
 
 /**
- *  \brief Constant effect supported.
+ * Constant effect supported.
  *
- *  Constant haptic effect.
+ * Constant haptic effect.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_CONSTANT   (1u<<0)
 
 /**
- *  \brief Sine wave effect supported.
+ * Sine wave effect supported.
  *
- *  Periodic haptic effect that simulates sine waves.
+ * Periodic haptic effect that simulates sine waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_SINE       (1u<<1)
 
 /**
- *  \brief Left/Right effect supported.
+ * Left/Right effect supported.
  *
- *  Haptic effect for direct control over high/low frequency motors.
+ * Haptic effect for direct control over high/low frequency motors.
  *
- *  \sa SDL_HapticLeftRight
- * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry,
- *          we ran out of bits, and this is important for XInput devices.
+ * \sa SDL_HapticLeftRight
  */
 #define SDL_HAPTIC_LEFTRIGHT     (1u<<2)
 
@@ -186,85 +186,85 @@
 /* #define SDL_HAPTIC_SQUARE     (1<<2) */
 
 /**
- *  \brief Triangle wave effect supported.
+ * Triangle wave effect supported.
  *
- *  Periodic haptic effect that simulates triangular waves.
+ * Periodic haptic effect that simulates triangular waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_TRIANGLE   (1u<<3)
 
 /**
- *  \brief Sawtoothup wave effect supported.
+ * Sawtoothup wave effect supported.
  *
- *  Periodic haptic effect that simulates saw tooth up waves.
+ * Periodic haptic effect that simulates saw tooth up waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_SAWTOOTHUP (1u<<4)
 
 /**
- *  \brief Sawtoothdown wave effect supported.
+ * Sawtoothdown wave effect supported.
  *
- *  Periodic haptic effect that simulates saw tooth down waves.
+ * Periodic haptic effect that simulates saw tooth down waves.
  *
- *  \sa SDL_HapticPeriodic
+ * \sa SDL_HapticPeriodic
  */
 #define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5)
 
 /**
- *  \brief Ramp effect supported.
+ * Ramp effect supported.
  *
- *  Ramp haptic effect.
+ * Ramp haptic effect.
  *
- *  \sa SDL_HapticRamp
+ * \sa SDL_HapticRamp
  */
 #define SDL_HAPTIC_RAMP       (1u<<6)
 
 /**
- *  \brief Spring effect supported - uses axes position.
+ * Spring effect supported - uses axes position.
  *
- *  Condition haptic effect that simulates a spring.  Effect is based on the
- *  axes position.
+ * Condition haptic effect that simulates a spring. Effect is based on the
+ * axes position.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_SPRING     (1u<<7)
 
 /**
- *  \brief Damper effect supported - uses axes velocity.
+ * Damper effect supported - uses axes velocity.
  *
- *  Condition haptic effect that simulates dampening.  Effect is based on the
- *  axes velocity.
+ * Condition haptic effect that simulates dampening. Effect is based on the
+ * axes velocity.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_DAMPER     (1u<<8)
 
 /**
- *  \brief Inertia effect supported - uses axes acceleration.
+ * Inertia effect supported - uses axes acceleration.
  *
- *  Condition haptic effect that simulates inertia.  Effect is based on the axes
- *  acceleration.
+ * Condition haptic effect that simulates inertia. Effect is based on the axes
+ * acceleration.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_INERTIA    (1u<<9)
 
 /**
- *  \brief Friction effect supported - uses axes movement.
+ * Friction effect supported - uses axes movement.
  *
- *  Condition haptic effect that simulates friction.  Effect is based on the
- *  axes movement.
+ * Condition haptic effect that simulates friction. Effect is based on the
+ * axes movement.
  *
- *  \sa SDL_HapticCondition
+ * \sa SDL_HapticCondition
  */
 #define SDL_HAPTIC_FRICTION   (1u<<10)
 
 /**
- *  \brief Custom effect is supported.
+ * Custom effect is supported.
  *
- *  User defined custom haptic effect.
+ * User defined custom haptic effect.
  */
 #define SDL_HAPTIC_CUSTOM     (1u<<11)
 
@@ -273,39 +273,39 @@
 /* These last few are features the device has, not effects */
 
 /**
- *  \brief Device can set global gain.
+ * Device can set global gain.
  *
- *  Device supports setting the global gain.
+ * Device supports setting the global gain.
  *
- *  \sa SDL_HapticSetGain
+ * \sa SDL_HapticSetGain
  */
 #define SDL_HAPTIC_GAIN       (1u<<12)
 
 /**
- *  \brief Device can set autocenter.
+ * Device can set autocenter.
  *
- *  Device supports setting autocenter.
+ * Device supports setting autocenter.
  *
- *  \sa SDL_HapticSetAutocenter
+ * \sa SDL_HapticSetAutocenter
  */
 #define SDL_HAPTIC_AUTOCENTER (1u<<13)
 
 /**
- *  \brief Device can be queried for effect status.
+ * Device can be queried for effect status.
  *
- *  Device supports querying effect status.
+ * Device supports querying effect status.
  *
- *  \sa SDL_HapticGetEffectStatus
+ * \sa SDL_HapticGetEffectStatus
  */
 #define SDL_HAPTIC_STATUS     (1u<<14)
 
 /**
- *  \brief Device can be paused.
+ * Device can be paused.
  *
- *  Devices supports being paused.
+ * Devices supports being paused.
  *
- *  \sa SDL_HapticPause
- *  \sa SDL_HapticUnpause
+ * \sa SDL_HapticPause
+ * \sa SDL_HapticUnpause
  */
 #define SDL_HAPTIC_PAUSE      (1u<<15)
 
@@ -316,31 +316,33 @@
 /* @{ */
 
 /**
- *  \brief Uses polar coordinates for the direction.
+ * Uses polar coordinates for the direction.
  *
- *  \sa SDL_HapticDirection
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_POLAR      0
 
 /**
- *  \brief Uses cartesian coordinates for the direction.
+ * Uses cartesian coordinates for the direction.
  *
- *  \sa SDL_HapticDirection
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_CARTESIAN  1
 
 /**
- *  \brief Uses spherical coordinates for the direction.
+ * Uses spherical coordinates for the direction.
  *
- *  \sa SDL_HapticDirection
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_SPHERICAL  2
 
 /**
- *  \brief Use this value to play an effect on the steering wheel axis. This 
- *  provides better compatibility across platforms and devices as SDL will guess 
- *  the correct axis.
- *  \sa SDL_HapticDirection
+ * Use this value to play an effect on the steering wheel axis.
+ *
+ * This provides better compatibility across platforms and devices as SDL will
+ * guess the correct axis.
+ *
+ * \sa SDL_HapticDirection
  */
 #define SDL_HAPTIC_STEERING_AXIS 3
 
@@ -353,7 +355,7 @@
  */
 
 /**
- * \brief Used to play a device an infinite number of times.
+ * Used to play a device an infinite number of times.
  *
  * \sa SDL_HapticRunEffect
  */
@@ -361,77 +363,82 @@
 
 
 /**
- *  \brief Structure that represents a haptic direction.
+ * Structure that represents a haptic direction.
  *
- *  This is the direction where the force comes from,
- *  instead of the direction in which the force is exerted.
+ * This is the direction where the force comes from, instead of the direction
+ * in which the force is exerted.
  *
- *  Directions can be specified by:
- *   - ::SDL_HAPTIC_POLAR : Specified by polar coordinates.
- *   - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates.
- *   - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates.
+ * Directions can be specified by:
  *
- *  Cardinal directions of the haptic device are relative to the positioning
- *  of the device.  North is considered to be away from the user.
+ * - SDL_HAPTIC_POLAR : Specified by polar coordinates.
+ * - SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates.
+ * - SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates.
  *
- *  The following diagram represents the cardinal directions:
- *  \verbatim
-                 .--.
-                 |__| .-------.
-                 |=.| |.-----.|
-                 |--| ||     ||
-                 |  | |'-----'|
-                 |__|~')_____('
-                   [ COMPUTER ]
-
-
-                     North (0,-1)
-                         ^
-                         |
-                         |
-   (-1,0)  West <----[ HAPTIC ]----> East (1,0)
-                         |
-                         |
-                         v
-                      South (0,1)
-
-
-                      [ USER ]
-                        \|||/
-                        (o o)
-                  ---ooO-(_)-Ooo---
-    \endverbatim
+ * Cardinal directions of the haptic device are relative to the positioning of
+ * the device. North is considered to be away from the user.
  *
- *  If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a
- *  degree starting north and turning clockwise.  ::SDL_HAPTIC_POLAR only uses
- *  the first \c dir parameter.  The cardinal directions would be:
- *   - North: 0 (0 degrees)
- *   - East: 9000 (90 degrees)
- *   - South: 18000 (180 degrees)
- *   - West: 27000 (270 degrees)
+ * The following diagram represents the cardinal directions:
  *
- *  If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions
- *  (X axis, Y axis and Z axis (with 3 axes)).  ::SDL_HAPTIC_CARTESIAN uses
- *  the first three \c dir parameters.  The cardinal directions would be:
- *   - North:  0,-1, 0
- *   - East:   1, 0, 0
- *   - South:  0, 1, 0
- *   - West:  -1, 0, 0
+ * ```
+ *                .--.
+ *                |__| .-------.
+ *                |=.| |.-----.|
+ *                |--| ||     ||
+ *                |  | |'-----'|
+ *                |__|~')_____('
+ *                  [ COMPUTER ]
  *
- *  The Z axis represents the height of the effect if supported, otherwise
- *  it's unused.  In cartesian encoding (1, 2) would be the same as (2, 4), you
- *  can use any multiple you want, only the direction matters.
  *
- *  If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations.
- *  The first two \c dir parameters are used.  The \c dir parameters are as
- *  follows (all values are in hundredths of degrees):
- *   - Degrees from (1, 0) rotated towards (0, 1).
- *   - Degrees towards (0, 0, 1) (device needs at least 3 axes).
+ *                    North (0,-1)
+ *                        ^
+ *                        |
+ *                        |
+ *  (-1,0)  West <----[ HAPTIC ]----> East (1,0)
+ *                        |
+ *                        |
+ *                        v
+ *                     South (0,1)
  *
  *
- *  Example of force coming from the south with all encodings (force coming
- *  from the south means the user will have to pull the stick to counteract):
- *  \code
+ *                     [ USER ]
+ *                       \|||/
+ *                       (o o)
+ *                 ---ooO-(_)-Ooo---
+ * ```
+ *
+ * If type is SDL_HAPTIC_POLAR, direction is encoded by hundredths of a degree
+ * starting north and turning clockwise. SDL_HAPTIC_POLAR only uses the first
+ * `dir` parameter. The cardinal directions would be:
+ *
+ * - North: 0 (0 degrees)
+ * - East: 9000 (90 degrees)
+ * - South: 18000 (180 degrees)
+ * - West: 27000 (270 degrees)
+ *
+ * If type is SDL_HAPTIC_CARTESIAN, direction is encoded by three positions (X
+ * axis, Y axis and Z axis (with 3 axes)). SDL_HAPTIC_CARTESIAN uses the first
+ * three `dir` parameters. The cardinal directions would be:
+ *
+ * - North: 0,-1, 0
+ * - East: 1, 0, 0
+ * - South: 0, 1, 0
+ * - West: -1, 0, 0
+ *
+ * The Z axis represents the height of the effect if supported, otherwise it's
+ * unused. In cartesian encoding (1, 2) would be the same as (2, 4), you can
+ * use any multiple you want, only the direction matters.
+ *
+ * If type is SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. The
+ * first two `dir` parameters are used. The `dir` parameters are as follows
+ * (all values are in hundredths of degrees):
+ *
+ * - Degrees from (1, 0) rotated towards (0, 1).
+ * - Degrees towards (0, 0, 1) (device needs at least 3 axes).
+ *
+ * Example of force coming from the south with all encodings (force coming
+ * from the south means the user will have to pull the stick to counteract):
+ *
+ * ```c
  *  SDL_HapticDirection direction;
  *
  *  // Cartesian directions
@@ -447,14 +454,14 @@
  *  // Spherical coordinates
  *  direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding
  *  direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters.
- *  \endcode
+ * ```
  *
- *  \sa SDL_HAPTIC_POLAR
- *  \sa SDL_HAPTIC_CARTESIAN
- *  \sa SDL_HAPTIC_SPHERICAL
- *  \sa SDL_HAPTIC_STEERING_AXIS
- *  \sa SDL_HapticEffect
- *  \sa SDL_HapticNumAxes
+ * \sa SDL_HAPTIC_POLAR
+ * \sa SDL_HAPTIC_CARTESIAN
+ * \sa SDL_HAPTIC_SPHERICAL
+ * \sa SDL_HAPTIC_STEERING_AXIS
+ * \sa SDL_HapticEffect
+ * \sa SDL_HapticNumAxes
  */
 typedef struct SDL_HapticDirection
 {
@@ -464,20 +471,20 @@
 
 
 /**
- *  \brief A structure containing a template for a Constant effect.
+ * A structure containing a template for a Constant effect.
  *
- *  This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect.
+ * This struct is exclusively for the SDL_HAPTIC_CONSTANT effect.
  *
- *  A constant effect applies a constant force in the specified direction
- *  to the joystick.
+ * A constant effect applies a constant force in the specified direction to
+ * the joystick.
  *
- *  \sa SDL_HAPTIC_CONSTANT
- *  \sa SDL_HapticEffect
+ * \sa SDL_HAPTIC_CONSTANT
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticConstant
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_CONSTANT */
+    Uint16 type;            /**< SDL_HAPTIC_CONSTANT */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -499,68 +506,71 @@
 } SDL_HapticConstant;
 
 /**
- *  \brief A structure containing a template for a Periodic effect.
+ * A structure containing a template for a Periodic effect.
  *
- *  The struct handles the following effects:
- *   - ::SDL_HAPTIC_SINE
- *   - ::SDL_HAPTIC_LEFTRIGHT
- *   - ::SDL_HAPTIC_TRIANGLE
- *   - ::SDL_HAPTIC_SAWTOOTHUP
- *   - ::SDL_HAPTIC_SAWTOOTHDOWN
+ * The struct handles the following effects:
  *
- *  A periodic effect consists in a wave-shaped effect that repeats itself
- *  over time.  The type determines the shape of the wave and the parameters
- *  determine the dimensions of the wave.
+ * - SDL_HAPTIC_SINE
+ * - SDL_HAPTIC_SQUARE
+ * - SDL_HAPTIC_TRIANGLE
+ * - SDL_HAPTIC_SAWTOOTHUP
+ * - SDL_HAPTIC_SAWTOOTHDOWN
  *
- *  Phase is given by hundredth of a degree meaning that giving the phase a value
- *  of 9000 will displace it 25% of its period.  Here are sample values:
- *   -     0: No phase displacement.
- *   -  9000: Displaced 25% of its period.
- *   - 18000: Displaced 50% of its period.
- *   - 27000: Displaced 75% of its period.
- *   - 36000: Displaced 100% of its period, same as 0, but 0 is preferred.
+ * A periodic effect consists in a wave-shaped effect that repeats itself over
+ * time. The type determines the shape of the wave and the parameters
+ * determine the dimensions of the wave.
  *
- *  Examples:
- *  \verbatim
-    SDL_HAPTIC_SINE
-      __      __      __      __
-     /  \    /  \    /  \    /
-    /    \__/    \__/    \__/
-
-    SDL_HAPTIC_SQUARE
-     __    __    __    __    __
-    |  |  |  |  |  |  |  |  |  |
-    |  |__|  |__|  |__|  |__|  |
-
-    SDL_HAPTIC_TRIANGLE
-      /\    /\    /\    /\    /\
-     /  \  /  \  /  \  /  \  /
-    /    \/    \/    \/    \/
-
-    SDL_HAPTIC_SAWTOOTHUP
-      /|  /|  /|  /|  /|  /|  /|
-     / | / | / | / | / | / | / |
-    /  |/  |/  |/  |/  |/  |/  |
-
-    SDL_HAPTIC_SAWTOOTHDOWN
-    \  |\  |\  |\  |\  |\  |\  |
-     \ | \ | \ | \ | \ | \ | \ |
-      \|  \|  \|  \|  \|  \|  \|
-    \endverbatim
+ * Phase is given by hundredth of a degree meaning that giving the phase a
+ * value of 9000 will displace it 25% of its period. Here are sample values:
  *
- *  \sa SDL_HAPTIC_SINE
- *  \sa SDL_HAPTIC_LEFTRIGHT
- *  \sa SDL_HAPTIC_TRIANGLE
- *  \sa SDL_HAPTIC_SAWTOOTHUP
- *  \sa SDL_HAPTIC_SAWTOOTHDOWN
- *  \sa SDL_HapticEffect
+ * - 0: No phase displacement.
+ * - 9000: Displaced 25% of its period.
+ * - 18000: Displaced 50% of its period.
+ * - 27000: Displaced 75% of its period.
+ * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred.
+ *
+ * Examples:
+ *
+ * ```
+ *   SDL_HAPTIC_SINE
+ *     __      __      __      __
+ *    /  \    /  \    /  \    /
+ *   /    \__/    \__/    \__/
+ *
+ *   SDL_HAPTIC_SQUARE
+ *    __    __    __    __    __
+ *   |  |  |  |  |  |  |  |  |  |
+ *   |  |__|  |__|  |__|  |__|  |
+ *
+ *   SDL_HAPTIC_TRIANGLE
+ *     /\    /\    /\    /\    /\
+ *    /  \  /  \  /  \  /  \  /
+ *   /    \/    \/    \/    \/
+ *
+ *   SDL_HAPTIC_SAWTOOTHUP
+ *     /|  /|  /|  /|  /|  /|  /|
+ *    / | / | / | / | / | / | / |
+ *   /  |/  |/  |/  |/  |/  |/  |
+ *
+ *   SDL_HAPTIC_SAWTOOTHDOWN
+ *   \  |\  |\  |\  |\  |\  |\  |
+ *    \ | \ | \ | \ | \ | \ | \ |
+ *     \|  \|  \|  \|  \|  \|  \|
+ * ```
+ *
+ * \sa SDL_HAPTIC_SINE
+ * \sa SDL_HAPTIC_LEFTRIGHT
+ * \sa SDL_HAPTIC_TRIANGLE
+ * \sa SDL_HAPTIC_SAWTOOTHUP
+ * \sa SDL_HAPTIC_SAWTOOTHDOWN
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticPeriodic
 {
     /* Header */
-    Uint16 type;        /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT,
-                             ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or
-                             ::SDL_HAPTIC_SAWTOOTHDOWN */
+    Uint16 type;        /**< SDL_HAPTIC_SINE, SDL_HAPTIC_LEFTRIGHT,
+                             SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or
+                             SDL_HAPTIC_SAWTOOTHDOWN */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -585,35 +595,36 @@
 } SDL_HapticPeriodic;
 
 /**
- *  \brief A structure containing a template for a Condition effect.
+ * A structure containing a template for a Condition effect.
  *
- *  The struct handles the following effects:
- *   - ::SDL_HAPTIC_SPRING: Effect based on axes position.
- *   - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity.
- *   - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration.
- *   - ::SDL_HAPTIC_FRICTION: Effect based on axes movement.
+ * The struct handles the following effects:
  *
- *  Direction is handled by condition internals instead of a direction member.
- *  The condition effect specific members have three parameters.  The first
- *  refers to the X axis, the second refers to the Y axis and the third
- *  refers to the Z axis.  The right terms refer to the positive side of the
- *  axis and the left terms refer to the negative side of the axis.  Please
- *  refer to the ::SDL_HapticDirection diagram for which side is positive and
- *  which is negative.
+ * - SDL_HAPTIC_SPRING: Effect based on axes position.
+ * - SDL_HAPTIC_DAMPER: Effect based on axes velocity.
+ * - SDL_HAPTIC_INERTIA: Effect based on axes acceleration.
+ * - SDL_HAPTIC_FRICTION: Effect based on axes movement.
  *
- *  \sa SDL_HapticDirection
- *  \sa SDL_HAPTIC_SPRING
- *  \sa SDL_HAPTIC_DAMPER
- *  \sa SDL_HAPTIC_INERTIA
- *  \sa SDL_HAPTIC_FRICTION
- *  \sa SDL_HapticEffect
+ * Direction is handled by condition internals instead of a direction member.
+ * The condition effect specific members have three parameters. The first
+ * refers to the X axis, the second refers to the Y axis and the third refers
+ * to the Z axis. The right terms refer to the positive side of the axis and
+ * the left terms refer to the negative side of the axis. Please refer to the
+ * SDL_HapticDirection diagram for which side is positive and which is
+ * negative.
+ *
+ * \sa SDL_HapticDirection
+ * \sa SDL_HAPTIC_SPRING
+ * \sa SDL_HAPTIC_DAMPER
+ * \sa SDL_HAPTIC_INERTIA
+ * \sa SDL_HAPTIC_FRICTION
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticCondition
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER,
-                                 ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */
-    SDL_HapticDirection direction;  /**< Direction of the effect - Not used ATM. */
+    Uint16 type;            /**< SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER,
+                                 SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION */
+    SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
     Uint32 length;          /**< Duration of the effect. */
@@ -633,22 +644,22 @@
 } SDL_HapticCondition;
 
 /**
- *  \brief A structure containing a template for a Ramp effect.
+ * A structure containing a template for a Ramp effect.
  *
- *  This struct is exclusively for the ::SDL_HAPTIC_RAMP effect.
+ * This struct is exclusively for the SDL_HAPTIC_RAMP effect.
  *
- *  The ramp effect starts at start strength and ends at end strength.
- *  It augments in linear fashion.  If you use attack and fade with a ramp
- *  the effects get added to the ramp effect making the effect become
- *  quadratic instead of linear.
+ * The ramp effect starts at start strength and ends at end strength. It
+ * augments in linear fashion. If you use attack and fade with a ramp the
+ * effects get added to the ramp effect making the effect become quadratic
+ * instead of linear.
  *
- *  \sa SDL_HAPTIC_RAMP
- *  \sa SDL_HapticEffect
+ * \sa SDL_HAPTIC_RAMP
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticRamp
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_RAMP */
+    Uint16 type;            /**< SDL_HAPTIC_RAMP */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -671,9 +682,9 @@
 } SDL_HapticRamp;
 
 /**
- * \brief A structure containing a template for a Left/Right effect.
+ * A structure containing a template for a Left/Right effect.
  *
- * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect.
+ * This struct is exclusively for the SDL_HAPTIC_LEFTRIGHT effect.
  *
  * The Left/Right effect is used to explicitly control the large and small
  * motors, commonly found in modern game controllers. The small (right) motor
@@ -685,7 +696,7 @@
 typedef struct SDL_HapticLeftRight
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_LEFTRIGHT */
+    Uint16 type;            /**< SDL_HAPTIC_LEFTRIGHT */
 
     /* Replay */
     Uint32 length;          /**< Duration of the effect in milliseconds. */
@@ -696,24 +707,24 @@
 } SDL_HapticLeftRight;
 
 /**
- *  \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect.
+ * A structure containing a template for the SDL_HAPTIC_CUSTOM effect.
  *
- *  This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect.
+ * This struct is exclusively for the SDL_HAPTIC_CUSTOM effect.
  *
- *  A custom force feedback effect is much like a periodic effect, where the
- *  application can define its exact shape.  You will have to allocate the
- *  data yourself.  Data should consist of channels * samples Uint16 samples.
+ * A custom force feedback effect is much like a periodic effect, where the
+ * application can define its exact shape. You will have to allocate the data
+ * yourself. Data should consist of channels * samples Uint16 samples.
  *
- *  If channels is one, the effect is rotated using the defined direction.
- *  Otherwise it uses the samples in data for the different axes.
+ * If channels is one, the effect is rotated using the defined direction.
+ * Otherwise it uses the samples in data for the different axes.
  *
- *  \sa SDL_HAPTIC_CUSTOM
- *  \sa SDL_HapticEffect
+ * \sa SDL_HAPTIC_CUSTOM
+ * \sa SDL_HapticEffect
  */
 typedef struct SDL_HapticCustom
 {
     /* Header */
-    Uint16 type;            /**< ::SDL_HAPTIC_CUSTOM */
+    Uint16 type;            /**< SDL_HAPTIC_CUSTOM */
     SDL_HapticDirection direction;  /**< Direction of the effect. */
 
     /* Replay */
@@ -738,27 +749,28 @@
 } SDL_HapticCustom;
 
 /**
- *  \brief The generic template for any haptic effect.
+ * The generic template for any haptic effect.
  *
- *  All values max at 32767 (0x7FFF).  Signed values also can be negative.
- *  Time values unless specified otherwise are in milliseconds.
+ * All values max at 32767 (0x7FFF). Signed values also can be negative. Time
+ * values unless specified otherwise are in milliseconds.
  *
- *  You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767
- *  value.  Neither delay, interval, attack_length nor fade_length support
- *  ::SDL_HAPTIC_INFINITY.  Fade will also not be used since effect never ends.
+ * You can also pass SDL_HAPTIC_INFINITY to length instead of a 0-32767 value.
+ * Neither delay, interval, attack_length nor fade_length support
+ * SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends.
  *
- *  Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of
- *  ::SDL_HAPTIC_INFINITY.
+ * Additionally, the SDL_HAPTIC_RAMP effect does not support a duration of
+ * SDL_HAPTIC_INFINITY.
  *
- *  Button triggers may not be supported on all devices, it is advised to not
- *  use them if possible.  Buttons start at index 1 instead of index 0 like
- *  the joystick.
+ * Button triggers may not be supported on all devices, it is advised to not
+ * use them if possible. Buttons start at index 1 instead of index 0 like the
+ * joystick.
  *
- *  If both attack_length and fade_level are 0, the envelope is not used,
- *  otherwise both values are used.
+ * If both attack_length and fade_level are 0, the envelope is not used,
+ * otherwise both values are used.
  *
- *  Common parts:
- *  \code
+ * Common parts:
+ *
+ * ```c
  *  // Replay - All effects have this
  *  Uint32 length;        // Duration of effect (ms).
  *  Uint16 delay;         // Delay before starting effect.
@@ -772,39 +784,39 @@
  *  Uint16 attack_level;  // Level at the start of the attack.
  *  Uint16 fade_length;   // Duration of the fade out (ms).
  *  Uint16 fade_level;    // Level at the end of the fade.
- *  \endcode
+ * ```
  *
+ * Here we have an example of a constant effect evolution in time:
  *
- *  Here we have an example of a constant effect evolution in time:
- *  \verbatim
-    Strength
-    ^
-    |
-    |    effect level -->  _________________
-    |                     /                 \
-    |                    /                   \
-    |                   /                     \
-    |                  /                       \
-    | attack_level --> |                        \
-    |                  |                        |  <---  fade_level
-    |
-    +--------------------------------------------------> Time
-                       [--]                 [---]
-                       attack_length        fade_length
-
-    [------------------][-----------------------]
-    delay               length
-    \endverbatim
+ * ```
+ *  Strength
+ *  ^
+ *  |
+ *  |    effect level -->  _________________
+ *  |                     /                 \
+ *  |                    /                   \
+ *  |                   /                     \
+ *  |                  /                       \
+ *  | attack_level --> |                        \
+ *  |                  |                        |  <---  fade_level
+ *  |
+ *  +--------------------------------------------------> Time
+ *                     [--]                 [---]
+ *                     attack_length        fade_length
  *
- *  Note either the attack_level or the fade_level may be above the actual
- *  effect level.
+ *  [------------------][-----------------------]
+ *  delay               length
+ * ```
  *
- *  \sa SDL_HapticConstant
- *  \sa SDL_HapticPeriodic
- *  \sa SDL_HapticCondition
- *  \sa SDL_HapticRamp
- *  \sa SDL_HapticLeftRight
- *  \sa SDL_HapticCustom
+ * Note either the attack_level or the fade_level may be above the actual
+ * effect level.
+ *
+ * \sa SDL_HapticConstant
+ * \sa SDL_HapticPeriodic
+ * \sa SDL_HapticCondition
+ * \sa SDL_HapticRamp
+ * \sa SDL_HapticLeftRight
+ * \sa SDL_HapticCustom
  */
 typedef union SDL_HapticEffect
 {
@@ -859,7 +871,7 @@
  * autocenter will be disabled. To modify these values use SDL_HapticSetGain()
  * and SDL_HapticSetAutocenter().
  *
- * \param device_index index of the device to open
+ * \param device_index index of the device to open.
  * \returns the device identifier or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -879,7 +891,7 @@
 /**
  * Check if the haptic device at the designated index has been opened.
  *
- * \param device_index the index of the device to query
+ * \param device_index the index of the device to query.
  * \returns 1 if it has been opened, 0 if it hasn't or on failure; call
  *          SDL_GetError() for more information.
  *
@@ -893,7 +905,7 @@
 /**
  * Get the index of a haptic device.
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns the index of the specified haptic device or a negative error code
  *          on failure; call SDL_GetError() for more information.
  *
@@ -931,7 +943,7 @@
 /**
  * Query if a joystick has haptic features.
  *
- * \param joystick the SDL_Joystick to test for haptic capabilities
+ * \param joystick the SDL_Joystick to test for haptic capabilities.
  * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -953,7 +965,7 @@
  * device will also get unallocated and you'll be unable to use force feedback
  * on that device.
  *
- * \param joystick the SDL_Joystick to create a haptic device from
+ * \param joystick the SDL_Joystick to create a haptic device from.
  * \returns a valid haptic device identifier on success or NULL on failure;
  *          call SDL_GetError() for more information.
  *
@@ -969,7 +981,7 @@
 /**
  * Close a haptic device previously opened with SDL_HapticOpen().
  *
- * \param haptic the SDL_Haptic device to close
+ * \param haptic the SDL_Haptic device to close.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -984,7 +996,7 @@
  * approximation. Always check to see if your created effect was actually
  * created and do not rely solely on SDL_HapticNumEffects().
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns the number of effects the haptic device can store or a negative
  *          error code on failure; call SDL_GetError() for more information.
  *
@@ -1000,7 +1012,7 @@
  *
  * This is not supported on all platforms, but will always return a value.
  *
- * \param haptic the SDL_Haptic device to query maximum playing effects
+ * \param haptic the SDL_Haptic device to query maximum playing effects.
  * \returns the number of effects the haptic device can play at the same time
  *          or a negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -1015,7 +1027,7 @@
 /**
  * Get the haptic device's supported features in bitwise manner.
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns a list of supported haptic features in bitwise manner (OR'd), or 0
  *          on failure; call SDL_GetError() for more information.
  *
@@ -1033,7 +1045,7 @@
  * The number of haptic axes might be useful if working with the
  * SDL_HapticDirection effect.
  *
- * \param haptic the SDL_Haptic device to query
+ * \param haptic the SDL_Haptic device to query.
  * \returns the number of axes on success or a negative error code on failure;
  *          call SDL_GetError() for more information.
  *
@@ -1044,8 +1056,8 @@
 /**
  * Check to see if an effect is supported by a haptic device.
  *
- * \param haptic the SDL_Haptic device to query
- * \param effect the desired effect to query
+ * \param haptic the SDL_Haptic device to query.
+ * \param effect the desired effect to query.
  * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -1062,9 +1074,9 @@
 /**
  * Create a new haptic effect on a specified device.
  *
- * \param haptic an SDL_Haptic device to create the effect on
+ * \param haptic an SDL_Haptic device to create the effect on.
  * \param effect an SDL_HapticEffect structure containing the properties of
- *               the effect to create
+ *               the effect to create.
  * \returns the ID of the effect on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -1085,10 +1097,10 @@
  * start playing from the start. You also cannot change the type either when
  * running SDL_HapticUpdateEffect().
  *
- * \param haptic the SDL_Haptic device that has the effect
- * \param effect the identifier of the effect to update
+ * \param haptic the SDL_Haptic device that has the effect.
+ * \param effect the identifier of the effect to update.
  * \param data an SDL_HapticEffect structure containing the new effect
- *             properties to use
+ *             properties to use.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1111,10 +1123,10 @@
  * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY`
  * instead.
  *
- * \param haptic the SDL_Haptic device to run the effect on
- * \param effect the ID of the haptic effect to run
+ * \param haptic the SDL_Haptic device to run the effect on.
+ * \param effect the ID of the haptic effect to run.
  * \param iterations the number of iterations to run the effect; use
- *                   `SDL_HAPTIC_INFINITY` to repeat forever
+ *                   `SDL_HAPTIC_INFINITY` to repeat forever.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1133,8 +1145,8 @@
  *
  * *
  *
- * \param haptic the SDL_Haptic device to stop the effect on
- * \param effect the ID of the haptic effect to stop
+ * \param haptic the SDL_Haptic device to stop the effect on.
+ * \param effect the ID of the haptic effect to stop.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1152,8 +1164,8 @@
  * This will stop the effect if it's running. Effects are automatically
  * destroyed when the device is closed.
  *
- * \param haptic the SDL_Haptic device to destroy the effect on
- * \param effect the ID of the haptic effect to destroy
+ * \param haptic the SDL_Haptic device to destroy the effect on.
+ * \param effect the ID of the haptic effect to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1167,8 +1179,8 @@
  *
  * Device must support the SDL_HAPTIC_STATUS feature.
  *
- * \param haptic the SDL_Haptic device to query for the effect status on
- * \param effect the ID of the haptic effect to query its status
+ * \param haptic the SDL_Haptic device to query for the effect status on.
+ * \param effect the ID of the haptic effect to query its status.
  * \returns 0 if it isn't playing, 1 if it is playing, or a negative error
  *          code on failure; call SDL_GetError() for more information.
  *
@@ -1190,8 +1202,9 @@
  * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the
  * maximum.
  *
- * \param haptic the SDL_Haptic device to set the gain on
- * \param gain value to set the gain to, should be between 0 and 100 (0 - 100)
+ * \param haptic the SDL_Haptic device to set the gain on.
+ * \param gain value to set the gain to, should be between 0 and 100 (0 -
+ *             100).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1209,8 +1222,8 @@
  *
  * Device must support the SDL_HAPTIC_AUTOCENTER feature.
  *
- * \param haptic the SDL_Haptic device to set autocentering on
- * \param autocenter value to set autocenter to (0-100)
+ * \param haptic the SDL_Haptic device to set autocentering on.
+ * \param autocenter value to set autocenter to (0-100).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1230,7 +1243,7 @@
  * Do not modify the effects nor add new ones while the device is paused. That
  * can cause all sorts of weird errors.
  *
- * \param haptic the SDL_Haptic device to pause
+ * \param haptic the SDL_Haptic device to pause.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1245,7 +1258,7 @@
  *
  * Call to unpause after SDL_HapticPause().
  *
- * \param haptic the SDL_Haptic device to unpause
+ * \param haptic the SDL_Haptic device to unpause.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1258,7 +1271,7 @@
 /**
  * Stop all the currently playing effects on a haptic device.
  *
- * \param haptic the SDL_Haptic device to stop
+ * \param haptic the SDL_Haptic device to stop.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1269,7 +1282,7 @@
 /**
  * Check whether rumble is supported on a haptic device.
  *
- * \param haptic haptic device to check for rumble support
+ * \param haptic haptic device to check for rumble support.
  * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -1285,7 +1298,7 @@
 /**
  * Initialize a haptic device for simple rumble playback.
  *
- * \param haptic the haptic device to initialize for simple rumble playback
+ * \param haptic the haptic device to initialize for simple rumble playback.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1301,9 +1314,9 @@
 /**
  * Run a simple rumble effect on a haptic device.
  *
- * \param haptic the haptic device to play the rumble effect on
- * \param strength strength of the rumble to play as a 0-1 float value
- * \param length length of the rumble to play in milliseconds
+ * \param haptic the haptic device to play the rumble effect on.
+ * \param strength strength of the rumble to play as a 0-1 float value.
+ * \param length length of the rumble to play in milliseconds.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1318,7 +1331,7 @@
 /**
  * Stop the simple rumble on a haptic device.
  *
- * \param haptic the haptic device to stop the rumble effect on
+ * \param haptic the haptic device to stop the rumble effect on.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hidapi.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hidapi.h
@@ -19,44 +19,35 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: HIDAPI */
+
 /**
- *  \file SDL_hidapi.h
+ * # CategoryHIDAPI
  *
- *  Header file for SDL HIDAPI functions.
+ * Header file for SDL HIDAPI functions.
  *
- *  This is an adaptation of the original HIDAPI interface by Alan Ott,
- *  and includes source code licensed under the following BSD license:
+ * This is an adaptation of the original HIDAPI interface by Alan Ott, and
+ * includes source code licensed under the following license:
  *
-    Copyright (c) 2010, Alan Ott, Signal 11 Software
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of Signal 11 Software nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
+ * ```
+ * HIDAPI - Multi-Platform library for
+ * communication with HID devices.
  *
+ * Copyright 2009, Alan Ott, Signal 11 Software.
+ * All Rights Reserved.
+ *
+ * This software may be used by anyone for any reason so
+ * long as the copyright notice in the source files
+ * remains intact.
+ * ```
+ *
+ * (Note that this license is the same as item three of SDL's zlib license, so
+ * it adds no new requirements on the user.)
+ *
  * If you would like a version of SDL without this code, you can build SDL
- * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example
- * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework.
+ * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for
+ * example on iOS or tvOS to avoid a dependency on the CoreBluetooth
+ * framework.
  */
 
 #ifndef SDL_hidapi_h_
@@ -71,14 +62,15 @@
 #endif
 
 /**
- *  \brief  A handle representing an open HID device
+ * A handle representing an open HID device
  */
 struct SDL_hid_device_;
 typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */
 
 /** hidapi info structure */
+
 /**
- *  \brief  Information about a connected HID device
+ * Information about a connected HID device
  */
 typedef struct SDL_hid_device_info
 {
@@ -234,13 +226,13 @@
  * The path name be determined by calling SDL_hid_enumerate(), or a
  * platform-specific path name can be used (eg: /dev/hidraw0 on Linux).
  *
- * \param path The path name of the device to open
+ * \param path The path name of the device to open.
  * \returns a pointer to a SDL_hid_device object on success or NULL on
  *          failure.
  *
  * \since This function is available since SDL 2.0.18.
  */
-extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */);
+extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive);
 
 /**
  * Write an Output report to a HID device.
@@ -434,7 +426,7 @@
 /**
  * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers
  *
- * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan
+ * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan.
  *
  * \since This function is available since SDL 2.0.18.
  */
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hints.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hints.h
@@ -20,20 +20,20 @@
 */
 
 /**
- *  \file SDL_hints.h
+ * # CategoryHints
  *
- *  Official documentation for SDL configuration variables
+ * Official documentation for SDL configuration variables
  *
- *  This file contains functions to set and get configuration hints,
- *  as well as listing each of them alphabetically.
+ * This file contains functions to set and get configuration hints, as well as
+ * listing each of them alphabetically.
  *
- *  The convention for naming hints is SDL_HINT_X, where "SDL_X" is
- *  the environment variable that can be used to override the default.
+ * The convention for naming hints is SDL_HINT_X, where "SDL_X" is the
+ * environment variable that can be used to override the default.
  *
- *  In general these hints are just that - they may or may not be
- *  supported or applicable on any given platform, but they provide
- *  a way for an application or user to give the library a hint as
- *  to how they would like the library to work.
+ * In general these hints are just that - they may or may not be supported or
+ * applicable on any given platform, but they provide a way for an application
+ * or user to give the library a hint as to how they would like the library to
+ * work.
  */
 
 #ifndef SDL_hints_h_
@@ -48,110 +48,132 @@
 #endif
 
 /**
- *  \brief  A variable controlling whether the Android / iOS built-in
- *  accelerometer should be listed as a joystick device.
+ * A variable controlling whether the Android / iOS built-in accelerometer
+ * should be listed as a joystick device.
  *
- *  This variable can be set to the following values:
- *    "0"       - The accelerometer is not listed as a joystick
- *    "1"       - The accelerometer is available as a 3 axis joystick (the default).
+ * This variable can be set to the following values:
+ *
+ * - "0": The accelerometer is not listed as a joystick
+ * - "1": The accelerometer is available as a 3 axis joystick (the default).
  */
 #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK"
 
 /**
- *  \brief Specify the behavior of Alt+Tab while the keyboard is grabbed.
+ * Specify the behavior of Alt+Tab while the keyboard is grabbed.
  *
- * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed
- * and your window is full-screen. This prevents the user from getting stuck in
- * your application if you've enabled keyboard grab.
+ * By default, SDL emulates Alt+Tab functionality while the keyboard is
+ * grabbed and your window is full-screen. This prevents the user from getting
+ * stuck in your application if you've enabled keyboard grab.
  *
  * The variable can be set to the following values:
- *   "0"       - SDL will not handle Alt+Tab. Your application is responsible
-                 for handling Alt+Tab while the keyboard is grabbed.
- *   "1"       - SDL will minimize your window when Alt+Tab is pressed (default)
-*/
+ *
+ * - "0": SDL will not handle Alt+Tab. Your application is responsible for
+ *   handling Alt+Tab while the keyboard is grabbed.
+ * - "1": SDL will minimize your window when Alt+Tab is pressed (default)
+ */
 #define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED"
 
 /**
- *  \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it.
- *      This is a debugging aid for developers and not expected to be used by end users. The default is "1"
+ * If set to "0" then never set the top most bit on a SDL Window, even if the
+ * video mode expects it.
  *
- *  This variable can be set to the following values:
- *    "0"       - don't allow topmost
- *    "1"       - allow topmost
+ * This is a debugging aid for developers and not expected to be used by end
+ * users. The default is "1"
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": don't allow topmost
+ * - "1": allow topmost
  */
 #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST"
 
 /**
- * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc.
+ * Android APK expansion main file version.
  *
- * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
+ * Should be a string number like "1", "2" etc.
  *
+ * Must be set together with
+ * SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
+ *
  * If both hints were set then SDL_RWFromFile() will look into expansion files
- * after a given relative path was not found in the internal storage and assets.
+ * after a given relative path was not found in the internal storage and
+ * assets.
  *
- * By default this hint is not set and the APK expansion files are not searched.
+ * By default this hint is not set and the APK expansion files are not
+ * searched.
  */
 #define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION"
 
 /**
- * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc.
+ * Android APK expansion patch file version.
  *
+ * Should be a string number like "1", "2" etc.
+ *
  * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.
  *
  * If both hints were set then SDL_RWFromFile() will look into expansion files
- * after a given relative path was not found in the internal storage and assets.
+ * after a given relative path was not found in the internal storage and
+ * assets.
  *
- * By default this hint is not set and the APK expansion files are not searched.
+ * By default this hint is not set and the APK expansion files are not
+ * searched.
  */
 #define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION"
 
 /**
- * \brief A variable to control whether the event loop will block itself when the app is paused.
+ * A variable to control whether the event loop will block itself when the app
+ * is paused.
  *
  * The variable can be set to the following values:
- *   "0"       - Non blocking.
- *   "1"       - Blocking. (default)
  *
+ * - "0": Non blocking.
+ * - "1": Blocking. (default)
+ *
  * The value should be set before SDL is initialized.
  */
 #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE"
 
 /**
- * \brief A variable to control whether SDL will pause audio in background
- *        (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
+ * A variable to control whether SDL will pause audio in background (Requires
+ * SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
  *
  * The variable can be set to the following values:
- *   "0"       - Non paused.
- *   "1"       - Paused. (default)
  *
+ * - "0": Non paused.
+ * - "1": Paused. (default)
+ *
  * The value should be set before SDL is initialized.
  */
 #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO"
 
 /**
- * \brief A variable to control whether we trap the Android back button to handle it manually.
- *        This is necessary for the right mouse button to work on some Android devices, or
- *        to be able to trap the back button for use in your code reliably.  If set to true,
- *        the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of
- *        SDL_SCANCODE_AC_BACK.
+ * A variable to control whether we trap the Android back button to handle it
+ * manually.
  *
+ * This is necessary for the right mouse button to work on some Android
+ * devices, or to be able to trap the back button for use in your code
+ * reliably. If set to true, the back button will show up as an SDL_KEYDOWN /
+ * SDL_KEYUP pair with a keycode of SDL_SCANCODE_AC_BACK.
+ *
  * The variable can be set to the following values:
- *   "0"       - Back button will be handled as usual for system. (default)
- *   "1"       - Back button will be trapped, allowing you to handle the key press
- *               manually.  (This will also let right mouse click work on systems
- *               where the right mouse button functions as back.)
  *
- * The value of this hint is used at runtime, so it can be changed at any time.
+ * - "0": Back button will be handled as usual for system. (default)
+ * - "1": Back button will be trapped, allowing you to handle the key press
+ *   manually. (This will also let right mouse click work on systems where the
+ *   right mouse button functions as back.)
+ *
+ * The value of this hint is used at runtime, so it can be changed at any
+ * time.
  */
 #define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON"
 
 /**
- *  \brief Specify an application name.
+ * Specify an application name.
  *
  * This hint lets you specify the application name sent to the OS when
  * required. For example, this will often appear in volume control applets for
  * audio streams, and in lists of applications which are inhibiting the
- * screensaver.  You should use a string that describes your program ("My Game
+ * screensaver. You should use a string that describes your program ("My Game
  * 2: The Revenge")
  *
  * Setting this to "" or leaving it unset will have SDL use a reasonable
@@ -166,48 +188,51 @@
 #define SDL_HINT_APP_NAME "SDL_APP_NAME"
 
 /**
- *  \brief  A variable controlling whether controllers used with the Apple TV
- *  generate UI events.
+ * A variable controlling whether controllers used with the Apple TV generate
+ * UI events.
  *
  * When UI events are generated by controller input, the app will be
- * backgrounded when the Apple TV remote's menu button is pressed, and when the
- * pause or B buttons on gamepads are pressed.
+ * backgrounded when the Apple TV remote's menu button is pressed, and when
+ * the pause or B buttons on gamepads are pressed.
  *
  * More information about properly making use of controllers for the Apple TV
  * can be found here:
  * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
  *
- *  This variable can be set to the following values:
- *    "0"       - Controller input does not generate UI events (the default).
- *    "1"       - Controller input generates UI events.
+ * This variable can be set to the following values:
+ *
+ * - "0": Controller input does not generate UI events (the default).
+ * - "1": Controller input generates UI events.
  */
 #define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS"
 
 /**
- * \brief  A variable controlling whether the Apple TV remote's joystick axes
- *         will automatically match the rotation of the remote.
+ * A variable controlling whether the Apple TV remote's joystick axes will
+ * automatically match the rotation of the remote.
  *
- *  This variable can be set to the following values:
- *    "0"       - Remote orientation does not affect joystick axes (the default).
- *    "1"       - Joystick axes are based on the orientation of the remote.
+ * This variable can be set to the following values:
+ *
+ * - "0": Remote orientation does not affect joystick axes (the default).
+ * - "1": Joystick axes are based on the orientation of the remote.
  */
 #define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION"
 
 /**
- *  \brief  A variable controlling the audio category on iOS and Mac OS X
+ * A variable controlling the audio category on iOS and Mac OS X
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "ambient"     - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default)
- *    "playback"    - Use the AVAudioSessionCategoryPlayback category
+ * - "ambient": Use the AVAudioSessionCategoryAmbient audio category, will be
+ *   muted by the phone mute switch (default)
+ * - "playback": Use the AVAudioSessionCategoryPlayback category
  *
- *  For more information, see Apple's documentation:
- *  https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
+ * For more information, see Apple's documentation:
+ * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
  */
 #define SDL_HINT_AUDIO_CATEGORY   "SDL_AUDIO_CATEGORY"
 
 /**
- *  \brief Specify an application name for an audio device.
+ * Specify an application name for an audio device.
  *
  * Some audio backends (such as PulseAudio) allow you to describe your audio
  * stream. Among other things, this description might show up in a system
@@ -228,7 +253,7 @@
 #define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME"
 
 /**
- *  \brief Specify an application name for an audio device.
+ * Specify an application name for an audio device.
  *
  * Some audio backends (such as PulseAudio) allow you to describe your audio
  * stream. Among other things, this description might show up in a system
@@ -249,11 +274,11 @@
 #define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME"
 
 /**
- *  \brief Specify an application role for an audio device.
+ * Specify an application role for an audio device.
  *
  * Some audio backends (such as Pipewire) allow you to describe the role of
- * your audio stream. Among other things, this description might show up in
- * a system control panel or software for displaying and manipulating media
+ * your audio stream. Among other things, this description might show up in a
+ * system control panel or software for displaying and manipulating media
  * playback/capture graphs.
  *
  * This hints lets you transmit that information to the OS. The contents of
@@ -269,1168 +294,1384 @@
 #define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE"
 
 /**
- *  \brief  A variable controlling speed/quality tradeoff of audio resampling.
+ * A variable controlling speed/quality tradeoff of audio resampling.
  *
- *  If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ )
- *  to handle audio resampling. There are different resampling modes available
- *  that produce different levels of quality, using more CPU.
+ * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ )
+ * to handle audio resampling. There are different resampling modes available
+ * that produce different levels of quality, using more CPU.
  *
- *  If this hint isn't specified to a valid setting, or libsamplerate isn't
- *  available, SDL will use the default, internal resampling algorithm.
+ * If this hint isn't specified to a valid setting, or libsamplerate isn't
+ * available, SDL will use the default, internal resampling algorithm.
  *
- *  As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is available.
+ * As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is
+ * available.
  *
- *  This hint is currently only checked at audio subsystem initialization.
+ * This hint is currently only checked at audio subsystem initialization.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast)
- *    "1" or "fast"    - Use fast, slightly higher quality resampling, if available
- *    "2" or "medium"  - Use medium quality resampling, if available
- *    "3" or "best"    - Use high quality resampling, if available
+ * - "0" or "default": Use SDL's internal resampling (Default when not set -
+ *   low quality, fast)
+ * - "1" or "fast": Use fast, slightly higher quality resampling, if available
+ * - "2" or "medium": Use medium quality resampling, if available
+ * - "3" or "best": Use high quality resampling, if available
  */
 #define SDL_HINT_AUDIO_RESAMPLING_MODE   "SDL_AUDIO_RESAMPLING_MODE"
 
 /**
- *  \brief  A variable controlling whether SDL updates joystick state when getting input events
+ * A variable controlling whether SDL updates joystick state when getting
+ * input events
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0"     - You'll call SDL_JoystickUpdate() manually
- *    "1"     - SDL will automatically call SDL_JoystickUpdate() (default)
+ * - "0": You'll call SDL_JoystickUpdate() manually
+ * - "1": SDL will automatically call SDL_JoystickUpdate() (default)
  *
- *  This hint can be toggled on and off at runtime.
+ * This hint can be toggled on and off at runtime.
  */
 #define SDL_HINT_AUTO_UPDATE_JOYSTICKS  "SDL_AUTO_UPDATE_JOYSTICKS"
 
 /**
- *  \brief  A variable controlling whether SDL updates sensor state when getting input events
+ * A variable controlling whether SDL updates sensor state when getting input
+ * events
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0"     - You'll call SDL_SensorUpdate() manually
- *    "1"     - SDL will automatically call SDL_SensorUpdate() (default)
+ * - "0": You'll call SDL_SensorUpdate() manually
+ * - "1": SDL will automatically call SDL_SensorUpdate() (default)
  *
- *  This hint can be toggled on and off at runtime.
+ * This hint can be toggled on and off at runtime.
  */
 #define SDL_HINT_AUTO_UPDATE_SENSORS    "SDL_AUTO_UPDATE_SENSORS"
 
 /**
- *  \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
+ * Prevent SDL from using version 4 of the bitmap header when saving BMPs.
  *
- * The bitmap header version 4 is required for proper alpha channel support and
- * SDL will use it when required. Should this not be desired, this hint can
- * force the use of the 40 byte header version which is supported everywhere.
+ * The bitmap header version 4 is required for proper alpha channel support
+ * and SDL will use it when required. Should this not be desired, this hint
+ * can force the use of the 40 byte header version which is supported
+ * everywhere.
  *
  * The variable can be set to the following values:
- *   "0"       - Surfaces with a colorkey or an alpha channel are saved to a
- *               32-bit BMP file with an alpha mask. SDL will use the bitmap
- *               header version 4 and set the alpha mask accordingly.
- *   "1"       - Surfaces with a colorkey or an alpha channel are saved to a
- *               32-bit BMP file without an alpha mask. The alpha channel data
- *               will be in the file, but applications are going to ignore it.
  *
+ * - "0": Surfaces with a colorkey or an alpha channel are saved to a 32-bit
+ *   BMP file with an alpha mask. SDL will use the bitmap header version 4 and
+ *   set the alpha mask accordingly.
+ * - "1": Surfaces with a colorkey or an alpha channel are saved to a 32-bit
+ *   BMP file without an alpha mask. The alpha channel data will be in the
+ *   file, but applications are going to ignore it.
+ *
  * The default value is "0".
  */
 #define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT"
 
 /**
- *  \brief Override for SDL_GetDisplayUsableBounds()
+ * Override for SDL_GetDisplayUsableBounds()
  *
- *  If set, this hint will override the expected results for
- *  SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
- *  to do this, but this allows an embedded system to request that some of the
- *  screen be reserved for other uses when paired with a well-behaved
- *  application.
+ * If set, this hint will override the expected results for
+ * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
+ * to do this, but this allows an embedded system to request that some of the
+ * screen be reserved for other uses when paired with a well-behaved
+ * application.
  *
- *  The contents of this hint must be 4 comma-separated integers, the first
- *  is the bounds x, then y, width and height, in that order.
+ * The contents of this hint must be 4 comma-separated integers, the first is
+ * the bounds x, then y, width and height, in that order.
  */
 #define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS"
 
 /**
- *  \brief Disable giving back control to the browser automatically
- *  when running with asyncify
+ * Disable giving back control to the browser automatically when running with
+ * asyncify
  *
- * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations
- * such as refreshing the screen or polling events.
+ * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations such as
+ * refreshing the screen or polling events.
  *
  * This hint only applies to the emscripten platform
  *
  * The variable can be set to the following values:
- *    "0"       - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
- *    "1"       - Enable emscripten_sleep calls (the default)
+ *
+ * - "0": Disable emscripten_sleep calls (if you give back browser control
+ *   manually or use asyncify for other purposes)
+ * - "1": Enable emscripten_sleep calls (the default)
  */
 #define SDL_HINT_EMSCRIPTEN_ASYNCIFY   "SDL_EMSCRIPTEN_ASYNCIFY"
 
 /**
- *  \brief override the binding element for keyboard inputs for Emscripten builds
+ * override the binding element for keyboard inputs for Emscripten builds
  *
- * This hint only applies to the emscripten platform
+ * This hint only applies to the emscripten platform.
  *
- * The variable can be one of
- *    "#window"      - The javascript window object (this is the default)
- *    "#document"    - The javascript document object
- *    "#screen"      - the javascript window.screen object
- *    "#canvas"      - the WebGL canvas element
- *    any other string without a leading # sign applies to the element on the page with that ID.
+ * The variable can be one of:
+ *
+ * - "#window": the javascript window object (this is the default)
+ * - "#document": the javascript document object
+ * - "#screen": the javascript window.screen object
+ * - "#canvas": the WebGL canvas element
+ *
+ * Any other string without a leading # sign applies to the element on the
+ * page with that ID.
  */
 #define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT   "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
 
 /**
- *  \brief  A variable that controls whether the on-screen keyboard should be shown when text input is active
+ * A variable that controls whether the on-screen keyboard should be shown
+ * when text input is active
  *
- *  The variable can be set to the following values:
- *    "0"       - Do not show the on-screen keyboard
- *    "1"       - Show the on-screen keyboard
+ * The variable can be set to the following values:
  *
- *  The default value is "1". This hint must be set before text input is activated.
+ * - "0": Do not show the on-screen keyboard
+ * - "1": Show the on-screen keyboard
+ *
+ * The default value is "1". This hint must be set before text input is
+ * activated.
  */
 #define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD"
 
 /**
- *  \brief  A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs
+ * A variable controlling verbosity of the logging of SDL events pushed onto
+ * the internal queue.
  *
- *  The variable can be set to the following values:
- *    "0"       - Do not scan for Steam Controllers
- *    "1"       - Scan for Steam Controllers (the default)
+ * This variable can be set to the following values, from least to most
+ * verbose:
  *
- *  The default value is "1".  This hint must be set before initializing the joystick subsystem.
- */
-#define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS"
-
-/**
- *  \brief  A variable controlling verbosity of the logging of SDL events pushed onto the internal queue.
+ * - "0": Don't log any events (default)
+ * - "1": Log most events (other than the really spammy ones).
+ * - "2": Include mouse and finger motion events.
+ * - "3": Include SDL_SysWMEvent events.
  *
- *  This variable can be set to the following values, from least to most verbose:
+ * This is generally meant to be used to debug SDL itself, but can be useful
+ * for application developers that need better visibility into what is going
+ * on in the event queue. Logged events are sent through SDL_Log(), which
+ * means by default they appear on stdout on most platforms or maybe
+ * OutputDebugString() on Windows, and can be funneled by the app with
+ * SDL_LogSetOutputFunction(), etc.
  *
- *    "0"     - Don't log any events (default)
- *    "1"     - Log most events (other than the really spammy ones).
- *    "2"     - Include mouse and finger motion events.
- *    "3"     - Include SDL_SysWMEvent events.
- *
- *  This is generally meant to be used to debug SDL itself, but can be useful
- *  for application developers that need better visibility into what is going
- *  on in the event queue. Logged events are sent through SDL_Log(), which
- *  means by default they appear on stdout on most platforms or maybe
- *  OutputDebugString() on Windows, and can be funneled by the app with
- *  SDL_LogSetOutputFunction(), etc.
- *
- *  This hint can be toggled on and off at runtime, if you only need to log
- *  events for a small subset of program execution.
+ * This hint can be toggled on and off at runtime, if you only need to log
+ * events for a small subset of program execution.
  */
 #define SDL_HINT_EVENT_LOGGING   "SDL_EVENT_LOGGING"
 
 /**
- *  \brief  A variable controlling whether raising the window should be done more forcefully
+ * A variable controlling whether raising the window should be done more
+ * forcefully
  *
- *  This variable can be set to the following values:
- *    "0"       - No forcing (the default)
- *    "1"       - Extra level of forcing
+ * This variable can be set to the following values:
  *
- *  At present, this is only an issue under MS Windows, which makes it nearly impossible to
- *  programmatically move a window to the foreground, for "security" reasons. See
- *  http://stackoverflow.com/a/34414846 for a discussion.
+ * - "0": No forcing (the default)
+ * - "1": Extra level of forcing
+ *
+ * At present, this is only an issue under MS Windows, which makes it nearly
+ * impossible to programmatically move a window to the foreground, for
+ * "security" reasons. See http://stackoverflow.com/a/34414846 for a
+ * discussion.
  */
 #define SDL_HINT_FORCE_RAISEWINDOW    "SDL_HINT_FORCE_RAISEWINDOW"
 
 /**
- *  \brief  A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
+ * A variable controlling how 3D acceleration is used to accelerate the SDL
+ * screen surface.
  *
- *  SDL can try to accelerate the SDL screen surface by using streaming
- *  textures with a 3D rendering engine.  This variable controls whether and
- *  how this is done.
+ * SDL can try to accelerate the SDL screen surface by using streaming
+ * textures with a 3D rendering engine. This variable controls whether and how
+ * this is done.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable 3D acceleration
- *    "1"       - Enable 3D acceleration, using the default renderer.
- *    "X"       - Enable 3D acceleration, using X where X is one of the valid rendering drivers.  (e.g. "direct3d", "opengl", etc.)
+ * This variable can be set to the following values:
  *
- *  By default SDL tries to make a best guess for each platform whether
- *  to use acceleration or not.
+ * - "0": Disable 3D acceleration
+ * - "1": Enable 3D acceleration, using the default renderer.
+ * - "X": Enable 3D acceleration, using X where X is one of the valid
+ *   rendering drivers. (e.g. "direct3d", "opengl", etc.)
+ *
+ * By default SDL tries to make a best guess for each platform whether to use
+ * acceleration or not.
  */
 #define SDL_HINT_FRAMEBUFFER_ACCELERATION   "SDL_FRAMEBUFFER_ACCELERATION"
 
 /**
- *  \brief  A variable that lets you manually hint extra gamecontroller db entries.
+ * A variable that lets you manually hint extra gamecontroller db entries.
  *
- *  The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h
+ * The variable should be newline delimited rows of gamecontroller config
+ * data, see SDL_gamecontroller.h
  *
- *  This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
- *  You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You
+ * can update mappings after the system is initialized with
+ * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
  */
 #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG"
 
 /**
- *  \brief  A variable that lets you provide a file with extra gamecontroller db entries.
+ * A variable that lets you provide a file with extra gamecontroller db
+ * entries.
  *
- *  The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h
+ * The file should contain lines of gamecontroller config data, see
+ * SDL_gamecontroller.h
  *
- *  This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
- *  You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You
+ * can update mappings after the system is initialized with
+ * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
  */
 #define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE"
 
 /**
- *  \brief  A variable that overrides the automatic controller type detection
+ * A variable that overrides the automatic controller type detection
  *
- *  The variable should be comma separated entries, in the form: VID/PID=type
+ * The variable should be comma separated entries, in the form: VID/PID=type
  *
- *  The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
+ * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
  *
- *  The type should be one of:
- *      Xbox360
- *      XboxOne
- *      PS3
- *      PS4
- *      PS5
- *      SwitchPro
+ * The type should be one of: Xbox360 XboxOne PS3 PS4 PS5 SwitchPro
  *
- *  This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
+ * This hint affects what driver is used, and must be set before calling
+ * SDL_Init(SDL_INIT_GAMECONTROLLER)
  */
 #define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE"
 
 /**
- *  \brief  A variable containing a list of devices to skip when scanning for game controllers.
+ * A variable containing a list of devices to skip when scanning for game
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES"
 
 /**
- *  \brief  If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable.
+ * If set, all devices will be skipped when scanning for game controllers
+ * except for the ones listed in this variable.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT"
 
 /**
- *  \brief  If set, game controller face buttons report their values according to their labels instead of their positional layout.
+ * If set, game controller face buttons report their values according to their
+ * labels instead of their positional layout.
  *
- *  For example, on Nintendo Switch controllers, normally you'd get:
+ * For example, on Nintendo Switch controllers, normally you'd get:
  *
+ * ```
  *      (Y)
  *  (X)     (B)
  *      (A)
+ * ```
  *
- *  but if this hint is set, you'll get:
+ * but if this hint is set, you'll get:
  *
+ * ```
  *      (X)
  *  (Y)     (A)
  *      (B)
+ * ```
  *
- *  The variable can be set to the following values:
- *    "0"       - Report the face buttons by position, as though they were on an Xbox controller.
- *    "1"       - Report the face buttons by label instead of position
+ * The variable can be set to the following values:
  *
- *  The default value is "1".  This hint may be set at any time.
+ * - "0": Report the face buttons by position, as though they were on an Xbox
+ *   controller.
+ * - "1": Report the face buttons by label instead of position
+ *
+ * The default value is "1". This hint may be set at any time.
  */
 #define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS"
 
 /**
- *  \brief  A variable controlling whether grabbing input grabs the keyboard
+ * A variable controlling whether grabbing input grabs the keyboard
  *
- *  This variable can be set to the following values:
- *    "0"       - Grab will affect only the mouse
- *    "1"       - Grab will affect mouse and keyboard
+ * This variable can be set to the following values:
  *
- *  By default SDL will not grab the keyboard so system shortcuts still work.
+ * - "0": Grab will affect only the mouse
+ * - "1": Grab will affect mouse and keyboard
+ *
+ * By default SDL will not grab the keyboard so system shortcuts still work.
  */
 #define SDL_HINT_GRAB_KEYBOARD              "SDL_GRAB_KEYBOARD"
 
 /**
- *  \brief  A variable containing a list of devices to ignore in SDL_hid_enumerate()
+ * A variable containing a list of devices to ignore in SDL_hid_enumerate()
  *
- *  For example, to ignore the Shanwan DS3 controller and any Valve controller, you might
- *  have the string "0x2563/0x0523,0x28de/0x0000"
+ * For example, to ignore the Shanwan DS3 controller and any Valve controller,
+ * you might have the string "0x2563/0x0523,0x28de/0x0000"
  */
 #define SDL_HINT_HIDAPI_IGNORE_DEVICES "SDL_HIDAPI_IGNORE_DEVICES"
 
 /**
- *  \brief  A variable controlling whether the idle timer is disabled on iOS.
+ * A variable controlling whether the idle timer is disabled on iOS.
  *
- *  When an iOS app does not receive touches for some time, the screen is
- *  dimmed automatically. For games where the accelerometer is the only input
- *  this is problematic. This functionality can be disabled by setting this
- *  hint.
+ * When an iOS app does not receive touches for some time, the screen is
+ * dimmed automatically. For games where the accelerometer is the only input
+ * this is problematic. This functionality can be disabled by setting this
+ * hint.
  *
- *  As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver()
- *  accomplish the same thing on iOS. They should be preferred over this hint.
+ * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver()
+ * accomplish the same thing on iOS. They should be preferred over this hint.
  *
- *  This variable can be set to the following values:
- *    "0"       - Enable idle timer
- *    "1"       - Disable idle timer
+ * This variable can be set to the following values:
+ *
+ * - "0": Enable idle timer
+ * - "1": Disable idle timer
  */
 #define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED"
 
 /**
- * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.
+ * A variable to control whether certain IMEs should handle text editing
+ * internally instead of sending SDL_TEXTEDITING events.
  *
  * The variable can be set to the following values:
- *   "0"       - SDL_TEXTEDITING events are sent, and it is the application's
- *               responsibility to render the text from these events and
- *               differentiate it somehow from committed text. (default)
- *   "1"       - If supported by the IME then SDL_TEXTEDITING events are not sent,
- *               and text that is being composed will be rendered in its own UI.
+ *
+ * - "0": SDL_TEXTEDITING events are sent, and it is the application's
+ *   responsibility to render the text from these events and differentiate it
+ *   somehow from committed text. (default)
+ * - "1": If supported by the IME then SDL_TEXTEDITING events are not sent,
+ *   and text that is being composed will be rendered in its own UI.
  */
 #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING"
 
 /**
- * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them.
+ * A variable to control whether certain IMEs should show native UI components
+ * (such as the Candidate List) instead of suppressing them.
  *
  * The variable can be set to the following values:
- *   "0"       - Native UI components are not display. (default)
- *   "1"       - Native UI components are displayed.
+ *
+ * - "0": Native UI components are not display. (default)
+ * - "1": Native UI components are displayed.
  */
 #define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI"
 
 /**
- * \brief A variable to control if extended IME text support is enabled.
- * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise.
- * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated.
+ * A variable to control if extended IME text support is enabled.
  *
+ * If enabled then SDL_TextEditingExtEvent will be issued if the text would be
+ * truncated otherwise. Additionally SDL_TextInputEvent will be dispatched
+ * multiple times so that it is not truncated.
+ *
  * The variable can be set to the following values:
- *   "0"       - Legacy behavior. Text can be truncated, no heap allocations. (default)
- *   "1"       - Modern behavior.
+ *
+ * - "0": Legacy behavior. Text can be truncated, no heap allocations.
+ *   (default)
+ * - "1": Modern behavior.
  */
 #define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT"
 
 /**
- * \brief  A variable controlling whether the home indicator bar on iPhone X
- *         should be hidden.
+ * A variable controlling whether the home indicator bar on iPhone X should be
+ * hidden.
  *
- *  This variable can be set to the following values:
- *    "0"       - The indicator bar is not hidden (default for windowed applications)
- *    "1"       - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications)
- *    "2"       - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications)
+ * This variable can be set to the following values:
+ *
+ * - "0": The indicator bar is not hidden (default for windowed applications)
+ * - "1": The indicator bar is hidden and is shown when the screen is touched
+ *   (useful for movie playback applications)
+ * - "2": The indicator bar is dim and the first swipe makes it visible and
+ *   the second swipe performs the "home" action (default for fullscreen
+ *   applications)
  */
 #define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR"
 
 /**
- *  \brief  A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
+ * A variable that lets you enable joystick (and gamecontroller) events even
+ * when your app is in the background.
  *
- *  The variable can be set to the following values:
- *    "0"       - Disable joystick & gamecontroller input events when the
- *                application is in the background.
- *    "1"       - Enable joystick & gamecontroller input events when the
- *                application is in the background.
+ * The variable can be set to the following values:
  *
- *  The default value is "0".  This hint may be set at any time.
+ * - "0": Disable joystick & gamecontroller input events when the application
+ *   is in the background.
+ * - "1": Enable joystick & gamecontroller input events when the application
+ *   is in the background.
+ *
+ * The default value is "0". This hint may be set at any time.
  */
 #define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS"
 
 /**
- *  A variable containing a list of arcade stick style controllers.
+ * A variable containing a list of arcade stick style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES "SDL_JOYSTICK_ARCADESTICK_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not arcade stick style controllers. This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not arcade stick style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of devices that should not be considerd joysticks.
+ * A variable containing a list of devices that should not be considerd
+ * joysticks.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES "SDL_JOYSTICK_BLACKLIST_DEVICES"
 
 /**
- *  A variable containing a list of devices that should be considered joysticks. This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in device list.
+ * A variable containing a list of devices that should be considered
+ * joysticks.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED "SDL_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of flightstick style controllers.
+ * A variable containing a list of flightstick style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES "SDL_JOYSTICK_FLIGHTSTICK_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not flightstick style controllers. This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not flightstick style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of devices known to have a GameCube form factor.
+ * A variable containing a list of devices known to have a GameCube form
+ * factor.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES "SDL_JOYSTICK_GAMECUBE_DEVICES"
 
 /**
- *  A variable containing a list of devices known not to have a GameCube form factor. This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in device list.
+ * A variable containing a list of devices known not to have a GameCube form
+ * factor.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED "SDL_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI joystick drivers should be used.
+ * A variable controlling whether the HIDAPI joystick drivers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI drivers are not used
- *    "1"       - HIDAPI drivers are used (the default)
+ * This variable can be set to the following values:
  *
- *  This variable is the default for all drivers, but can be overridden by the hints for specific drivers below.
+ * - "0": HIDAPI drivers are not used
+ * - "1": HIDAPI drivers are used (the default)
+ *
+ * This variable is the default for all drivers, but can be overridden by the
+ * hints for specific drivers below.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Nintendo GameCube
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE"
 
 /**
- *  \brief  A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement
- *          the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2)
- *          this is useful for applications that need full compatibility for things like ADSR envelopes.
- *          Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0"
- *          Rumble is both at any arbitrary value,
- *          StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0"
+ * A variable controlling whether "low_frequency_rumble" and
+ * "high_frequency_rumble" is used to implement the GameCube controller's 3
+ * rumble modes, Stop(0), Rumble(1), and StopHard(2) this is useful for
+ * applications that need full compatibility for things like ADSR envelopes.
  *
- *  This variable can be set to the following values:
- *    "0"       - Normal rumble behavior is behavior is used (default)
- *    "1"       - Proper GameCube controller rumble behavior is used
+ * Stop is implemented by setting "low_frequency_rumble" to "0" and
+ * "high_frequency_rumble" ">0" Rumble is both at any arbitrary value,
+ * StopHard is implemented by setting both "low_frequency_rumble" and
+ * "high_frequency_rumble" to "0"
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Normal rumble behavior is behavior is used (default)
+ * - "1": Proper GameCube controller rumble behavior is used
  */
 #define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Switch Joy-Cons should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for Nintendo Switch
+ * Joy-Cons should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS"
 
 /**
-  *  \brief  A variable controlling whether Nintendo Switch Joy-Con controllers will be combined into a single Pro-like controller when using the HIDAPI driver
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Left and right Joy-Con controllers will not be combined and each will be a mini-gamepad
-  *    "1"       - Left and right Joy-Con controllers will be combined into a single controller (the default)
-  */
+ * A variable controlling whether Nintendo Switch Joy-Con controllers will be
+ * combined into a single Pro-like controller when using the HIDAPI driver
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Left and right Joy-Con controllers will not be combined and each
+ *   will be a mini-gamepad
+ * - "1": Left and right Joy-Con controllers will be combined into a single
+ *   controller (the default)
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS "SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS"
 
 /**
-  *  \brief  A variable controlling whether Nintendo Switch Joy-Con controllers will be in vertical mode when using the HIDAPI driver
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Left and right Joy-Con controllers will not be in vertical mode (the default)
-  *    "1"       - Left and right Joy-Con controllers will be in vertical mode
-  *
-  *  This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
-  */
+ * A variable controlling whether Nintendo Switch Joy-Con controllers will be
+ * in vertical mode when using the HIDAPI driver
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Left and right Joy-Con controllers will not be in vertical mode (the
+ *   default)
+ * - "1": Left and right Joy-Con controllers will be in vertical mode
+ *
+ * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS "SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for Amazon Luna
+ * controllers connected via Bluetooth should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Online classic controllers should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for Nintendo Online
+ * classic controllers should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC "SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC"
 
 /**
-  *  \brief  A variable controlling whether the HIDAPI driver for NVIDIA SHIELD controllers should be used.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - HIDAPI driver is not used
-  *    "1"       - HIDAPI driver is used
-  *
-  *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
-  */
+ * A variable controlling whether the HIDAPI driver for NVIDIA SHIELD
+ * controllers should be used.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
 #define SDL_HINT_JOYSTICK_HIDAPI_SHIELD "SDL_JOYSTICK_HIDAPI_SHIELD"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for PS3 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for PS3 controllers should
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on other platforms.
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
  *
- *  It is not possible to use this driver on Windows, due to limitations in the default drivers
- *  installed. See https://github.com/ViGEm/DsHidMini for an alternative driver on Windows.
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on
+ * other platforms.
+ *
+ * It is not possible to use this driver on Windows, due to limitations in the
+ * default drivers installed. See https://github.com/ViGEm/DsHidMini for an
+ * alternative driver on Windows.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS3 "SDL_JOYSTICK_HIDAPI_PS3"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for PS4 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for PS4 controllers should
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4"
 
 /**
- *  \brief  A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver.
+ * A variable controlling whether extended input reports should be used for
+ * PS4 controllers when using the HIDAPI driver.
  *
- *  This variable can be set to the following values:
- *    "0"       - extended reports are not enabled (the default)
- *    "1"       - extended reports
+ * This variable can be set to the following values:
  *
- *  Extended input reports allow rumble on Bluetooth PS4 controllers, but
- *  break DirectInput handling for applications that don't use SDL.
+ * - "0": extended reports are not enabled (the default)
+ * - "1": extended reports
  *
- *  Once extended reports are enabled, they can not be disabled without
- *  power cycling the controller.
+ * Extended input reports allow rumble on Bluetooth PS4 controllers, but break
+ * DirectInput handling for applications that don't use SDL.
  *
- *  For compatibility with applications written for versions of SDL prior
- *  to the introduction of PS5 controller support, this value will also
- *  control the state of extended reports on PS5 controllers when the
- *  SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set.
+ * Once extended reports are enabled, they can not be disabled without power
+ * cycling the controller.
+ *
+ * For compatibility with applications written for versions of SDL prior to
+ * the introduction of PS5 controller support, this value will also control
+ * the state of extended reports on PS5 controllers when the
+ * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for PS5 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for PS5 controllers should
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with a PS5 controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver.
+ * A variable controlling whether extended input reports should be used for
+ * PS5 controllers when using the HIDAPI driver.
  *
- *  This variable can be set to the following values:
- *    "0"       - extended reports are not enabled (the default)
- *    "1"       - extended reports
+ * This variable can be set to the following values:
  *
- *  Extended input reports allow rumble on Bluetooth PS5 controllers, but
- *  break DirectInput handling for applications that don't use SDL.
+ * - "0": extended reports are not enabled (the default)
+ * - "1": extended reports
  *
- *  Once extended reports are enabled, they can not be disabled without
- *  power cycling the controller.
+ * Extended input reports allow rumble on Bluetooth PS5 controllers, but break
+ * DirectInput handling for applications that don't use SDL.
  *
- *  For compatibility with applications written for versions of SDL prior
- *  to the introduction of PS5 controller support, this value defaults to
- *  the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE.
+ * Once extended reports are enabled, they can not be disabled without power
+ * cycling the controller.
+ *
+ * For compatibility with applications written for versions of SDL prior to
+ * the introduction of PS5 controller support, this value defaults to the
+ * value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Google Stadia
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Bluetooth Steam Controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Bluetooth Steam
+ * Controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access
- *                and may prompt the user for permission on iOS and Android.
+ * This variable can be set to the following values:
  *
- *  The default is "0"
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used for Steam Controllers, which requires
+ *   Bluetooth access and may prompt the user for permission on iOS and
+ *   Android.
+ *
+ * The default is "0"
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for the Steam Deck builtin controller should be used.
+ * A variable controlling whether the HIDAPI driver for the Steam Deck builtin
+ * controller should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_STEAMDECK "SDL_JOYSTICK_HIDAPI_STEAMDECK"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Nintendo Switch
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH"
 
 /**
- *  \brief  A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Pro controller is opened
+ * A variable controlling whether the Home button LED should be turned on when
+ * a Nintendo Switch Pro controller is opened
  *
- *  This variable can be set to the following values:
- *    "0"       - home button LED is turned off
- *    "1"       - home button LED is turned on
+ * This variable can be set to the following values:
  *
- *  By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
+ * - "0": home button LED is turned off
+ * - "1": home button LED is turned on
+ *
+ * By default the Home button LED state is not changed. This hint can also be
+ * set to a floating point value between 0.0 and 1.0 which controls the
+ * brightness of the Home button LED.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED"
 
 /**
- *  \brief  A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Joy-Con controller is opened
+ * A variable controlling whether the Home button LED should be turned on when
+ * a Nintendo Switch Joy-Con controller is opened
  *
- *  This variable can be set to the following values:
- *    "0"       - home button LED is turned off
- *    "1"       - home button LED is turned on
+ * This variable can be set to the following values:
  *
- *  By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
+ * - "0": home button LED is turned off
+ * - "1": home button LED is turned on
+ *
+ * By default the Home button LED state is not changed. This hint can also be
+ * set to a floating point value between 0.0 and 1.0 which controls the
+ * brightness of the Home button LED.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED "SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with a Nintendo Switch controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U controllers should be used.
+ * A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  This driver doesn't work with the dolphinbar, so the default is SDL_FALSE for now.
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * This driver doesn't work with the dolphinbar, so the default is SDL_FALSE
+ * for now.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_WII "SDL_JOYSTICK_HIDAPI_WII"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Wii controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with a Wii controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED "SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox controllers
+ * should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is "0" on Windows, otherwise the value of
+ * SDL_HINT_JOYSTICK_HIDAPI
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX   "SDL_JOYSTICK_HIDAPI_XBOX"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox 360 controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox 360 controllers
+ * should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360   "SDL_JOYSTICK_HIDAPI_XBOX_360"
 
 /**
- *  \brief  A variable controlling whether the player LEDs should be lit to indicate which player is associated with an Xbox 360 controller.
+ * A variable controlling whether the player LEDs should be lit to indicate
+ * which player is associated with an Xbox 360 controller.
  *
- *  This variable can be set to the following values:
- *    "0"       - player LEDs are not enabled
- *    "1"       - player LEDs are enabled (the default)
+ * This variable can be set to the following values:
+ *
+ * - "0": player LEDs are not enabled
+ * - "1": player LEDs are enabled (the default)
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED "SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox 360 wireless controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox 360 wireless
+ * controllers should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS   "SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS"
 
 /**
- *  \brief  A variable controlling whether the HIDAPI driver for XBox One controllers should be used.
+ * A variable controlling whether the HIDAPI driver for XBox One controllers
+ * should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - HIDAPI driver is not used
- *    "1"       - HIDAPI driver is used
+ * This variable can be set to the following values:
  *
- *  The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
+ * - "0": HIDAPI driver is not used
+ * - "1": HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE   "SDL_JOYSTICK_HIDAPI_XBOX_ONE"
 
 /**
- *  \brief  A variable controlling whether the Home button LED should be turned on when an Xbox One controller is opened
+ * A variable controlling whether the Home button LED should be turned on when
+ * an Xbox One controller is opened
  *
- *  This variable can be set to the following values:
- *    "0"       - home button LED is turned off
- *    "1"       - home button LED is turned on
+ * This variable can be set to the following values:
  *
- *  By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. The default brightness is 0.4.
+ * - "0": home button LED is turned off
+ * - "1": home button LED is turned on
+ *
+ * By default the Home button LED state is not changed. This hint can also be
+ * set to a floating point value between 0.0 and 1.0 which controls the
+ * brightness of the Home button LED. The default brightness is 0.4.
  */
 #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED"
 
 /**
-  *  A variable controlling whether IOKit should be used for controller handling.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - IOKit is not used
-  *    "1"       - IOKit is used (the default)
-  */
+ * A variable controlling whether IOKit should be used for controller
+ * handling.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": IOKit is not used
+ * - "1": IOKit is used (the default)
+ */
 #define SDL_HINT_JOYSTICK_IOKIT "SDL_JOYSTICK_IOKIT"
 
 /**
-  *  A variable controlling whether GCController should be used for controller handling.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - GCController is not used
-  *    "1"       - GCController is used (the default)
-  */
+ * A variable controlling whether GCController should be used for controller
+ * handling.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": GCController is not used
+ * - "1": GCController is used (the default)
+ */
 #define SDL_HINT_JOYSTICK_MFI "SDL_JOYSTICK_MFI"
 
 /**
-  *  \brief  A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - RAWINPUT drivers are not used
-  *    "1"       - RAWINPUT drivers are used (the default)
-  */
+ * A variable controlling whether the RAWINPUT joystick drivers should be used
+ * for better handling XInput-capable devices.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": RAWINPUT drivers are not used
+ * - "1": RAWINPUT drivers are used (the default)
+ */
 #define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT"
 
 /**
-  *  \brief  A variable controlling whether the RAWINPUT driver should pull correlated data from XInput.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - RAWINPUT driver will only use data from raw input APIs
-  *    "1"       - RAWINPUT driver will also pull data from XInput, providing
-  *                better trigger axes, guide button presses, and rumble support
-  *                for Xbox controllers
-  *
-  *  The default is "1".  This hint applies to any joysticks opened after setting the hint.
-  */
+ * A variable controlling whether the RAWINPUT driver should pull correlated
+ * data from XInput.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": RAWINPUT driver will only use data from raw input APIs
+ * - "1": RAWINPUT driver will also pull data from XInput, providing better
+ *   trigger axes, guide button presses, and rumble support for Xbox
+ *   controllers
+ *
+ * The default is "1". This hint applies to any joysticks opened after setting
+ * the hint.
+ */
 #define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT   "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT"
 
 /**
-  *  \brief  A variable controlling whether the ROG Chakram mice should show up as joysticks
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - ROG Chakram mice do not show up as joysticks (the default)
-  *    "1"       - ROG Chakram mice show up as joysticks
-  */
+ * A variable controlling whether the ROG Chakram mice should show up as
+ * joysticks
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": ROG Chakram mice do not show up as joysticks (the default)
+ * - "1": ROG Chakram mice show up as joysticks
+ */
 #define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM"
 
 /**
-  *  \brief  A variable controlling whether a separate thread should be used
-  *          for handling joystick detection and raw input messages on Windows
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - A separate thread is not used (the default)
-  *    "1"       - A separate thread is used for handling raw input messages
-  *
-  */
+ * A variable controlling whether a separate thread should be used for
+ * handling joystick detection and raw input messages on Windows
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": A separate thread is not used (the default)
+ * - "1": A separate thread is used for handling raw input messages
+ */
 #define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD"
 
 /**
- *  A variable containing a list of throttle style controllers.
+ * A variable containing a list of throttle style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES "SDL_JOYSTICK_THROTTLE_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not throttle style controllers. This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not throttle style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in
+ * device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES_EXCLUDED "SDL_JOYSTICK_THROTTLE_DEVICES_EXCLUDED"
 
 /**
-  *  \brief  A variable controlling whether Windows.Gaming.Input should be used for controller handling.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - WGI is not used
-  *    "1"       - WGI is used (the default)
-  */
+ * A variable controlling whether Windows.Gaming.Input should be used for
+ * controller handling.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": WGI is not used
+ * - "1": WGI is used (the default)
+ */
 #define SDL_HINT_JOYSTICK_WGI "SDL_JOYSTICK_WGI"
 
 /**
- *  A variable containing a list of wheel style controllers.
+ * A variable containing a list of wheel style controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_WHEEL_DEVICES "SDL_JOYSTICK_WHEEL_DEVICES"
 
 /**
- *  A variable containing a list of devices that are not wheel style controllers. This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device list.
+ * A variable containing a list of devices that are not wheel style
+ * controllers.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device
+ * list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_WHEEL_DEVICES_EXCLUDED "SDL_JOYSTICK_WHEEL_DEVICES_EXCLUDED"
 
 /**
- *  A variable containing a list of devices known to have all axes centered at zero.
+ * A variable containing a list of devices known to have all axes centered at
+ * zero.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_JOYSTICK_ZERO_CENTERED_DEVICES "SDL_JOYSTICK_ZERO_CENTERED_DEVICES"
 
 /**
- * \brief Determines whether SDL enforces that DRM master is required in order
- *        to initialize the KMSDRM video backend.
+ * Determines whether SDL enforces that DRM master is required in order to
+ * initialize the KMSDRM video backend.
  *
- * The DRM subsystem has a concept of a "DRM master" which is a DRM client that
- * has the ability to set planes, set cursor, etc. When SDL is DRM master, it
- * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL
- * is still able to process input and query attributes of attached displays,
- * but it cannot change display state or draw to the screen directly.
+ * The DRM subsystem has a concept of a "DRM master" which is a DRM client
+ * that has the ability to set planes, set cursor, etc. When SDL is DRM
+ * master, it can draw to the screen using the SDL rendering APIs. Without DRM
+ * master, SDL is still able to process input and query attributes of attached
+ * displays, but it cannot change display state or draw to the screen
+ * directly.
  *
- * In some cases, it can be useful to have the KMSDRM backend even if it cannot
- * be used for rendering. An app may want to use SDL for input processing while
- * using another rendering API (such as an MMAL overlay on Raspberry Pi) or
- * using its own code to render to DRM overlays that SDL doesn't support.
+ * In some cases, it can be useful to have the KMSDRM backend even if it
+ * cannot be used for rendering. An app may want to use SDL for input
+ * processing while using another rendering API (such as an MMAL overlay on
+ * Raspberry Pi) or using its own code to render to DRM overlays that SDL
+ * doesn't support.
  *
  * This hint must be set before initializing the video subsystem.
  *
  * This variable can be set to the following values:
- *    "0"       - SDL will allow usage of the KMSDRM backend without DRM master
- *    "1"       - SDL Will require DRM master to use the KMSDRM backend (default)
+ *
+ * - "0": SDL will allow usage of the KMSDRM backend without DRM master
+ * - "1": SDL Will require DRM master to use the KMSDRM backend (default)
  */
 #define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER      "SDL_KMSDRM_REQUIRE_DRM_MASTER"
 
 /**
-  *  \brief  A comma separated list of devices to open as joysticks
-  *
-  *  This variable is currently only used by the Linux joystick driver.
-  */
+ * A comma separated list of devices to open as joysticks
+ *
+ * This variable is currently only used by the Linux joystick driver.
+ */
 #define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE"
 
+
 /**
-  *  \brief  A variable controlling whether joysticks on Linux will always treat 'hat' axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking whether they may be analog.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Only map hat axis inputs to digital hat outputs if the input axes appear to actually be digital (the default)
-  *    "1"       - Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as digital hats
-  */
+ * A variable containing a list of devices and their desired number of haptic
+ * (force feedback) enabled axis.
+ *
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form plus the number of desired axes, e.g.
+ *
+ * `0xAAAA/0xBBBB/1,0xCCCC/0xDDDD/3`
+ *
+ * This hint supports a "wildcard" device that will set the number of haptic
+ * axes on all initialized haptic devices which were not defined explicitly in
+ * this hint.
+ *
+ * `0xFFFF/0xFFFF/1`
+ *
+ * This hint should be set before a controller is opened. The number of haptic
+ * axes won't exceed the number of real axes found on the device.
+ */
+#define SDL_HINT_JOYSTICK_HAPTIC_AXES "SDL_JOYSTICK_HAPTIC_AXES"
+
+/**
+ * A variable controlling whether joysticks on Linux will always treat 'hat'
+ * axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking
+ * whether they may be analog.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Only map hat axis inputs to digital hat outputs if the input axes
+ *   appear to actually be digital (the default)
+ * - "1": Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as
+ *   digital hats
+ */
 #define SDL_HINT_LINUX_DIGITAL_HATS "SDL_LINUX_DIGITAL_HATS"
 
 /**
-  *  \brief  A variable controlling whether digital hats on Linux will apply deadzones to their underlying input axes or use unfiltered values.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Return digital hat values based on unfiltered input axis values
-  *    "1"       - Return digital hat values with deadzones on the input axes taken into account (the default)
-  */
+ * A variable controlling whether digital hats on Linux will apply deadzones
+ * to their underlying input axes or use unfiltered values.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Return digital hat values based on unfiltered input axis values
+ * - "1": Return digital hat values with deadzones on the input axes taken
+ *   into account (the default)
+ */
 #define SDL_HINT_LINUX_HAT_DEADZONES "SDL_LINUX_HAT_DEADZONES"
 
 /**
-  *  \brief  A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Use /dev/input/event*
-  *    "1"       - Use /dev/input/js*
-  *
-  *  By default the /dev/input/event* interfaces are used
-  */
+ * A variable controlling whether to use the classic /dev/input/js* joystick
+ * interface or the newer /dev/input/event* joystick interface on Linux
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use /dev/input/event*
+ * - "1": Use /dev/input/js*
+ *
+ * By default the /dev/input/event* interfaces are used
+ */
 #define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC"
 
 /**
-  *  \brief  A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values.
-  *
-  *  This variable can be set to the following values:
-  *    "0"       - Return unfiltered joystick axis values (the default)
-  *    "1"       - Return axis values with deadzones taken into account
-  */
+ * A variable controlling whether joysticks on Linux adhere to their
+ * HID-defined deadzones or return unfiltered values.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": Return unfiltered joystick axis values (the default)
+ * - "1": Return axis values with deadzones taken into account
+ */
 #define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES"
 
 /**
- *  \brief A variable controlling the default SDL log levels.
+ * A variable controlling the default SDL log levels.
  *
- *  This variable is a comma separated set of category=level tokens that define the default logging levels for SDL applications.
+ * This variable is a comma separated set of category=level tokens that define
+ * the default logging levels for SDL applications.
  *
- *  The category can be a numeric category, one of "app", "error", "assert", "system", "audio", "video", "render", "input", "test", or `*` for any unspecified category.
+ * The category can be a numeric category, one of "app", "error", "assert",
+ * "system", "audio", "video", "render", "input", "test", or `*` for any
+ * unspecified category.
  *
- *  The level can be a numeric level, one of "verbose", "debug", "info", "warn", "error", "critical", or "quiet" to disable that category.
+ * The level can be a numeric level, one of "verbose", "debug", "info",
+ * "warn", "error", "critical", or "quiet" to disable that category.
  *
- *  You can omit the category if you want to set the logging level for all categories.
+ * You can omit the category if you want to set the logging level for all
+ * categories.
  *
- *  If this hint isn't set, the default log levels are equivalent to:
- *  "app=info,assert=warn,test=verbose,*=error"
+ * If this hint isn't set, the default log levels are equivalent to:
+ * "app=info,assert=warn,test=verbose,*=error"
  */
 #define SDL_HINT_LOGGING   "SDL_LOGGING"
 
 /**
-*  \brief  When set don't force the SDL app to become a foreground process
-*
-*  This hint only applies to Mac OS X.
-*
-*/
+ * When set don't force the SDL app to become a foreground process
+ *
+ * This hint only applies to Mac OS X.
+ */
 #define SDL_HINT_MAC_BACKGROUND_APP    "SDL_MAC_BACKGROUND_APP"
 
 /**
- *  \brief A variable that determines whether ctrl+click should generate a right-click event on Mac
+ * A variable that determines whether ctrl+click should generate a right-click
+ * event on Mac
  *
- *  If present, holding ctrl while left clicking will generate a right click
- *  event when on Mac.
+ * If present, holding ctrl while left clicking will generate a right click
+ * event when on Mac.
  */
 #define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK"
 
 /**
- *  \brief   A variable controlling whether dispatching OpenGL context updates should block the dispatching thread until the main thread finishes processing
+ * A variable controlling whether dispatching OpenGL context updates should
+ * block the dispatching thread until the main thread finishes processing
  *
- *  This variable can be set to the following values:
- *    "0"       - Dispatching OpenGL context updates will block the dispatching thread until the main thread finishes processing (default).
- *    "1"       - Dispatching OpenGL context updates will allow the dispatching thread to continue execution.
+ * This variable can be set to the following values:
  *
- *  Generally you want the default, but if you have OpenGL code in a background thread on a Mac, and the main thread
- *  hangs because it's waiting for that background thread, but that background thread is also hanging because it's
- *  waiting for the main thread to do an update, this might fix your issue.
+ * - "0": Dispatching OpenGL context updates will block the dispatching thread
+ *   until the main thread finishes processing (default).
+ * - "1": Dispatching OpenGL context updates will allow the dispatching thread
+ *   to continue execution.
  *
- *  This hint only applies to macOS.
+ * Generally you want the default, but if you have OpenGL code in a background
+ * thread on a Mac, and the main thread hangs because it's waiting for that
+ * background thread, but that background thread is also hanging because it's
+ * waiting for the main thread to do an update, this might fix your issue.
  *
- *  This hint is available since SDL 2.24.0.
+ * This hint only applies to macOS.
  *
+ * This hint is available since SDL 2.24.0.
  */
 #define SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH "SDL_MAC_OPENGL_ASYNC_DISPATCH"
 
 /**
- *  \brief  A variable setting the double click radius, in pixels.
+ * A variable setting the double click radius, in pixels.
  */
 #define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS    "SDL_MOUSE_DOUBLE_CLICK_RADIUS"
 
 /**
- *  \brief  A variable setting the double click time, in milliseconds.
+ * A variable setting the double click time, in milliseconds.
  */
 #define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME    "SDL_MOUSE_DOUBLE_CLICK_TIME"
 
 /**
- *  \brief Allow mouse click events when clicking to focus an SDL window
+ * Allow mouse click events when clicking to focus an SDL window
  *
- *  This variable can be set to the following values:
- *    "0"       - Ignore mouse clicks that activate a window
- *    "1"       - Generate events for mouse clicks that activate a window
+ * This variable can be set to the following values:
  *
- *  By default SDL will ignore mouse clicks that activate a window
+ * - "0": Ignore mouse clicks that activate a window
+ * - "1": Generate events for mouse clicks that activate a window
+ *
+ * By default SDL will ignore mouse clicks that activate a window
  */
 #define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH"
 
 /**
- *  \brief  A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode
+ * A variable setting the speed scale for mouse motion, in floating point,
+ * when the mouse is not in relative mode
  */
 #define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE    "SDL_MOUSE_NORMAL_SPEED_SCALE"
 
 /**
- *  \brief  A variable controlling whether relative mouse mode constrains the mouse to the center of the window
+ * A variable controlling whether relative mouse mode constrains the mouse to
+ * the center of the window
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative mouse mode constrains the mouse to the window
- *    "1"       - Relative mouse mode constrains the mouse to the center of the window
+ * This variable can be set to the following values:
  *
- *  Constraining to the center of the window works better for FPS games and when the
- *  application is running over RDP. Constraining to the whole window works better
- *  for 2D games and increases the chance that the mouse will be in the correct
- *  position when using high DPI mice.
+ * - "0": Relative mouse mode constrains the mouse to the window
+ * - "1": Relative mouse mode constrains the mouse to the center of the window
  *
- *  By default SDL will constrain the mouse to the center of the window
+ * Constraining to the center of the window works better for FPS games and
+ * when the application is running over RDP. Constraining to the whole window
+ * works better for 2D games and increases the chance that the mouse will be
+ * in the correct position when using high DPI mice.
+ *
+ * By default SDL will constrain the mouse to the center of the window
  */
 #define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER    "SDL_MOUSE_RELATIVE_MODE_CENTER"
 
 /**
- *  \brief  A variable controlling whether relative mouse mode is implemented using mouse warping
+ * A variable controlling whether relative mouse mode is implemented using
+ * mouse warping
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative mouse mode uses raw input
- *    "1"       - Relative mouse mode uses mouse warping
+ * This variable can be set to the following values:
  *
- *  By default SDL will use raw input for relative mouse mode
+ * - "0": Relative mouse mode uses raw input
+ * - "1": Relative mouse mode uses mouse warping
+ *
+ * By default SDL will use raw input for relative mouse mode
  */
 #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP    "SDL_MOUSE_RELATIVE_MODE_WARP"
 
 /**
- *  \brief  A variable controlling whether relative mouse motion is affected by renderer scaling
+ * A variable controlling whether relative mouse motion is affected by
+ * renderer scaling
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative motion is unaffected by DPI or renderer's logical size
- *    "1"       - Relative motion is scaled according to DPI scaling and logical size
+ * This variable can be set to the following values:
  *
- *  By default relative mouse deltas are affected by DPI and renderer scaling
+ * - "0": Relative motion is unaffected by DPI or renderer's logical size
+ * - "1": Relative motion is scaled according to DPI scaling and logical size
+ *
+ * By default relative mouse deltas are affected by DPI and renderer scaling
  */
 #define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING"
 
 /**
- *  \brief  A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode
+ * A variable setting the scale for mouse motion, in floating point, when the
+ * mouse is in relative mode
  */
 #define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE    "SDL_MOUSE_RELATIVE_SPEED_SCALE"
 
 /**
- *  \brief  A variable controlling whether the system mouse acceleration curve is used for relative mouse motion.
+ * A variable controlling whether the system mouse acceleration curve is used
+ * for relative mouse motion.
  *
- *  This variable can be set to the following values:
- *    "0"       - Relative mouse motion will be unscaled (the default)
- *    "1"       - Relative mouse motion will be scaled using the system mouse acceleration curve.
+ * This variable can be set to the following values:
  *
- *    If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the system speed scale.
+ * - "0": Relative mouse motion will be unscaled (the default)
+ * - "1": Relative mouse motion will be scaled using the system mouse
+ *   acceleration curve.
+ *
+ * If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the
+ * system speed scale.
  */
 #define SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE    "SDL_MOUSE_RELATIVE_SYSTEM_SCALE"
 
 /**
- *  \brief  A variable controlling whether a motion event should be generated for mouse warping in relative mode.
+ * A variable controlling whether a motion event should be generated for mouse
+ * warping in relative mode.
  *
- *  This variable can be set to the following values:
- *    "0"       - Warping the mouse will not generate a motion event in relative mode
- *    "1"       - Warping the mouse will generate a motion event in relative mode
+ * This variable can be set to the following values:
  *
- *  By default warping the mouse will not generate motion events in relative mode. This avoids the application having to filter out large relative motion due to warping.
+ * - "0": Warping the mouse will not generate a motion event in relative mode
+ * - "1": Warping the mouse will generate a motion event in relative mode
+ *
+ * By default warping the mouse will not generate motion events in relative
+ * mode. This avoids the application having to filter out large relative
+ * motion due to warping.
  */
 #define SDL_HINT_MOUSE_RELATIVE_WARP_MOTION  "SDL_MOUSE_RELATIVE_WARP_MOTION"
 
 /**
- *  \brief  A variable controlling whether the hardware cursor stays visible when relative mode is active.
+ * A variable controlling whether the hardware cursor stays visible when
+ * relative mode is active.
  *
- *  This variable can be set to the following values:
- *    "0"       - The cursor will be hidden while relative mode is active (default)
- *    "1"       - The cursor will remain visible while relative mode is active
+ * This variable can be set to the following values: "0" - The cursor will be
+ * hidden while relative mode is active (default) "1" - The cursor will remain
+ * visible while relative mode is active
  *
- *  Note that for systems without raw hardware inputs, relative mode is implemented using warping, so the hardware cursor will visibly warp between frames if this is enabled on those systems.
+ * Note that for systems without raw hardware inputs, relative mode is
+ * implemented using warping, so the hardware cursor will visibly warp between
+ * frames if this is enabled on those systems.
  */
 #define SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE  "SDL_MOUSE_RELATIVE_CURSOR_VISIBLE"
 
@@ -1438,330 +1679,382 @@
  * A variable controlling whether mouse events should generate synthetic touch
  * events
  *
- *  This variable can be set to the following values:
- *    "0"       - Mouse events will not generate touch events (default for desktop platforms)
- *    "1"       - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS)
+ * This variable can be set to the following values:
+ *
+ * - "0": Mouse events will not generate touch events (default for desktop
+ *   platforms)
+ * - "1": Mouse events will generate touch events (default for mobile
+ *   platforms, such as Android and iOS)
  */
 #define SDL_HINT_MOUSE_TOUCH_EVENTS    "SDL_MOUSE_TOUCH_EVENTS"
 
 /**
- *  \brief  A variable controlling whether the mouse is captured while mouse buttons are pressed
+ * A variable controlling whether the mouse is captured while mouse buttons
+ * are pressed
  *
- *  This variable can be set to the following values:
- *    "0"       - The mouse is not captured while mouse buttons are pressed
- *    "1"       - The mouse is captured while mouse buttons are pressed
+ * This variable can be set to the following values:
  *
- *  By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged
- *  outside the window, the application continues to receive mouse events until the button is
- *  released.
+ * - "0": The mouse is not captured while mouse buttons are pressed
+ * - "1": The mouse is captured while mouse buttons are pressed
+ *
+ * By default the mouse is captured while mouse buttons are pressed so if the
+ * mouse is dragged outside the window, the application continues to receive
+ * mouse events until the button is released.
  */
 #define SDL_HINT_MOUSE_AUTO_CAPTURE    "SDL_MOUSE_AUTO_CAPTURE"
 
 /**
- *  \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
+ * Tell SDL not to catch the SIGINT or SIGTERM signals.
  *
- * This hint only applies to Unix-like platforms, and should set before
- * any calls to SDL_Init()
+ * This hint only applies to Unix-like platforms, and should set before any
+ * calls to SDL_Init()
  *
  * The variable can be set to the following values:
- *   "0"       - SDL will install a SIGINT and SIGTERM handler, and when it
- *               catches a signal, convert it into an SDL_QUIT event.
- *   "1"       - SDL will not install a signal handler at all.
+ *
+ * - "0": SDL will install a SIGINT and SIGTERM handler, and when it catches a
+ *   signal, convert it into an SDL_QUIT event.
+ * - "1": SDL will not install a signal handler at all.
  */
 #define SDL_HINT_NO_SIGNAL_HANDLERS   "SDL_NO_SIGNAL_HANDLERS"
 
 /**
- *  \brief  A variable controlling what driver to use for OpenGL ES contexts.
+ * A variable controlling what driver to use for OpenGL ES contexts.
  *
- *  On some platforms, currently Windows and X11, OpenGL drivers may support
- *  creating contexts with an OpenGL ES profile. By default SDL uses these
- *  profiles, when available, otherwise it attempts to load an OpenGL ES
- *  library, e.g. that provided by the ANGLE project. This variable controls
- *  whether SDL follows this default behaviour or will always load an
- *  OpenGL ES library.
+ * On some platforms, currently Windows and X11, OpenGL drivers may support
+ * creating contexts with an OpenGL ES profile. By default SDL uses these
+ * profiles, when available, otherwise it attempts to load an OpenGL ES
+ * library, e.g. that provided by the ANGLE project. This variable controls
+ * whether SDL follows this default behaviour or will always load an OpenGL ES
+ * library.
  *
- *  Circumstances where this is useful include
- *  - Testing an app with a particular OpenGL ES implementation, e.g ANGLE,
- *    or emulator, e.g. those from ARM, Imagination or Qualcomm.
- *  - Resolving OpenGL ES function addresses at link time by linking with
- *    the OpenGL ES library instead of querying them at run time with
- *    SDL_GL_GetProcAddress().
+ * Circumstances where this is useful include - Testing an app with a
+ * particular OpenGL ES implementation, e.g ANGLE, or emulator, e.g. those
+ * from ARM, Imagination or Qualcomm. - Resolving OpenGL ES function addresses
+ * at link time by linking with the OpenGL ES library instead of querying them
+ * at run time with SDL_GL_GetProcAddress().
  *
- *  Caution: for an application to work with the default behaviour across
- *  different OpenGL drivers it must query the OpenGL ES function
- *  addresses at run time using SDL_GL_GetProcAddress().
+ * Caution: for an application to work with the default behaviour across
+ * different OpenGL drivers it must query the OpenGL ES function addresses at
+ * run time using SDL_GL_GetProcAddress().
  *
- *  This variable is ignored on most platforms because OpenGL ES is native
- *  or not supported.
+ * This variable is ignored on most platforms because OpenGL ES is native or
+ * not supported.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use ES profile of OpenGL, if available. (Default when not set.)
- *    "1"       - Load OpenGL ES library using the default library names.
+ * This variable can be set to the following values:
  *
+ * - "0": Use ES profile of OpenGL, if available. (Default when not set.)
+ * - "1": Load OpenGL ES library using the default library names.
  */
 #define SDL_HINT_OPENGL_ES_DRIVER   "SDL_OPENGL_ES_DRIVER"
 
 /**
- *  \brief  A variable controlling which orientations are allowed on iOS/Android.
+ * A variable controlling which orientations are allowed on iOS/Android.
  *
- *  In some circumstances it is necessary to be able to explicitly control
- *  which UI orientations are allowed.
+ * In some circumstances it is necessary to be able to explicitly control
+ * which UI orientations are allowed.
  *
- *  This variable is a space delimited list of the following values:
- *    "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown"
+ * This variable is a space delimited list of the following values:
+ *
+ * - "LandscapeLeft"
+ * - "LandscapeRight"
+ * - "Portrait"
+ * - "PortraitUpsideDown"
  */
 #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS"
 
 /**
- *  \brief  A variable controlling the use of a sentinel event when polling the event queue
+ * A variable controlling the use of a sentinel event when polling the event
+ * queue
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable poll sentinels
- *    "1"       - Enable poll sentinels
+ * This variable can be set to the following values:
  *
- *  When polling for events, SDL_PumpEvents is used to gather new events from devices.
- *  If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will
- *  become stuck until the new events stop.
- *  This is most noticeable when moving a high frequency mouse.
+ * - "0": Disable poll sentinels
+ * - "1": Enable poll sentinels
  *
- *  By default, poll sentinels are enabled.
+ * When polling for events, SDL_PumpEvents is used to gather new events from
+ * devices. If a device keeps producing new events between calls to
+ * SDL_PumpEvents, a poll loop will become stuck until the new events stop.
+ * This is most noticeable when moving a high frequency mouse.
+ *
+ * By default, poll sentinels are enabled.
  */
 #define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL"
 
 /**
- *  \brief Override for SDL_GetPreferredLocales()
+ * Override for SDL_GetPreferredLocales()
  *
- *  If set, this will be favored over anything the OS might report for the
- *  user's preferred locales. Changing this hint at runtime will not generate
- *  a SDL_LOCALECHANGED event (but if you can change the hint, you can push
- *  your own event, if you want).
+ * If set, this will be favored over anything the OS might report for the
+ * user's preferred locales. Changing this hint at runtime will not generate a
+ * SDL_LOCALECHANGED event (but if you can change the hint, you can push your
+ * own event, if you want).
  *
- *  The format of this hint is a comma-separated list of language and locale,
- *  combined with an underscore, as is a common format: "en_GB". Locale is
- *  optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
+ * The format of this hint is a comma-separated list of language and locale,
+ * combined with an underscore, as is a common format: "en_GB". Locale is
+ * optional: "en". So you might have a list like this: "en_GB,jp,es_PT"
  */
 #define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES"
 
 /**
- *  \brief  A variable describing the content orientation on QtWayland-based platforms.
+ * A variable describing the content orientation on QtWayland-based platforms.
  *
- *  On QtWayland platforms, windows are rotated client-side to allow for custom
- *  transitions. In order to correctly position overlays (e.g. volume bar) and
- *  gestures (e.g. events view, close/minimize gestures), the system needs to
- *  know in which orientation the application is currently drawing its contents.
+ * On QtWayland platforms, windows are rotated client-side to allow for custom
+ * transitions. In order to correctly position overlays (e.g. volume bar) and
+ * gestures (e.g. events view, close/minimize gestures), the system needs to
+ * know in which orientation the application is currently drawing its
+ * contents.
  *
- *  This does not cause the window to be rotated or resized, the application
- *  needs to take care of drawing the content in the right orientation (the
- *  framebuffer is always in portrait mode).
+ * This does not cause the window to be rotated or resized, the application
+ * needs to take care of drawing the content in the right orientation (the
+ * framebuffer is always in portrait mode).
  *
- *  This variable can be one of the following values:
- *    "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape"
+ * This variable can be one of the following values:
  *
- *  Since SDL 2.0.22 this variable accepts a comma-separated list of values above.
+ * - "primary" (default)
+ * - "portrait"
+ * - "landscape"
+ * - "inverted-portrait"
+ * - "inverted-landscape"
+ *
+ * Since SDL 2.0.22 this variable accepts a comma-separated list of values
+ * above.
  */
 #define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION"
 
 /**
- *  \brief  Flags to set on QtWayland windows to integrate with the native window manager.
+ * Flags to set on QtWayland windows to integrate with the native window
+ * manager.
  *
- *  On QtWayland platforms, this hint controls the flags to set on the windows.
- *  For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures.
+ * On QtWayland platforms, this hint controls the flags to set on the windows.
+ * For example, on Sailfish OS "OverridesSystemGestures" disables swipe
+ * gestures.
  *
- *  This variable is a space-separated list of the following values (empty = no flags):
- *    "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager"
+ * This variable is a space-separated list of the following values (empty = no
+ * flags):
+ *
+ * - "OverridesSystemGestures"
+ * - "StaysOnTop"
+ * - "BypassWindowManager"
  */
 #define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS"
 
 /**
- *  \brief  A variable controlling whether the 2D render API is compatible or efficient.
+ * A variable controlling whether the 2D render API is compatible or
+ * efficient.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "0"     - Don't use batching to make rendering more efficient.
- *    "1"     - Use batching, but might cause problems if app makes its own direct OpenGL calls.
+ * - "0": Don't use batching to make rendering more efficient.
+ * - "1": Use batching, but might cause problems if app makes its own direct
+ *   OpenGL calls.
  *
- *  Up to SDL 2.0.9, the render API would draw immediately when requested. Now
- *  it batches up draw requests and sends them all to the GPU only when forced
- *  to (during SDL_RenderPresent, when changing render targets, by updating a
- *  texture that the batch needs, etc). This is significantly more efficient,
- *  but it can cause problems for apps that expect to render on top of the
- *  render API's output. As such, SDL will disable batching if a specific
- *  render backend is requested (since this might indicate that the app is
- *  planning to use the underlying graphics API directly). This hint can
- *  be used to explicitly request batching in this instance. It is a contract
- *  that you will either never use the underlying graphics API directly, or
- *  if you do, you will call SDL_RenderFlush() before you do so any current
- *  batch goes to the GPU before your work begins. Not following this contract
- *  will result in undefined behavior.
+ * Up to SDL 2.0.9, the render API would draw immediately when requested. Now
+ * it batches up draw requests and sends them all to the GPU only when forced
+ * to (during SDL_RenderPresent, when changing render targets, by updating a
+ * texture that the batch needs, etc). This is significantly more efficient,
+ * but it can cause problems for apps that expect to render on top of the
+ * render API's output. As such, SDL will disable batching if a specific
+ * render backend is requested (since this might indicate that the app is
+ * planning to use the underlying graphics API directly). This hint can be
+ * used to explicitly request batching in this instance. It is a contract that
+ * you will either never use the underlying graphics API directly, or if you
+ * do, you will call SDL_RenderFlush() before you do so any current batch goes
+ * to the GPU before your work begins. Not following this contract will result
+ * in undefined behavior.
  */
 #define SDL_HINT_RENDER_BATCHING  "SDL_RENDER_BATCHING"
 
 /**
- *  \brief  A variable controlling how the 2D render API renders lines
+ * A variable controlling how the 2D render API renders lines
  *
- *  This variable can be set to the following values:
- *    "0"     - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20)
- *    "1"     - Use the driver point API using Bresenham's line algorithm (correct, draws many points)
- *    "2"     - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20)
- *    "3"     - Use the driver geometry API (correct, draws thicker diagonal lines)
+ * This variable can be set to the following values:
  *
- *  This variable should be set when the renderer is created.
+ * - "0": Use the default line drawing method (Bresenham's line algorithm as
+ *   of SDL 2.0.20)
+ * - "1": Use the driver point API using Bresenham's line algorithm (correct,
+ *   draws many points)
+ * - "2": Use the driver line API (occasionally misses line endpoints based on
+ *   hardware driver quirks, was the default before 2.0.20)
+ * - "3": Use the driver geometry API (correct, draws thicker diagonal lines)
+ *
+ * This variable should be set when the renderer is created.
  */
 #define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD"
 
 /**
- *  \brief  A variable controlling whether to enable Direct3D 11+'s Debug Layer.
+ * A variable controlling whether to enable Direct3D 11+'s Debug Layer.
  *
- *  This variable does not have any effect on the Direct3D 9 based renderer.
+ * This variable does not have any effect on the Direct3D 9 based renderer.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable Debug Layer use
- *    "1"       - Enable Debug Layer use
+ * This variable can be set to the following values:
  *
- *  By default, SDL does not use Direct3D Debug Layer.
+ * - "0": Disable Debug Layer use
+ * - "1": Enable Debug Layer use
+ *
+ * By default, SDL does not use Direct3D Debug Layer.
  */
 #define SDL_HINT_RENDER_DIRECT3D11_DEBUG    "SDL_RENDER_DIRECT3D11_DEBUG"
 
 /**
- *  \brief  A variable controlling whether the Direct3D device is initialized for thread-safe operations.
+ * A variable controlling whether the Direct3D device is initialized for
+ * thread-safe operations.
  *
- *  This variable can be set to the following values:
- *    "0"       - Thread-safety is not enabled (faster)
- *    "1"       - Thread-safety is enabled
+ * This variable can be set to the following values:
  *
- *  By default the Direct3D device is created with thread-safety disabled.
+ * - "0": Thread-safety is not enabled (faster)
+ * - "1": Thread-safety is enabled
+ *
+ * By default the Direct3D device is created with thread-safety disabled.
  */
 #define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE"
 
 /**
- *  \brief  A variable specifying which render driver to use.
+ * A variable specifying which render driver to use.
  *
- *  If the application doesn't pick a specific renderer to use, this variable
- *  specifies the name of the preferred renderer.  If the preferred renderer
- *  can't be initialized, the normal default renderer is used.
+ * If the application doesn't pick a specific renderer to use, this variable
+ * specifies the name of the preferred renderer. If the preferred renderer
+ * can't be initialized, the normal default renderer is used.
  *
- *  This variable is case insensitive and can be set to the following values:
- *    "direct3d"
- *    "direct3d11"
- *    "direct3d12"
- *    "opengl"
- *    "opengles2"
- *    "opengles"
- *    "metal"
- *    "software"
+ * This variable is case insensitive and can be set to the following values:
  *
- *  The default varies by platform, but it's the first one in the list that
- *  is available on the current platform.
+ * - "direct3d"
+ * - "direct3d11"
+ * - "direct3d12"
+ * - "opengl"
+ * - "opengles2"
+ * - "opengles"
+ * - "metal"
+ * - "software"
+ *
+ * The default varies by platform, but it's the first one in the list that is
+ * available on the current platform.
  */
 #define SDL_HINT_RENDER_DRIVER              "SDL_RENDER_DRIVER"
 
 /**
- *  \brief  A variable controlling the scaling policy for SDL_RenderSetLogicalSize.
+ * A variable controlling the scaling policy for SDL_RenderSetLogicalSize.
  *
- *  This variable can be set to the following values:
- *    "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen
- *    "1" or "overscan"  - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen
+ * This variable can be set to the following values:
  *
- *  By default letterbox is used
+ * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on
+ * screen "1" or "overscan" - Will zoom the rendering so it fills the entire
+ * screen, allowing edges to be drawn offscreen
+ *
+ * By default letterbox is used
  */
 #define SDL_HINT_RENDER_LOGICAL_SIZE_MODE       "SDL_RENDER_LOGICAL_SIZE_MODE"
 
 /**
- *  \brief  A variable controlling whether the OpenGL render driver uses shaders if they are available.
+ * A variable controlling whether the OpenGL render driver uses shaders if
+ * they are available.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable shaders
- *    "1"       - Enable shaders
+ * This variable can be set to the following values:
  *
- *  By default shaders are used if OpenGL supports them.
+ * - "0": Disable shaders
+ * - "1": Enable shaders
+ *
+ * By default shaders are used if OpenGL supports them.
  */
 #define SDL_HINT_RENDER_OPENGL_SHADERS      "SDL_RENDER_OPENGL_SHADERS"
 
 /**
- *  \brief  A variable controlling the scaling quality
+ * A variable controlling the scaling quality
  *
- *  This variable can be set to the following values:
- *    "0" or "nearest" - Nearest pixel sampling
- *    "1" or "linear"  - Linear filtering (supported by OpenGL and Direct3D)
- *    "2" or "best"    - Currently this is the same as "linear"
+ * This variable can be set to the following values:
  *
- *  By default nearest pixel sampling is used
+ * - "0" or "nearest": Nearest pixel sampling
+ * - "1" or "linear": Linear filtering (supported by OpenGL and Direct3D)
+ * - "2" or "best": Currently this is the same as "linear"
+ *
+ * By default nearest pixel sampling is used
  */
 #define SDL_HINT_RENDER_SCALE_QUALITY       "SDL_RENDER_SCALE_QUALITY"
 
 /**
- *  \brief  A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing.
+ * A variable controlling whether updates to the SDL screen surface should be
+ * synchronized with the vertical refresh, to avoid tearing.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable vsync
- *    "1"       - Enable vsync
+ * This variable can be set to the following values:
  *
- *  By default SDL does not sync screen surface updates with vertical refresh.
+ * - "0": Disable vsync
+ * - "1": Enable vsync
+ *
+ * By default SDL does not sync screen surface updates with vertical refresh.
  */
 #define SDL_HINT_RENDER_VSYNC               "SDL_RENDER_VSYNC"
 
 /**
- *  \brief  A variable controlling whether the Metal render driver select low power device over default one
+ * A variable controlling whether the Metal render driver select low power
+ * device over default one
  *
- *  This variable can be set to the following values:
- *    "0"       - Use the prefered OS device
- *    "1"       - Select a low power one
+ * This variable can be set to the following values:
  *
- *  By default the prefered OS device is used.
+ * - "0": Use the prefered OS device
+ * - "1": Select a low power one
+ *
+ * By default the prefered OS device is used.
  */
 #define SDL_HINT_RENDER_METAL_PREFER_LOW_POWER_DEVICE "SDL_RENDER_METAL_PREFER_LOW_POWER_DEVICE"
 
 /**
- *  A variable containing a list of ROG gamepad capable mice.
+ * A variable containing a list of ROG gamepad capable mice.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_ROG_GAMEPAD_MICE "SDL_ROG_GAMEPAD_MICE"
 
 /**
- *  A variable containing a list of devices that are not ROG gamepad capable mice. This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list.
+ * A variable containing a list of devices that are not ROG gamepad capable
+ * mice.
  *
- *  The format of the string is a comma separated list of USB VID/PID pairs
- *  in hexadecimal form, e.g.
+ * This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list.
  *
- *      0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ * The format of the string is a comma separated list of USB VID/PID pairs in
+ * hexadecimal form, e.g.
  *
- *  The variable can also take the form of @file, in which case the named
- *  file will be loaded and interpreted as the value of the variable.
+ * 0xAAAA/0xBBBB,0xCCCC/0xDDDD
+ *
+ * The variable can also take the form of @file, in which case the named file
+ * will be loaded and interpreted as the value of the variable.
  */
 #define SDL_HINT_ROG_GAMEPAD_MICE_EXCLUDED "SDL_ROG_GAMEPAD_MICE_EXCLUDED"
 
 /**
- *  \brief  A variable controlling if VSYNC is automatically disable if doesn't reach the enough FPS
+ * A variable controlling if VSYNC is automatically disable if doesn't reach
+ * the enough FPS
  *
- *  This variable can be set to the following values:
- *    "0"       - It will be using VSYNC as defined in the main flag. Default
- *    "1"       - If VSYNC was previously enabled, then it will disable VSYNC if doesn't reach enough speed
+ * This variable can be set to the following values:
  *
- *  By default SDL does not enable the automatic VSYNC
+ * - "0": It will be using VSYNC as defined in the main flag. Default
+ * - "1": If VSYNC was previously enabled, then it will disable VSYNC if
+ *   doesn't reach enough speed
+ *
+ * By default SDL does not enable the automatic VSYNC
  */
 #define SDL_HINT_PS2_DYNAMIC_VSYNC    "SDL_PS2_DYNAMIC_VSYNC"
 
 /**
- * \brief A variable to control whether the return key on the soft keyboard
- *        should hide the soft keyboard on Android and iOS.
+ * A variable to control whether the return key on the soft keyboard should
+ * hide the soft keyboard on Android and iOS.
  *
  * The variable can be set to the following values:
- *   "0"       - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default)
- *   "1"       - The return key will hide the keyboard.
  *
- * The value of this hint is used at runtime, so it can be changed at any time.
+ * - "0": The return key will be handled as a key event. This is the behaviour
+ *   of SDL <= 2.0.3. (default)
+ * - "1": The return key will hide the keyboard.
+ *
+ * The value of this hint is used at runtime, so it can be changed at any
+ * time.
  */
 #define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME"
 
 /**
- * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI
+ * Tell SDL which Dispmanx layer to use on a Raspberry PI
  *
  * Also known as Z-order. The variable can take a negative or positive value.
  * The default is 10000.
@@ -1769,7 +2062,7 @@
 #define SDL_HINT_RPI_VIDEO_LAYER           "SDL_RPI_VIDEO_LAYER"
 
 /**
- *  \brief Specify an "activity name" for screensaver inhibition.
+ * Specify an "activity name" for screensaver inhibition.
  *
  * Some platforms, notably Linux desktops, list the applications which are
  * inhibiting the screensaver or other power-saving features.
@@ -1778,7 +2071,7 @@
  * SDL_DisableScreenSaver() is used (or the screensaver is automatically
  * disabled). The contents of this hint are used when the screensaver is
  * disabled. You should use a string that describes what your program is doing
- * (and, therefore, why the screensaver is disabled).  For example, "Playing a
+ * (and, therefore, why the screensaver is disabled). For example, "Playing a
  * game" or "Watching a video".
  *
  * Setting this to "" or leaving it unset will have SDL use a reasonable
@@ -1789,125 +2082,140 @@
 #define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME"
 
 /**
- *  \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime.
+ * Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as
+ * realtime.
  *
- *  On some platforms, like Linux, a realtime priority thread may be subject to restrictions
- *  that require special handling by the application. This hint exists to let SDL know that
- *  the app is prepared to handle said restrictions.
+ * On some platforms, like Linux, a realtime priority thread may be subject to
+ * restrictions that require special handling by the application. This hint
+ * exists to let SDL know that the app is prepared to handle said
+ * restrictions.
  *
- *  On Linux, SDL will apply the following configuration to any thread that becomes realtime:
- *   * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy,
- *   * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
- *     * Exceeding this limit will result in the kernel sending SIGKILL to the app,
- *     * Refer to the man pages for more information.
+ * On Linux, SDL will apply the following configuration to any thread that
+ * becomes realtime:
  *
- *  This variable can be set to the following values:
- *    "0"       - default platform specific behaviour
- *    "1"       - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy
+ * - The SCHED_RESET_ON_FORK bit will be set on the scheduling policy.
+ * - An RLIMIT_RTTIME budget will be configured to the rtkit specified limit.
+ * - Exceeding this limit will result in the kernel sending SIGKILL to the
+ *   app.
+ *
+ * Refer to the man pages for more information.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": default platform specific behaviour
+ * - "1": Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling
+ *   policy
  */
 #define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL"
 
 /**
-*  \brief  A string specifying additional information to use with SDL_SetThreadPriority.
-*
-*  By default SDL_SetThreadPriority will make appropriate system changes in order to
-*  apply a thread priority.  For example on systems using pthreads the scheduler policy
-*  is changed automatically to a policy that works well with a given priority.
-*  Code which has specific requirements can override SDL's default behavior with this hint.
-*
-*  pthread hint values are "current", "other", "fifo" and "rr".
-*  Currently no other platform hint values are defined but may be in the future.
-*
-*  \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro
-*  configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME
-*  after calling SDL_SetThreadPriority().
-*/
+ * A string specifying additional information to use with
+ * SDL_SetThreadPriority.
+ *
+ * By default SDL_SetThreadPriority will make appropriate system changes in
+ * order to apply a thread priority. For example on systems using pthreads the
+ * scheduler policy is changed automatically to a policy that works well with
+ * a given priority. Code which has specific requirements can override SDL's
+ * default behavior with this hint.
+ *
+ * pthread hint values are "current", "other", "fifo" and "rr". Currently no
+ * other platform hint values are defined but may be in the future.
+ */
 #define SDL_HINT_THREAD_PRIORITY_POLICY         "SDL_THREAD_PRIORITY_POLICY"
 
 /**
-*  \brief  A string specifying SDL's threads stack size in bytes or "0" for the backend's default size
-*
-*  Use this hint in case you need to set SDL's threads stack size to other than the default.
-*  This is specially useful if you build SDL against a non glibc libc library (such as musl) which
-*  provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses).
-*  Support for this hint is currently available only in the pthread, Windows, and PSP backend.
-*
-*  Instead of this hint, in 2.0.9 and later, you can use
-*  SDL_CreateThreadWithStackSize(). This hint only works with the classic
-*  SDL_CreateThread().
-*/
+ * A string specifying SDL's threads stack size in bytes or "0" for the
+ * backend's default size
+ *
+ * Use this hint in case you need to set SDL's threads stack size to other
+ * than the default. This is specially useful if you build SDL against a non
+ * glibc libc library (such as musl) which provides a relatively small default
+ * thread stack size (a few kilobytes versus the default 8MB glibc uses).
+ * Support for this hint is currently available only in the pthread, Windows,
+ * and PSP backend.
+ *
+ * Instead of this hint, in 2.0.9 and later, you can use
+ * SDL_CreateThreadWithStackSize(). This hint only works with the classic
+ * SDL_CreateThread().
+ */
 #define SDL_HINT_THREAD_STACK_SIZE              "SDL_THREAD_STACK_SIZE"
 
 /**
- *  \brief A variable that controls the timer resolution, in milliseconds.
+ * A variable that controls the timer resolution, in milliseconds.
  *
- *  The higher resolution the timer, the more frequently the CPU services
- *  timer interrupts, and the more precise delays are, but this takes up
- *  power and CPU time.  This hint is only used on Windows.
+ * The higher resolution the timer, the more frequently the CPU services timer
+ * interrupts, and the more precise delays are, but this takes up power and
+ * CPU time. This hint is only used on Windows.
  *
- *  See this blog post for more information:
- *  http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
+ * See this blog post for more information:
+ * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
  *
- *  If this variable is set to "0", the system timer resolution is not set.
+ * If this variable is set to "0", the system timer resolution is not set.
  *
- *  The default value is "1". This hint may be set at any time.
+ * The default value is "1". This hint may be set at any time.
  */
 #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION"
 
 /**
- *  \brief  A variable controlling whether touch events should generate synthetic mouse events
+ * A variable controlling whether touch events should generate synthetic mouse
+ * events
  *
- *  This variable can be set to the following values:
- *    "0"       - Touch events will not generate mouse events
- *    "1"       - Touch events will generate mouse events
+ * This variable can be set to the following values:
  *
- *  By default SDL will generate mouse events for touch events
+ * - "0": Touch events will not generate mouse events
+ * - "1": Touch events will generate mouse events
+ *
+ * By default SDL will generate mouse events for touch events
  */
 #define SDL_HINT_TOUCH_MOUSE_EVENTS    "SDL_TOUCH_MOUSE_EVENTS"
 
 /**
- *  \brief  A variable controlling which touchpad should generate synthetic mouse events
+ * A variable controlling which touchpad should generate synthetic mouse
+ * events
  *
- *  This variable can be set to the following values:
- *    "0"       - Only front touchpad should generate mouse events. Default
- *    "1"       - Only back touchpad should generate mouse events.
- *    "2"       - Both touchpads should generate mouse events.
+ * This variable can be set to the following values:
  *
- *  By default SDL will generate mouse events for all touch devices
+ * - "0": Only front touchpad should generate mouse events. Default
+ * - "1": Only back touchpad should generate mouse events.
+ * - "2": Both touchpads should generate mouse events.
+ *
+ * By default SDL will generate mouse events for all touch devices
  */
 #define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE    "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE"
 
 /**
- *  \brief  A variable controlling whether the Android / tvOS remotes
- *  should be listed as joystick devices, instead of sending keyboard events.
+ * A variable controlling whether the Android / tvOS remotes should be listed
+ * as joystick devices, instead of sending keyboard events.
  *
- *  This variable can be set to the following values:
- *    "0"       - Remotes send enter/escape/arrow key events
- *    "1"       - Remotes are available as 2 axis, 2 button joysticks (the default).
+ * This variable can be set to the following values:
+ *
+ * - "0": Remotes send enter/escape/arrow key events
+ * - "1": Remotes are available as 2 axis, 2 button joysticks (the default).
  */
 #define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK"
 
 /**
- *  \brief  A variable controlling whether the screensaver is enabled.
+ * A variable controlling whether the screensaver is enabled.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable screensaver
- *    "1"       - Enable screensaver
+ * This variable can be set to the following values:
  *
- *  By default SDL will disable the screensaver.
+ * - "0": Disable screensaver
+ * - "1": Enable screensaver
+ *
+ * By default SDL will disable the screensaver.
  */
 #define SDL_HINT_VIDEO_ALLOW_SCREENSAVER    "SDL_VIDEO_ALLOW_SCREENSAVER"
 
 /**
- * \brief Tell the video driver that we only want a double buffer.
+ * Tell the video driver that we only want a double buffer.
  *
  * By default, most lowlevel 2D APIs will use a triple buffer scheme that
  * wastes no CPU time on waiting for vsync after issuing a flip, but
  * introduces a frame of latency. On the other hand, using a double buffer
  * scheme instead is recommended for cases where low latency is an important
- * factor because we save a whole frame of latency.
- * We do so by waiting for vsync immediately after issuing a flip, usually just
- * after eglSwapBuffers call in the backend's *_SwapWindow function.
+ * factor because we save a whole frame of latency. We do so by waiting for
+ * vsync immediately after issuing a flip, usually just after eglSwapBuffers
+ * call in the backend's *_SwapWindow function.
  *
  * Since it's driver-specific, it's only supported where possible and
  * implemented. Currently supported the following drivers:
@@ -1919,499 +2227,570 @@
 #define SDL_HINT_VIDEO_DOUBLE_BUFFER      "SDL_VIDEO_DOUBLE_BUFFER"
 
 /**
- * \brief A variable controlling whether the EGL window is allowed to be
- * composited as transparent, rather than opaque.
+ * A variable controlling whether the EGL window is allowed to be composited
+ * as transparent, rather than opaque.
  *
  * Most window systems will always render windows opaque, even if the surface
- * format has an alpha channel. This is not always true, however, so by default
- * SDL will try to enforce opaque composition. To override this behavior, you
- * can set this hint to "1".
+ * format has an alpha channel. This is not always true, however, so by
+ * default SDL will try to enforce opaque composition. To override this
+ * behavior, you can set this hint to "1".
  */
 #define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY"
 
 /**
- * \brief A variable controlling whether the graphics context is externally managed.
+ * A variable controlling whether the graphics context is externally managed.
  *
  * This variable can be set to the following values:
- *  "0"         - SDL will manage graphics contexts that are attached to windows.
- *  "1"         - Disable graphics context management on windows.
  *
- * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the
- * context will be automatically saved and restored when pausing the application. Additionally, some
- * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
- * behavior, which is desireable when the application manages the graphics context, such as
- * an externally managed OpenGL context or attaching a Vulkan surface to the window.
+ * - "0": SDL will manage graphics contexts that are attached to windows.
+ * - "1": Disable graphics context management on windows.
+ *
+ * By default SDL will manage OpenGL contexts in certain situations. For
+ * example, on Android the context will be automatically saved and restored
+ * when pausing the application. Additionally, some platforms will assume
+ * usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
+ * behavior, which is desireable when the application manages the graphics
+ * context, such as an externally managed OpenGL context or attaching a Vulkan
+ * surface to the window.
  */
 #define SDL_HINT_VIDEO_EXTERNAL_CONTEXT    "SDL_VIDEO_EXTERNAL_CONTEXT"
 
 /**
- *  \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
+ * If set to 1, then do not allow high-DPI windows.
+ *
+ * ("Retina" on Mac and iOS)
  */
 #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED"
 
 /**
- *  \brief  A variable that dictates policy for fullscreen Spaces on Mac OS X.
+ * A variable that dictates policy for fullscreen Spaces on Mac OS X.
  *
- *  This hint only applies to Mac OS X.
+ * This hint only applies to Mac OS X.
  *
- *  The variable can be set to the following values:
- *    "0"       - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
- *                SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
- *                button on their titlebars).
- *    "1"       - Enable Spaces support (FULLSCREEN_DESKTOP will use them and
- *                SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
- *                button on their titlebars).
+ * The variable can be set to the following values:
  *
- *  The default value is "1". This hint must be set before any windows are created.
+ * - "0": Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
+ *   SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" button on their
+ *   titlebars).
+ * - "1": Enable Spaces support (FULLSCREEN_DESKTOP will use them and
+ *   SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" button on their
+ *   titlebars).
+ *
+ * The default value is "1". This hint must be set before any windows are
+ * created.
  */
 #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES    "SDL_VIDEO_MAC_FULLSCREEN_SPACES"
 
 /**
- *  \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false.
- *  \warning  Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're
- *            seeing if "true" causes more problems than it solves in modern times.
+ * Minimize your SDL_Window if it loses key focus when in fullscreen mode.
  *
+ * Defaults to false.
  */
 #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS   "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS"
 
 /**
- *  \brief  A variable controlling whether the libdecor Wayland backend is allowed to be used.
+ * A variable controlling whether the libdecor Wayland backend is allowed to
+ * be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - libdecor use is disabled.
- *    "1"       - libdecor use is enabled (default).
+ * This variable can be set to the following values:
  *
- *  libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.
+ * - "0": libdecor use is disabled.
+ * - "1": libdecor use is enabled (default).
+ *
+ * libdecor is used over xdg-shell when xdg-decoration protocol is
+ * unavailable.
  */
 #define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR"
 
 /**
- *  \brief  A variable controlling whether the libdecor Wayland backend is preferred over native decrations.
+ * A variable controlling whether the libdecor Wayland backend is preferred
+ * over native decorations.
  *
- *  When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is
- *  available. (Note that, by default, libdecor will use xdg-decoration itself if available).
+ * When this hint is set, libdecor will be used to provide window decorations,
+ * even if xdg-decoration is available. (Note that, by default, libdecor will
+ * use xdg-decoration itself if available).
  *
- *  This variable can be set to the following values:
- *    "0"       - libdecor is enabled only if server-side decorations are unavailable.
- *    "1"       - libdecor is always enabled if available.
+ * This variable can be set to the following values:
  *
- *  libdecor is used over xdg-shell when xdg-decoration protocol is unavailable.
+ * - "0": libdecor is enabled only if server-side decorations are unavailable.
+ * - "1": libdecor is always enabled if available.
+ *
+ * libdecor is used over xdg-shell when xdg-decoration protocol is
+ * unavailable.
  */
 #define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR"
 
 /**
- *  \brief  A variable controlling whether video mode emulation is enabled under Wayland.
+ * A variable controlling whether video mode emulation is enabled under
+ * Wayland.
  *
- *  When this hint is set, a standard set of emulated CVT video modes will be exposed for use by the application.
- *  If it is disabled, the only modes exposed will be the logical desktop size and, in the case of a scaled
- *  desktop, the native display resolution.
+ * When this hint is set, a standard set of emulated CVT video modes will be
+ * exposed for use by the application. If it is disabled, the only modes
+ * exposed will be the logical desktop size and, in the case of a scaled
+ * desktop, the native display resolution.
  *
- *  This variable can be set to the following values:
- *    "0"       - Video mode emulation is disabled.
- *    "1"       - Video mode emulation is enabled.
+ * This variable can be set to the following values:
  *
- *  By default video mode emulation is enabled.
+ * - "0": Video mode emulation is disabled.
+ * - "1": Video mode emulation is enabled.
+ *
+ * By default video mode emulation is enabled.
  */
 #define SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION "SDL_VIDEO_WAYLAND_MODE_EMULATION"
 
 /**
- *  \brief  Enable or disable mouse pointer warp emulation, needed by some older games.
+ * Enable or disable mouse pointer warp emulation, needed by some older games.
  *
- *  When this hint is set, any SDL will emulate mouse warps using relative mouse mode.
- *  This is required for some older games (such as Source engine games), which warp the
- *  mouse to the centre of the screen rather than using relative mouse motion. Note that
- *  relative mouse mode may have different mouse acceleration behaviour than pointer warps.
+ * When this hint is set, any SDL will emulate mouse warps using relative
+ * mouse mode. This is required for some older games (such as Source engine
+ * games), which warp the mouse to the centre of the screen rather than using
+ * relative mouse motion. Note that relative mouse mode may have different
+ * mouse acceleration behaviour than pointer warps.
  *
- *  This variable can be set to the following values:
- *    "0"       - All mouse warps fail, as mouse warping is not available under wayland.
- *    "1"       - Some mouse warps will be emulated by forcing relative mouse mode.
+ * This variable can be set to the following values:
  *
- *  If not set, this is automatically enabled unless an application uses relative mouse
- *  mode directly.
+ * - "0": All mouse warps fail, as mouse warping is not available under
+ *   wayland.
+ * - "1": Some mouse warps will be emulated by forcing relative mouse mode.
+ *
+ * If not set, this is automatically enabled unless an application uses
+ * relative mouse mode directly.
  */
 #define SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP "SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP"
 
 /**
-*  \brief  A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
-*
-*  If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has
-*  SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly
-*  created SDL_Window:
-*
-*  1. Its pixel format will be set to the same pixel format as this SDL_Window.  This is
-*  needed for example when sharing an OpenGL context across multiple windows.
-*
-*  2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for
-*  OpenGL rendering.
-*
-*  This variable can be set to the following values:
-*    The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should
-*    share a pixel format with.
-*/
+ * A variable that is the address of another SDL_Window* (as a hex string
+ * formatted with "%p").
+ *
+ * If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is
+ * set to has SDL_WINDOW_OPENGL set (and running on WGL only, currently), then
+ * two things will occur on the newly created SDL_Window:
+ *
+ * 1. Its pixel format will be set to the same pixel format as this
+ * SDL_Window. This is needed for example when sharing an OpenGL context
+ * across multiple windows.
+ *
+ * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be
+ * used for OpenGL rendering.
+ *
+ * This variable can be set to the following values: The address (as a string
+ * "%p") of the SDL_Window* that new windows created with
+ * SDL_CreateWindowFrom() should share a pixel format with.
+ */
 #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT    "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT"
 
 /**
- *  \brief  When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL.
+ * When calling SDL_CreateWindowFrom(), make the window compatible with
+ * OpenGL.
  *
  * This variable can be set to the following values:
- * "0" - Don't add any graphics flags to the SDL_WindowFlags
- * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags
  *
+ * - "0": Don't add any graphics flags to the SDL_WindowFlags
+ * - "1": Add SDL_WINDOW_OPENGL to the SDL_WindowFlags
+ *
  * By default SDL will not make the foreign window compatible with OpenGL.
  */
 #define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL"
 
 /**
- *  \brief  When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan.
+ * When calling SDL_CreateWindowFrom(), make the window compatible with
+ * Vulkan.
  *
  * This variable can be set to the following values:
- * "0" - Don't add any graphics flags to the SDL_WindowFlags
- * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags
  *
+ * - "0": Don't add any graphics flags to the SDL_WindowFlags
+ * - "1": Add SDL_WINDOW_VULKAN to the SDL_WindowFlags
+ *
  * By default SDL will not make the foreign window compatible with Vulkan.
  */
 #define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN"
 
 /**
-*  \brief  A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
-*
-*  SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It
-*  can use two different sets of binaries, those compiled by the user from source
-*  or those provided by the Chrome browser. In the later case, these binaries require
-*  that SDL loads a DLL providing the shader compiler.
-*
-*  This variable can be set to the following values:
-*    "d3dcompiler_46.dll" - default, best for Vista or later.
-*    "d3dcompiler_43.dll" - for XP support.
-*    "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.
-*
-*/
+ * A variable specifying which shader compiler to preload when using the
+ * Chrome ANGLE binaries
+ *
+ * SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It can
+ * use two different sets of binaries, those compiled by the user from source
+ * or those provided by the Chrome browser. In the later case, these binaries
+ * require that SDL loads a DLL providing the shader compiler.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "d3dcompiler_46.dll: default, best for Vista or later.
+ * - "d3dcompiler_43.dll: for XP support.
+ * - "none": do not load any library, useful if you compiled ANGLE from source
+ *   and included the compiler in your binaries.
+ */
 #define SDL_HINT_VIDEO_WIN_D3DCOMPILER              "SDL_VIDEO_WIN_D3DCOMPILER"
 
 /**
- * \brief A variable controlling whether X11 should use GLX or EGL by default
+ * A variable controlling whether X11 should use GLX or EGL by default
  *
  * This variable can be set to the following values:
- * "0" - Use GLX
- * "1" - Use EGL
  *
+ * - "0": Use GLX
+ * - "1": Use EGL
+ *
  * By default SDL will use GLX when both are present.
  */
 #define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL"
 
 /**
- * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used.
+ * A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint
+ * should be used.
  *
  * This variable can be set to the following values:
- * "0" - Disable _NET_WM_BYPASS_COMPOSITOR
- * "1" - Enable _NET_WM_BYPASS_COMPOSITOR
  *
- * By default SDL will use _NET_WM_BYPASS_COMPOSITOR
+ * - "0": Disable _NET_WM_BYPASS_COMPOSITOR
+ * - "1": Enable _NET_WM_BYPASS_COMPOSITOR
  *
+ * By default SDL will use _NET_WM_BYPASS_COMPOSITOR
  */
 #define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR"
 
 /**
- *  \brief  A variable controlling whether the X11 _NET_WM_PING protocol should be supported.
+ * A variable controlling whether the X11 _NET_WM_PING protocol should be
+ * supported.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable _NET_WM_PING
- *    "1"       - Enable _NET_WM_PING
+ * This variable can be set to the following values:
  *
- *  By default SDL will use _NET_WM_PING, but for applications that know they
- *  will not always be able to respond to ping requests in a timely manner they can
- *  turn it off to avoid the window manager thinking the app is hung.
- *  The hint is checked in CreateWindow.
+ * - "0": Disable _NET_WM_PING
+ * - "1": Enable _NET_WM_PING
+ *
+ * By default SDL will use _NET_WM_PING, but for applications that know they
+ * will not always be able to respond to ping requests in a timely manner they
+ * can turn it off to avoid the window manager thinking the app is hung. The
+ * hint is checked in CreateWindow.
  */
 #define SDL_HINT_VIDEO_X11_NET_WM_PING      "SDL_VIDEO_X11_NET_WM_PING"
 
 /**
- *  \brief  A variable forcing the visual ID chosen for new X11 windows
- *
+ * A variable forcing the visual ID chosen for new X11 windows
  */
 #define SDL_HINT_VIDEO_X11_WINDOW_VISUALID      "SDL_VIDEO_X11_WINDOW_VISUALID"
 
 /**
- *  \brief  A no-longer-used variable controlling whether the X11 Xinerama extension should be used.
+ * A no-longer-used variable controlling whether the X11 Xinerama extension
+ * should be used.
  *
- * Before SDL 2.0.24, this would let apps and users disable Xinerama support on X11.
- *  Now SDL never uses Xinerama, and does not check for this hint at all.
- *  The preprocessor define is left here for source compatibility.
+ * Before SDL 2.0.24, this would let apps and users disable Xinerama support
+ * on X11. Now SDL never uses Xinerama, and does not check for this hint at
+ * all. The preprocessor define is left here for source compatibility.
  */
 #define SDL_HINT_VIDEO_X11_XINERAMA         "SDL_VIDEO_X11_XINERAMA"
 
 /**
- *  \brief  A variable controlling whether the X11 XRandR extension should be used.
+ * A variable controlling whether the X11 XRandR extension should be used.
  *
- *  This variable can be set to the following values:
- *    "0"       - Disable XRandR
- *    "1"       - Enable XRandR
+ * This variable can be set to the following values:
  *
- *  By default SDL will use XRandR.
+ * - "0": Disable XRandR
+ * - "1": Enable XRandR
+ *
+ * By default SDL will use XRandR.
  */
 #define SDL_HINT_VIDEO_X11_XRANDR           "SDL_VIDEO_X11_XRANDR"
 
 /**
- *  \brief  A no-longer-used variable controlling whether the X11 VidMode extension should be used.
+ * A no-longer-used variable controlling whether the X11 VidMode extension
+ * should be used.
  *
- * Before SDL 2.0.24, this would let apps and users disable XVidMode support on X11.
- *  Now SDL never uses XVidMode, and does not check for this hint at all.
- *  The preprocessor define is left here for source compatibility.
+ * Before SDL 2.0.24, this would let apps and users disable XVidMode support
+ * on X11. Now SDL never uses XVidMode, and does not check for this hint at
+ * all. The preprocessor define is left here for source compatibility.
  */
 #define SDL_HINT_VIDEO_X11_XVIDMODE         "SDL_VIDEO_X11_XVIDMODE"
 
 /**
- *  \brief  Controls how the fact chunk affects the loading of a WAVE file.
+ * Controls how the fact chunk affects the loading of a WAVE file.
  *
- *  The fact chunk stores information about the number of samples of a WAVE
- *  file. The Standards Update from Microsoft notes that this value can be used
- *  to 'determine the length of the data in seconds'. This is especially useful
- *  for compressed formats (for which this is a mandatory chunk) if they produce
- *  multiple sample frames per block and truncating the block is not allowed.
- *  The fact chunk can exactly specify how many sample frames there should be
- *  in this case.
+ * The fact chunk stores information about the number of samples of a WAVE
+ * file. The Standards Update from Microsoft notes that this value can be used
+ * to 'determine the length of the data in seconds'. This is especially useful
+ * for compressed formats (for which this is a mandatory chunk) if they
+ * produce multiple sample frames per block and truncating the block is not
+ * allowed. The fact chunk can exactly specify how many sample frames there
+ * should be in this case.
  *
- *  Unfortunately, most application seem to ignore the fact chunk and so SDL
- *  ignores it by default as well.
+ * Unfortunately, most application seem to ignore the fact chunk and so SDL
+ * ignores it by default as well.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "truncate"    - Use the number of samples to truncate the wave data if
- *                    the fact chunk is present and valid
- *    "strict"      - Like "truncate", but raise an error if the fact chunk
- *                    is invalid, not present for non-PCM formats, or if the
- *                    data chunk doesn't have that many samples
- *    "ignorezero"  - Like "truncate", but ignore fact chunk if the number of
- *                    samples is zero
- *    "ignore"      - Ignore fact chunk entirely (default)
+ * - "truncate": Use the number of samples to truncate the wave data if the
+ *   fact chunk is present and valid
+ * - "strict": Like "truncate", but raise an error if the fact chunk is
+ *   invalid, not present for non-PCM formats, or if the data chunk doesn't
+ *   have that many samples
+ * - "ignorezero": Like "truncate", but ignore fact chunk if the number of
+ *   samples is zero
+ * - "ignore": Ignore fact chunk entirely (default)
  */
 #define SDL_HINT_WAVE_FACT_CHUNK   "SDL_WAVE_FACT_CHUNK"
 
 /**
- *  \brief  Controls how the size of the RIFF chunk affects the loading of a WAVE file.
+ * Controls how the size of the RIFF chunk affects the loading of a WAVE file.
  *
- *  The size of the RIFF chunk (which includes all the sub-chunks of the WAVE
- *  file) is not always reliable. In case the size is wrong, it's possible to
- *  just ignore it and step through the chunks until a fixed limit is reached.
+ * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE
+ * file) is not always reliable. In case the size is wrong, it's possible to
+ * just ignore it and step through the chunks until a fixed limit is reached.
  *
- *  Note that files that have trailing data unrelated to the WAVE file or
- *  corrupt files may slow down the loading process without a reliable boundary.
- *  By default, SDL stops after 10000 chunks to prevent wasting time. Use the
- *  environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.
+ * Note that files that have trailing data unrelated to the WAVE file or
+ * corrupt files may slow down the loading process without a reliable
+ * boundary. By default, SDL stops after 10000 chunks to prevent wasting time.
+ * Use the environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "force"        - Always use the RIFF chunk size as a boundary for the chunk search
- *    "ignorezero"   - Like "force", but a zero size searches up to 4 GiB (default)
- *    "ignore"       - Ignore the RIFF chunk size and always search up to 4 GiB
- *    "maximum"      - Search for chunks until the end of file (not recommended)
+ * - "force": Always use the RIFF chunk size as a boundary for the chunk
+ *   search
+ * - "ignorezero": Like "force", but a zero size searches up to 4 GiB
+ *   (default)
+ * - "ignore": Ignore the RIFF chunk size and always search up to 4 GiB
+ * - "maximum": Search for chunks until the end of file (not recommended)
  */
 #define SDL_HINT_WAVE_RIFF_CHUNK_SIZE   "SDL_WAVE_RIFF_CHUNK_SIZE"
 
 /**
- *  \brief  Controls how a truncated WAVE file is handled.
+ * Controls how a truncated WAVE file is handled.
  *
- *  A WAVE file is considered truncated if any of the chunks are incomplete or
- *  the data chunk size is not a multiple of the block size. By default, SDL
- *  decodes until the first incomplete block, as most applications seem to do.
+ * A WAVE file is considered truncated if any of the chunks are incomplete or
+ * the data chunk size is not a multiple of the block size. By default, SDL
+ * decodes until the first incomplete block, as most applications seem to do.
  *
- *  This variable can be set to the following values:
+ * This variable can be set to the following values:
  *
- *    "verystrict" - Raise an error if the file is truncated
- *    "strict"     - Like "verystrict", but the size of the RIFF chunk is ignored
- *    "dropframe"  - Decode until the first incomplete sample frame
- *    "dropblock"  - Decode until the first incomplete block (default)
+ * - "verystrict": Raise an error if the file is truncated
+ * - "strict": Like "verystrict", but the size of the RIFF chunk is ignored
+ * - "dropframe": Decode until the first incomplete sample frame
+ * - "dropblock": Decode until the first incomplete block (default)
  */
 #define SDL_HINT_WAVE_TRUNCATION   "SDL_WAVE_TRUNCATION"
 
 /**
- * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
- *        The 0x406D1388 Exception is a trick used to inform Visual Studio of a
- *        thread's name, but it tends to cause problems with other debuggers,
- *        and the .NET runtime. Note that SDL 2.0.6 and later will still use
- *        the (safer) SetThreadDescription API, introduced in the Windows 10
- *        Creators Update, if available.
+ * Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
  *
+ * The 0x406D1388 Exception is a trick used to inform Visual Studio of a
+ * thread's name, but it tends to cause problems with other debuggers, and the
+ * .NET runtime. Note that SDL 2.0.6 and later will still use the (safer)
+ * SetThreadDescription API, introduced in the Windows 10 Creators Update, if
+ * available.
+ *
  * The variable can be set to the following values:
- *   "0"       - SDL will raise the 0x406D1388 Exception to name threads.
- *               This is the default behavior of SDL <= 2.0.4.
- *   "1"       - SDL will not raise this exception, and threads will be unnamed. (default)
- *               This is necessary with .NET languages or debuggers that aren't Visual Studio.
+ *
+ * - "0": SDL will raise the 0x406D1388 Exception to name threads. This is the
+ *   default behavior of SDL <= 2.0.4.
+ * - "1": SDL will not raise this exception, and threads will be unnamed.
+ *   (default) This is necessary with .NET languages or debuggers that aren't
+ *   Visual Studio.
  */
 #define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING"
 
 /**
- *  \brief Controls whether menus can be opened with their keyboard shortcut (Alt+mnemonic).
+ * Controls whether menus can be opened with their keyboard shortcut
+ * (Alt+mnemonic).
  *
- *  If the mnemonics are enabled, then menus can be opened by pressing the Alt
- *  key and the corresponding mnemonic (for example, Alt+F opens the File menu).
- *  However, in case an invalid mnemonic is pressed, Windows makes an audible
- *  beep to convey that nothing happened. This is true even if the window has
- *  no menu at all!
+ * If the mnemonics are enabled, then menus can be opened by pressing the Alt
+ * key and the corresponding mnemonic (for example, Alt+F opens the File
+ * menu). However, in case an invalid mnemonic is pressed, Windows makes an
+ * audible beep to convey that nothing happened. This is true even if the
+ * window has no menu at all!
  *
- *  Because most SDL applications don't have menus, and some want to use the Alt
- *  key for other purposes, SDL disables mnemonics (and the beeping) by default.
+ * Because most SDL applications don't have menus, and some want to use the
+ * Alt key for other purposes, SDL disables mnemonics (and the beeping) by
+ * default.
  *
- *  Note: This also affects keyboard events: with mnemonics enabled, when a
- *  menu is opened from the keyboard, you will not receive a KEYUP event for
- *  the mnemonic key, and *might* not receive one for Alt.
+ * Note: This also affects keyboard events: with mnemonics enabled, when a
+ * menu is opened from the keyboard, you will not receive a KEYUP event for
+ * the mnemonic key, and *might* not receive one for Alt.
  *
- *  This variable can be set to the following values:
- *    "0"       - Alt+mnemonic does nothing, no beeping. (default)
- *    "1"       - Alt+mnemonic opens menus, invalid mnemonics produce a beep.
+ * This variable can be set to the following values:
+ *
+ * - "0": Alt+mnemonic does nothing, no beeping. (default)
+ * - "1": Alt+mnemonic opens menus, invalid mnemonics produce a beep.
  */
 #define SDL_HINT_WINDOWS_ENABLE_MENU_MNEMONICS "SDL_WINDOWS_ENABLE_MENU_MNEMONICS"
 
 /**
- *  \brief  A variable controlling whether the windows message loop is processed by SDL
+ * A variable controlling whether the windows message loop is processed by SDL
  *
- *  This variable can be set to the following values:
- *    "0"       - The window message loop is not run
- *    "1"       - The window message loop is processed in SDL_PumpEvents()
+ * This variable can be set to the following values:
  *
- *  By default SDL will process the windows message loop
+ * - "0": The window message loop is not run
+ * - "1": The window message loop is processed in SDL_PumpEvents()
+ *
+ * By default SDL will process the windows message loop
  */
 #define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP"
 
 /**
- * \brief Force SDL to use Critical Sections for mutexes on Windows.
- *        On Windows 7 and newer, Slim Reader/Writer Locks are available.
- *        They offer better performance, allocate no kernel ressources and
- *        use less memory. SDL will fall back to Critical Sections on older
- *        OS versions or if forced to by this hint.
+ * Force SDL to use Critical Sections for mutexes on Windows.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use SRW Locks when available. If not, fall back to Critical Sections. (default)
- *    "1"       - Force the use of Critical Sections in all cases.
+ * On Windows 7 and newer, Slim Reader/Writer Locks are available. They offer
+ * better performance, allocate no kernel resources and use less memory. SDL
+ * will fall back to Critical Sections on older OS versions or if forced to by
+ * this hint.
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use SRW Locks when available. If not, fall back to Critical
+ *   Sections. (default)
+ * - "1": Force the use of Critical Sections in all cases.
  */
 #define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS"
 
 /**
- * \brief Force SDL to use Kernel Semaphores on Windows.
- *        Kernel Semaphores are inter-process and require a context
- *        switch on every interaction. On Windows 8 and newer, the
- *        WaitOnAddress API is available. Using that and atomics to
- *        implement semaphores increases performance.
- *        SDL will fall back to Kernel Objects on older OS versions
- *        or if forced to by this hint.
+ * Force SDL to use Kernel Semaphores on Windows.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default)
- *    "1"       - Force the use of Kernel Objects in all cases.
+ * Kernel Semaphores are inter-process and require a context switch on every
+ * interaction. On Windows 8 and newer, the WaitOnAddress API is available.
+ * Using that and atomics to implement semaphores increases performance. SDL
+ * will fall back to Kernel Objects on older OS versions or if forced to by
+ * this hint.
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use Atomics and WaitOnAddress API when available. If not, fall back
+ *   to Kernel Objects. (default)
+ * - "1": Force the use of Kernel Objects in all cases.
  */
 #define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL"
 
 /**
- * \brief A variable to specify custom icon resource id from RC file on Windows platform
+ * A variable to specify custom icon resource id from RC file on Windows
+ * platform
  */
 #define SDL_HINT_WINDOWS_INTRESOURCE_ICON       "SDL_WINDOWS_INTRESOURCE_ICON"
+
+/**
+ * A variable to specify custom icon resource id from RC file on Windows
+ * platform
+ */
 #define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"
 
 /**
- *  \brief Tell SDL not to generate window-close events for Alt+F4 on Windows.
+ * Tell SDL not to generate window-close events for Alt+F4 on Windows.
  *
  * The variable can be set to the following values:
- *   "0"       - SDL will generate a window-close event when it sees Alt+F4.
- *   "1"       - SDL will only do normal key handling for Alt+F4.
+ *
+ * - "0": SDL will generate a window-close event when it sees Alt+F4.
+ * - "1": SDL will only do normal key handling for Alt+F4.
  */
 #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
 
 /**
- * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
- *        Direct3D 9Ex contains changes to state management that can eliminate device
- *        loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require
- *        some changes to your application to cope with the new behavior, so this
- *        is disabled by default.
+ * Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9.
  *
- *  This hint must be set before initializing the video subsystem.
+ * Direct3D 9Ex contains changes to state management that can eliminate device
+ * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may
+ * require some changes to your application to cope with the new behavior, so
+ * this is disabled by default.
  *
- *  For more information on Direct3D 9Ex, see:
- *    - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex
- *    - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements
+ * This hint must be set before initializing the video subsystem.
  *
- *  This variable can be set to the following values:
- *    "0"       - Use the original Direct3D 9 API (default)
- *    "1"       - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable)
+ * For more information on Direct3D 9Ex, see: -
+ * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex
+ * -
+ * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements
  *
+ * This variable can be set to the following values:
+ *
+ * - "0": Use the original Direct3D 9 API (default)
+ * - "1": Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex
+ *   is unavailable)
  */
 #define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX"
 
 /**
- * \brief Controls whether SDL will declare the process to be DPI aware.
+ * Controls whether SDL will declare the process to be DPI aware.
  *
- *  This hint must be set before initializing the video subsystem.
+ * This hint must be set before initializing the video subsystem.
  *
- *  The main purpose of declaring DPI awareness is to disable OS bitmap scaling of SDL windows on monitors with
- *  a DPI scale factor.
+ * The main purpose of declaring DPI awareness is to disable OS bitmap scaling
+ * of SDL windows on monitors with a DPI scale factor.
  *
- *  This hint is equivalent to requesting DPI awareness via external means (e.g. calling SetProcessDpiAwarenessContext)
- *  and does not cause SDL to use a virtualized coordinate system, so it will generally give you 1 SDL coordinate = 1 pixel
- *  even on high-DPI displays.
+ * This hint is equivalent to requesting DPI awareness via external means
+ * (e.g. calling SetProcessDpiAwarenessContext) and does not cause SDL to use
+ * a virtualized coordinate system, so it will generally give you 1 SDL
+ * coordinate = 1 pixel even on high-DPI displays.
  *
- *  For more information, see:
- *  https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows
+ * For more information, see:
+ * https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows
  *
- *  This variable can be set to the following values:
- *    ""             - Do not change the DPI awareness (default).
- *    "unaware"      - Declare the process as DPI unaware. (Windows 8.1 and later).
- *    "system"       - Request system DPI awareness. (Vista and later).
- *    "permonitor"   - Request per-monitor DPI awareness. (Windows 8.1 and later).
- *    "permonitorv2" - Request per-monitor V2 DPI awareness. (Windows 10, version 1607 and later).
- *                     The most visible difference from "permonitor" is that window title bar will be scaled
- *                     to the visually correct size when dragging between monitors with different scale factors.
- *                     This is the preferred DPI awareness level.
+ * This variable can be set to the following values:
  *
- * If the requested DPI awareness is not available on the currently running OS, SDL will try to request the best
- * available match.
+ * - "": Do not change the DPI awareness (default).
+ * - "unaware": Declare the process as DPI unaware. (Windows 8.1 and later).
+ * - "system": Request system DPI awareness. (Vista and later).
+ * - "permonitor": Request per-monitor DPI awareness. (Windows 8.1 and later).
+ * - "permonitorv2": Request per-monitor V2 DPI awareness. (Windows 10,
+ *   version 1607 and later). The most visible difference from "permonitor" is
+ *   that window title bar will be scaled to the visually correct size when
+ *   dragging between monitors with different scale factors. This is the
+ *   preferred DPI awareness level.
+ *
+ * If the requested DPI awareness is not available on the currently running
+ * OS, SDL will try to request the best available match.
  */
 #define SDL_HINT_WINDOWS_DPI_AWARENESS "SDL_WINDOWS_DPI_AWARENESS"
 
 /**
- * \brief Uses DPI-scaled points as the SDL coordinate system on Windows.
+ * Uses DPI-scaled points as the SDL coordinate system on Windows.
  *
- *  This changes the SDL coordinate system units to be DPI-scaled points, rather than pixels everywhere.
- *  This means windows will be appropriately sized, even when created on high-DPI displays with scaling.
+ * This changes the SDL coordinate system units to be DPI-scaled points,
+ * rather than pixels everywhere. This means windows will be appropriately
+ * sized, even when created on high-DPI displays with scaling.
  *
- *  e.g. requesting a 640x480 window from SDL, on a display with 125% scaling in Windows display settings,
- *  will create a window with an 800x600 client area (in pixels).
+ * e.g. requesting a 640x480 window from SDL, on a display with 125% scaling
+ * in Windows display settings, will create a window with an 800x600 client
+ * area (in pixels).
  *
- *  Setting this to "1" implicitly requests process DPI awareness (setting SDL_WINDOWS_DPI_AWARENESS is unnecessary),
- *  and forces SDL_WINDOW_ALLOW_HIGHDPI on all windows.
+ * Setting this to "1" implicitly requests process DPI awareness (setting
+ * SDL_WINDOWS_DPI_AWARENESS is unnecessary), and forces
+ * SDL_WINDOW_ALLOW_HIGHDPI on all windows.
  *
- *  This variable can be set to the following values:
- *    "0"       - SDL coordinates equal Windows coordinates. No automatic window resizing when dragging
- *                between monitors with different scale factors (unless this is performed by
- *                Windows itself, which is the case when the process is DPI unaware).
- *    "1"       - SDL coordinates are in DPI-scaled points. Automatically resize windows as needed on
- *                displays with non-100% scale factors.
+ * This variable can be set to the following values:
+ *
+ * - "0": SDL coordinates equal Windows coordinates. No automatic window
+ *   resizing when dragging between monitors with different scale factors
+ *   (unless this is performed by Windows itself, which is the case when the
+ *   process is DPI unaware).
+ * - "1": SDL coordinates are in DPI-scaled points. Automatically resize
+ *   windows as needed on displays with non-100% scale factors.
  */
 #define SDL_HINT_WINDOWS_DPI_SCALING "SDL_WINDOWS_DPI_SCALING"
 
 /**
- *  \brief  A variable controlling whether the window frame and title bar are interactive when the cursor is hidden
+ * A variable controlling whether the window frame and title bar are
+ * interactive when the cursor is hidden
  *
- *  This variable can be set to the following values:
- *    "0"       - The window frame is not interactive when the cursor is hidden (no move, resize, etc)
- *    "1"       - The window frame is interactive when the cursor is hidden
+ * This variable can be set to the following values:
  *
- *  By default SDL will allow interaction with the window frame when the cursor is hidden
+ * - "0": The window frame is not interactive when the cursor is hidden (no
+ *   move, resize, etc)
+ * - "1": The window frame is interactive when the cursor is hidden
+ *
+ * By default SDL will allow interaction with the window frame when the cursor
+ * is hidden
  */
 #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN    "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
 
 /**
-*  \brief  A variable controlling whether the window is activated when the SDL_ShowWindow function is called
-*
-*  This variable can be set to the following values:
-*    "0"       - The window is activated when the SDL_ShowWindow function is called
-*    "1"       - The window is not activated when the SDL_ShowWindow function is called
-*
-*  By default SDL will activate the window when the SDL_ShowWindow function is called
-*/
+ * A variable controlling whether the window is activated when the
+ * SDL_ShowWindow function is called
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": The window is activated when the SDL_ShowWindow function is called
+ * - "1": The window is not activated when the SDL_ShowWindow function is
+ *   called
+ *
+ * By default SDL will activate the window when the SDL_ShowWindow function is
+ * called
+ */
 #define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN    "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN"
 
-/** \brief Allows back-button-press events on Windows Phone to be marked as handled
+/** Allows back-button-press events on Windows Phone to be marked as handled
  *
  *  Windows Phone devices typically feature a Back button.  When pressed,
  *  the OS will emit back-button-press events, which apps are expected to
@@ -2459,11 +2838,12 @@
  *
  *  More details on back button behavior in Windows Phone apps can be found
  *  at the following page, on Microsoft's developer site:
+ *
  *  http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx
  */
 #define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON"
 
-/** \brief Label text for a WinRT app's privacy policy link
+/** Label text for a WinRT app's privacy policy link
  *
  *  Network-enabled WinRT apps must include a privacy policy.  On Windows 8, 8.1, and RT,
  *  Microsoft mandates that this policy be available via the Windows Settings charm.
@@ -2485,213 +2865,221 @@
 #define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL"
 
 /**
- *  \brief A URL to a WinRT app's privacy policy
+ * A URL to a WinRT app's privacy policy
  *
- *  All network-enabled WinRT apps must make a privacy policy available to its
- *  users.  On Windows 8, 8.1, and RT, Microsoft mandates that this policy be
- *  be available in the Windows Settings charm, as accessed from within the app.
- *  SDL provides code to add a URL-based link there, which can point to the app's
- *  privacy policy.
+ * All network-enabled WinRT apps must make a privacy policy available to its
+ * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be be
+ * available in the Windows Settings charm, as accessed from within the app.
+ * SDL provides code to add a URL-based link there, which can point to the
+ * app's privacy policy.
  *
- *  To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
- *  before calling any SDL_Init() functions.  The contents of the hint should
- *  be a valid URL.  For example, "http://www.example.com".
+ * To setup a URL to an app's privacy policy, set
+ * SDL_HINT_WINRT_PRIVACY_POLICY_URL before calling any SDL_Init() functions.
+ * The contents of the hint should be a valid URL. For example,
+ * "http://www.example.com".
  *
- *  The default value is "", which will prevent SDL from adding a privacy policy
- *  link to the Settings charm.  This hint should only be set during app init.
+ * The default value is "", which will prevent SDL from adding a privacy
+ * policy link to the Settings charm. This hint should only be set during app
+ * init.
  *
- *  The label text of an app's "Privacy Policy" link may be customized via another
- *  hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
+ * The label text of an app's "Privacy Policy" link may be customized via
+ * another hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
  *
- *  Please note that on Windows Phone, Microsoft does not provide standard UI
- *  for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL
- *  will not get used on that platform.  Network-enabled phone apps should display
- *  their privacy policy through some other, in-app means.
+ * Please note that on Windows Phone, Microsoft does not provide standard UI
+ * for displaying a privacy policy link, and as such,
+ * SDL_HINT_WINRT_PRIVACY_POLICY_URL will not get used on that platform.
+ * Network-enabled phone apps should display their privacy policy through some
+ * other, in-app means.
  */
 #define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL"
 
 /**
- *  \brief Mark X11 windows as override-redirect.
+ * Mark X11 windows as override-redirect.
  *
- *  If set, this _might_ increase framerate at the expense of the desktop
- *  not working as expected. Override-redirect windows aren't noticed by the
- *  window manager at all.
+ * If set, this _might_ increase framerate at the expense of the desktop not
+ * working as expected. Override-redirect windows aren't noticed by the window
+ * manager at all.
  *
- *  You should probably only use this for fullscreen windows, and you probably
- *  shouldn't even use it for that. But it's here if you want to try!
+ * You should probably only use this for fullscreen windows, and you probably
+ * shouldn't even use it for that. But it's here if you want to try!
  */
 #define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT"
 
 /**
- *  \brief  A variable that lets you disable the detection and use of Xinput gamepad devices
+ * A variable that lets you disable the detection and use of Xinput gamepad
+ * devices
  *
- *  The variable can be set to the following values:
- *    "0"       - Disable XInput detection (only uses direct input)
- *    "1"       - Enable XInput detection (the default)
+ * The variable can be set to the following values:
+ *
+ * - "0": Disable XInput detection (only uses direct input)
+ * - "1": Enable XInput detection (the default)
  */
 #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED"
 
- /**
-  *  \brief  A variable that lets you disable the detection and use of DirectInput gamepad devices
-  *
-  *  The variable can be set to the following values:
-  *    "0"       - Disable DirectInput detection (only uses XInput)
-  *    "1"       - Enable DirectInput detection (the default)
-  */
+/**
+ * A variable that lets you disable the detection and use of DirectInput
+ * gamepad devices
+ *
+ * The variable can be set to the following values:
+ *
+ * - "0": Disable DirectInput detection (only uses XInput)
+ * - "1": Enable DirectInput detection (the default)
+ */
 #define SDL_HINT_DIRECTINPUT_ENABLED "SDL_DIRECTINPUT_ENABLED"
 
 /**
- *  \brief  A variable that causes SDL to use the old axis and button mapping for XInput devices.
+ * A variable that causes SDL to use the old axis and button mapping for
+ * XInput devices.
  *
- *  This hint is for backwards compatibility only and will be removed in SDL 2.1
+ * This hint is for backwards compatibility only and will be removed in SDL
+ * 2.1
  *
- *  The default value is "0".  This hint must be set before SDL_Init()
+ * The default value is "0". This hint must be set before SDL_Init()
  */
 #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING"
 
 /**
- *  \brief  A variable that causes SDL to not ignore audio "monitors"
+ * A variable that causes SDL to not ignore audio "monitors"
  *
- *  This is currently only used for PulseAudio and ignored elsewhere.
+ * This is currently only used for PulseAudio and ignored elsewhere.
  *
- *  By default, SDL ignores audio devices that aren't associated with physical
- *  hardware. Changing this hint to "1" will expose anything SDL sees that
- *  appears to be an audio source or sink. This will add "devices" to the list
- *  that the user probably doesn't want or need, but it can be useful in
- *  scenarios where you want to hook up SDL to some sort of virtual device,
- *  etc.
+ * By default, SDL ignores audio devices that aren't associated with physical
+ * hardware. Changing this hint to "1" will expose anything SDL sees that
+ * appears to be an audio source or sink. This will add "devices" to the list
+ * that the user probably doesn't want or need, but it can be useful in
+ * scenarios where you want to hook up SDL to some sort of virtual device,
+ * etc.
  *
- *  The default value is "0".  This hint must be set before SDL_Init().
+ * The default value is "0". This hint must be set before SDL_Init().
  *
- *  This hint is available since SDL 2.0.16. Before then, virtual devices are
- *  always ignored.
+ * This hint is available since SDL 2.0.16. Before then, virtual devices are
+ * always ignored.
  */
 #define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS"
 
 /**
- *  \brief  A variable that forces X11 windows to create as a custom type.
+ * A variable that forces X11 windows to create as a custom type.
  *
- *  This is currently only used for X11 and ignored elsewhere.
+ * This is currently only used for X11 and ignored elsewhere.
  *
- *  During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property
- *  to report to the window manager the type of window it wants to create.
- *  This might be set to various things if SDL_WINDOW_TOOLTIP or
- *  SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that
- *  haven't set a specific type, this hint can be used to specify a custom
- *  type. For example, a dock window might set this to
- *  "_NET_WM_WINDOW_TYPE_DOCK".
+ * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property to
+ * report to the window manager the type of window it wants to create. This
+ * might be set to various things if SDL_WINDOW_TOOLTIP or
+ * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that
+ * haven't set a specific type, this hint can be used to specify a custom
+ * type. For example, a dock window might set this to
+ * "_NET_WM_WINDOW_TYPE_DOCK".
  *
- *  If not set or set to "", this hint is ignored. This hint must be set
- *  before the SDL_CreateWindow() call that it is intended to affect.
+ * If not set or set to "", this hint is ignored. This hint must be set before
+ * the SDL_CreateWindow() call that it is intended to affect.
  *
- *  This hint is available since SDL 2.0.22.
+ * This hint is available since SDL 2.0.22.
  */
 #define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE"
 
 /**
- *  \brief  A variable that decides whether to send SDL_QUIT when closing the final window.
+ * A variable that decides whether to send SDL_QUIT when closing the final
+ * window.
  *
- *  By default, SDL sends an SDL_QUIT event when there is only one window
- *  and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most
- *  apps would also take the loss of this window as a signal to terminate the
- *  program.
+ * By default, SDL sends an SDL_QUIT event when there is only one window and
+ * it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most apps
+ * would also take the loss of this window as a signal to terminate the
+ * program.
  *
- *  However, it's not unreasonable in some cases to have the program continue
- *  to live on, perhaps to create new windows later.
+ * However, it's not unreasonable in some cases to have the program continue
+ * to live on, perhaps to create new windows later.
  *
- *  Changing this hint to "0" will cause SDL to not send an SDL_QUIT event
- *  when the final window is requesting to close. Note that in this case,
- *  there are still other legitimate reasons one might get an SDL_QUIT
- *  event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c)
- *  on Unix, etc.
+ * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event when
+ * the final window is requesting to close. Note that in this case, there are
+ * still other legitimate reasons one might get an SDL_QUIT event: choosing
+ * "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) on Unix, etc.
  *
- *  The default value is "1".  This hint can be changed at any time.
+ * The default value is "1". This hint can be changed at any time.
  *
- *  This hint is available since SDL 2.0.22. Before then, you always get
- *  an SDL_QUIT event when closing the final window.
+ * This hint is available since SDL 2.0.22. Before then, you always get an
+ * SDL_QUIT event when closing the final window.
  */
 #define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE"
 
 
 /**
- *  \brief  A variable that decides what video backend to use.
+ * A variable that decides what video backend to use.
  *
- *  By default, SDL will try all available video backends in a reasonable
- *  order until it finds one that can work, but this hint allows the app
- *  or user to force a specific target, such as "x11" if, say, you are
- *  on Wayland but want to try talking to the X server instead.
+ * By default, SDL will try all available video backends in a reasonable order
+ * until it finds one that can work, but this hint allows the app or user to
+ * force a specific target, such as "x11" if, say, you are on Wayland but want
+ * to try talking to the X server instead.
  *
- *  This functionality has existed since SDL 2.0.0 (indeed, before that)
- *  but before 2.0.22 this was an environment variable only. In 2.0.22,
- *  it was upgraded to a full SDL hint, so you can set the environment
- *  variable as usual or programatically set the hint with SDL_SetHint,
- *  which won't propagate to child processes.
+ * This functionality has existed since SDL 2.0.0 (indeed, before that) but
+ * before 2.0.22 this was an environment variable only. In 2.0.22, it was
+ * upgraded to a full SDL hint, so you can set the environment variable as
+ * usual or programatically set the hint with SDL_SetHint, which won't
+ * propagate to child processes.
  *
- *  The default value is unset, in which case SDL will try to figure out
- *  the best video backend on your behalf. This hint needs to be set
- *  before SDL_Init() is called to be useful.
+ * The default value is unset, in which case SDL will try to figure out the
+ * best video backend on your behalf. This hint needs to be set before
+ * SDL_Init() is called to be useful.
  *
- *  This hint is available since SDL 2.0.22. Before then, you could set
- *  the environment variable to get the same effect.
+ * This hint is available since SDL 2.0.22. Before then, you could set the
+ * environment variable to get the same effect.
  */
 #define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER"
 
 /**
- *  \brief  A variable that decides what audio backend to use.
+ * A variable that decides what audio backend to use.
  *
- *  By default, SDL will try all available audio backends in a reasonable
- *  order until it finds one that can work, but this hint allows the app
- *  or user to force a specific target, such as "alsa" if, say, you are
- *  on PulseAudio but want to try talking to the lower level instead.
+ * By default, SDL will try all available audio backends in a reasonable order
+ * until it finds one that can work, but this hint allows the app or user to
+ * force a specific target, such as "alsa" if, say, you are on PulseAudio but
+ * want to try talking to the lower level instead.
  *
- *  This functionality has existed since SDL 2.0.0 (indeed, before that)
- *  but before 2.0.22 this was an environment variable only. In 2.0.22,
- *  it was upgraded to a full SDL hint, so you can set the environment
- *  variable as usual or programatically set the hint with SDL_SetHint,
- *  which won't propagate to child processes.
+ * This functionality has existed since SDL 2.0.0 (indeed, before that) but
+ * before 2.0.22 this was an environment variable only. In 2.0.22, it was
+ * upgraded to a full SDL hint, so you can set the environment variable as
+ * usual or programatically set the hint with SDL_SetHint, which won't
+ * propagate to child processes.
  *
- *  The default value is unset, in which case SDL will try to figure out
- *  the best audio backend on your behalf. This hint needs to be set
- *  before SDL_Init() is called to be useful.
+ * The default value is unset, in which case SDL will try to figure out the
+ * best audio backend on your behalf. This hint needs to be set before
+ * SDL_Init() is called to be useful.
  *
- *  This hint is available since SDL 2.0.22. Before then, you could set
- *  the environment variable to get the same effect.
+ * This hint is available since SDL 2.0.22. Before then, you could set the
+ * environment variable to get the same effect.
  */
 #define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER"
 
 /**
- *  \brief  A variable that decides what KMSDRM device to use.
+ * A variable that decides what KMSDRM device to use.
  *
- *  Internally, SDL might open something like "/dev/dri/cardNN" to
- *  access KMSDRM functionality, where "NN" is a device index number.
+ * Internally, SDL might open something like "/dev/dri/cardNN" to access
+ * KMSDRM functionality, where "NN" is a device index number.
  *
- *  SDL makes a guess at the best index to use (usually zero), but the
- *  app or user can set this hint to a number between 0 and 99 to
- *  force selection.
+ * SDL makes a guess at the best index to use (usually zero), but the app or
+ * user can set this hint to a number between 0 and 99 to force selection.
  *
- *  This hint is available since SDL 2.24.0.
+ * This hint is available since SDL 2.24.0.
  */
 #define SDL_HINT_KMSDRM_DEVICE_INDEX "SDL_KMSDRM_DEVICE_INDEX"
 
 
 /**
- *  \brief  A variable that treats trackpads as touch devices.
+ * A variable that treats trackpads as touch devices.
  *
- *  On macOS (and possibly other platforms in the future), SDL will report
- *  touches on a trackpad as mouse input, which is generally what users
- *  expect from this device; however, these are often actually full
- *  multitouch-capable touch devices, so it might be preferable to some apps
- *  to treat them as such.
+ * On macOS (and possibly other platforms in the future), SDL will report
+ * touches on a trackpad as mouse input, which is generally what users expect
+ * from this device; however, these are often actually full multitouch-capable
+ * touch devices, so it might be preferable to some apps to treat them as
+ * such.
  *
- *  Setting this hint to true will make the trackpad input report as a
- *  multitouch device instead of a mouse. The default is false.
+ * Setting this hint to true will make the trackpad input report as a
+ * multitouch device instead of a mouse. The default is false.
  *
- *  Note that most platforms don't support this hint. As of 2.24.0, it
- *  only supports MacBooks' trackpads on macOS. Others may follow later.
+ * Note that most platforms don't support this hint. As of 2.24.0, it only
+ * supports MacBooks' trackpads on macOS. Others may follow later.
  *
- *  This hint is checked during SDL_Init and can not be changed after.
+ * This hint is checked during SDL_Init and can not be changed after.
  *
- *  This hint is available since SDL 2.24.0.
+ * This hint is available since SDL 2.24.0.
  */
 #define SDL_HINT_TRACKPAD_IS_TOUCH_ONLY "SDL_TRACKPAD_IS_TOUCH_ONLY"
 
@@ -2699,23 +3087,45 @@
  * Cause SDL to call dbus_shutdown() on quit.
  *
  * This is useful as a debug tool to validate memory leaks, but shouldn't ever
- * be set in production applications, as other libraries used by the application
- * might use dbus under the hood and this cause cause crashes if they continue
- * after SDL_Quit().
+ * be set in production applications, as other libraries used by the
+ * application might use dbus under the hood and this cause cause crashes if
+ * they continue after SDL_Quit().
  *
  * This variable can be set to the following values:
- *   "0"       - SDL will not call dbus_shutdown() on quit (default)
- *   "1"       - SDL will call dbus_shutdown() on quit
  *
+ * - "0": SDL will not call dbus_shutdown() on quit (default)
+ * - "1": SDL will call dbus_shutdown() on quit
+ *
  * This hint is available since SDL 2.30.0.
  */
 #define SDL_HINT_SHUTDOWN_DBUS_ON_QUIT "SDL_SHUTDOWN_DBUS_ON_QUIT"
 
+/**
+ * Specify if SDL_RWFromFile should use the resource dir on Apple platforms.
+ *
+ * SDL2 has always done this on Apple platforms, but it can be surprising to
+ * try opening a path to discover that SDL adjusts the path to elsewhere, so
+ * this hint allows that behavior to be disabled.
+ *
+ * If running from a App Bundle, this will be MyApp.app/Contents/Resources. If
+ * running as a normal Unix-like process, this will be the directory where the
+ * running binary lives. Setting this hint to 0 avoids this and just uses the
+ * requested path as-is.
+ *
+ * This variable can be set to the following values:
+ *
+ * - "0": SDL will not use the app resource directory.
+ * - "1": SDL will use the app's resource directory (default).
+ *
+ * This hint is available since SDL 2.32.0.
+ */
+#define SDL_HINT_APPLE_RWFROMFILE_USE_RESOURCES "SDL_APPLE_RWFROMFILE_USE_RESOURCES"
 
+
 /**
- *  \brief  An enumeration of hint priorities
+ * An enumeration of hint priorities
  */
-typedef enum
+typedef enum SDL_HintPriority
 {
     SDL_HINT_DEFAULT,
     SDL_HINT_NORMAL,
@@ -2730,9 +3140,9 @@
  * value. Hints will replace existing hints of their priority and lower.
  * Environment variables are considered to have override priority.
  *
- * \param name the hint to set
- * \param value the value of the hint variable
- * \param priority the SDL_HintPriority level for the hint
+ * \param name the hint to set.
+ * \param value the value of the hint variable.
+ * \param priority the SDL_HintPriority level for the hint.
  * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -2751,8 +3161,8 @@
  * variable that takes precedence. You can use SDL_SetHintWithPriority() to
  * set the hint with override priority instead.
  *
- * \param name the hint to set
- * \param value the value of the hint variable
+ * \param name the hint to set.
+ * \param value the value of the hint variable.
  * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -2770,7 +3180,7 @@
  * the environment isn't set. Callbacks will be called normally with this
  * change.
  *
- * \param name the hint to set
+ * \param name the hint to set.
  * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.24.0.
@@ -2798,7 +3208,7 @@
 /**
  * Get the value of a hint.
  *
- * \param name the hint to query
+ * \param name the hint to query.
  * \returns the string value of a hint or NULL if the hint isn't set.
  *
  * \since This function is available since SDL 2.0.0.
@@ -2811,8 +3221,8 @@
 /**
  * Get the boolean value of a hint variable.
  *
- * \param name the name of the hint to get the boolean value from
- * \param default_value the value to return if the hint does not exist
+ * \param name the name of the hint to get the boolean value from.
+ * \param default_value the value to return if the hint does not exist.
  * \returns the boolean value of a hint or the provided default value if the
  *          hint does not exist.
  *
@@ -2826,10 +3236,10 @@
 /**
  * Type definition of the hint callback function.
  *
- * \param userdata what was passed as `userdata` to SDL_AddHintCallback()
- * \param name what was passed as `name` to SDL_AddHintCallback()
- * \param oldValue the previous hint value
- * \param newValue the new value hint is to be set to
+ * \param userdata what was passed as `userdata` to SDL_AddHintCallback().
+ * \param name what was passed as `name` to SDL_AddHintCallback().
+ * \param oldValue the previous hint value.
+ * \param newValue the new value hint is to be set to.
  */
 typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
 
@@ -2836,10 +3246,10 @@
 /**
  * Add a function to watch a particular hint.
  *
- * \param name the hint to watch
+ * \param name the hint to watch.
  * \param callback An SDL_HintCallback function that will be called when the
- *                 hint value changes
- * \param userdata a pointer to pass to the callback function
+ *                 hint value changes.
+ * \param userdata a pointer to pass to the callback function.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -2852,10 +3262,10 @@
 /**
  * Remove a function watching a particular hint.
  *
- * \param name the hint being watched
+ * \param name the hint being watched.
  * \param callback An SDL_HintCallback function that will be called when the
- *                 hint value changes
- * \param userdata a pointer being passed to the callback function
+ *                 hint value changes.
+ * \param userdata a pointer being passed to the callback function.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_joystick.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_joystick.h
@@ -20,22 +20,26 @@
 */
 
 /**
- *  \file SDL_joystick.h
+ * # CategoryJoystick
  *
- *  Include file for SDL joystick event handling
+ * Include file for SDL joystick event handling
  *
- * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick
- *   behind a device_index changing as joysticks are plugged and unplugged.
+ * The term "device_index" identifies currently plugged in joystick devices
+ * between 0 and SDL_NumJoysticks(), with the exact joystick behind a
+ * device_index changing as joysticks are plugged and unplugged.
  *
- * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted
- *   then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in.
+ * The term "instance_id" is the current instantiation of a joystick device in
+ * the system, if the joystick is removed and then re-inserted then it will
+ * get a new instance_id, instance_id's are monotonically increasing
+ * identifiers of a joystick plugged in.
  *
  * The term "player_index" is the number assigned to a player on a specific
- *   controller. For XInput controllers this returns the XInput user index.
- *   Many joysticks will not be able to supply this information.
+ * controller. For XInput controllers this returns the XInput user index. Many
+ * joysticks will not be able to supply this information.
  *
- * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of
- *   the device (a X360 wired controller for example). This identifier is platform dependent.
+ * The term JoystickGUID is a stable 128-bit identifier for a joystick device
+ * that does not change over time, it identifies class of the device (a X360
+ * wired controller for example). This identifier is platform dependent.
  */
 
 #ifndef SDL_joystick_h_
@@ -56,7 +60,7 @@
  *  \file SDL_joystick.h
  *
  *  In order to use these functions, SDL_Init() must have been called
- *  with the ::SDL_INIT_JOYSTICK flag.  This causes SDL to scan the system
+ *  with the SDL_INIT_JOYSTICK flag.  This causes SDL to scan the system
  *  for joysticks, and load appropriate drivers.
  *
  *  If you would like to receive joystick updates while the application
@@ -73,15 +77,21 @@
 struct _SDL_Joystick;
 typedef struct _SDL_Joystick SDL_Joystick;
 
-/* A structure that encodes the stable unique id for a joystick device */
+/**
+ * A structure that encodes the stable unique id for a joystick device.
+ *
+ * This is just a standard SDL_GUID by a different name.
+ */
 typedef SDL_GUID SDL_JoystickGUID;
 
 /**
- * This is a unique ID for a joystick for the time it is connected to the system,
- * and is never reused for the lifetime of the application. If the joystick is
- * disconnected and reconnected, it will get a new ID.
+ * This is a unique ID for a joystick for the time it is connected to the
+ * system, and is never reused for the lifetime of the application.
  *
- * The ID value starts at 0 and increments from there. The value -1 is an invalid ID.
+ * If the joystick is disconnected and reconnected, it will get a new ID.
+ *
+ * The ID value starts at 0 and increments from there. The value -1 is an
+ * invalid ID.
  */
 typedef Sint32 SDL_JoystickID;
 
@@ -172,7 +182,7 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system)
+ *                     on the system).
  * \returns the name of the selected joystick. If no name can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -189,7 +199,7 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system)
+ *                     on the system).
  * \returns the path of the selected joystick. If no path can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -215,9 +225,9 @@
  * This function can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the GUID of the selected joystick. If called on an invalid index,
- *          this function returns a zero GUID
+ *          this function returns a zero GUID.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -233,9 +243,9 @@
  * available this function returns 0.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the USB vendor ID of the selected joystick. If called on an
- *          invalid index, this function returns zero
+ *          invalid index, this function returns zero.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -248,9 +258,9 @@
  * available this function returns 0.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the USB product ID of the selected joystick. If called on an
- *          invalid index, this function returns zero
+ *          invalid index, this function returns zero.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -263,9 +273,9 @@
  * isn't available this function returns 0.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the product version of the selected joystick. If called on an
- *          invalid index, this function returns zero
+ *          invalid index, this function returns zero.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -277,9 +287,9 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the SDL_JoystickType of the selected joystick. If called on an
- *          invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`
+ *          invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`.
  *
  * \since This function is available since SDL 2.0.6.
  */
@@ -291,7 +301,7 @@
  * This can be called before any joysticks are opened.
  *
  * \param device_index the index of the joystick to query (the N'th joystick
- *                     on the system
+ *                     on the system.
  * \returns the instance id of the selected joystick. If called on an invalid
  *          index, this function returns -1.
  *
@@ -310,7 +320,7 @@
  * The joystick subsystem must be initialized before a joystick can be opened
  * for use.
  *
- * \param device_index the index of the joystick to query
+ * \param device_index the index of the joystick to query.
  * \returns a joystick identifier or NULL if an error occurred; call
  *          SDL_GetError() for more information.
  *
@@ -324,7 +334,7 @@
 /**
  * Get the SDL_Joystick associated with an instance id.
  *
- * \param instance_id the instance id to get the SDL_Joystick for
+ * \param instance_id the instance id to get the SDL_Joystick for.
  * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError()
  *          for more information.
  *
@@ -335,7 +345,7 @@
 /**
  * Get the SDL_Joystick associated with a player index.
  *
- * \param player_index the player index to get the SDL_Joystick for
+ * \param player_index the player index to get the SDL_Joystick for.
  * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError()
  *          for more information.
  *
@@ -358,8 +368,10 @@
 /**
  * The structure that defines an extended virtual joystick description
  *
- * The caller must zero the structure and then initialize the version with `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to SDL_JoystickAttachVirtualEx()
- *  All other elements of this structure are optional and can be left 0.
+ * The caller must zero the structure and then initialize the version with
+ * `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to
+ * SDL_JoystickAttachVirtualEx() All other elements of this structure are
+ * optional and can be left 0.
  *
  * \sa SDL_JoystickAttachVirtualEx
  */
@@ -390,7 +402,7 @@
 } SDL_VirtualJoystickDesc;
 
 /**
- * \brief The current version of the SDL_VirtualJoystickDesc structure
+ * The current version of the SDL_VirtualJoystickDesc structure
  */
 #define SDL_VIRTUAL_JOYSTICK_DESC_VERSION   1
 
@@ -407,7 +419,7 @@
  * Detach a virtual joystick.
  *
  * \param device_index a value previously returned from
- *                     SDL_JoystickAttachVirtual()
+ *                     SDL_JoystickAttachVirtual().
  * \returns 0 on success, or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.14.
@@ -485,7 +497,7 @@
 /**
  * Get the implementation dependent name of a joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the name of the selected joystick. If no name can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -499,7 +511,7 @@
 /**
  * Get the implementation dependent path of a joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the path of the selected joystick. If no path can be found, this
  *          function returns NULL; call SDL_GetError() for more information.
  *
@@ -515,7 +527,7 @@
  * For XInput controllers this returns the XInput user index. Many joysticks
  * will not be able to supply this information.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the player index, or -1 if it's not available.
  *
  * \since This function is available since SDL 2.0.9.
@@ -525,7 +537,7 @@
 /**
  * Set the player index of an opened joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \param player_index Player index to assign to this joystick, or -1 to clear
  *                     the player index and turn off player LEDs.
  *
@@ -538,7 +550,7 @@
  *
  * This function requires an open joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the GUID of the given joystick. If called on an invalid index,
  *          this function returns a zero GUID; call SDL_GetError() for more
  *          information.
@@ -555,7 +567,7 @@
  *
  * If the vendor ID isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the USB vendor ID of the selected joystick, or 0 if unavailable.
  *
  * \since This function is available since SDL 2.0.6.
@@ -567,7 +579,7 @@
  *
  * If the product ID isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the USB product ID of the selected joystick, or 0 if unavailable.
  *
  * \since This function is available since SDL 2.0.6.
@@ -579,7 +591,7 @@
  *
  * If the product version isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the product version of the selected joystick, or 0 if unavailable.
  *
  * \since This function is available since SDL 2.0.6.
@@ -591,7 +603,7 @@
  *
  * If the firmware version isn't available this function returns 0.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the firmware version of the selected joystick, or 0 if
  *          unavailable.
  *
@@ -604,7 +616,7 @@
  *
  * Returns the serial number of the joystick, or NULL if it is not available.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the serial number of the selected joystick, or NULL if
  *          unavailable.
  *
@@ -615,7 +627,7 @@
 /**
  * Get the type of an opened joystick.
  *
- * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen()
+ * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen().
  * \returns the SDL_JoystickType of the selected joystick.
  *
  * \since This function is available since SDL 2.0.6.
@@ -627,9 +639,9 @@
  *
  * You should supply at least 33 bytes for pszGUID.
  *
- * \param guid the SDL_JoystickGUID you wish to convert to string
- * \param pszGUID buffer in which to write the ASCII string
- * \param cbGUID the size of pszGUID
+ * \param guid the SDL_JoystickGUID you wish to convert to string.
+ * \param pszGUID buffer in which to write the ASCII string.
+ * \param cbGUID the size of pszGUID.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -646,7 +658,7 @@
  * an invalid GUID, the function will silently succeed, but the GUID generated
  * will not be useful.
  *
- * \param pchGUID string containing an ASCII representation of a GUID
+ * \param pchGUID string containing an ASCII representation of a GUID.
  * \returns a SDL_JoystickGUID structure.
  *
  * \since This function is available since SDL 2.0.0.
@@ -658,15 +670,15 @@
 /**
  * Get the device information encoded in a SDL_JoystickGUID structure
  *
- * \param guid the SDL_JoystickGUID you wish to get info about
+ * \param guid the SDL_JoystickGUID you wish to get info about.
  * \param vendor A pointer filled in with the device VID, or 0 if not
- *               available
+ *               available.
  * \param product A pointer filled in with the device PID, or 0 if not
- *                available
+ *                available.
  * \param version A pointer filled in with the device version, or 0 if not
- *                available
+ *                available.
  * \param crc16 A pointer filled in with a CRC used to distinguish different
- *              products with the same VID/PID, or 0 if not available
+ *              products with the same VID/PID, or 0 if not available.
  *
  * \since This function is available since SDL 2.26.0.
  *
@@ -677,7 +689,7 @@
 /**
  * Get the status of a specified joystick.
  *
- * \param joystick the joystick to query
+ * \param joystick the joystick to query.
  * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not;
  *          call SDL_GetError() for more information.
  *
@@ -691,7 +703,7 @@
 /**
  * Get the instance ID of an opened joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the instance ID of the specified joystick on success or a negative
  *          error code on failure; call SDL_GetError() for more information.
  *
@@ -708,7 +720,7 @@
  * separate buttons or a POV hat, and not axes, but all of this is up to the
  * device and platform.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of axis controls/number of axes on success or a
  *          negative error code on failure; call SDL_GetError() for more
  *          information.
@@ -728,7 +740,7 @@
  *
  * Most joysticks do not have trackballs.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of trackballs on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -741,7 +753,7 @@
 /**
  * Get the number of POV hats on a joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of POV hats on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -755,7 +767,7 @@
 /**
  * Get the number of buttons on a joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \returns the number of buttons on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -794,10 +806,10 @@
  * `SDL_ENABLE`, this function accepts any value, with any non-zero value that
  * isn't `SDL_QUERY` being treated as `SDL_ENABLE`.
  *
- * If SDL was built with events disabled (extremely uncommon!), this will
- * do nothing and always return `SDL_IGNORE`.
+ * If SDL was built with events disabled (extremely uncommon!), this will do
+ * nothing and always return `SDL_IGNORE`.
  *
- * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`
+ * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`.
  * \returns If `state` is `SDL_QUERY` then the current state is returned,
  *          otherwise `state` is returned (even if it was not one of the
  *          allowed values).
@@ -808,6 +820,7 @@
  */
 extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state);
 
+/* Limits for joystick axes... */
 #define SDL_JOYSTICK_AXIS_MAX   32767
 #define SDL_JOYSTICK_AXIS_MIN   -32768
 
@@ -824,8 +837,8 @@
  * 32767) representing the current position of the axis. It may be necessary
  * to impose certain tolerances on these values to account for jitter.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param axis the axis to query; the axis indices start at index 0
+ * \param joystick an SDL_Joystick structure containing joystick information.
+ * \param axis the axis to query; the axis indices start at index 0.
  * \returns a 16-bit signed integer representing the current position of the
  *          axis or 0 on failure; call SDL_GetError() for more information.
  *
@@ -843,8 +856,8 @@
  *
  * The axis indices start at index 0.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param axis the axis to query; the axis indices start at index 0
+ * \param joystick an SDL_Joystick structure containing joystick information.
+ * \param axis the axis to query; the axis indices start at index 0.
  * \param state Upon return, the initial value is supplied here.
  * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not.
  *
@@ -883,8 +896,8 @@
  * - `SDL_HAT_LEFTUP`
  * - `SDL_HAT_LEFTDOWN`
  *
- * \param joystick an SDL_Joystick structure containing joystick information
- * \param hat the hat index to get the state from; indices start at index 0
+ * \param joystick an SDL_Joystick structure containing joystick information.
+ * \param hat the hat index to get the state from; indices start at index 0.
  * \returns the current hat position.
  *
  * \since This function is available since SDL 2.0.0.
@@ -902,10 +915,10 @@
  *
  * Most joysticks do not have trackballs.
  *
- * \param joystick the SDL_Joystick to query
- * \param ball the ball index to query; ball indices start at index 0
- * \param dx stores the difference in the x axis position since the last poll
- * \param dy stores the difference in the y axis position since the last poll
+ * \param joystick the SDL_Joystick to query.
+ * \param ball the ball index to query; ball indices start at index 0.
+ * \param dx stores the difference in the x axis position since the last poll.
+ * \param dy stores the difference in the y axis position since the last poll.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -919,9 +932,9 @@
 /**
  * Get the current state of a button on a joystick.
  *
- * \param joystick an SDL_Joystick structure containing joystick information
+ * \param joystick an SDL_Joystick structure containing joystick information.
  * \param button the button index to get the state from; indices start at
- *               index 0
+ *               index 0.
  * \returns 1 if the specified button is pressed, 0 otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -937,13 +950,13 @@
  * Each call to this function cancels any previous rumble effect, and calling
  * it with 0 intensity stops any rumbling.
  *
- * \param joystick The joystick to vibrate
+ * \param joystick The joystick to vibrate.
  * \param low_frequency_rumble The intensity of the low frequency (left)
- *                             rumble motor, from 0 to 0xFFFF
+ *                             rumble motor, from 0 to 0xFFFF.
  * \param high_frequency_rumble The intensity of the high frequency (right)
- *                              rumble motor, from 0 to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if rumble isn't supported on this joystick
+ *                              rumble motor, from 0 to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if rumble isn't supported on this joystick.
  *
  * \since This function is available since SDL 2.0.9.
  *
@@ -962,13 +975,13 @@
  * want the (more common) whole-controller rumble, use SDL_JoystickRumble()
  * instead.
  *
- * \param joystick The joystick to vibrate
+ * \param joystick The joystick to vibrate.
  * \param left_rumble The intensity of the left trigger rumble motor, from 0
- *                    to 0xFFFF
+ *                    to 0xFFFF.
  * \param right_rumble The intensity of the right trigger rumble motor, from 0
- *                     to 0xFFFF
- * \param duration_ms The duration of the rumble effect, in milliseconds
- * \returns 0, or -1 if trigger rumble isn't supported on this joystick
+ *                     to 0xFFFF.
+ * \param duration_ms The duration of the rumble effect, in milliseconds.
+ * \returns 0, or -1 if trigger rumble isn't supported on this joystick.
  *
  * \since This function is available since SDL 2.0.14.
  *
@@ -982,7 +995,7 @@
  * An example of a joystick LED is the light on the back of a PlayStation 4's
  * DualShock 4 controller.
  *
- * \param joystick The joystick to query
+ * \param joystick The joystick to query.
  * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -992,7 +1005,7 @@
 /**
  * Query whether a joystick has rumble support.
  *
- * \param joystick The joystick to query
+ * \param joystick The joystick to query.
  * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.18.
@@ -1004,7 +1017,7 @@
 /**
  * Query whether a joystick has rumble support on triggers.
  *
- * \param joystick The joystick to query
+ * \param joystick The joystick to query.
  * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.18.
@@ -1019,11 +1032,11 @@
  * An example of a joystick LED is the light on the back of a PlayStation 4's
  * DualShock 4 controller.
  *
- * \param joystick The joystick to update
- * \param red The intensity of the red LED
- * \param green The intensity of the green LED
- * \param blue The intensity of the blue LED
- * \returns 0 on success, -1 if this joystick does not have a modifiable LED
+ * \param joystick The joystick to update.
+ * \param red The intensity of the red LED.
+ * \param green The intensity of the green LED.
+ * \param blue The intensity of the blue LED.
+ * \returns 0 on success, -1 if this joystick does not have a modifiable LED.
  *
  * \since This function is available since SDL 2.0.14.
  */
@@ -1032,10 +1045,11 @@
 /**
  * Send a joystick specific effect packet
  *
- * \param joystick The joystick to affect
- * \param data The data to send to the joystick
- * \param size The size of the data to send to the joystick
- * \returns 0, or -1 if this joystick or driver doesn't support effect packets
+ * \param joystick The joystick to affect.
+ * \param data The data to send to the joystick.
+ * \param size The size of the data to send to the joystick.
+ * \returns 0, or -1 if this joystick or driver doesn't support effect
+ *          packets.
  *
  * \since This function is available since SDL 2.0.16.
  */
@@ -1044,7 +1058,7 @@
 /**
  * Close a joystick previously opened with SDL_JoystickOpen().
  *
- * \param joystick The joystick device to close
+ * \param joystick The joystick device to close.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1055,9 +1069,9 @@
 /**
  * Get the battery level of a joystick as SDL_JoystickPowerLevel.
  *
- * \param joystick the SDL_Joystick to query
+ * \param joystick the SDL_Joystick to query.
  * \returns the current battery level as SDL_JoystickPowerLevel on success or
- *          `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown
+ *          `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown.
  *
  * \since This function is available since SDL 2.0.4.
  */
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keyboard.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keyboard.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_keyboard.h
+ * # CategoryKeyboard
  *
- *  Include file for SDL keyboard event handling
+ * Include file for SDL keyboard event handling
  */
 
 #ifndef SDL_keyboard_h_
@@ -40,14 +40,15 @@
 #endif
 
 /**
- *  \brief The SDL keysym structure, used in key events.
+ * The SDL keysym structure, used in key events.
  *
- *  \note  If you are looking for translated character input, see the ::SDL_TEXTINPUT event.
+ * If you are looking for translated character input, see the SDL_TEXTINPUT
+ * event.
  */
 typedef struct SDL_Keysym
 {
-    SDL_Scancode scancode;      /**< SDL physical key code - see ::SDL_Scancode for details */
-    SDL_Keycode sym;            /**< SDL virtual key code - see ::SDL_Keycode for details */
+    SDL_Scancode scancode;      /**< SDL physical key code - see SDL_Scancode for details */
+    SDL_Keycode sym;            /**< SDL virtual key code - see SDL_Keycode for details */
     Uint16 mod;                 /**< current key modifiers */
     Uint32 unused;
 } SDL_Keysym;
@@ -84,7 +85,7 @@
  * Note: This function doesn't take into account whether shift has been
  * pressed or not.
  *
- * \param numkeys if non-NULL, receives the length of the returned array
+ * \param numkeys if non-NULL, receives the length of the returned array.
  * \returns a pointer to an array of key states.
  *
  * \since This function is available since SDL 2.0.0.
@@ -129,7 +130,7 @@
  * This does not change the keyboard state, only the key modifier flags that
  * SDL reports.
  *
- * \param modstate the desired SDL_Keymod for the keyboard
+ * \param modstate the desired SDL_Keymod for the keyboard.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -143,7 +144,7 @@
  *
  * See SDL_Keycode for details.
  *
- * \param scancode the desired SDL_Scancode to query
+ * \param scancode the desired SDL_Scancode to query.
  * \returns the SDL_Keycode that corresponds to the given SDL_Scancode.
  *
  * \since This function is available since SDL 2.0.0.
@@ -159,7 +160,7 @@
  *
  * See SDL_Scancode for details.
  *
- * \param key the desired SDL_Keycode to query
+ * \param key the desired SDL_Keycode to query.
  * \returns the SDL_Scancode that corresponds to the given SDL_Keycode.
  *
  * \since This function is available since SDL 2.0.0.
@@ -183,7 +184,7 @@
  * unsuitable for creating a stable cross-platform two-way mapping between
  * strings and scancodes.
  *
- * \param scancode the desired SDL_Scancode to query
+ * \param scancode the desired SDL_Scancode to query.
  * \returns a pointer to the name for the scancode. If the scancode doesn't
  *          have a name this function returns an empty string ("").
  *
@@ -197,7 +198,7 @@
 /**
  * Get a scancode from a human-readable name.
  *
- * \param name the human-readable scancode name
+ * \param name the human-readable scancode name.
  * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't
  *          recognized; call SDL_GetError() for more information.
  *
@@ -214,7 +215,7 @@
  *
  * See SDL_Scancode and SDL_Keycode for details.
  *
- * \param key the desired SDL_Keycode to query
+ * \param key the desired SDL_Keycode to query.
  * \returns a pointer to a UTF-8 string that stays valid at least until the
  *          next call to this function. If you need it around any longer, you
  *          must copy it. If the key doesn't have a name, this function
@@ -231,7 +232,7 @@
 /**
  * Get a key code from a human-readable name.
  *
- * \param name the human-readable key name
+ * \param name the human-readable key name.
  * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call
  *          SDL_GetError() for more information.
  *
@@ -253,6 +254,10 @@
  *
  * On some platforms using this function activates the screen keyboard.
  *
+ * On desktop platforms, SDL_StartTextInput() is implicitly called on SDL
+ * video subsystem initialization which will cause SDL_TextInputEvent and
+ * SDL_TextEditingEvent to begin emitting.
+ *
  * \since This function is available since SDL 2.0.0.
  *
  * \sa SDL_SetTextInputRect
@@ -298,10 +303,11 @@
 extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void);
 
 /**
- * Set the rectangle used to type Unicode text inputs. Native input methods
- * will place a window with word suggestions near it, without covering the
- * text being inputted.
- * 
+ * Set the rectangle used to type Unicode text inputs.
+ *
+ * Native input methods will place a window with word suggestions near it,
+ * without covering the text being inputted.
+ *
  * To start text input in a given location, this function is intended to be
  * called before SDL_StartTextInput, although some platforms support moving
  * the rectangle even while text input (and a composition) is active.
@@ -311,7 +317,7 @@
  * any feedback.
  *
  * \param rect the SDL_Rect structure representing the rectangle to receive
- *             text (ignored if NULL)
+ *             text (ignored if NULL).
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -335,7 +341,7 @@
 /**
  * Check whether the screen keyboard is shown for given window.
  *
- * \param window the window for which screen keyboard should be queried
+ * \param window the window for which screen keyboard should be queried.
  * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not.
  *
  * \since This function is available since SDL 2.0.0.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keycode.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keycode.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_keycode.h
+ * # CategoryKeycode
  *
- *  Defines constants which identify keyboard keys and modifiers.
+ * Defines constants which identify keyboard keys and modifiers.
  */
 
 #ifndef SDL_keycode_h_
@@ -32,15 +32,15 @@
 #include "SDL_scancode.h"
 
 /**
- *  \brief The SDL virtual key representation.
+ * The SDL virtual key representation.
  *
- *  Values of this type are used to represent keyboard keys using the current
- *  layout of the keyboard.  These values include Unicode values representing
- *  the unmodified character that would be generated by pressing the key, or
- *  an SDLK_* constant for those keys that do not generate characters.
+ * Values of this type are used to represent keyboard keys using the current
+ * layout of the keyboard. These values include Unicode values representing
+ * the unmodified character that would be generated by pressing the key, or an
+ * SDLK_* constant for those keys that do not generate characters.
  *
- *  A special exception is the number keys at the top of the keyboard which
- *  map to SDLK_0...SDLK_9 on AZERTY layouts.
+ * A special exception is the number keys at the top of the keyboard which map
+ * to SDLK_0...SDLK_9 on AZERTY layouts.
  */
 typedef Sint32 SDL_Keycode;
 
@@ -47,7 +47,7 @@
 #define SDLK_SCANCODE_MASK (1<<30)
 #define SDL_SCANCODE_TO_KEYCODE(X)  (X | SDLK_SCANCODE_MASK)
 
-typedef enum
+typedef enum SDL_KeyCode
 {
     SDLK_UNKNOWN = 0,
 
@@ -327,9 +327,9 @@
 } SDL_KeyCode;
 
 /**
- * \brief Enumeration of valid key mods (possibly OR'd together).
+ * Enumeration of valid key mods (possibly OR'd together).
  */
-typedef enum
+typedef enum SDL_Keymod
 {
     KMOD_NONE = 0x0000,
     KMOD_LSHIFT = 0x0001,
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_loadso.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_loadso.h
@@ -19,23 +19,25 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: LoadSO */
+
 /**
- *  \file SDL_loadso.h
+ * # CategoryLoadSO
  *
- *  System dependent library loading routines
+ * System-dependent library loading routines.
  *
- *  Some things to keep in mind:
- *  \li These functions only work on C function names.  Other languages may
- *      have name mangling and intrinsic language support that varies from
- *      compiler to compiler.
- *  \li Make sure you declare your function pointers with the same calling
- *      convention as the actual library function.  Your code will crash
- *      mysteriously if you do not do this.
- *  \li Avoid namespace collisions.  If you load a symbol from the library,
- *      it is not defined whether or not it goes into the global symbol
- *      namespace for the application.  If it does and it conflicts with
- *      symbols in your code or other shared libraries, you will not get
- *      the results you expect. :)
+ * Some things to keep in mind:
+ *
+ * - These functions only work on C function names. Other languages may have
+ *   name mangling and intrinsic language support that varies from compiler to
+ *   compiler.
+ * - Make sure you declare your function pointers with the same calling
+ *   convention as the actual library function. Your code will crash
+ *   mysteriously if you do not do this.
+ * - Avoid namespace collisions. If you load a symbol from the library, it is
+ *   not defined whether or not it goes into the global symbol namespace for
+ *   the application. If it does and it conflicts with symbols in your code or
+ *   other shared libraries, you will not get the results you expect. :)
  */
 
 #ifndef SDL_loadso_h_
@@ -53,7 +55,7 @@
 /**
  * Dynamically load a shared object.
  *
- * \param sofile a system-dependent name of the object file
+ * \param sofile a system-dependent name of the object file.
  * \returns an opaque pointer to the object handle or NULL if there was an
  *          error; call SDL_GetError() for more information.
  *
@@ -79,8 +81,8 @@
  *
  * If the requested function doesn't exist, NULL is returned.
  *
- * \param handle a valid shared object handle returned by SDL_LoadObject()
- * \param name the name of the function to look up
+ * \param handle a valid shared object handle returned by SDL_LoadObject().
+ * \param name the name of the function to look up.
  * \returns a pointer to the function or NULL if there was an error; call
  *          SDL_GetError() for more information.
  *
@@ -95,7 +97,7 @@
 /**
  * Unload a shared object from memory.
  *
- * \param handle a valid shared object handle returned by SDL_LoadObject()
+ * \param handle a valid shared object handle returned by SDL_LoadObject().
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_locale.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_locale.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_locale.h
+ * # CategoryLocale
  *
- *  Include file for SDL locale services
+ * Include file for SDL locale services
  */
 
 #ifndef _SDL_locale_h
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_log.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_log.h
@@ -20,18 +20,19 @@
 */
 
 /**
- *  \file SDL_log.h
+ * # CategoryLog
  *
- *  Simple log messages with categories and priorities.
+ * Simple log messages with categories and priorities.
  *
- *  By default logs are quiet, but if you're debugging SDL you might want:
+ * By default logs are quiet, but if you're debugging SDL you might want:
  *
- *      SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
+ * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
  *
- *  Here's where the messages go on different platforms:
- *      Windows: debug output stream
- *      Android: log output
- *      Others: standard error output (stderr)
+ * Here's where the messages go on different platforms:
+ *
+ * - Windows: debug output stream
+ * - Android: log output
+ * - Others: standard error output (stderr)
  */
 
 #ifndef SDL_log_h_
@@ -47,21 +48,20 @@
 
 
 /**
- *  \brief The maximum size of a log message prior to SDL 2.0.24
+ * The maximum size of a log message prior to SDL 2.0.24
  *
- *  As of 2.0.24 there is no limit to the length of SDL log messages.
+ * As of 2.0.24 there is no limit to the length of SDL log messages.
  */
 #define SDL_MAX_LOG_MESSAGE 4096
 
 /**
- *  \brief The predefined log categories
+ * The predefined log categories
  *
- *  By default the application category is enabled at the INFO level,
- *  the assert category is enabled at the WARN level, test is enabled
- *  at the VERBOSE level and all other categories are enabled at the
- *  ERROR level.
+ * By default the application category is enabled at the INFO level, the
+ * assert category is enabled at the WARN level, test is enabled at the
+ * VERBOSE level and all other categories are enabled at the ERROR level.
  */
-typedef enum
+typedef enum SDL_LogCategory
 {
     SDL_LOG_CATEGORY_APPLICATION,
     SDL_LOG_CATEGORY_ERROR,
@@ -97,9 +97,9 @@
 } SDL_LogCategory;
 
 /**
- *  \brief The predefined log priorities
+ * The predefined log priorities
  */
-typedef enum
+typedef enum SDL_LogPriority
 {
     SDL_LOG_PRIORITY_VERBOSE = 1,
     SDL_LOG_PRIORITY_DEBUG,
@@ -114,7 +114,7 @@
 /**
  * Set the priority of all log categories.
  *
- * \param priority the SDL_LogPriority to assign
+ * \param priority the SDL_LogPriority to assign.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -125,8 +125,8 @@
 /**
  * Set the priority of a particular log category.
  *
- * \param category the category to assign a priority to
- * \param priority the SDL_LogPriority to assign
+ * \param category the category to assign a priority to.
+ * \param priority the SDL_LogPriority to assign.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -139,8 +139,8 @@
 /**
  * Get the priority of a particular log category.
  *
- * \param category the category to query
- * \returns the SDL_LogPriority for the requested category
+ * \param category the category to query.
+ * \returns the SDL_LogPriority for the requested category.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -166,7 +166,7 @@
  * = * \param fmt a printf() style message format string
  *
  * \param ... additional parameters matching % tokens in the `fmt` string, if
- *            any
+ *            any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -184,10 +184,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_VERBOSE.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -205,10 +205,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_DEBUG.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -226,10 +226,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_INFO.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -247,10 +247,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_WARN.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -268,10 +268,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_ERROR.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -289,10 +289,10 @@
 /**
  * Log a message with SDL_LOG_PRIORITY_CRITICAL.
  *
- * \param category the category of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -310,11 +310,11 @@
 /**
  * Log a message with the specified category and priority.
  *
- * \param category the category of the message
- * \param priority the priority of the message
- * \param fmt a printf() style message format string
+ * \param category the category of the message.
+ * \param priority the priority of the message.
+ * \param fmt a printf() style message format string.
  * \param ... additional parameters matching % tokens in the **fmt** string,
- *            if any
+ *            if any.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -334,10 +334,10 @@
 /**
  * Log a message with the specified category and priority.
  *
- * \param category the category of the message
- * \param priority the priority of the message
- * \param fmt a printf() style message format string
- * \param ap a variable argument list
+ * \param category the category of the message.
+ * \param priority the priority of the message.
+ * \param fmt a printf() style message format string.
+ * \param ap a variable argument list.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -359,10 +359,11 @@
  *
  * This function is called by SDL when there is new text to be logged.
  *
- * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction()
- * \param category the category of the message
- * \param priority the priority of the message
- * \param message the message being output
+ * \param userdata what was passed as `userdata` to
+ *                 SDL_LogSetOutputFunction().
+ * \param category the category of the message.
+ * \param priority the priority of the message.
+ * \param message the message being output.
  */
 typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message);
 
@@ -370,9 +371,9 @@
  * Get the current log output function.
  *
  * \param callback an SDL_LogOutputFunction filled in with the current log
- *                 callback
+ *                 callback.
  * \param userdata a pointer filled in with the pointer that is passed to
- *                 `callback`
+ *                 `callback`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -383,8 +384,8 @@
 /**
  * Replace the default log output function with one of your own.
  *
- * \param callback an SDL_LogOutputFunction to call instead of the default
- * \param userdata a pointer that is passed to `callback`
+ * \param callback an SDL_LogOutputFunction to call instead of the default.
+ * \param userdata a pointer that is passed to `callback`.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_main.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_main.h
@@ -25,9 +25,9 @@
 #include "SDL_stdinc.h"
 
 /**
- *  \file SDL_main.h
+ * # CategoryMain
  *
- *  Redefine main() on some platforms so that it is called by SDL.
+ * Redefine main() on some platforms so that it is called by SDL.
  */
 
 #ifndef SDL_MAIN_HANDLED
@@ -129,7 +129,7 @@
  *
  *  The application's main() function must be called with C linkage,
  *  and should be declared like this:
- *  \code
+ *  ```c
  *  #ifdef __cplusplus
  *  extern "C"
  *  #endif
@@ -136,7 +136,7 @@
  *  int main(int argc, char *argv[])
  *  {
  *  }
- *  \endcode
+ *  ```
  */
 
 #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE)
@@ -149,7 +149,7 @@
 #endif
 
 /**
- *  The prototype for the application's main() function
+ * The prototype for the application's main() function
  */
 typedef int (*SDL_main_func)(int argc, char *argv[]);
 extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]);
@@ -222,8 +222,8 @@
 /**
  * Initialize and launch an SDL/WinRT application.
  *
- * \param mainFunction the SDL app's C-style main(), an SDL_main_func
- * \param reserved reserved for future use; should be NULL
+ * \param mainFunction the SDL app's C-style main(), an SDL_main_func.
+ * \param reserved reserved for future use; should be NULL.
  * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
  *          more information on the failure.
  *
@@ -238,10 +238,10 @@
 /**
  * Initializes and launches an SDL application.
  *
- * \param argc The argc parameter from the application's main() function
- * \param argv The argv parameter from the application's main() function
- * \param mainFunction The SDL app's C-style main(), an SDL_main_func
- * \return the return value from mainFunction
+ * \param argc The argc parameter from the application's main() function.
+ * \param argv The argv parameter from the application's main() function.
+ * \param mainFunction The SDL app's C-style main(), an SDL_main_func.
+ * \return the return value from mainFunction.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -254,8 +254,8 @@
 /**
  * Initialize and launch an SDL GDK application.
  *
- * \param mainFunction the SDL app's C-style main(), an SDL_main_func
- * \param reserved reserved for future use; should be NULL
+ * \param mainFunction the SDL app's C-style main(), an SDL_main_func.
+ * \param reserved reserved for future use; should be NULL.
  * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
  *          more information on the failure.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_messagebox.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_messagebox.h
@@ -32,9 +32,11 @@
 #endif
 
 /**
- * SDL_MessageBox flags. If supported will display warning icon, etc.
+ * SDL_MessageBox flags.
+ *
+ * If supported will display warning icon, etc.
  */
-typedef enum
+typedef enum SDL_MessageBoxFlags
 {
     SDL_MESSAGEBOX_ERROR                 = 0x00000010,   /**< error dialog */
     SDL_MESSAGEBOX_WARNING               = 0x00000020,   /**< warning dialog */
@@ -46,7 +48,7 @@
 /**
  * Flags for SDL_MessageBoxButtonData.
  */
-typedef enum
+typedef enum SDL_MessageBoxButtonFlags
 {
     SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001,  /**< Marks the default button when return is hit */
     SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002   /**< Marks the default button when escape is hit */
@@ -55,9 +57,9 @@
 /**
  * Individual button data.
  */
-typedef struct
+typedef struct SDL_MessageBoxButtonData
 {
-    Uint32 flags;       /**< ::SDL_MessageBoxButtonFlags */
+    Uint32 flags;       /**< SDL_MessageBoxButtonFlags */
     int buttonid;       /**< User defined button id (value returned via SDL_ShowMessageBox) */
     const char * text;  /**< The UTF-8 button text */
 } SDL_MessageBoxButtonData;
@@ -65,12 +67,12 @@
 /**
  * RGB value used in a message box color scheme
  */
-typedef struct
+typedef struct SDL_MessageBoxColor
 {
     Uint8 r, g, b;
 } SDL_MessageBoxColor;
 
-typedef enum
+typedef enum SDL_MessageBoxColorType
 {
     SDL_MESSAGEBOX_COLOR_BACKGROUND,
     SDL_MESSAGEBOX_COLOR_TEXT,
@@ -83,7 +85,7 @@
 /**
  * A set of colors to use for message box dialogs
  */
-typedef struct
+typedef struct SDL_MessageBoxColorScheme
 {
     SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX];
 } SDL_MessageBoxColorScheme;
@@ -91,9 +93,9 @@
 /**
  * MessageBox structure containing title, text, window, etc.
  */
-typedef struct
+typedef struct SDL_MessageBoxData
 {
-    Uint32 flags;                       /**< ::SDL_MessageBoxFlags */
+    Uint32 flags;                       /**< SDL_MessageBoxFlags */
     SDL_Window *window;                 /**< Parent window, can be NULL */
     const char *title;                  /**< UTF-8 title */
     const char *message;                /**< UTF-8 message text */
@@ -101,7 +103,7 @@
     int numbuttons;
     const SDL_MessageBoxButtonData *buttons;
 
-    const SDL_MessageBoxColorScheme *colorScheme;   /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */
+    const SDL_MessageBoxColorScheme *colorScheme;   /**< SDL_MessageBoxColorScheme, can be NULL to use system settings */
 } SDL_MessageBoxData;
 
 /**
@@ -128,8 +130,9 @@
  * to stderr if you can.
  *
  * \param messageboxdata the SDL_MessageBoxData structure with title, text and
- *                       other options
- * \param buttonid the pointer to which user id of hit button should be copied
+ *                       other options.
+ * \param buttonid the pointer to which user id of hit button should be
+ *                 copied.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -168,10 +171,10 @@
  * concern, check the return value from this function and fall back to writing
  * to stderr if you can.
  *
- * \param flags an SDL_MessageBoxFlags value
- * \param title UTF-8 title text
- * \param message UTF-8 message text
- * \param window the parent window, or NULL for no parent
+ * \param flags an SDL_MessageBoxFlags value.
+ * \param title UTF-8 title text.
+ * \param message UTF-8 message text.
+ * \param window the parent window, or NULL for no parent.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_metal.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_metal.h
@@ -20,9 +20,10 @@
 */
 
 /**
- *  \file SDL_metal.h
+ * # CategoryMetal
  *
- *  Header file for functions to creating Metal layers and views on SDL windows.
+ * Header file for functions to creating Metal layers and views on SDL
+ * windows.
  */
 
 #ifndef SDL_metal_h_
@@ -37,9 +38,9 @@
 #endif
 
 /**
- *  \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS).
+ * A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS).
  *
- *  \note This can be cast directly to an NSView or UIView.
+ * This can be cast directly to an NSView or UIView.
  */
 typedef void *SDL_MetalView;
 
@@ -90,9 +91,9 @@
  * Get the size of a window's underlying drawable in pixels (for use with
  * setting viewport, scissor & etc).
  *
- * \param window SDL_Window from which the drawable size should be queried
- * \param w Pointer to variable for storing the width in pixels, may be NULL
- * \param h Pointer to variable for storing the height in pixels, may be NULL
+ * \param window SDL_Window from which the drawable size should be queried.
+ * \param w Pointer to variable for storing the width in pixels, may be NULL.
+ * \param h Pointer to variable for storing the height in pixels, may be NULL.
  *
  * \since This function is available since SDL 2.0.14.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_misc.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_misc.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_misc.h
+ * # CategoryMisc
  *
- *  \brief Include file for SDL API functions that don't fit elsewhere.
+ * Include file for SDL API functions that don't fit elsewhere.
  */
 
 #ifndef SDL_misc_h_
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mouse.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mouse.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_mouse.h
+ * # CategoryMouse
  *
- *  Include file for SDL mouse event handling.
+ * Include file for SDL mouse event handling.
  */
 
 #ifndef SDL_mouse_h_
@@ -41,9 +41,9 @@
 typedef struct SDL_Cursor SDL_Cursor;   /**< Implementation dependent */
 
 /**
- * \brief Cursor types for SDL_CreateSystemCursor().
+ * Cursor types for SDL_CreateSystemCursor().
  */
-typedef enum
+typedef enum SDL_SystemCursor
 {
     SDL_SYSTEM_CURSOR_ARROW,     /**< Arrow */
     SDL_SYSTEM_CURSOR_IBEAM,     /**< I-beam */
@@ -61,9 +61,9 @@
 } SDL_SystemCursor;
 
 /**
- * \brief Scroll direction types for the Scroll event
+ * Scroll direction types for the Scroll event
  */
-typedef enum
+typedef enum SDL_MouseWheelDirection
 {
     SDL_MOUSEWHEEL_NORMAL,    /**< The scroll direction is normal */
     SDL_MOUSEWHEEL_FLIPPED    /**< The scroll direction is flipped / natural */
@@ -90,9 +90,9 @@
  * either `x` or `y`.
  *
  * \param x the x coordinate of the mouse cursor position relative to the
- *          focus window
+ *          focus window.
  * \param y the y coordinate of the mouse cursor position relative to the
- *          focus window
+ *          focus window.
  * \returns a 32-bit button bitmask of the current button state.
  *
  * \since This function is available since SDL 2.0.0.
@@ -120,9 +120,9 @@
  * reason to use this function, you probably want SDL_GetMouseState() instead.
  *
  * \param x filled in with the current X coord relative to the desktop; can be
- *          NULL
+ *          NULL.
  * \param y filled in with the current Y coord relative to the desktop; can be
- *          NULL
+ *          NULL.
  * \returns the current button state as a bitmask which can be tested using
  *          the SDL_BUTTON(X) macros.
  *
@@ -141,8 +141,8 @@
  * mouse deltas since the last call to SDL_GetRelativeMouseState() or since
  * event initialization. You can pass NULL for either `x` or `y`.
  *
- * \param x a pointer filled with the last recorded x coordinate of the mouse
- * \param y a pointer filled with the last recorded y coordinate of the mouse
+ * \param x a pointer filled with the last recorded x coordinate of the mouse.
+ * \param y a pointer filled with the last recorded y coordinate of the mouse.
  * \returns a 32-bit button bitmask of the relative button state.
  *
  * \since This function is available since SDL 2.0.0.
@@ -162,9 +162,9 @@
  * mouse when used over Microsoft Remote Desktop.
  *
  * \param window the window to move the mouse into, or NULL for the current
- *               mouse focus
- * \param x the x coordinate within the window
- * \param y the y coordinate within the window
+ *               mouse focus.
+ * \param x the x coordinate within the window.
+ * \param y the y coordinate within the window.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -184,8 +184,8 @@
  * Note that this function will appear to succeed, but not actually move the
  * mouse when used over Microsoft Remote Desktop.
  *
- * \param x the x coordinate
- * \param y the y coordinate
+ * \param x the x coordinate.
+ * \param y the y coordinate.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -297,14 +297,14 @@
  * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which
  * provides twelve readily available system cursors to pick from.
  *
- * \param data the color value for each pixel of the cursor
- * \param mask the mask value for each pixel of the cursor
- * \param w the width of the cursor
- * \param h the height of the cursor
+ * \param data the color value for each pixel of the cursor.
+ * \param mask the mask value for each pixel of the cursor.
+ * \param w the width of the cursor.
+ * \param h the height of the cursor.
  * \param hot_x the X-axis location of the upper left corner of the cursor
- *              relative to the actual mouse position
+ *              relative to the actual mouse position.
  * \param hot_y the Y-axis location of the upper left corner of the cursor
- *              relative to the actual mouse position
+ *              relative to the actual mouse position.
  * \returns a new cursor with the specified parameters on success or NULL on
  *          failure; call SDL_GetError() for more information.
  *
@@ -322,9 +322,9 @@
 /**
  * Create a color cursor.
  *
- * \param surface an SDL_Surface structure representing the cursor image
- * \param hot_x the x position of the cursor hot spot
- * \param hot_y the y position of the cursor hot spot
+ * \param surface an SDL_Surface structure representing the cursor image.
+ * \param hot_x the x position of the cursor hot spot.
+ * \param hot_y the y position of the cursor hot spot.
  * \returns the new cursor on success or NULL on failure; call SDL_GetError()
  *          for more information.
  *
@@ -340,7 +340,7 @@
 /**
  * Create a system cursor.
  *
- * \param id an SDL_SystemCursor enum value
+ * \param id an SDL_SystemCursor enum value.
  * \returns a cursor on success or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -358,7 +358,7 @@
  * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if
  * this is desired for any reason.
  *
- * \param cursor a cursor to make active
+ * \param cursor a cursor to make active.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -402,7 +402,7 @@
  * Use this function to free cursor resources created with SDL_CreateCursor(),
  * SDL_CreateColorCursor() or SDL_CreateSystemCursor().
  *
- * \param cursor the cursor to free
+ * \param cursor the cursor to free.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -437,9 +437,9 @@
 /**
  * Used as a mask when testing buttons in buttonstate.
  *
- * - Button 1:  Left mouse button
- * - Button 2:  Middle mouse button
- * - Button 3:  Right mouse button
+ * - Button 1: Left mouse button
+ * - Button 2: Middle mouse button
+ * - Button 3: Right mouse button
  */
 #define SDL_BUTTON(X)       (1 << ((X)-1))
 #define SDL_BUTTON_LEFT     1
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mutex.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mutex.h
@@ -23,9 +23,9 @@
 #define SDL_mutex_h_
 
 /**
- *  \file SDL_mutex.h
+ * # CategoryMutex
  *
- *  Functions to provide thread synchronization primitives.
+ * Functions to provide thread synchronization primitives.
  */
 
 #include "SDL_stdinc.h"
@@ -112,13 +112,13 @@
 #endif
 
 /**
- *  Synchronization functions which can time out return this value
- *  if they time out.
+ * Synchronization functions which can time out return this value if they time
+ * out.
  */
 #define SDL_MUTEX_TIMEDOUT  1
 
 /**
- *  This is the timeout value which corresponds to never time out.
+ * This is the timeout value which corresponds to never time out.
  */
 #define SDL_MUTEX_MAXWAIT   (~(Uint32)0)
 
@@ -165,7 +165,7 @@
  * unlock it the same number of times before it is actually made available for
  * other threads in the system (this is known as a "recursive mutex").
  *
- * \param mutex the mutex to lock
+ * \param mutex the mutex to lock.
  * \return 0, or -1 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -182,7 +182,7 @@
  * This technique is useful if you need exclusive access to a resource but
  * don't want to wait for it, and will return to it to try again later.
  *
- * \param mutex the mutex to try to lock
+ * \param mutex the mutex to try to lock.
  * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for
  *          more information.
  *
@@ -224,7 +224,7 @@
  * to destroy a locked mutex, and may result in undefined behavior depending
  * on the platform.
  *
- * \param mutex the mutex to destroy
+ * \param mutex the mutex to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -256,7 +256,7 @@
  * is 0. Each post operation will atomically increment the semaphore value and
  * wake waiting threads and allow them to retry the wait operation.
  *
- * \param initial_value the starting value of the semaphore
+ * \param initial_value the starting value of the semaphore.
  * \returns a new semaphore or NULL on failure; call SDL_GetError() for more
  *          information.
  *
@@ -277,7 +277,7 @@
  * It is not safe to destroy a semaphore if there are threads currently
  * waiting on it.
  *
- * \param sem the semaphore to destroy
+ * \param sem the semaphore to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -301,7 +301,7 @@
  * This function is the equivalent of calling SDL_SemWaitTimeout() with a time
  * length of `SDL_MUTEX_MAXWAIT`.
  *
- * \param sem the semaphore wait on
+ * \param sem the semaphore wait on.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -325,7 +325,7 @@
  * the semaphore doesn't have a positive value, the function immediately
  * returns SDL_MUTEX_TIMEDOUT.
  *
- * \param sem the semaphore to wait on
+ * \param sem the semaphore to wait on.
  * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would
  *          block, or a negative error code on failure; call SDL_GetError()
  *          for more information.
@@ -349,8 +349,8 @@
  * signal or error, or the specified time has elapsed. If the call is
  * successful it will atomically decrement the semaphore value.
  *
- * \param sem the semaphore to wait on
- * \param timeout the length of the timeout, in milliseconds
+ * \param sem the semaphore to wait on.
+ * \param timeout the length of the timeout, in milliseconds.
  * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not
  *          succeed in the allotted time, or a negative error code on failure;
  *          call SDL_GetError() for more information.
@@ -369,7 +369,7 @@
 /**
  * Atomically increment a semaphore's value and wake waiting threads.
  *
- * \param sem the semaphore to increment
+ * \param sem the semaphore to increment.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -387,7 +387,7 @@
 /**
  * Get the current value of a semaphore.
  *
- * \param sem the semaphore to query
+ * \param sem the semaphore to query.
  * \returns the current value of the semaphore.
  *
  * \since This function is available since SDL 2.0.0.
@@ -427,7 +427,7 @@
 /**
  * Destroy a condition variable.
  *
- * \param cond the condition variable to destroy
+ * \param cond the condition variable to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -442,7 +442,7 @@
 /**
  * Restart one of the threads that are waiting on the condition variable.
  *
- * \param cond the condition variable to signal
+ * \param cond the condition variable to signal.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -459,7 +459,7 @@
 /**
  * Restart all threads that are waiting on the condition variable.
  *
- * \param cond the condition variable to signal
+ * \param cond the condition variable to signal.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -486,8 +486,8 @@
  * This function is the equivalent of calling SDL_CondWaitTimeout() with a
  * time length of `SDL_MUTEX_MAXWAIT`.
  *
- * \param cond the condition variable to wait on
- * \param mutex the mutex used to coordinate thread access
+ * \param cond the condition variable to wait on.
+ * \param mutex the mutex used to coordinate thread access.
  * \returns 0 when it is signaled or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -512,10 +512,10 @@
  *
  * The mutex must be locked before calling this function.
  *
- * \param cond the condition variable to wait on
- * \param mutex the mutex used to coordinate thread access
+ * \param cond the condition variable to wait on.
+ * \param mutex the mutex used to coordinate thread access.
  * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT`
- *           to wait indefinitely
+ *           to wait indefinitely.
  * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if
  *          the condition is not signaled in the allotted time, or a negative
  *          error code on failure; call SDL_GetError() for more information.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengl.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengl.h
@@ -19,17 +19,11 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_opengl.h
+/*
+ * This is a simple file to encapsulate the OpenGL API headers.
  *
- *  This is a simple file to encapsulate the OpenGL API headers.
- */
-
-/**
- *  \def NO_SDL_GLEXT
- *
- *  Define this if you have your own version of glext.h and want to disable the
- *  version included in SDL_opengl.h.
+ * Define NO_SDL_GLEXT if you have your own version of glext.h and want
+ * to disable the version included in SDL_opengl.h.
  */
 
 #ifndef SDL_opengl_h_
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles.h
@@ -19,11 +19,10 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_opengles.h
- *
- *  This is a simple file to encapsulate the OpenGL ES 1.X API headers.
+/*
+ * This is a simple file to encapsulate the OpenGL ES 1.X API headers.
  */
+
 #include "SDL_config.h"
 
 #ifdef __IPHONEOS__
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles2.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles2.h
@@ -19,11 +19,10 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_opengles2.h
- *
- *  This is a simple file to encapsulate the OpenGL ES 2.0 API headers.
+/*
+ * This is a simple file to encapsulate the OpenGL ES 2.0 API headers.
  */
+
 #include "SDL_config.h"
 
 #if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS)
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_pixels.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_pixels.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_pixels.h
+ * # CategoryPixels
  *
- *  Header for the enumerated pixel format definitions.
+ * Header for the enumerated pixel format definitions.
  */
 
 #ifndef SDL_pixels_h_
@@ -320,9 +320,10 @@
 } SDL_PixelFormatEnum;
 
 /**
- * The bits of this structure can be directly reinterpreted as an integer-packed
- * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888
- * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems).
+ * The bits of this structure can be directly reinterpreted as an
+ * integer-packed color which uses the SDL_PIXELFORMAT_RGBA32 format
+ * (SDL_PIXELFORMAT_ABGR8888 on little-endian systems and
+ * SDL_PIXELFORMAT_RGBA8888 on big-endian systems).
  */
 typedef struct SDL_Color
 {
@@ -342,7 +343,30 @@
 } SDL_Palette;
 
 /**
- *  \note Everything in the pixel format structure is read-only.
+ * A structure that contains pixel format information.
+ *
+ * Everything in the pixel format structure is read-only.
+ *
+ * A pixel format has either a palette or masks. If a palette is used `Rmask`,
+ * `Gmask`, `Bmask`, and `Amask` will be 0.
+ *
+ * An SDL_PixelFormat describes the format of the pixel data stored at the
+ * `pixels` field of an SDL_Surface. Every surface stores an SDL_PixelFormat
+ * in the `format` field.
+ *
+ * If you wish to do pixel level modifications on a surface, then
+ * understanding how SDL stores its color information is essential.
+ *
+ * For information on modern pixel color spaces, see the following Wikipedia
+ * article: http://en.wikipedia.org/wiki/RGBA_color_space
+ *
+ * \sa SDL_ConvertSurface
+ * \sa SDL_GetRGB
+ * \sa SDL_GetRGBA
+ * \sa SDL_MapRGB
+ * \sa SDL_MapRGBA
+ * \sa SDL_AllocFormat
+ * \sa SDL_FreeFormat
  */
 typedef struct SDL_PixelFormat
 {
@@ -370,7 +394,7 @@
 /**
  * Get the human readable name of a pixel format.
  *
- * \param format the pixel format to query
+ * \param format the pixel format to query.
  * \returns the human readable name of the specified pixel format or
  *          `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized.
  *
@@ -381,12 +405,12 @@
 /**
  * Convert one of the enumerated pixel formats to a bpp value and RGBA masks.
  *
- * \param format one of the SDL_PixelFormatEnum values
- * \param bpp a bits per pixel value; usually 15, 16, or 32
- * \param Rmask a pointer filled in with the red mask for the format
- * \param Gmask a pointer filled in with the green mask for the format
- * \param Bmask a pointer filled in with the blue mask for the format
- * \param Amask a pointer filled in with the alpha mask for the format
+ * \param format one of the SDL_PixelFormatEnum values.
+ * \param bpp a bits per pixel value; usually 15, 16, or 32.
+ * \param Rmask a pointer filled in with the red mask for the format.
+ * \param Gmask a pointer filled in with the green mask for the format.
+ * \param Bmask a pointer filled in with the blue mask for the format.
+ * \param Amask a pointer filled in with the alpha mask for the format.
  * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't
  *          possible; call SDL_GetError() for more information.
  *
@@ -407,12 +431,12 @@
  * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't
  * possible.
  *
- * \param bpp a bits per pixel value; usually 15, 16, or 32
- * \param Rmask the red mask for the format
- * \param Gmask the green mask for the format
- * \param Bmask the blue mask for the format
- * \param Amask the alpha mask for the format
- * \returns one of the SDL_PixelFormatEnum values
+ * \param bpp a bits per pixel value; usually 15, 16, or 32.
+ * \param Rmask the red mask for the format.
+ * \param Gmask the green mask for the format.
+ * \param Bmask the blue mask for the format.
+ * \param Amask the alpha mask for the format.
+ * \returns one of the SDL_PixelFormatEnum values.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -431,7 +455,7 @@
  * allocated), and hence should not be modified, especially the palette. Weird
  * errors such as `Blit combination not supported` may occur.
  *
- * \param pixel_format one of the SDL_PixelFormatEnum values
+ * \param pixel_format one of the SDL_PixelFormatEnum values.
  * \returns the new SDL_PixelFormat structure or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -444,7 +468,7 @@
 /**
  * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat().
  *
- * \param format the SDL_PixelFormat structure to free
+ * \param format the SDL_PixelFormat structure to free.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -457,7 +481,7 @@
  *
  * The palette entries are initialized to white.
  *
- * \param ncolors represents the number of color entries in the color palette
+ * \param ncolors represents the number of color entries in the color palette.
  * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if
  *          there wasn't enough memory); call SDL_GetError() for more
  *          information.
@@ -471,8 +495,8 @@
 /**
  * Set the palette for a pixel format structure.
  *
- * \param format the SDL_PixelFormat structure that will use the palette
- * \param palette the SDL_Palette structure that will be used
+ * \param format the SDL_PixelFormat structure that will use the palette.
+ * \param palette the SDL_Palette structure that will be used.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -487,10 +511,10 @@
 /**
  * Set a range of colors in a palette.
  *
- * \param palette the SDL_Palette structure to modify
- * \param colors an array of SDL_Color structures to copy into the palette
- * \param firstcolor the index of the first palette entry to modify
- * \param ncolors the number of entries to modify
+ * \param palette the SDL_Palette structure to modify.
+ * \param colors an array of SDL_Color structures to copy into the palette.
+ * \param firstcolor the index of the first palette entry to modify.
+ * \param ncolors the number of entries to modify.
  * \returns 0 on success or a negative error code if not all of the colors
  *          could be set; call SDL_GetError() for more information.
  *
@@ -506,7 +530,7 @@
 /**
  * Free a palette created with SDL_AllocPalette().
  *
- * \param palette the SDL_Palette structure to be freed
+ * \param palette the SDL_Palette structure to be freed.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -532,11 +556,11 @@
  * format the return value can be assigned to a Uint16, and similarly a Uint8
  * for an 8-bpp format).
  *
- * \param format an SDL_PixelFormat structure describing the pixel format
- * \param r the red component of the pixel in the range 0-255
- * \param g the green component of the pixel in the range 0-255
- * \param b the blue component of the pixel in the range 0-255
- * \returns a pixel value
+ * \param format an SDL_PixelFormat structure describing the pixel format.
+ * \param r the red component of the pixel in the range 0-255.
+ * \param g the green component of the pixel in the range 0-255.
+ * \param b the blue component of the pixel in the range 0-255.
+ * \returns a pixel value.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -566,12 +590,12 @@
  * for an 8-bpp format).
  *
  * \param format an SDL_PixelFormat structure describing the format of the
- *               pixel
- * \param r the red component of the pixel in the range 0-255
- * \param g the green component of the pixel in the range 0-255
- * \param b the blue component of the pixel in the range 0-255
- * \param a the alpha component of the pixel in the range 0-255
- * \returns a pixel value
+ *               pixel.
+ * \param r the red component of the pixel in the range 0-255.
+ * \param g the green component of the pixel in the range 0-255.
+ * \param b the blue component of the pixel in the range 0-255.
+ * \param a the alpha component of the pixel in the range 0-255.
+ * \returns a pixel value.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -591,12 +615,12 @@
  * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff,
  * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]).
  *
- * \param pixel a pixel value
+ * \param pixel a pixel value.
  * \param format an SDL_PixelFormat structure describing the format of the
- *               pixel
- * \param r a pointer filled in with the red component
- * \param g a pointer filled in with the green component
- * \param b a pointer filled in with the blue component
+ *               pixel.
+ * \param r a pointer filled in with the red component.
+ * \param g a pointer filled in with the green component.
+ * \param b a pointer filled in with the blue component.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -619,13 +643,13 @@
  * If the surface has no alpha component, the alpha will be returned as 0xff
  * (100% opaque).
  *
- * \param pixel a pixel value
+ * \param pixel a pixel value.
  * \param format an SDL_PixelFormat structure describing the format of the
- *               pixel
- * \param r a pointer filled in with the red component
- * \param g a pointer filled in with the green component
- * \param b a pointer filled in with the blue component
- * \param a a pointer filled in with the alpha component
+ *               pixel.
+ * \param r a pointer filled in with the red component.
+ * \param g a pointer filled in with the green component.
+ * \param b a pointer filled in with the blue component.
+ * \param a a pointer filled in with the alpha component.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -641,8 +665,8 @@
 /**
  * Calculate a 256 entry gamma ramp for a gamma value.
  *
- * \param gamma a gamma value where 0.0 is black and 1.0 is identity
- * \param ramp an array of 256 values filled in with the gamma ramp
+ * \param gamma a gamma value where 0.0 is black and 1.0 is identity.
+ * \param ramp an array of 256 values filled in with the gamma ramp.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_platform.h
+ * # CategoryPlatform
  *
- *  Try to get a standard set of platform defines.
+ * Try to get a standard set of platform defines.
  */
 
 #ifndef SDL_platform_h_
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_power.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_power.h
@@ -23,9 +23,9 @@
 #define SDL_power_h_
 
 /**
- *  \file SDL_power.h
+ * # CategoryPower
  *
- *  Header for the SDL power management routines.
+ * Header for the SDL power management routines.
  */
 
 #include "SDL_stdinc.h"
@@ -37,9 +37,9 @@
 #endif
 
 /**
- *  The basic state for the system's power supply.
+ * The basic state for the system's power supply.
  */
-typedef enum
+typedef enum SDL_PowerState
 {
     SDL_POWERSTATE_UNKNOWN,      /**< cannot determine power status */
     SDL_POWERSTATE_ON_BATTERY,   /**< Not plugged in, running on the battery */
@@ -66,10 +66,10 @@
  *
  * \param seconds seconds of battery life left, you can pass a NULL here if
  *                you don't care, will return -1 if we can't determine a
- *                value, or we're not running on a battery
+ *                value, or we're not running on a battery.
  * \param percent percentage of battery life left, between 0 and 100, you can
  *                pass a NULL here if you don't care, will return -1 if we
- *                can't determine a value, or we're not running on a battery
+ *                can't determine a value, or we're not running on a battery.
  * \returns an SDL_PowerState enum representing the current battery state.
  *
  * \since This function is available since SDL 2.0.0.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_quit.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_quit.h
@@ -20,9 +20,20 @@
 */
 
 /**
- *  \file SDL_quit.h
+ * # CategoryQuit
  *
- *  Include file for SDL quit event handling.
+ * An SDL_QUIT event is generated when the user tries to close the application
+ * window. If it is ignored or filtered out, the window will remain open. If
+ * it is not ignored or filtered, it is queued normally and the window is
+ * allowed to close. When the window is closed, screen updates will complete,
+ * but have no effect.
+ *
+ * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) and
+ * SIGTERM (system termination request), if handlers do not already exist,
+ * that generate SDL_QUIT events as well. There is no way to determine the
+ * cause of an SDL_QUIT event, but setting a signal handler in your
+ * application will override the default generation of quit events for that
+ * signal.
  */
 
 #ifndef SDL_quit_h_
@@ -30,25 +41,6 @@
 
 #include "SDL_stdinc.h"
 #include "SDL_error.h"
-
-/**
- *  \file SDL_quit.h
- *
- *  An ::SDL_QUIT event is generated when the user tries to close the application
- *  window.  If it is ignored or filtered out, the window will remain open.
- *  If it is not ignored or filtered, it is queued normally and the window
- *  is allowed to close.  When the window is closed, screen updates will
- *  complete, but have no effect.
- *
- *  SDL_Init() installs signal handlers for SIGINT (keyboard interrupt)
- *  and SIGTERM (system termination request), if handlers do not already
- *  exist, that generate ::SDL_QUIT events as well.  There is no way
- *  to determine the cause of an ::SDL_QUIT event, but setting a signal
- *  handler in your application will override the default generation of
- *  quit events for that signal.
- *
- *  \sa SDL_Quit()
- */
 
 /* There are no functions directly affecting the quit event */
 
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rect.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rect.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_rect.h
+ * # CategoryRect
  *
- *  Header file for SDL_rect definition and management functions.
+ * Header file for SDL_rect definition and management functions.
  */
 
 #ifndef SDL_rect_h_
@@ -135,8 +135,8 @@
  *
  * If either pointer is NULL the function will return SDL_FALSE.
  *
- * \param A an SDL_Rect structure representing the first rectangle
- * \param B an SDL_Rect structure representing the second rectangle
+ * \param A an SDL_Rect structure representing the first rectangle.
+ * \param B an SDL_Rect structure representing the second rectangle.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -151,10 +151,10 @@
  *
  * If `result` is NULL then this function will return SDL_FALSE.
  *
- * \param A an SDL_Rect structure representing the first rectangle
- * \param B an SDL_Rect structure representing the second rectangle
+ * \param A an SDL_Rect structure representing the first rectangle.
+ * \param B an SDL_Rect structure representing the second rectangle.
  * \param result an SDL_Rect structure filled in with the intersection of
- *               rectangles `A` and `B`
+ *               rectangles `A` and `B`.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -168,10 +168,10 @@
 /**
  * Calculate the union of two rectangles.
  *
- * \param A an SDL_Rect structure representing the first rectangle
- * \param B an SDL_Rect structure representing the second rectangle
+ * \param A an SDL_Rect structure representing the first rectangle.
+ * \param B an SDL_Rect structure representing the second rectangle.
  * \param result an SDL_Rect structure filled in with the union of rectangles
- *               `A` and `B`
+ *               `A` and `B`.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -186,11 +186,11 @@
  * considered.
  *
  * \param points an array of SDL_Point structures representing points to be
- *               enclosed
- * \param count the number of structures in the `points` array
- * \param clip an SDL_Rect used for clipping or NULL to enclose all points
+ *               enclosed.
+ * \param count the number of structures in the `points` array.
+ * \param clip an SDL_Rect used for clipping or NULL to enclose all points.
  * \param result an SDL_Rect structure filled in with the minimal enclosing
- *               rectangle
+ *               rectangle.
  * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the
  *          points were outside of the clipping rectangle.
  *
@@ -210,11 +210,11 @@
  * both ends will be clipped to the boundary of the rectangle and the new
  * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary.
  *
- * \param rect an SDL_Rect structure representing the rectangle to intersect
- * \param X1 a pointer to the starting X-coordinate of the line
- * \param Y1 a pointer to the starting Y-coordinate of the line
- * \param X2 a pointer to the ending X-coordinate of the line
- * \param Y2 a pointer to the ending Y-coordinate of the line
+ * \param rect an SDL_Rect structure representing the rectangle to intersect.
+ * \param X1 a pointer to the starting X-coordinate of the line.
+ * \param Y1 a pointer to the starting Y-coordinate of the line.
+ * \param X2 a pointer to the ending X-coordinate of the line.
+ * \param Y2 a pointer to the ending Y-coordinate of the line.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -274,8 +274,8 @@
  *
  * If either pointer is NULL the function will return SDL_FALSE.
  *
- * \param A an SDL_FRect structure representing the first rectangle
- * \param B an SDL_FRect structure representing the second rectangle
+ * \param A an SDL_FRect structure representing the first rectangle.
+ * \param B an SDL_FRect structure representing the second rectangle.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.22.
@@ -290,10 +290,10 @@
  *
  * If `result` is NULL then this function will return SDL_FALSE.
  *
- * \param A an SDL_FRect structure representing the first rectangle
- * \param B an SDL_FRect structure representing the second rectangle
+ * \param A an SDL_FRect structure representing the first rectangle.
+ * \param B an SDL_FRect structure representing the second rectangle.
  * \param result an SDL_FRect structure filled in with the intersection of
- *               rectangles `A` and `B`
+ *               rectangles `A` and `B`.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.22.
@@ -307,10 +307,10 @@
 /**
  * Calculate the union of two rectangles with float precision.
  *
- * \param A an SDL_FRect structure representing the first rectangle
- * \param B an SDL_FRect structure representing the second rectangle
+ * \param A an SDL_FRect structure representing the first rectangle.
+ * \param B an SDL_FRect structure representing the second rectangle.
  * \param result an SDL_FRect structure filled in with the union of rectangles
- *               `A` and `B`
+ *               `A` and `B`.
  *
  * \since This function is available since SDL 2.0.22.
  */
@@ -326,11 +326,11 @@
  * considered.
  *
  * \param points an array of SDL_FPoint structures representing points to be
- *               enclosed
- * \param count the number of structures in the `points` array
- * \param clip an SDL_FRect used for clipping or NULL to enclose all points
+ *               enclosed.
+ * \param count the number of structures in the `points` array.
+ * \param clip an SDL_FRect used for clipping or NULL to enclose all points.
  * \param result an SDL_FRect structure filled in with the minimal enclosing
- *               rectangle
+ *               rectangle.
  * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the
  *          points were outside of the clipping rectangle.
  *
@@ -351,11 +351,11 @@
  * both ends will be clipped to the boundary of the rectangle and the new
  * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary.
  *
- * \param rect an SDL_FRect structure representing the rectangle to intersect
- * \param X1 a pointer to the starting X-coordinate of the line
- * \param Y1 a pointer to the starting Y-coordinate of the line
- * \param X2 a pointer to the ending X-coordinate of the line
- * \param Y2 a pointer to the ending Y-coordinate of the line
+ * \param rect an SDL_FRect structure representing the rectangle to intersect.
+ * \param X1 a pointer to the starting X-coordinate of the line.
+ * \param Y1 a pointer to the starting Y-coordinate of the line.
+ * \param X2 a pointer to the ending X-coordinate of the line.
+ * \param Y2 a pointer to the ending Y-coordinate of the line.
  * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.22.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_render.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_render.h
@@ -20,29 +20,30 @@
 */
 
 /**
- *  \file SDL_render.h
+ * # CategoryRender
  *
- *  Header file for SDL 2D rendering functions.
+ * Header file for SDL 2D rendering functions.
  *
- *  This API supports the following features:
- *      * single pixel points
- *      * single pixel lines
- *      * filled rectangles
- *      * texture images
+ * This API supports the following features:
  *
- *  The primitives may be drawn in opaque, blended, or additive modes.
+ * - single pixel points
+ * - single pixel lines
+ * - filled rectangles
+ * - texture images
  *
- *  The texture images may be drawn in opaque, blended, or additive modes.
- *  They can have an additional color tint or alpha modulation applied to
- *  them, and may also be stretched with linear interpolation.
+ * The primitives may be drawn in opaque, blended, or additive modes.
  *
- *  This API is designed to accelerate simple 2D operations. You may
- *  want more functionality such as polygons and particle effects and
- *  in that case you should use SDL's OpenGL/Direct3D support or one
- *  of the many good 3D engines.
+ * The texture images may be drawn in opaque, blended, or additive modes. They
+ * can have an additional color tint or alpha modulation applied to them, and
+ * may also be stretched with linear interpolation.
  *
- *  These functions must be called from the main thread.
- *  See this bug for details: https://github.com/libsdl-org/SDL/issues/986
+ * This API is designed to accelerate simple 2D operations. You may want more
+ * functionality such as polygons and particle effects and in that case you
+ * should use SDL's OpenGL/Direct3D support or one of the many good 3D
+ * engines.
+ *
+ * These functions must be called from the main thread. See this bug for
+ * details: https://github.com/libsdl-org/SDL/issues/986
  */
 
 #ifndef SDL_render_h_
@@ -61,7 +62,7 @@
 /**
  * Flags used when creating a rendering context
  */
-typedef enum
+typedef enum SDL_RendererFlags
 {
     SDL_RENDERER_SOFTWARE = 0x00000001,         /**< The renderer is a software fallback */
     SDL_RENDERER_ACCELERATED = 0x00000002,      /**< The renderer uses hardware
@@ -78,7 +79,7 @@
 typedef struct SDL_RendererInfo
 {
     const char *name;           /**< The name of the renderer */
-    Uint32 flags;               /**< Supported ::SDL_RendererFlags */
+    Uint32 flags;               /**< Supported SDL_RendererFlags */
     Uint32 num_texture_formats; /**< The number of available texture formats */
     Uint32 texture_formats[16]; /**< The available texture formats */
     int max_texture_width;      /**< The maximum texture width */
@@ -86,7 +87,7 @@
 } SDL_RendererInfo;
 
 /**
- *  Vertex structure
+ * Vertex structure
  */
 typedef struct SDL_Vertex
 {
@@ -98,7 +99,7 @@
 /**
  * The scaling mode for a texture.
  */
-typedef enum
+typedef enum SDL_ScaleMode
 {
     SDL_ScaleModeNearest, /**< nearest pixel sampling */
     SDL_ScaleModeLinear,  /**< linear filtering */
@@ -108,7 +109,7 @@
 /**
  * The access pattern allowed for a texture.
  */
-typedef enum
+typedef enum SDL_TextureAccess
 {
     SDL_TEXTUREACCESS_STATIC,    /**< Changes rarely, not lockable */
     SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */
@@ -118,7 +119,7 @@
 /**
  * The texture channel modulation used in SDL_RenderCopy().
  */
-typedef enum
+typedef enum SDL_TextureModulate
 {
     SDL_TEXTUREMODULATE_NONE = 0x00000000,     /**< No modulation */
     SDL_TEXTUREMODULATE_COLOR = 0x00000001,    /**< srcC = srcC * color */
@@ -128,7 +129,7 @@
 /**
  * Flip constants for SDL_RenderCopyEx
  */
-typedef enum
+typedef enum SDL_RendererFlip
 {
     SDL_FLIP_NONE = 0x00000000,     /**< Do not flip */
     SDL_FLIP_HORIZONTAL = 0x00000001,    /**< flip horizontally */
@@ -171,9 +172,9 @@
 /**
  * Get info about a specific 2D rendering driver for the current display.
  *
- * \param index the index of the driver to query information about
+ * \param index the index of the driver to query information about.
  * \param info an SDL_RendererInfo structure to be filled with information on
- *             the rendering driver
+ *             the rendering driver.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -188,12 +189,12 @@
 /**
  * Create a window and default renderer.
  *
- * \param width the width of the window
- * \param height the height of the window
+ * \param width the width of the window.
+ * \param height the height of the window.
  * \param window_flags the flags used to create the window (see
- *                     SDL_CreateWindow())
- * \param window a pointer filled with the window, or NULL on error
- * \param renderer a pointer filled with the renderer, or NULL on error
+ *                     SDL_CreateWindow()).
+ * \param window a pointer filled with the window, or NULL on error.
+ * \param renderer a pointer filled with the renderer, or NULL on error.
  * \returns 0 on success, or -1 on error; call SDL_GetError() for more
  *          information.
  *
@@ -210,10 +211,10 @@
 /**
  * Create a 2D rendering context for a window.
  *
- * \param window the window where rendering is displayed
+ * \param window the window where rendering is displayed.
  * \param index the index of the rendering driver to initialize, or -1 to
- *              initialize the first one supporting the requested flags
- * \param flags 0, or one or more SDL_RendererFlags OR'd together
+ *              initialize the first one supporting the requested flags.
+ * \param flags 0, or one or more SDL_RendererFlags OR'd together.
  * \returns a valid rendering context or NULL if there was an error; call
  *          SDL_GetError() for more information.
  *
@@ -236,7 +237,7 @@
  * SDL_Window as the final destination and not an SDL_Surface.
  *
  * \param surface the SDL_Surface structure representing the surface where
- *                rendering is done
+ *                rendering is done.
  * \returns a valid rendering context or NULL if there was an error; call
  *          SDL_GetError() for more information.
  *
@@ -251,7 +252,7 @@
 /**
  * Get the renderer associated with a window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the rendering context on success or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -264,7 +265,7 @@
 /**
  * Get the window associated with a renderer.
  *
- * \param renderer the renderer to query
+ * \param renderer the renderer to query.
  * \returns the window on success or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -275,9 +276,9 @@
 /**
  * Get information about a rendering context.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param info an SDL_RendererInfo structure filled with information about the
- *             current renderer
+ *             current renderer.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -295,9 +296,9 @@
  * has more pixels than the window that contains it, so use this instead of
  * SDL_GetWindowSize() to decide how much drawing area you have.
  *
- * \param renderer the rendering context
- * \param w an int filled with the width
- * \param h an int filled with the height
+ * \param renderer the rendering context.
+ * \param w an int filled with the width.
+ * \param h an int filled with the height.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -314,11 +315,11 @@
  * You can set the texture scaling method by setting
  * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture.
  *
- * \param renderer the rendering context
- * \param format one of the enumerated values in SDL_PixelFormatEnum
- * \param access one of the enumerated values in SDL_TextureAccess
- * \param w the width of the texture in pixels
- * \param h the height of the texture in pixels
+ * \param renderer the rendering context.
+ * \param format one of the enumerated values in SDL_PixelFormatEnum.
+ * \param access one of the enumerated values in SDL_TextureAccess.
+ * \param w the width of the texture in pixels.
+ * \param h the height of the texture in pixels.
  * \returns a pointer to the created texture or NULL if no rendering context
  *          was active, the format was unsupported, or the width or height
  *          were out of range; call SDL_GetError() for more information.
@@ -347,9 +348,9 @@
  * format of the surface. Use SDL_QueryTexture() to query the pixel format of
  * the texture.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param surface the SDL_Surface structure containing pixel data used to fill
- *                the texture
+ *                the texture.
  * \returns the created texture or NULL on failure; call SDL_GetError() for
  *          more information.
  *
@@ -364,7 +365,7 @@
 /**
  * Query the attributes of a texture.
  *
- * \param texture the texture to query
+ * \param texture the texture to query.
  * \param format a pointer filled in with the raw format of the texture; the
  *               actual format may differ, but pixel transfers will use this
  *               format (one of the SDL_PixelFormatEnum values). This argument
@@ -399,10 +400,10 @@
  * Color modulation is not always supported by the renderer; it will return -1
  * if color modulation is not supported.
  *
- * \param texture the texture to update
- * \param r the red color value multiplied into copy operations
- * \param g the green color value multiplied into copy operations
- * \param b the blue color value multiplied into copy operations
+ * \param texture the texture to update.
+ * \param r the red color value multiplied into copy operations.
+ * \param g the green color value multiplied into copy operations.
+ * \param b the blue color value multiplied into copy operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -418,10 +419,10 @@
 /**
  * Get the additional color value multiplied into render copy operations.
  *
- * \param texture the texture to query
- * \param r a pointer filled in with the current red color value
- * \param g a pointer filled in with the current green color value
- * \param b a pointer filled in with the current blue color value
+ * \param texture the texture to query.
+ * \param r a pointer filled in with the current red color value.
+ * \param g a pointer filled in with the current green color value.
+ * \param b a pointer filled in with the current blue color value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -445,8 +446,8 @@
  * Alpha modulation is not always supported by the renderer; it will return -1
  * if alpha modulation is not supported.
  *
- * \param texture the texture to update
- * \param alpha the source alpha value multiplied into copy operations
+ * \param texture the texture to update.
+ * \param alpha the source alpha value multiplied into copy operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -461,8 +462,8 @@
 /**
  * Get the additional alpha value multiplied into render copy operations.
  *
- * \param texture the texture to query
- * \param alpha a pointer filled in with the current alpha value
+ * \param texture the texture to query.
+ * \param alpha a pointer filled in with the current alpha value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -480,8 +481,8 @@
  * If the blend mode is not supported, the closest supported mode is chosen
  * and this function returns -1.
  *
- * \param texture the texture to update
- * \param blendMode the SDL_BlendMode to use for texture blending
+ * \param texture the texture to update.
+ * \param blendMode the SDL_BlendMode to use for texture blending.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -496,8 +497,8 @@
 /**
  * Get the blend mode used for texture copy operations.
  *
- * \param texture the texture to query
- * \param blendMode a pointer filled in with the current SDL_BlendMode
+ * \param texture the texture to query.
+ * \param blendMode a pointer filled in with the current SDL_BlendMode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -579,12 +580,12 @@
  * While this function will work with streaming textures, for optimization
  * reasons you may not get the pixels back if you lock the texture afterward.
  *
- * \param texture the texture to update
+ * \param texture the texture to update.
  * \param rect an SDL_Rect structure representing the area to update, or NULL
- *             to update the entire texture
- * \param pixels the raw pixel data in the format of the texture
+ *             to update the entire texture.
+ * \param pixels the raw pixel data in the format of the texture.
  * \param pitch the number of bytes in a row of pixel data, including padding
- *              between lines
+ *              between lines.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -606,18 +607,18 @@
  * block of Y and U/V planes in the proper order, but this function is
  * available if your pixel data is not contiguous.
  *
- * \param texture the texture to update
+ * \param texture the texture to update.
  * \param rect a pointer to the rectangle of pixels to update, or NULL to
- *             update the entire texture
- * \param Yplane the raw pixel data for the Y plane
+ *             update the entire texture.
+ * \param Yplane the raw pixel data for the Y plane.
  * \param Ypitch the number of bytes between rows of pixel data for the Y
- *               plane
- * \param Uplane the raw pixel data for the U plane
+ *               plane.
+ * \param Uplane the raw pixel data for the U plane.
  * \param Upitch the number of bytes between rows of pixel data for the U
- *               plane
- * \param Vplane the raw pixel data for the V plane
+ *               plane.
+ * \param Vplane the raw pixel data for the V plane.
  * \param Vpitch the number of bytes between rows of pixel data for the V
- *               plane
+ *               plane.
  * \returns 0 on success or -1 if the texture is not valid; call
  *          SDL_GetError() for more information.
  *
@@ -638,7 +639,7 @@
  * block of NV12/21 planes in the proper order, but this function is available
  * if your pixel data is not contiguous.
  *
- * \param texture the texture to update
+ * \param texture the texture to update.
  * \param rect a pointer to the rectangle of pixels to update, or NULL to
  *             update the entire texture.
  * \param Yplane the raw pixel data for the Y plane.
@@ -668,13 +669,13 @@
  * changes.
  *
  * \param texture the texture to lock for access, which was created with
- *                `SDL_TEXTUREACCESS_STREAMING`
+ *                `SDL_TEXTUREACCESS_STREAMING`.
  * \param rect an SDL_Rect structure representing the area to lock for access;
- *             NULL to lock the entire texture
+ *             NULL to lock the entire texture.
  * \param pixels this is filled in with a pointer to the locked pixels,
- *               appropriately offset by the locked area
+ *               appropriately offset by the locked area.
  * \param pitch this is filled in with the pitch of the locked pixels; the
- *              pitch is the length of one row in bytes
+ *              pitch is the length of one row in bytes.
  * \returns 0 on success or a negative error code if the texture is not valid
  *          or was not created with `SDL_TEXTUREACCESS_STREAMING`; call
  *          SDL_GetError() for more information.
@@ -706,13 +707,13 @@
  * or SDL_DestroyTexture(). The caller should not free it.
  *
  * \param texture the texture to lock for access, which was created with
- *                `SDL_TEXTUREACCESS_STREAMING`
+ *                `SDL_TEXTUREACCESS_STREAMING`.
  * \param rect a pointer to the rectangle to lock for access. If the rect is
- *             NULL, the entire texture will be locked
+ *             NULL, the entire texture will be locked.
  * \param surface this is filled in with an SDL surface representing the
- *                locked area
+ *                locked area.
  * \returns 0 on success, or -1 if the texture is not valid or was not created
- *          with `SDL_TEXTUREACCESS_STREAMING`
+ *          with `SDL_TEXTUREACCESS_STREAMING`.
  *
  * \since This function is available since SDL 2.0.12.
  *
@@ -734,7 +735,7 @@
  * Which is to say: locking and immediately unlocking a texture can result in
  * corrupted textures, depending on the renderer in use.
  *
- * \param texture a texture locked by SDL_LockTexture()
+ * \param texture a texture locked by SDL_LockTexture().
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -745,7 +746,7 @@
 /**
  * Determine whether a renderer supports the use of render targets.
  *
- * \param renderer the renderer that will be checked
+ * \param renderer the renderer that will be checked.
  * \returns SDL_TRUE if supported or SDL_FALSE if not.
  *
  * \since This function is available since SDL 2.0.0.
@@ -763,9 +764,12 @@
  *
  * The default render target is the window for which the renderer was created.
  * To stop rendering to a texture and render to the window again, call this
- * function with a NULL `texture`.
+ * function with a NULL `texture`. This will reset the renderer's viewport,
+ * clipping rectangle, and scaling settings to the state they were in before
+ * setting a non-NULL `texture` target, losing any changes made in the
+ * meantime.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param texture the targeted texture, which must be created with the
  *                `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the
  *                window instead of a texture.
@@ -785,7 +789,7 @@
  * The default render target is the window for which the renderer was created,
  * and is reported a NULL here.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \returns the current render target or NULL for the default render target.
  *
  * \since This function is available since SDL 2.0.0.
@@ -810,9 +814,9 @@
  * If this function results in scaling or subpixel drawing by the rendering
  * backend, it will be handled using the appropriate quality hints.
  *
- * \param renderer the renderer for which resolution should be set
- * \param w the width of the logical resolution
- * \param h the height of the logical resolution
+ * \param renderer the renderer for which resolution should be set.
+ * \param w the width of the logical resolution.
+ * \param h the height of the logical resolution.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -833,9 +837,9 @@
  * When using a target texture: Never return 0 for `w` and `h` at first. Then
  * it returns the logical width and height that are set.
  *
- * \param renderer a rendering context
- * \param w an int to be filled with the width
- * \param h an int to be filled with the height
+ * \param renderer a rendering context.
+ * \param w an int to be filled with the width.
+ * \param h an int to be filled with the height.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -850,8 +854,8 @@
  * when a resolution is between two multiples of a logical size, the viewport
  * size is rounded down to the lower multiple.
  *
- * \param renderer the renderer for which integer scaling should be set
- * \param enable enable or disable the integer scaling for rendering
+ * \param renderer the renderer for which integer scaling should be set.
+ * \param enable enable or disable the integer scaling for rendering.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -866,7 +870,7 @@
 /**
  * Get whether integer scales are forced for resolution-independent rendering.
  *
- * \param renderer the renderer from which integer scaling should be queried
+ * \param renderer the renderer from which integer scaling should be queried.
  * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on
  *          failure; call SDL_GetError() for more information.
  *
@@ -882,9 +886,9 @@
  * When the window is resized, the viewport is reset to fill the entire new
  * window size.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect the SDL_Rect structure representing the drawing area, or NULL
- *             to set the viewport to the entire target
+ *             to set the viewport to the entire target.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -898,8 +902,8 @@
 /**
  * Get the drawing area for the current target.
  *
- * \param renderer the rendering context
- * \param rect an SDL_Rect structure filled in with the current drawing area
+ * \param renderer the rendering context.
+ * \param rect an SDL_Rect structure filled in with the current drawing area.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -912,9 +916,9 @@
  * Set the clip rectangle for rendering on the specified target.
  *
  * \param renderer the rendering context for which clip rectangle should be
- *                 set
+ *                 set.
  * \param rect an SDL_Rect structure representing the clip area, relative to
- *             the viewport, or NULL to disable clipping
+ *             the viewport, or NULL to disable clipping.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -930,9 +934,9 @@
  * Get the clip rectangle for the current target.
  *
  * \param renderer the rendering context from which clip rectangle should be
- *                 queried
+ *                 queried.
  * \param rect an SDL_Rect structure filled in with the current clipping area
- *             or an empty rectangle if clipping is disabled
+ *             or an empty rectangle if clipping is disabled.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -945,7 +949,7 @@
 /**
  * Get whether clipping is enabled on the given renderer.
  *
- * \param renderer the renderer from which clip state should be queried
+ * \param renderer the renderer from which clip state should be queried.
  * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call
  *          SDL_GetError() for more information.
  *
@@ -968,9 +972,9 @@
  * will be handled using the appropriate quality hints. For best results use
  * integer scaling factors.
  *
- * \param renderer a rendering context
- * \param scaleX the horizontal scaling factor
- * \param scaleY the vertical scaling factor
+ * \param renderer a rendering context.
+ * \param scaleX the horizontal scaling factor.
+ * \param scaleY the vertical scaling factor.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -985,9 +989,9 @@
 /**
  * Get the drawing scale for the current target.
  *
- * \param renderer the renderer from which drawing scale should be queried
- * \param scaleX a pointer filled in with the horizontal scaling factor
- * \param scaleY a pointer filled in with the vertical scaling factor
+ * \param renderer the renderer from which drawing scale should be queried.
+ * \param scaleX a pointer filled in with the horizontal scaling factor.
+ * \param scaleY a pointer filled in with the vertical scaling factor.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1004,11 +1008,11 @@
  * and logical renderer size set
  *
  * \param renderer the renderer from which the logical coordinates should be
- *                 calculated
- * \param windowX the real X coordinate in the window
- * \param windowY the real Y coordinate in the window
- * \param logicalX the pointer filled with the logical x coordinate
- * \param logicalY the pointer filled with the logical y coordinate
+ *                 calculated.
+ * \param windowX the real X coordinate in the window.
+ * \param windowY the real Y coordinate in the window.
+ * \param logicalX the pointer filled with the logical x coordinate.
+ * \param logicalY the pointer filled with the logical y coordinate.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1030,11 +1034,11 @@
  * and logical renderer size set
  *
  * \param renderer the renderer from which the window coordinates should be
- *                 calculated
- * \param logicalX the logical x coordinate
- * \param logicalY the logical y coordinate
- * \param windowX the pointer filled with the real X coordinate in the window
- * \param windowY the pointer filled with the real Y coordinate in the window
+ *                 calculated.
+ * \param logicalX the logical x coordinate.
+ * \param logicalY the logical y coordinate.
+ * \param windowX the pointer filled with the real X coordinate in the window.
+ * \param windowY the pointer filled with the real Y coordinate in the window.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1053,13 +1057,13 @@
  * Set the color for drawing or filling rectangles, lines, and points, and for
  * SDL_RenderClear().
  *
- * \param renderer the rendering context
- * \param r the red value used to draw on the rendering target
- * \param g the green value used to draw on the rendering target
- * \param b the blue value used to draw on the rendering target
+ * \param renderer the rendering context.
+ * \param r the red value used to draw on the rendering target.
+ * \param g the green value used to draw on the rendering target.
+ * \param b the blue value used to draw on the rendering target.
  * \param a the alpha value used to draw on the rendering target; usually
  *          `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to
- *          specify how the alpha channel is used
+ *          specify how the alpha channel is used.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1083,15 +1087,15 @@
 /**
  * Get the color used for drawing operations (Rect, Line and Clear).
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param r a pointer filled in with the red value used to draw on the
- *          rendering target
+ *          rendering target.
  * \param g a pointer filled in with the green value used to draw on the
- *          rendering target
+ *          rendering target.
  * \param b a pointer filled in with the blue value used to draw on the
- *          rendering target
+ *          rendering target.
  * \param a a pointer filled in with the alpha value used to draw on the
- *          rendering target; usually `SDL_ALPHA_OPAQUE` (255)
+ *          rendering target; usually `SDL_ALPHA_OPAQUE` (255).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1108,8 +1112,8 @@
  *
  * If the blend mode is not supported, the closest supported mode is chosen.
  *
- * \param renderer the rendering context
- * \param blendMode the SDL_BlendMode to use for blending
+ * \param renderer the rendering context.
+ * \param blendMode the SDL_BlendMode to use for blending.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1131,8 +1135,8 @@
 /**
  * Get the blend mode used for drawing operations.
  *
- * \param renderer the rendering context
- * \param blendMode a pointer filled in with the current SDL_BlendMode
+ * \param renderer the rendering context.
+ * \param blendMode a pointer filled in with the current SDL_BlendMode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1149,7 +1153,7 @@
  * This function clears the entire rendering target, ignoring the viewport and
  * the clip rectangle.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1165,9 +1169,9 @@
  * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple,
  * use SDL_RenderDrawPoints() instead.
  *
- * \param renderer the rendering context
- * \param x the x coordinate of the point
- * \param y the y coordinate of the point
+ * \param renderer the rendering context.
+ * \param x the x coordinate of the point.
+ * \param y the y coordinate of the point.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1190,10 +1194,10 @@
 /**
  * Draw multiple points on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param points an array of SDL_Point structures that represent the points to
- *               draw
- * \param count the number of points to draw
+ *               draw.
+ * \param count the number of points to draw.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1220,11 +1224,11 @@
  * SDL_RenderDrawLine() draws the line to include both end points. If you want
  * to draw multiple, connecting lines use SDL_RenderDrawLines() instead.
  *
- * \param renderer the rendering context
- * \param x1 the x coordinate of the start point
- * \param y1 the y coordinate of the start point
- * \param x2 the x coordinate of the end point
- * \param y2 the y coordinate of the end point
+ * \param renderer the rendering context.
+ * \param x1 the x coordinate of the start point.
+ * \param y1 the y coordinate of the start point.
+ * \param x2 the x coordinate of the end point.
+ * \param y2 the y coordinate of the end point.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1247,10 +1251,10 @@
 /**
  * Draw a series of connected lines on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param points an array of SDL_Point structures representing points along
- *               the lines
- * \param count the number of points, drawing count-1 lines
+ *               the lines.
+ * \param count the number of points, drawing count-1 lines.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1274,9 +1278,9 @@
 /**
  * Draw a rectangle on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect an SDL_Rect structure representing the rectangle to draw, or
- *             NULL to outline the entire rendering target
+ *             NULL to outline the entire rendering target.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1299,10 +1303,10 @@
 /**
  * Draw some number of rectangles on the current rendering target.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rects an array of SDL_Rect structures representing the rectangles to
- *              be drawn
- * \param count the number of rectangles
+ *              be drawn.
+ * \param count the number of rectangles.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1330,9 +1334,9 @@
  * color's alpha value is ignored unless blending is enabled with the
  * appropriate call to SDL_SetRenderDrawBlendMode().
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect the SDL_Rect structure representing the rectangle to fill, or
- *             NULL for the entire rendering target
+ *             NULL for the entire rendering target.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1356,10 +1360,10 @@
  * Fill some number of rectangles on the current rendering target with the
  * drawing color.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rects an array of SDL_Rect structures representing the rectangles to
- *              be filled
- * \param count the number of rectangles
+ *              be filled.
+ * \param count the number of rectangles.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1390,12 +1394,13 @@
  * The texture alpha is affected based on its alpha modulation set by
  * SDL_SetTextureAlphaMod().
  *
- * \param renderer the rendering context
- * \param texture the source texture
- * \param srcrect the source SDL_Rect structure or NULL for the entire texture
+ * \param renderer the rendering context.
+ * \param texture the source texture.
+ * \param srcrect the source SDL_Rect structure or NULL for the entire
+ *                texture.
  * \param dstrect the destination SDL_Rect structure or NULL for the entire
  *                rendering target; the texture will be stretched to fill the
- *                given rectangle
+ *                given rectangle.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1428,18 +1433,19 @@
  * The texture alpha is affected based on its alpha modulation set by
  * SDL_SetTextureAlphaMod().
  *
- * \param renderer the rendering context
- * \param texture the source texture
- * \param srcrect the source SDL_Rect structure or NULL for the entire texture
+ * \param renderer the rendering context.
+ * \param texture the source texture.
+ * \param srcrect the source SDL_Rect structure or NULL for the entire
+ *                texture.
  * \param dstrect the destination SDL_Rect structure or NULL for the entire
- *                rendering target
+ *                rendering target.
  * \param angle an angle in degrees that indicates the rotation that will be
- *              applied to dstrect, rotating it in a clockwise direction
+ *              applied to dstrect, rotating it in a clockwise direction.
  * \param center a pointer to a point indicating the point around which
  *               dstrect will be rotated (if NULL, rotation will be done
- *               around `dstrect.w / 2`, `dstrect.h / 2`)
+ *               around `dstrect.w / 2`, `dstrect.h / 2`).
  * \param flip a SDL_RendererFlip value stating which flipping actions should
- *             be performed on the texture
+ *             be performed on the texture.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1465,7 +1471,7 @@
  * \param renderer The renderer which should draw a point.
  * \param x The x coordinate of the point.
  * \param y The y coordinate of the point.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1476,9 +1482,9 @@
  * Draw multiple points on the current rendering target at subpixel precision.
  *
  * \param renderer The renderer which should draw multiple points.
- * \param points The points to draw
- * \param count The number of points to draw
- * \return 0 on success, or -1 on error
+ * \param points The points to draw.
+ * \param count The number of points to draw.
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1494,7 +1500,7 @@
  * \param y1 The y coordinate of the start point.
  * \param x2 The x coordinate of the end point.
  * \param y2 The y coordinate of the end point.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1506,9 +1512,9 @@
  * subpixel precision.
  *
  * \param renderer The renderer which should draw multiple lines.
- * \param points The points along the lines
- * \param count The number of points, drawing count-1 lines
- * \return 0 on success, or -1 on error
+ * \param points The points along the lines.
+ * \param count The number of points, drawing count-1 lines.
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1522,7 +1528,7 @@
  * \param renderer The renderer which should draw a rectangle.
  * \param rect A pointer to the destination rectangle, or NULL to outline the
  *             entire rendering target.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1536,7 +1542,7 @@
  * \param renderer The renderer which should draw multiple rectangles.
  * \param rects A pointer to an array of destination rectangles.
  * \param count The number of rectangles.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1551,7 +1557,7 @@
  * \param renderer The renderer which should fill a rectangle.
  * \param rect A pointer to the destination rectangle, or NULL for the entire
  *             rendering target.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1565,7 +1571,7 @@
  * \param renderer The renderer which should fill multiple rectangles.
  * \param rects A pointer to an array of destination rectangles.
  * \param count The number of rectangles.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1583,7 +1589,7 @@
  *                texture.
  * \param dstrect A pointer to the destination rectangle, or NULL for the
  *                entire rendering target.
- * \return 0 on success, or -1 on error
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1603,13 +1609,13 @@
  * \param dstrect A pointer to the destination rectangle, or NULL for the
  *                entire rendering target.
  * \param angle An angle in degrees that indicates the rotation that will be
- *              applied to dstrect, rotating it in a clockwise direction
+ *              applied to dstrect, rotating it in a clockwise direction.
  * \param center A pointer to a point indicating the point around which
  *               dstrect will be rotated (if NULL, rotation will be done
  *               around dstrect.w/2, dstrect.h/2).
  * \param flip An SDL_RendererFlip value stating which flipping actions should
- *             be performed on the texture
- * \return 0 on success, or -1 on error
+ *             be performed on the texture.
+ * \return 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
  */
@@ -1634,7 +1640,7 @@
  *                array, if NULL all vertices will be rendered in sequential
  *                order.
  * \param num_indices Number of indices.
- * \return 0 on success, or -1 if the operation is not supported
+ * \return 0 on success, or -1 if the operation is not supported.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1653,18 +1659,18 @@
  *
  * \param renderer The rendering context.
  * \param texture (optional) The SDL texture to use.
- * \param xy Vertex positions
- * \param xy_stride Byte size to move from one element to the next element
- * \param color Vertex colors (as SDL_Color)
- * \param color_stride Byte size to move from one element to the next element
- * \param uv Vertex normalized texture coordinates
- * \param uv_stride Byte size to move from one element to the next element
+ * \param xy Vertex positions.
+ * \param xy_stride Byte size to move from one element to the next element.
+ * \param color Vertex colors (as SDL_Color).
+ * \param color_stride Byte size to move from one element to the next element.
+ * \param uv Vertex normalized texture coordinates.
+ * \param uv_stride Byte size to move from one element to the next element.
  * \param num_vertices Number of vertices.
  * \param indices (optional) An array of indices into the 'vertices' arrays,
  *                if NULL all vertices will be rendered in sequential order.
  * \param num_indices Number of indices.
- * \param size_indices Index size: 1 (byte), 2 (short), 4 (int)
- * \return 0 on success, or -1 if the operation is not supported
+ * \param size_indices Index size: 1 (byte), 2 (short), 4 (int).
+ * \return 0 on success, or -1 if the operation is not supported.
  *
  * \since This function is available since SDL 2.0.18.
  *
@@ -1693,13 +1699,13 @@
  * but it might contain additional padding (for example, 24bit RGB Windows
  * Bitmap data pads all rows to multiples of 4 bytes).
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \param rect an SDL_Rect structure representing the area to read, or NULL
- *             for the entire render target
+ *             for the entire render target.
  * \param format an SDL_PixelFormatEnum value of the desired format of the
- *               pixel data, or 0 to use the format of the rendering target
- * \param pixels a pointer to the pixel data to copy into
- * \param pitch the pitch of the `pixels` parameter
+ *               pixel data, or 0 to use the format of the rendering target.
+ * \param pixels a pointer to the pixel data to copy into.
+ * \param pitch the pitch of the `pixels` parameter.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1729,7 +1735,7 @@
  * starting each new frame's drawing, even if you plan to overwrite every
  * pixel.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  *
  * \threadsafety You may only call this function on the main thread. If this
  *               happens to work on a background thread on any given platform
@@ -1738,6 +1744,7 @@
  *
  * \since This function is available since SDL 2.0.0.
  *
+ * \sa SDL_CreateRenderer
  * \sa SDL_RenderClear
  * \sa SDL_RenderDrawLine
  * \sa SDL_RenderDrawLines
@@ -1758,7 +1765,7 @@
  * Passing NULL or an otherwise invalid texture will set the SDL error message
  * to "Invalid texture".
  *
- * \param texture the texture to destroy
+ * \param texture the texture to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1773,7 +1780,7 @@
  * If `renderer` is NULL, this function will return immediately after setting
  * the SDL error message to "Invalid renderer". See SDL_GetError().
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1804,7 +1811,7 @@
  * and earlier, as earlier versions did not queue rendering commands at all,
  * instead flushing them to the OS immediately.
  *
- * \param renderer the rendering context
+ * \param renderer the rendering context.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1835,11 +1842,11 @@
  * re-order the color channels in the shaders phase, so the uploaded texture
  * may have swapped color channels.
  *
- * \param texture the texture to bind to the current OpenGL/ES/ES2 context
+ * \param texture the texture to bind to the current OpenGL/ES/ES2 context.
  * \param texw a pointer to a float value which will be filled with the
- *             texture width or NULL if you don't need that value
+ *             texture width or NULL if you don't need that value.
  * \param texh a pointer to a float value which will be filled with the
- *             texture height or NULL if you don't need that value
+ *             texture height or NULL if you don't need that value.
  * \returns 0 on success, or -1 if the operation is not supported; call
  *          SDL_GetError() for more information.
  *
@@ -1855,8 +1862,9 @@
  *
  * See SDL_GL_BindTexture() for examples on how to use these functions
  *
- * \param texture the texture to unbind from the current OpenGL/ES/ES2 context
- * \returns 0 on success, or -1 if the operation is not supported
+ * \param texture the texture to unbind from the current OpenGL/ES/ES2
+ *                context.
+ * \returns 0 on success, or -1 if the operation is not supported.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1871,9 +1879,9 @@
  * This function returns `void *`, so SDL doesn't have to include Metal's
  * headers, but it can be safely cast to a `CAMetalLayer *`.
  *
- * \param renderer The renderer to query
+ * \param renderer The renderer to query.
  * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a
- *          Metal renderer
+ *          Metal renderer.
  *
  * \since This function is available since SDL 2.0.8.
  *
@@ -1892,7 +1900,7 @@
  * hidden/minimized/offscreen. This doesn't apply to command encoders for
  * render targets, just the window's backbuffer. Check your return values!
  *
- * \param renderer The renderer to query
+ * \param renderer The renderer to query.
  * \returns an `id<MTLRenderCommandEncoder>` on success, or NULL if the
  *          renderer isn't a Metal renderer or there was an error.
  *
@@ -1905,9 +1913,9 @@
 /**
  * Toggle VSync of the given renderer.
  *
- * \param renderer The renderer to toggle
- * \param vsync 1 for on, 0 for off. All other values are reserved
- * \returns a 0 int on success, or non-zero on failure
+ * \param renderer The renderer to toggle.
+ * \param vsync 1 for on, 0 for off. All other values are reserved.
+ * \returns a 0 int on success, or non-zero on failure.
  *
  * \since This function is available since SDL 2.0.18.
  */
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rwops.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rwops.h
@@ -19,11 +19,13 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: RWOPS */
+
 /**
- *  \file SDL_rwops.h
+ * # CategoryRWOPS
  *
- *  This file provides a general interface for SDL to read and write
- *  data streams.  It can easily be extended to files, memory, etc.
+ * This file provides a general interface for SDL to read and write data
+ * streams. It can easily be extended to files, memory, etc.
  */
 
 #ifndef SDL_rwops_h_
@@ -57,7 +59,7 @@
     Sint64 (SDLCALL * size) (struct SDL_RWops * context);
 
     /**
-     *  Seek to \c offset relative to \c whence, one of stdio's whence values:
+     *  Seek to `offset` relative to `whence`, one of stdio's whence values:
      *  RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END
      *
      *  \return the final offset in the data stream, or -1 on error.
@@ -66,8 +68,8 @@
                              int whence);
 
     /**
-     *  Read up to \c maxnum objects each of size \c size from the data
-     *  stream to the area pointed at by \c ptr.
+     *  Read up to `maxnum` objects each of size `size` from the data
+     *  stream to the area pointed at by `ptr`.
      *
      *  \return the number of objects read, or 0 at error or end of file.
      */
@@ -75,8 +77,8 @@
                              size_t size, size_t maxnum);
 
     /**
-     *  Write exactly \c num objects each of size \c size from the area
-     *  pointed at by \c ptr to data stream.
+     *  Write exactly `num` objects each of size `size` from the area
+     *  pointed at by `ptr` to data stream.
      *
      *  \return the number of objects written, or 0 at error or end of file.
      */
@@ -186,7 +188,7 @@
  *
  * Closing the SDL_RWops will close the file handle SDL is holding internally.
  *
- * \param file a UTF-8 string representing the filename to open
+ * \param file a UTF-8 string representing the filename to open.
  * \param mode an ASCII string representing the mode to be used for opening
  *             the file.
  * \returns a pointer to the SDL_RWops structure that is created, or NULL on
@@ -224,10 +226,10 @@
  * `FILE*`, depending on what system headers are available to SDL. It is
  * always intended to be the `FILE*` type from the C runtime's stdio.h.
  *
- * \param fp the `FILE*` that feeds the SDL_RWops stream
+ * \param fp the `FILE*` that feeds the SDL_RWops stream.
  * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops,
  *                  SDL_FALSE to leave the `FILE*` open when the RWops is
- *                  closed
+ *                  closed.
  * \returns a pointer to the SDL_RWops structure that is created, or NULL on
  *          failure; call SDL_GetError() for more information.
  *
@@ -260,8 +262,8 @@
  * If you need to make sure the RWops never writes to the memory buffer, you
  * should use SDL_RWFromConstMem() with a read-only buffer of memory instead.
  *
- * \param mem a pointer to a buffer to feed an SDL_RWops stream
- * \param size the buffer size, in bytes
+ * \param mem a pointer to a buffer to feed an SDL_RWops stream.
+ * \param size the buffer size, in bytes.
  * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call
  *          SDL_GetError() for more information.
  *
@@ -295,8 +297,8 @@
  * If you need to write to a memory buffer, you should use SDL_RWFromMem()
  * with a writable buffer of memory instead.
  *
- * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream
- * \param size the buffer size, in bytes
+ * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream.
+ * \param size the buffer size, in bytes.
  * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call
  *          SDL_GetError() for more information.
  *
@@ -358,7 +360,7 @@
  * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must
  * be responsible for managing that memory in their **close** method.
  *
- * \param area the SDL_RWops structure to be freed
+ * \param area the SDL_RWops structure to be freed.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -366,6 +368,7 @@
  */
 extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area);
 
+/* Possible `whence` values for SDL_RWops seeking... */
 #define RW_SEEK_SET 0       /**< Seek from the beginning of data */
 #define RW_SEEK_CUR 1       /**< Seek relative to current read point */
 #define RW_SEEK_END 2       /**< Seek relative to the end of data */
@@ -375,7 +378,7 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context the SDL_RWops to get the size of the data stream from
+ * \param context the SDL_RWops to get the size of the data stream from.
  * \returns the size of the data stream in the SDL_RWops on success, -1 if
  *          unknown or a negative error code on failure; call SDL_GetError()
  *          for more information.
@@ -402,10 +405,10 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context a pointer to an SDL_RWops structure
+ * \param context a pointer to an SDL_RWops structure.
  * \param offset an offset in bytes, relative to **whence** location; can be
- *               negative
- * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END`
+ *               negative.
+ * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END`.
  * \returns the final offset in the data stream after the seek or -1 on error.
  *
  * \since This function is available since SDL 2.0.10.
@@ -432,7 +435,7 @@
  * Prior to SDL 2.0.10, this function was a macro.
  *
  * \param context a SDL_RWops data stream object from which to get the current
- *                offset
+ *                offset.
  * \returns the current offset in the stream, or -1 if the information can not
  *          be determined.
  *
@@ -462,10 +465,10 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context a pointer to an SDL_RWops structure
- * \param ptr a pointer to a buffer to read data into
- * \param size the size of each object to read, in bytes
- * \param maxnum the maximum number of objects to be read
+ * \param context a pointer to an SDL_RWops structure.
+ * \param ptr a pointer to a buffer to read data into.
+ * \param size the size of each object to read, in bytes.
+ * \param maxnum the maximum number of objects to be read.
  * \returns the number of objects read, or 0 at error or end of file; call
  *          SDL_GetError() for more information.
  *
@@ -496,10 +499,10 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context a pointer to an SDL_RWops structure
- * \param ptr a pointer to a buffer containing data to write
- * \param size the size of an object to write, in bytes
- * \param num the number of objects to write
+ * \param context a pointer to an SDL_RWops structure.
+ * \param ptr a pointer to a buffer containing data to write.
+ * \param size the size of an object to write, in bytes.
+ * \param num the number of objects to write.
  * \returns the number of objects written, which will be less than **num** on
  *          error; call SDL_GetError() for more information.
  *
@@ -530,7 +533,7 @@
  *
  * Prior to SDL 2.0.10, this function was a macro.
  *
- * \param context SDL_RWops structure to close
+ * \param context SDL_RWops structure to close.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -555,9 +558,9 @@
  *
  * The data should be freed with SDL_free().
  *
- * \param src the SDL_RWops to read all available data from
- * \param datasize if not NULL, will store the number of bytes read
- * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning
+ * \param src the SDL_RWops to read all available data from.
+ * \param datasize if not NULL, will store the number of bytes read.
+ * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning.
  * \returns the data, or NULL if there was an error.
  *
  * \since This function is available since SDL 2.0.6.
@@ -578,8 +581,8 @@
  * Prior to SDL 2.0.10, this function was a macro wrapping around
  * SDL_LoadFile_RW.
  *
- * \param file the path to read all available data from
- * \param datasize if not NULL, will store the number of bytes read
+ * \param file the path to read all available data from.
+ * \param datasize if not NULL, will store the number of bytes read.
  * \returns the data, or NULL if there was an error.
  *
  * \since This function is available since SDL 2.0.10.
@@ -596,7 +599,7 @@
 /**
  * Use this function to read a byte from an SDL_RWops.
  *
- * \param src the SDL_RWops to read from
+ * \param src the SDL_RWops to read from.
  * \returns the read byte on success or 0 on failure; call SDL_GetError() for
  *          more information.
  *
@@ -613,7 +616,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 16 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -629,7 +632,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 16 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -645,7 +648,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 32 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -661,7 +664,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 32 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -677,7 +680,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 64 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -693,7 +696,7 @@
  * SDL byteswaps the data only if necessary, so the data returned will be in
  * the native byte order.
  *
- * \param src the stream from which to read data
+ * \param src the stream from which to read data.
  * \returns 64 bits of data in the native byte order of the platform.
  *
  * \since This function is available since SDL 2.0.0.
@@ -713,8 +716,8 @@
 /**
  * Use this function to write a byte to an SDL_RWops.
  *
- * \param dst the SDL_RWops to write to
- * \param value the byte value to write
+ * \param dst the SDL_RWops to write to.
+ * \param value the byte value to write.
  * \returns 1 on success or 0 on failure; call SDL_GetError() for more
  *          information.
  *
@@ -732,8 +735,8 @@
  * specifies native format, and the data written will be in little-endian
  * format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -749,8 +752,8 @@
  * SDL byteswaps the data only if necessary, so the application always
  * specifies native format, and the data written will be in big-endian format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -767,8 +770,8 @@
  * specifies native format, and the data written will be in little-endian
  * format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -784,8 +787,8 @@
  * SDL byteswaps the data only if necessary, so the application always
  * specifies native format, and the data written will be in big-endian format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -802,8 +805,8 @@
  * specifies native format, and the data written will be in little-endian
  * format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
@@ -819,8 +822,8 @@
  * SDL byteswaps the data only if necessary, so the application always
  * specifies native format, and the data written will be in big-endian format.
  *
- * \param dst the stream to which data will be written
- * \param value the data to be written, in native format
+ * \param dst the stream to which data will be written.
+ * \param value the data to be written, in native format.
  * \returns 1 on successful write, 0 on error.
  *
  * \since This function is available since SDL 2.0.0.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_scancode.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_scancode.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_scancode.h
+ * # CategoryScancode
  *
- *  Defines keyboard scancodes.
+ * Defines keyboard scancodes.
  */
 
 #ifndef SDL_scancode_h_
@@ -31,16 +31,16 @@
 #include "SDL_stdinc.h"
 
 /**
- *  \brief The SDL keyboard scancode representation.
+ * The SDL keyboard scancode representation.
  *
- *  Values of this type are used to represent keyboard keys, among other places
- *  in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the
- *  SDL_Event structure.
+ * Values of this type are used to represent keyboard keys, among other places
+ * in the SDL_Keysym::scancode key.keysym.scancode field of the SDL_Event
+ * structure.
  *
- *  The values in this enumeration are based on the USB usage page standard:
- *  https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
+ * The values in this enumeration are based on the USB usage page standard:
+ * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
  */
-typedef enum
+typedef enum SDL_Scancode
 {
     SDL_SCANCODE_UNKNOWN = 0,
 
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_sensor.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_sensor.h
@@ -20,10 +20,9 @@
 */
 
 /**
- *  \file SDL_sensor.h
+ * # CategorySensor
  *
- *  Include file for SDL sensor event handling
- *
+ * Include file for SDL sensor event handling
  */
 
 #ifndef SDL_sensor_h_
@@ -44,7 +43,7 @@
  *  \brief SDL_sensor.h
  *
  *  In order to use these functions, SDL_Init() must have been called
- *  with the ::SDL_INIT_SENSOR flag.  This causes SDL to scan the system
+ *  with the SDL_INIT_SENSOR flag.  This causes SDL to scan the system
  *  for sensors, and load appropriate drivers.
  */
 
@@ -52,21 +51,67 @@
 typedef struct _SDL_Sensor SDL_Sensor;
 
 /**
- * This is a unique ID for a sensor for the time it is connected to the system,
- * and is never reused for the lifetime of the application.
+ * This is a unique ID for a sensor for the time it is connected to the
+ * system, and is never reused for the lifetime of the application.
  *
- * The ID value starts at 0 and increments from there. The value -1 is an invalid ID.
+ * The ID value starts at 0 and increments from there. The value -1 is an
+ * invalid ID.
  */
 typedef Sint32 SDL_SensorID;
 
-/* The different sensors defined by SDL
+/**
+ * The different sensors defined by SDL.
  *
  * Additional sensors may be available, using platform dependent semantics.
  *
- * Hare are the additional Android sensors:
+ * Here are the additional Android sensors:
+ *
  * https://developer.android.com/reference/android/hardware/SensorEvent.html#values
+ *
+ * Accelerometer sensor notes:
+ *
+ * The accelerometer returns the current acceleration in SI meters per second
+ * squared. This measurement includes the force of gravity, so a device at
+ * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the
+ * earth, which is a positive Y value.
+ *
+ * - `values[0]`: Acceleration on the x axis
+ * - `values[1]`: Acceleration on the y axis
+ * - `values[2]`: Acceleration on the z axis
+ *
+ * For phones and tablets held in natural orientation and game controllers
+ * held in front of you, the axes are defined as follows:
+ *
+ * - -X ... +X : left ... right
+ * - -Y ... +Y : bottom ... top
+ * - -Z ... +Z : farther ... closer
+ *
+ * The accelerometer axis data is not changed when the device is rotated.
+ *
+ * Gyroscope sensor notes:
+ *
+ * The gyroscope returns the current rate of rotation in radians per second.
+ * The rotation is positive in the counter-clockwise direction. That is, an
+ * observer looking from a positive location on one of the axes would see
+ * positive rotation on that axis when it appeared to be rotating
+ * counter-clockwise.
+ *
+ * - `values[0]`: Angular speed around the x axis (pitch)
+ * - `values[1]`: Angular speed around the y axis (yaw)
+ * - `values[2]`: Angular speed around the z axis (roll)
+ *
+ * For phones and tablets held in natural orientation and game controllers
+ * held in front of you, the axes are defined as follows:
+ *
+ * - -X ... +X : left ... right
+ * - -Y ... +Y : bottom ... top
+ * - -Z ... +Z : farther ... closer
+ *
+ * The gyroscope axis data is not changed when the device is rotated.
+ *
+ * \sa SDL_GetDisplayOrientation
  */
-typedef enum
+typedef enum SDL_SensorType
 {
     SDL_SENSOR_INVALID = -1,    /**< Returned for an invalid sensor */
     SDL_SENSOR_UNKNOWN,         /**< Unknown sensor type */
@@ -79,53 +124,15 @@
 } SDL_SensorType;
 
 /**
- * Accelerometer sensor
+ * A constant to represent standard gravity for accelerometer sensors.
  *
- * The accelerometer returns the current acceleration in SI meters per
- * second squared. This measurement includes the force of gravity, so
- * a device at rest will have an value of SDL_STANDARD_GRAVITY away
- * from the center of the earth, which is a positive Y value.
- *
- * values[0]: Acceleration on the x axis
- * values[1]: Acceleration on the y axis
- * values[2]: Acceleration on the z axis
- *
- * For phones held in portrait mode and game controllers held in front of you,
- * the axes are defined as follows:
- * -X ... +X : left ... right
- * -Y ... +Y : bottom ... top
- * -Z ... +Z : farther ... closer
- * 
- * The axis data is not changed when the phone is rotated.
- *
- * \sa SDL_GetDisplayOrientation()
+ * The accelerometer returns the current acceleration in SI meters per second
+ * squared. This measurement includes the force of gravity, so a device at
+ * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the
+ * earth, which is a positive Y value.
  */
 #define SDL_STANDARD_GRAVITY    9.80665f
 
-/**
- * Gyroscope sensor
- *
- * The gyroscope returns the current rate of rotation in radians per second.
- * The rotation is positive in the counter-clockwise direction. That is,
- * an observer looking from a positive location on one of the axes would
- * see positive rotation on that axis when it appeared to be rotating
- * counter-clockwise.
- *
- * values[0]: Angular speed around the x axis (pitch)
- * values[1]: Angular speed around the y axis (yaw)
- * values[2]: Angular speed around the z axis (roll)
- *
- * For phones held in portrait mode and game controllers held in front of you,
- * the axes are defined as follows:
- * -X ... +X : left ... right
- * -Y ... +Y : bottom ... top
- * -Z ... +Z : farther ... closer
- * 
- * The axis data is not changed when the phone or controller is rotated.
- *
- * \sa SDL_GetDisplayOrientation()
- */
-
 /* Function prototypes */
 
 /**
@@ -155,7 +162,7 @@
 /**
  * Get the implementation dependent name of a sensor.
  *
- * \param device_index The sensor to obtain name from
+ * \param device_index The sensor to obtain name from.
  * \returns the sensor name, or NULL if `device_index` is out of range.
  *
  * \since This function is available since SDL 2.0.9.
@@ -165,7 +172,7 @@
 /**
  * Get the type of a sensor.
  *
- * \param device_index The sensor to get the type from
+ * \param device_index The sensor to get the type from.
  * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is
  *          out of range.
  *
@@ -176,7 +183,7 @@
 /**
  * Get the platform dependent type of a sensor.
  *
- * \param device_index The sensor to check
+ * \param device_index The sensor to check.
  * \returns the sensor platform dependent type, or -1 if `device_index` is out
  *          of range.
  *
@@ -187,7 +194,7 @@
 /**
  * Get the instance ID of a sensor.
  *
- * \param device_index The sensor to get instance id from
+ * \param device_index The sensor to get instance id from.
  * \returns the sensor instance ID, or -1 if `device_index` is out of range.
  *
  * \since This function is available since SDL 2.0.9.
@@ -197,7 +204,7 @@
 /**
  * Open a sensor for use.
  *
- * \param device_index The sensor to open
+ * \param device_index The sensor to open.
  * \returns an SDL_Sensor sensor object, or NULL if an error occurred.
  *
  * \since This function is available since SDL 2.0.9.
@@ -207,7 +214,7 @@
 /**
  * Return the SDL_Sensor associated with an instance id.
  *
- * \param instance_id The sensor from instance id
+ * \param instance_id The sensor from instance id.
  * \returns an SDL_Sensor object.
  *
  * \since This function is available since SDL 2.0.9.
@@ -217,7 +224,7 @@
 /**
  * Get the implementation dependent name of a sensor
  *
- * \param sensor The SDL_Sensor object
+ * \param sensor The SDL_Sensor object.
  * \returns the sensor name, or NULL if `sensor` is NULL.
  *
  * \since This function is available since SDL 2.0.9.
@@ -227,7 +234,7 @@
 /**
  * Get the type of a sensor.
  *
- * \param sensor The SDL_Sensor object to inspect
+ * \param sensor The SDL_Sensor object to inspect.
  * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is
  *          NULL.
  *
@@ -238,7 +245,7 @@
 /**
  * Get the platform dependent type of a sensor.
  *
- * \param sensor The SDL_Sensor object to inspect
+ * \param sensor The SDL_Sensor object to inspect.
  * \returns the sensor platform dependent type, or -1 if `sensor` is NULL.
  *
  * \since This function is available since SDL 2.0.9.
@@ -248,7 +255,7 @@
 /**
  * Get the instance ID of a sensor.
  *
- * \param sensor The SDL_Sensor object to inspect
+ * \param sensor The SDL_Sensor object to inspect.
  * \returns the sensor instance ID, or -1 if `sensor` is NULL.
  *
  * \since This function is available since SDL 2.0.9.
@@ -260,9 +267,9 @@
  *
  * The number of values and interpretation of the data is sensor dependent.
  *
- * \param sensor The SDL_Sensor object to query
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ * \param sensor The SDL_Sensor object to query.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \returns 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.0.9.
@@ -275,11 +282,11 @@
  *
  * The number of values and interpretation of the data is sensor dependent.
  *
- * \param sensor The SDL_Sensor object to query
+ * \param sensor The SDL_Sensor object to query.
  * \param timestamp A pointer filled with the timestamp in microseconds of the
- *                  current sensor reading if available, or 0 if not
- * \param data A pointer filled with the current sensor state
- * \param num_values The number of values to write to data
+ *                  current sensor reading if available, or 0 if not.
+ * \param data A pointer filled with the current sensor state.
+ * \param num_values The number of values to write to data.
  * \returns 0 or -1 if an error occurred.
  *
  * \since This function is available since SDL 2.26.0.
@@ -289,7 +296,7 @@
 /**
  * Close a sensor previously opened with SDL_SensorOpen().
  *
- * \param sensor The SDL_Sensor object to close
+ * \param sensor The SDL_Sensor object to close.
  *
  * \since This function is available since SDL 2.0.9.
  */
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_shape.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_shape.h
@@ -48,18 +48,18 @@
  * and flags.
  *
  * \param title The title of the window, in UTF-8 encoding.
- * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or
- *          ::SDL_WINDOWPOS_UNDEFINED.
- * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or
- *          ::SDL_WINDOWPOS_UNDEFINED.
+ * \param x The x position of the window, SDL_WINDOWPOS_CENTERED, or
+ *          SDL_WINDOWPOS_UNDEFINED.
+ * \param y The y position of the window, SDL_WINDOWPOS_CENTERED, or
+ *          SDL_WINDOWPOS_UNDEFINED.
  * \param w The width of the window.
  * \param h The height of the window.
  * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with
- *              any of the following: ::SDL_WINDOW_OPENGL,
- *              ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN,
- *              ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED,
- *              ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set,
- *              and ::SDL_WINDOW_FULLSCREEN is always unset.
+ *              any of the following: SDL_WINDOW_OPENGL,
+ *              SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_HIDDEN,
+ *              SDL_WINDOW_RESIZABLE, SDL_WINDOW_MAXIMIZED,
+ *              SDL_WINDOW_MINIMIZED, SDL_WINDOW_BORDERLESS is always set, and
+ *              SDL_WINDOW_FULLSCREEN is always unset.
  * \return the window created, or NULL if window creation failed.
  *
  * \since This function is available since SDL 2.0.0.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_stdinc.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_stdinc.h
@@ -19,10 +19,12 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: StdInc */
+
 /**
- *  \file SDL_stdinc.h
+ * # CategoryStdInc
  *
- *  This is a general header that includes C language support.
+ * This is a general header that includes C language support.
  */
 
 #ifndef SDL_stdinc_h_
@@ -129,15 +131,19 @@
 #endif
 
 /**
- *  The number of elements in an array.
+ * The number of elements in an array.
  */
 #define SDL_arraysize(array)    (sizeof(array)/sizeof(array[0]))
 #define SDL_TABLESIZE(table)    SDL_arraysize(table)
 
 /**
- *  Macro useful for building other macros with strings in them
+ * Macro useful for building other macros with strings in them
  *
- *  e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n")
+ * e.g:
+ *
+ * ```c
+ * #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n")
+ * ```
  */
 #define SDL_STRINGIFY_ARG(arg)  #arg
 
@@ -185,55 +191,62 @@
 #endif
 
 /**
- * \brief A signed 8-bit integer type.
+ * A signed 8-bit integer type.
  */
+typedef int8_t Sint8;
 #define SDL_MAX_SINT8   ((Sint8)0x7F)           /* 127 */
 #define SDL_MIN_SINT8   ((Sint8)(~0x7F))        /* -128 */
-typedef int8_t Sint8;
+
 /**
- * \brief An unsigned 8-bit integer type.
+ * An unsigned 8-bit integer type.
  */
+typedef uint8_t Uint8;
 #define SDL_MAX_UINT8   ((Uint8)0xFF)           /* 255 */
 #define SDL_MIN_UINT8   ((Uint8)0x00)           /* 0 */
-typedef uint8_t Uint8;
+
 /**
- * \brief A signed 16-bit integer type.
+ * A signed 16-bit integer type.
  */
+typedef int16_t Sint16;
 #define SDL_MAX_SINT16  ((Sint16)0x7FFF)        /* 32767 */
 #define SDL_MIN_SINT16  ((Sint16)(~0x7FFF))     /* -32768 */
-typedef int16_t Sint16;
+
 /**
- * \brief An unsigned 16-bit integer type.
+ * An unsigned 16-bit integer type.
  */
+typedef uint16_t Uint16;
 #define SDL_MAX_UINT16  ((Uint16)0xFFFF)        /* 65535 */
 #define SDL_MIN_UINT16  ((Uint16)0x0000)        /* 0 */
-typedef uint16_t Uint16;
+
 /**
- * \brief A signed 32-bit integer type.
+ * A signed 32-bit integer type.
  */
+typedef int32_t Sint32;
 #define SDL_MAX_SINT32  ((Sint32)0x7FFFFFFF)    /* 2147483647 */
 #define SDL_MIN_SINT32  ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */
-typedef int32_t Sint32;
+
 /**
- * \brief An unsigned 32-bit integer type.
+ * An unsigned 32-bit integer type.
  */
+typedef uint32_t Uint32;
 #define SDL_MAX_UINT32  ((Uint32)0xFFFFFFFFu)   /* 4294967295 */
 #define SDL_MIN_UINT32  ((Uint32)0x00000000)    /* 0 */
-typedef uint32_t Uint32;
 
 /**
- * \brief A signed 64-bit integer type.
+ * A signed 64-bit integer type.
  */
+typedef int64_t Sint64;
 #define SDL_MAX_SINT64  ((Sint64)0x7FFFFFFFFFFFFFFFll)      /* 9223372036854775807 */
 #define SDL_MIN_SINT64  ((Sint64)(~0x7FFFFFFFFFFFFFFFll))   /* -9223372036854775808 */
-typedef int64_t Sint64;
+
 /**
- * \brief An unsigned 64-bit integer type.
+ * An unsigned 64-bit integer type.
  */
+typedef uint64_t Uint64;
 #define SDL_MAX_UINT64  ((Uint64)0xFFFFFFFFFFFFFFFFull)     /* 18446744073709551615 */
 #define SDL_MIN_UINT64  ((Uint64)(0x0000000000000000ull))   /* 0 */
-typedef uint64_t Uint64;
 
+
 /* @} *//* Basic data types */
 
 /**
@@ -415,8 +428,8 @@
 
 /** \cond */
 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
-#if !defined(__ANDROID__) && !defined(__VITA__) && !defined(__3DS__)
-   /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */
+#if !defined(__VITA__) && !defined(__3DS__)
+/* TODO: include/SDL_stdinc.h:422: error: size of array 'SDL_dummy_enum' is negative */
 typedef enum
 {
     DUMMY_ENUM_VALUE
@@ -491,8 +504,9 @@
 extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
 extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite);
 
-extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
-extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
+typedef int (SDLCALL *SDL_CompareCallback)(const void *, const void *);
+extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, SDL_CompareCallback compare);
+extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback compare);
 
 extern DECLSPEC int SDLCALL SDL_abs(int x);
 
@@ -521,6 +535,7 @@
 
 extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len);
 
+/* Some safe(r) macros for zero'ing structures... */
 #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
 #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
 #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x)))
@@ -706,6 +721,8 @@
                                                const char *fromcode,
                                                const char *inbuf,
                                                size_t inbytesleft);
+
+/* Some helper macros for common cases... */
 #define SDL_iconv_utf8_locale(S)    SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
 #define SDL_iconv_utf8_ucs2(S)      (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)
 #define SDL_iconv_utf8_ucs4(S)      (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
@@ -733,6 +750,9 @@
 size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size);
 #endif
 
+/* strdup is not ANSI but POSIX, and its prototype might be hidden... */
+char *strdup(const char *str);
+
 /* Starting LLVM 16, the analyser errors out if these functions do not have
    their prototype defined (clang-diagnostic-implicit-function-declaration) */
 #include <stdlib.h>
@@ -778,9 +798,10 @@
 }
 
 /**
- * If a * b would overflow, return -1. Otherwise store a * b via ret
- * and return 0.
+ * If a * b would overflow, return -1.
  *
+ * Otherwise store a * b via ret and return 0.
+ *
  * \since This function is available since SDL 2.24.0.
  */
 SDL_FORCE_INLINE int SDL_size_mul_overflow (size_t a,
@@ -808,8 +829,9 @@
 #endif
 
 /**
- * If a + b would overflow, return -1. Otherwise store a + b via ret
- * and return 0.
+ * If a + b would overflow, return -1.
+ *
+ * Otherwise store a + b via ret and return 0.
  *
  * \since This function is available since SDL 2.24.0.
  */
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_surface.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_surface.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_surface.h
+ * # CategorySurface
  *
- *  Header file for ::SDL_Surface definition and management functions.
+ * Header file for SDL_Surface definition and management functions.
  */
 
 #ifndef SDL_surface_h_
@@ -43,7 +43,7 @@
 /**
  *  \name Surface flags
  *
- *  These are the currently supported flags for the ::SDL_Surface.
+ *  These are the currently supported flags for the SDL_Surface.
  *
  *  \internal
  *  Used internally (read-only).
@@ -57,7 +57,7 @@
 /* @} *//* Surface flags */
 
 /**
- *  Evaluates to true if the surface needs to be locked before access.
+ * Evaluates to true if the surface needs to be locked before access.
  */
 #define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0)
 
@@ -64,10 +64,10 @@
 typedef struct SDL_BlitMap SDL_BlitMap;  /* this is an opaque type. */
 
 /**
- * \brief A collection of pixels used in software blitting.
+ * A collection of pixels used in software blitting.
  *
- * \note  This structure should be treated as read-only, except for \c pixels,
- *        which, if not NULL, contains the raw pixel data for the surface.
+ * This structure should be treated as read-only, except for `pixels`, which,
+ * if not NULL, contains the raw pixel data for the surface.
  */
 typedef struct SDL_Surface
 {
@@ -97,15 +97,15 @@
 } SDL_Surface;
 
 /**
- * \brief The type of function used for surface blitting functions.
+ * The type of function used for surface blitting functions.
  */
 typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect,
                                  struct SDL_Surface * dst, SDL_Rect * dstrect);
 
 /**
- * \brief The formula used for converting between YUV and RGB
+ * The formula used for converting between YUV and RGB
  */
-typedef enum
+typedef enum SDL_YUV_CONVERSION_MODE
 {
     SDL_YUV_CONVERSION_JPEG,        /**< Full range JPEG */
     SDL_YUV_CONVERSION_BT601,       /**< BT.601 (the default) */
@@ -140,14 +140,14 @@
  * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a
  * different `blendMode`.
  *
- * \param flags the flags are unused and should be set to 0
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
- * \param Rmask the red mask for the pixels
- * \param Gmask the green mask for the pixels
- * \param Bmask the blue mask for the pixels
- * \param Amask the alpha mask for the pixels
+ * \param flags the flags are unused and should be set to 0.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
+ * \param Rmask the red mask for the pixels.
+ * \param Gmask the green mask for the pixels.
+ * \param Bmask the blue mask for the pixels.
+ * \param Amask the alpha mask for the pixels.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -171,10 +171,10 @@
  * of providing pixel color masks, you provide it with a predefined format
  * from SDL_PixelFormatEnum.
  *
- * \param flags the flags are unused and should be set to 0
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
+ * \param flags the flags are unused and should be set to 0.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
  * \param format the SDL_PixelFormatEnum for the new surface's pixel format.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
@@ -198,15 +198,15 @@
  * No copy is made of the pixel data. Pixel data is not managed automatically;
  * you must free the surface before you free the pixel data.
  *
- * \param pixels a pointer to existing pixel data
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
- * \param pitch the pitch of the surface in bytes
- * \param Rmask the red mask for the pixels
- * \param Gmask the green mask for the pixels
- * \param Bmask the blue mask for the pixels
- * \param Amask the alpha mask for the pixels
+ * \param pixels a pointer to existing pixel data.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
+ * \param pitch the pitch of the surface in bytes.
+ * \param Rmask the red mask for the pixels.
+ * \param Gmask the green mask for the pixels.
+ * \param Bmask the blue mask for the pixels.
+ * \param Amask the alpha mask for the pixels.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -214,6 +214,7 @@
  *
  * \sa SDL_CreateRGBSurface
  * \sa SDL_CreateRGBSurfaceWithFormat
+ * \sa SDL_CreateRGBSurfaceWithFormatFrom
  * \sa SDL_FreeSurface
  */
 extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels,
@@ -239,11 +240,11 @@
  * No copy is made of the pixel data. Pixel data is not managed automatically;
  * you must free the surface before you free the pixel data.
  *
- * \param pixels a pointer to existing pixel data
- * \param width the width of the surface
- * \param height the height of the surface
- * \param depth the depth of the surface in bits
- * \param pitch the pitch of the surface in bytes
+ * \param pixels a pointer to existing pixel data.
+ * \param width the width of the surface.
+ * \param height the height of the surface.
+ * \param depth the depth of the surface in bits.
+ * \param pitch the pitch of the surface in bytes.
  * \param format the SDL_PixelFormatEnum for the new surface's pixel format.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
@@ -278,8 +279,8 @@
  *
  * A single palette can be shared with many surfaces.
  *
- * \param surface the SDL_Surface structure to update
- * \param palette the SDL_Palette structure to use
+ * \param surface the SDL_Surface structure to update.
+ * \param palette the SDL_Palette structure to use.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -300,7 +301,7 @@
  * 0, then you can read and write to the surface at any time, and the pixel
  * format of the surface will not change.
  *
- * \param surface the SDL_Surface structure to be locked
+ * \param surface the SDL_Surface structure to be locked.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -314,7 +315,7 @@
 /**
  * Release a surface after directly accessing the pixels.
  *
- * \param surface the SDL_Surface structure to be unlocked
+ * \param surface the SDL_Surface structure to be unlocked.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -329,11 +330,11 @@
  * result in a memory leak.
  *
  * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile.
- * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap
+ * Alternatively, you might also use the macro SDL_LoadBMP to load a bitmap
  * from a file, convert it to an SDL_Surface and then close the file.
  *
- * \param src the data stream for the surface
- * \param freesrc non-zero to close the stream after being read
+ * \param src the data stream for the surface.
+ * \param freesrc non-zero to close the stream after being read.
  * \returns a pointer to a new SDL_Surface structure or NULL if there was an
  *          error; call SDL_GetError() for more information.
  *
@@ -363,9 +364,9 @@
  * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are
  * not supported.
  *
- * \param surface the SDL_Surface structure containing the image to be saved
- * \param dst a data stream to save to
- * \param freedst non-zero to close the stream after being written
+ * \param surface the SDL_Surface structure containing the image to be saved.
+ * \param dst a data stream to save to.
+ * \param freedst non-zero to close the stream after being written.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -378,9 +379,9 @@
     (SDL_Surface * surface, SDL_RWops * dst, int freedst);
 
 /**
- *  Save a surface to a file.
+ * Save a surface to a file.
  *
- *  Convenience macro.
+ * Convenience macro.
  */
 #define SDL_SaveBMP(surface, file) \
         SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1)
@@ -391,8 +392,8 @@
  * If RLE is enabled, color key and alpha blending blits are much faster, but
  * the surface must be locked before directly accessing the pixels.
  *
- * \param surface the SDL_Surface structure to optimize
- * \param flag 0 to disable, non-zero to enable RLE acceleration
+ * \param surface the SDL_Surface structure to optimize.
+ * \param flag 0 to disable, non-zero to enable RLE acceleration.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -410,7 +411,7 @@
  *
  * It is safe to pass a NULL `surface` here; it will return SDL_FALSE.
  *
- * \param surface the SDL_Surface structure to query
+ * \param surface the SDL_Surface structure to query.
  * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.14.
@@ -432,9 +433,9 @@
  * RLE acceleration can substantially speed up blitting of images with large
  * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details.
  *
- * \param surface the SDL_Surface structure to update
- * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key
- * \param key the transparent pixel
+ * \param surface the SDL_Surface structure to update.
+ * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key.
+ * \param key the transparent pixel.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -451,7 +452,7 @@
  *
  * It is safe to pass a NULL `surface` here; it will return SDL_FALSE.
  *
- * \param surface the SDL_Surface structure to query
+ * \param surface the SDL_Surface structure to query.
  * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.9.
@@ -469,8 +470,8 @@
  *
  * If the surface doesn't have color key enabled this function returns -1.
  *
- * \param surface the SDL_Surface structure to query
- * \param key a pointer filled in with the transparent pixel
+ * \param surface the SDL_Surface structure to query.
+ * \param key a pointer filled in with the transparent pixel.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -491,10 +492,10 @@
  *
  * `srcC = srcC * (color / 255)`
  *
- * \param surface the SDL_Surface structure to update
- * \param r the red color value multiplied into blit operations
- * \param g the green color value multiplied into blit operations
- * \param b the blue color value multiplied into blit operations
+ * \param surface the SDL_Surface structure to update.
+ * \param r the red color value multiplied into blit operations.
+ * \param g the green color value multiplied into blit operations.
+ * \param b the blue color value multiplied into blit operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -510,10 +511,10 @@
 /**
  * Get the additional color value multiplied into blit operations.
  *
- * \param surface the SDL_Surface structure to query
- * \param r a pointer filled in with the current red color value
- * \param g a pointer filled in with the current green color value
- * \param b a pointer filled in with the current blue color value
+ * \param surface the SDL_Surface structure to query.
+ * \param r a pointer filled in with the current red color value.
+ * \param g a pointer filled in with the current green color value.
+ * \param b a pointer filled in with the current blue color value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -534,8 +535,8 @@
  *
  * `srcA = srcA * (alpha / 255)`
  *
- * \param surface the SDL_Surface structure to update
- * \param alpha the alpha value multiplied into blit operations
+ * \param surface the SDL_Surface structure to update.
+ * \param alpha the alpha value multiplied into blit operations.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -550,8 +551,8 @@
 /**
  * Get the additional alpha value used in blit operations.
  *
- * \param surface the SDL_Surface structure to query
- * \param alpha a pointer filled in with the current alpha value
+ * \param surface the SDL_Surface structure to query.
+ * \param alpha a pointer filled in with the current alpha value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -570,8 +571,8 @@
  * existing data, the blendmode of the SOURCE surface should be set to
  * `SDL_BLENDMODE_NONE`.
  *
- * \param surface the SDL_Surface structure to update
- * \param blendMode the SDL_BlendMode to use for blit blending
+ * \param surface the SDL_Surface structure to update.
+ * \param blendMode the SDL_BlendMode to use for blit blending.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -585,8 +586,8 @@
 /**
  * Get the blend mode used for blit operations.
  *
- * \param surface the SDL_Surface structure to query
- * \param blendMode a pointer filled in with the current SDL_BlendMode
+ * \param surface the SDL_Surface structure to query.
+ * \param blendMode a pointer filled in with the current SDL_BlendMode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -606,9 +607,9 @@
  * Note that blits are automatically clipped to the edges of the source and
  * destination surfaces.
  *
- * \param surface the SDL_Surface structure to be clipped
+ * \param surface the SDL_Surface structure to be clipped.
  * \param rect the SDL_Rect structure representing the clipping rectangle, or
- *             NULL to disable clipping
+ *             NULL to disable clipping.
  * \returns SDL_TRUE if the rectangle intersects the surface, otherwise
  *          SDL_FALSE and blits will be completely clipped.
  *
@@ -627,9 +628,9 @@
  * rectangle is drawn into.
  *
  * \param surface the SDL_Surface structure representing the surface to be
- *                clipped
+ *                clipped.
  * \param rect an SDL_Rect structure filled in with the clipping rectangle for
- *             the surface
+ *             the surface.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -658,11 +659,11 @@
  * surface. The new, optimized surface can then be used as the source for
  * future blits, making them faster.
  *
- * \param src the existing SDL_Surface structure to convert
+ * \param src the existing SDL_Surface structure to convert.
  * \param fmt the SDL_PixelFormat structure that the new surface is optimized
- *            for
+ *            for.
  * \param flags the flags are unused and should be set to 0; this is a
- *              leftover from SDL 1.2's API
+ *              leftover from SDL 1.2's API.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -683,11 +684,11 @@
  * it might be easier to call but it doesn't have access to palette
  * information for the destination surface, in case that would be important.
  *
- * \param src the existing SDL_Surface structure to convert
+ * \param src the existing SDL_Surface structure to convert.
  * \param pixel_format the SDL_PixelFormatEnum that the new surface is
- *                     optimized for
+ *                     optimized for.
  * \param flags the flags are unused and should be set to 0; this is a
- *              leftover from SDL 1.2's API
+ *              leftover from SDL 1.2's API.
  * \returns the new SDL_Surface structure that is created or NULL if it fails;
  *          call SDL_GetError() for more information.
  *
@@ -703,14 +704,14 @@
 /**
  * Copy a block of pixels of one format to another format.
  *
- * \param width the width of the block to copy, in pixels
- * \param height the height of the block to copy, in pixels
- * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format
- * \param src a pointer to the source pixels
- * \param src_pitch the pitch of the source pixels, in bytes
- * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format
- * \param dst a pointer to be filled in with new pixel data
- * \param dst_pitch the pitch of the destination pixels, in bytes
+ * \param width the width of the block to copy, in pixels.
+ * \param height the height of the block to copy, in pixels.
+ * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format.
+ * \param src a pointer to the source pixels.
+ * \param src_pitch the pitch of the source pixels, in bytes.
+ * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format.
+ * \param dst a pointer to be filled in with new pixel data.
+ * \param dst_pitch the pitch of the destination pixels, in bytes.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -729,14 +730,14 @@
  *
  * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888.
  *
- * \param width the width of the block to convert, in pixels
- * \param height the height of the block to convert, in pixels
- * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format
- * \param src a pointer to the source pixels
- * \param src_pitch the pitch of the source pixels, in bytes
- * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format
- * \param dst a pointer to be filled in with premultiplied pixel data
- * \param dst_pitch the pitch of the destination pixels, in bytes
+ * \param width the width of the block to convert, in pixels.
+ * \param height the height of the block to convert, in pixels.
+ * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format.
+ * \param src a pointer to the source pixels.
+ * \param src_pitch the pitch of the source pixels, in bytes.
+ * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format.
+ * \param dst a pointer to be filled in with premultiplied pixel data.
+ * \param dst_pitch the pitch of the destination pixels, in bytes.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -760,10 +761,10 @@
  * SDL_SetClipRect()), then this function will fill based on the intersection
  * of the clip rectangle and `rect`.
  *
- * \param dst the SDL_Surface structure that is the drawing target
+ * \param dst the SDL_Surface structure that is the drawing target.
  * \param rect the SDL_Rect structure representing the rectangle to fill, or
- *             NULL to fill the entire surface
- * \param color the color to fill with
+ *             NULL to fill the entire surface.
+ * \param color the color to fill with.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -786,10 +787,10 @@
  * SDL_SetClipRect()), then this function will fill based on the intersection
  * of the clip rectangle and `rect`.
  *
- * \param dst the SDL_Surface structure that is the drawing target
- * \param rects an array of SDL_Rects representing the rectangles to fill.
- * \param count the number of rectangles in the array
- * \param color the color to fill with
+ * \param dst the SDL_Surface structure that is the drawing target.
+ * \param rects an array of SDL_Rect representing the rectangles to fill.
+ * \param count the number of rectangles in the array.
+ * \param color the color to fill with.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -801,62 +802,64 @@
     (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color);
 
 /* !!! FIXME: merge this documentation with the wiki */
+
 /**
- *  Performs a fast blit from the source surface to the destination surface.
+ * Performs a fast blit from the source surface to the destination surface.
  *
- *  This assumes that the source and destination rectangles are
- *  the same size.  If either \c srcrect or \c dstrect are NULL, the entire
- *  surface (\c src or \c dst) is copied.  The final blit rectangles are saved
- *  in \c srcrect and \c dstrect after all clipping is performed.
+ * This assumes that the source and destination rectangles are the same size.
+ * If either `srcrect` or `dstrect` are NULL, the entire surface (`src` or
+ * `dst`) is copied. The final blit rectangles are saved in `srcrect` and
+ * `dstrect` after all clipping is performed.
  *
- *  \returns 0 if the blit is successful, otherwise it returns -1.
+ * The blit function should not be called on a locked surface.
  *
- *  The blit function should not be called on a locked surface.
+ * The blit semantics for surfaces with and without blending and colorkey are
+ * defined as follows:
  *
- *  The blit semantics for surfaces with and without blending and colorkey
- *  are defined as follows:
- *  \verbatim
-    RGBA->RGB:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source alpha-channel and per-surface alpha)
-        SDL_SRCCOLORKEY ignored.
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy RGB.
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        RGB values of the source color key, ignoring alpha in the
-        comparison.
-
-    RGB->RGBA:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source per-surface alpha)
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy RGB, set destination alpha to source per-surface alpha value.
-      both:
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        source color key.
-
-    RGBA->RGBA:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source alpha-channel and per-surface alpha)
-        SDL_SRCCOLORKEY ignored.
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy all of RGBA to the destination.
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        RGB values of the source color key, ignoring alpha in the
-        comparison.
-
-    RGB->RGB:
-      Source surface blend mode set to SDL_BLENDMODE_BLEND:
-        alpha-blend (using the source per-surface alpha)
-      Source surface blend mode set to SDL_BLENDMODE_NONE:
-        copy RGB.
-      both:
-        if SDL_SRCCOLORKEY set, only copy the pixels matching the
-        source color key.
-    \endverbatim
+ * ```
+ *   RGBA->RGB:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source alpha-channel and per-surface alpha)
+ *       SDL_SRCCOLORKEY ignored.
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy RGB.
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       RGB values of the source color key, ignoring alpha in the
+ *       comparison.
  *
- *  You should call SDL_BlitSurface() unless you know exactly how SDL
- *  blitting works internally and how to use the other blit functions.
+ *   RGB->RGBA:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source per-surface alpha)
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy RGB, set destination alpha to source per-surface alpha value.
+ *     both:
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       source color key.
+ *
+ *   RGBA->RGBA:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source alpha-channel and per-surface alpha)
+ *       SDL_SRCCOLORKEY ignored.
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy all of RGBA to the destination.
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       RGB values of the source color key, ignoring alpha in the
+ *       comparison.
+ *
+ *   RGB->RGB:
+ *     Source surface blend mode set to SDL_BLENDMODE_BLEND:
+ *       alpha-blend (using the source per-surface alpha)
+ *     Source surface blend mode set to SDL_BLENDMODE_NONE:
+ *       copy RGB.
+ *     both:
+ *       if SDL_SRCCOLORKEY set, only copy the pixels matching the
+ *       source color key.
+ * ```
+ *
+ * You should call SDL_BlitSurface() unless you know exactly how SDL blitting
+ * works internally and how to use the other blit functions.
+ *
+ * \returns 0 if the blit is successful, otherwise it returns -1.
  */
 #define SDL_BlitSurface SDL_UpperBlit
 
@@ -883,12 +886,12 @@
  * Unless you know what you're doing, you should be using SDL_BlitSurface()
  * instead.
  *
- * \param src the SDL_Surface structure to be copied from
+ * \param src the SDL_Surface structure to be copied from.
  * \param srcrect the SDL_Rect structure representing the rectangle to be
- *                copied, or NULL to copy the entire surface
- * \param dst the SDL_Surface structure that is the blit target
+ *                copied, or NULL to copy the entire surface.
+ * \param dst the SDL_Surface structure that is the blit target.
  * \param dstrect the SDL_Rect structure representing the rectangle that is
- *                copied into
+ *                copied into.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -925,8 +928,6 @@
                                             const SDL_Rect * dstrect);
 
 
-#define SDL_BlitScaled SDL_UpperBlitScaled
-
 /**
  * Perform a scaled surface copy to a destination surface.
  *
@@ -941,6 +942,9 @@
     (SDL_Surface * src, const SDL_Rect * srcrect,
     SDL_Surface * dst, SDL_Rect * dstrect);
 
+#define SDL_BlitScaled SDL_UpperBlitScaled
+
+
 /**
  * Perform low-level surface scaled blitting only.
  *
@@ -947,12 +951,12 @@
  * This is a semi-private function and it performs low-level surface blitting,
  * assuming the input rectangles have already been clipped.
  *
- * \param src the SDL_Surface structure to be copied from
+ * \param src the SDL_Surface structure to be copied from.
  * \param srcrect the SDL_Rect structure representing the rectangle to be
- *                copied
- * \param dst the SDL_Surface structure that is the blit target
+ *                copied.
+ * \param dst the SDL_Surface structure that is the blit target.
  * \param dstrect the SDL_Rect structure representing the rectangle that is
- *                copied into
+ *                copied into.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_system.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_system.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_system.h
+ * # CategorySystem
  *
- *  Include file for platform specific SDL API functions
+ * Include file for platform specific SDL API functions
  */
 
 #ifndef SDL_system_h_
@@ -49,7 +49,7 @@
  * Set a callback for every Windows message, run before TranslateMessage().
  *
  * \param callback The SDL_WindowsMessageHook function to call.
- * \param userdata a pointer to pass to every iteration of `callback`
+ * \param userdata a pointer to pass to every iteration of `callback`.
  *
  * \since This function is available since SDL 2.0.4.
  */
@@ -66,7 +66,7 @@
  * controls on which monitor a full screen application will appear.
  *
  * \param displayIndex the display index for which to get the D3D9 adapter
- *                     index
+ *                     index.
  * \returns the D3D9 adapter index on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
  *
@@ -82,7 +82,7 @@
  * Once you are done using the device, you should release it to avoid a
  * resource leak.
  *
- * \param renderer the renderer from which to get the associated D3D device
+ * \param renderer the renderer from which to get the associated D3D device.
  * \returns the D3D9 device associated with given renderer or NULL if it is
  *          not a D3D9 renderer; call SDL_GetError() for more information.
  *
@@ -98,7 +98,7 @@
  * Once you are done using the device, you should release it to avoid a
  * resource leak.
  *
- * \param renderer the renderer from which to get the associated D3D11 device
+ * \param renderer the renderer from which to get the associated D3D11 device.
  * \returns the D3D11 device associated with given renderer or NULL if it is
  *          not a D3D11 renderer; call SDL_GetError() for more information.
  *
@@ -118,7 +118,7 @@
  * Once you are done using the device, you should release it to avoid a
  * resource leak.
  *
- * \param renderer the renderer from which to get the associated D3D12 device
+ * \param renderer the renderer from which to get the associated D3D12 device.
  * \returns the D3D12 device associated with given renderer or NULL if it is
  *          not a D3D12 renderer; call SDL_GetError() for more information.
  *
@@ -140,9 +140,9 @@
  * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it
  * returns an SDL_bool.
  *
- * \param displayIndex the display index for which to get both indices
- * \param adapterIndex a pointer to be filled in with the adapter index
- * \param outputIndex a pointer to be filled in with the output index
+ * \param displayIndex the display index for which to get both indices.
+ * \param adapterIndex a pointer to be filled in with the adapter index.
+ * \param outputIndex a pointer to be filled in with the output index.
  * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError()
  *          for more information.
  *
@@ -176,7 +176,7 @@
  * \param threadID The Unix thread ID to change priority of.
  * \param sdlPriority The new SDL_ThreadPriority value.
  * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR,
- *                    SCHED_OTHER, etc...)
+ *                    SCHED_OTHER, etc...).
  * \returns 0 on success, or -1 on error.
  *
  * \since This function is available since SDL 2.0.18.
@@ -188,7 +188,7 @@
 /* Platform specific functions for iOS */
 #ifdef __IPHONEOS__
 
-#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam)
+typedef void (SDLCALL *SDL_iOSAnimationCallback)(void*);
 
 /**
  * Use this function to set the animation callback on Apple iOS.
@@ -210,9 +210,9 @@
  * This functions is also accessible using the macro
  * SDL_iOSSetAnimationCallback() since SDL 2.0.4.
  *
- * \param window the window for which the animation callback should be set
+ * \param window the window for which the animation callback should be set.
  * \param interval the number of frames after which **callback** will be
- *                 called
+ *                 called.
  * \param callback the function to call for every frame.
  * \param callbackParam a pointer that is passed to `callback`.
  * \returns 0 on success or a negative error code on failure; call
@@ -222,10 +222,11 @@
  *
  * \sa SDL_iPhoneSetEventPump
  */
-extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (SDLCALL *callback)(void*), void *callbackParam);
+extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam);
 
-#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)
+#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam)
 
+
 /**
  * Use this function to enable or disable the SDL event pump on Apple iOS.
  *
@@ -234,7 +235,7 @@
  * This functions is also accessible using the macro SDL_iOSSetEventPump()
  * since SDL 2.0.4.
  *
- * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it
+ * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -242,6 +243,9 @@
  */
 extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled);
 
+#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)
+
+/* end of iOS-specific functions. */
 #endif /* __IPHONEOS__ */
 
 
@@ -356,9 +360,9 @@
 extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void);
 
 /**
-   See the official Android developer guide for more information:
-   http://developer.android.com/guide/topics/data/data-storage.html
-*/
+ * See the official Android developer guide for more information:
+ * http://developer.android.com/guide/topics/data/data-storage.html
+ */
 #define SDL_ANDROID_EXTERNAL_STORAGE_READ   0x01
 #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE  0x02
 
@@ -441,11 +445,11 @@
  *
  * https://developer.android.com/reference/android/view/Gravity
  *
- * \param message text message to be shown
- * \param duration 0=short, 1=long
+ * \param message text message to be shown.
+ * \param duration 0=short, 1=long.
  * \param gravity where the notification should appear on the screen.
- * \param xoffset set this parameter only when gravity >=0
- * \param yoffset set this parameter only when gravity >=0
+ * \param xoffset set this parameter only when gravity >=0.
+ * \param yoffset set this parameter only when gravity >=0.
  * \returns 0 if success, -1 if any error occurs.
  *
  * \since This function is available since SDL 2.0.16.
@@ -457,8 +461,8 @@
  *
  * Override "boolean onUnhandledMessage(Message msg)" to handle the message.
  *
- * \param command user command that must be greater or equal to 0x8000
- * \param param user parameter
+ * \param command user command that must be greater or equal to 0x8000.
+ * \param param user parameter.
  *
  * \since This function is available since SDL 2.0.22.
  */
@@ -470,9 +474,9 @@
 #ifdef __WINRT__
 
 /**
- *  \brief WinRT / Windows Phone path types
+ * WinRT / Windows Phone path types
  */
-typedef enum
+typedef enum SDL_WinRT_Path
 {
     /** \brief The installed app's root directory.
         Files here are likely to be read-only. */
@@ -494,9 +498,9 @@
 
 
 /**
- *  \brief WinRT Device Family
+ * WinRT Device Family
  */
-typedef enum
+typedef enum SDL_WinRT_DeviceFamily
 {
     /** \brief Unknown family  */
     SDL_WINRT_DEVICEFAMILY_UNKNOWN,
@@ -524,7 +528,7 @@
  *
  * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
  *
- * \param pathType the type of path to retrieve, one of SDL_WinRT_Path
+ * \param pathType the type of path to retrieve, one of SDL_WinRT_Path.
  * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if
  *          the path is not available for any reason; call SDL_GetError() for
  *          more information.
@@ -547,7 +551,7 @@
  *
  * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
  *
- * \param pathType the type of path to retrieve, one of SDL_WinRT_Path
+ * \param pathType the type of path to retrieve, one of SDL_WinRT_Path.
  * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if
  *          the path is not available for any reason; call SDL_GetError() for
  *          more information.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_syswm.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_syswm.h
@@ -19,10 +19,17 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_syswm.h
+/* WIKI CATEGORY: SYSWM */
+
+/*
+ * # CategorySYSWM
  *
- *  Include file for SDL custom system window manager hooks.
+ * Include file for SDL custom system window manager hooks.
+ *
+ * Your application has access to a special type of event SDL_SYSWMEVENT,
+ * which contains window-manager specific information and arrives whenever
+ * an unhandled window event occurs.  This event is ignored by default, but
+ * you can enable it with SDL_EventState().
  */
 
 #ifndef SDL_syswm_h_
@@ -33,14 +40,6 @@
 #include "SDL_video.h"
 #include "SDL_version.h"
 
-/**
- *  \brief SDL_syswm.h
- *
- *  Your application has access to a special type of event ::SDL_SYSWMEVENT,
- *  which contains window-manager specific information and arrives whenever
- *  an unhandled window event occurs.  This event is ignored by default, but
- *  you can enable it with SDL_EventState().
- */
 struct SDL_SysWMinfo;
 
 #if !defined(SDL_PROTOTYPES_ONLY)
@@ -129,10 +128,11 @@
 #endif
 
 #if !defined(SDL_PROTOTYPES_ONLY)
+
 /**
- *  These are the various supported windowing subsystems
+ * These are the various supported windowing subsystems
  */
-typedef enum
+typedef enum SDL_SYSWM_TYPE
 {
     SDL_SYSWM_UNKNOWN,
     SDL_SYSWM_WINDOWS,
@@ -152,7 +152,7 @@
 } SDL_SYSWM_TYPE;
 
 /**
- *  The custom event structure.
+ * The custom event structure.
  */
 struct SDL_SysWMmsg
 {
@@ -218,10 +218,10 @@
 };
 
 /**
- *  The custom window manager information structure.
+ * The custom window manager information structure.
  *
- *  When this structure is returned, it holds information about which
- *  low level system it is using, and will be one of SDL_SYSWM_TYPE.
+ * When this structure is returned, it holds information about which low level
+ * system it is using, and will be one of SDL_SYSWM_TYPE.
  */
 struct SDL_SysWMinfo
 {
@@ -363,8 +363,8 @@
  * `SDL_VERSION(&info.version)`, and then this function will fill in the rest
  * of the structure with information about the given window.
  *
- * \param window the window about which information is being requested
- * \param info an SDL_SysWMinfo structure filled in with window information
+ * \param window the window about which information is being requested.
+ * \param info an SDL_SysWMinfo structure filled in with window information.
  * \returns SDL_TRUE if the function is implemented and the `version` member
  *          of the `info` struct is valid, or SDL_FALSE if the information
  *          could not be retrieved; call SDL_GetError() for more information.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test.h
  *
  *  Include file for SDL test framework.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_assert.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_assert.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_assert.h
  *
  *  Include file for SDL test framework.
@@ -42,17 +42,17 @@
 extern "C" {
 #endif
 
-/**
+/*
  * \brief Fails the assert.
  */
 #define ASSERT_FAIL     0
 
-/**
+/*
  * \brief Passes the assert.
  */
 #define ASSERT_PASS     1
 
-/**
+/*
  * \brief Assert that logs and break execution flow on failures.
  *
  * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0).
@@ -60,7 +60,7 @@
  */
 void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2);
 
-/**
+/*
  * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters.
  *
  * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0).
@@ -70,7 +70,7 @@
  */
 int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2);
 
-/**
+/*
  * \brief Explicitly pass without checking an assertion condition. Updates assertion counter.
  *
  * \param assertDescription Message to log with the assert describing it.
@@ -77,18 +77,18 @@
  */
 void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1);
 
-/**
+/*
  * \brief Resets the assert summary counters to zero.
  */
 void SDLTest_ResetAssertSummary(void);
 
-/**
+/*
  * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR.
  */
 void SDLTest_LogAssertSummary(void);
 
 
-/**
+/*
  * \brief Converts the current assert summary state to a test result.
  *
  * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_common.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_common.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_common.h
  *
  *  Include file for SDL test framework.
@@ -129,7 +129,7 @@
 
 /* Function prototypes */
 
-/**
+/*
  * \brief Parse command line parameters and create common state.
  *
  * \param argv Array of command line parameters
@@ -139,7 +139,7 @@
  */
 SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags);
 
-/**
+/*
  * \brief Process one common argument.
  *
  * \param state The common state describing the test window to create.
@@ -150,7 +150,7 @@
 int SDLTest_CommonArg(SDLTest_CommonState * state, int index);
 
 
-/**
+/*
  * \brief Logs command line usage info.
  *
  * This logs the appropriate command line options for the subsystems in use
@@ -164,7 +164,7 @@
  */
 void SDLTest_CommonLogUsage(SDLTest_CommonState * state, const char *argv0, const char **options);
 
-/**
+/*
  * \brief Returns common usage information
  *
  * You should (probably) be using SDLTest_CommonLogUsage() instead, but this
@@ -177,7 +177,7 @@
  */
 const char *SDLTest_CommonUsage(SDLTest_CommonState * state);
 
-/**
+/*
  * \brief Open test window.
  *
  * \param state The common state describing the test window to create.
@@ -186,7 +186,7 @@
  */
 SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state);
 
-/**
+/*
  * \brief Easy argument handling when test app doesn't need any custom args.
  *
  * \param state The common state describing the test window to create.
@@ -197,7 +197,7 @@
  */
 SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState * state, const int argc, char **argv);
 
-/**
+/*
  * \brief Common event handler for test windows.
  *
  * \param state The common state used to create test window.
@@ -207,7 +207,7 @@
  */
 void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done);
 
-/**
+/*
  * \brief Close test window.
  *
  * \param state The common state used to create test window.
@@ -215,7 +215,7 @@
  */
 void SDLTest_CommonQuit(SDLTest_CommonState * state);
 
-/**
+/*
  * \brief Draws various window information (position, size, etc.) to the renderer.
  *
  * \param renderer The renderer to draw to.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_compare.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_compare.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_compare.h
  *
  *  Include file for SDL test framework.
@@ -46,7 +46,7 @@
 extern "C" {
 #endif
 
-/**
+/*
  * \brief Compares a surface and with reference image data for equality
  *
  * \param surface Surface used in comparison
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_crc32.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_crc32.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_crc32.h
  *
  *  Include file for SDL test framework.
@@ -60,7 +60,7 @@
  #define CRC32_POLY 0xEDB88320   /* Perl String::CRC32 compatible */
 #endif
 
-/**
+/*
  * Data structure for CRC32 (checksum) computation
  */
   typedef struct {
@@ -69,7 +69,7 @@
 
 /* ---------- Function Prototypes ------------- */
 
-/**
+/*
  * \brief Initialize the CRC context
  *
  * Note: The function initializes the crc table required for all crc calculations.
@@ -82,7 +82,7 @@
  int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext);
 
 
-/**
+/*
  * \brief calculate a crc32 from a data block
  *
  * \param crcContext         pointer to context variable
@@ -101,7 +101,7 @@
 int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32);
 
 
-/**
+/*
  * \brief clean up CRC context
  *
  * \param crcContext        pointer to context variable
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_font.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_font.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_font.h
  *
  *  Include file for SDL test framework.
@@ -41,7 +41,7 @@
 #define FONT_CHARACTER_SIZE 8
 #define FONT_LINE_HEIGHT    (FONT_CHARACTER_SIZE + 2)
 
-/**
+/*
  *  \brief Draw a string in the currently set font.
  *
  *  \param renderer The renderer to draw on.
@@ -53,7 +53,7 @@
  */
 int SDLTest_DrawCharacter(SDL_Renderer *renderer, int x, int y, Uint32 c);
 
-/**
+/*
  *  \brief Draw a UTF-8 string in the currently set font.
  *
  *  The font currently only supports characters in the Basic Latin and Latin-1 Supplement sets.
@@ -67,7 +67,7 @@
  */
 int SDLTest_DrawString(SDL_Renderer *renderer, int x, int y, const char *s);
 
-/**
+/*
  *  \brief Data used for multi-line text output
  */
 typedef struct SDLTest_TextWindow
@@ -78,7 +78,7 @@
     char **lines;
 } SDLTest_TextWindow;
 
-/**
+/*
  *  \brief Create a multi-line text output window
  *
  *  \param x The X coordinate of the upper left corner of the window.
@@ -92,7 +92,7 @@
  */
 SDLTest_TextWindow *SDLTest_TextWindowCreate(int x, int y, int w, int h);
 
-/**
+/*
  *  \brief Display a multi-line text output window
  *
  *  This function should be called every frame to display the text
@@ -104,7 +104,7 @@
  */
 void SDLTest_TextWindowDisplay(SDLTest_TextWindow *textwin, SDL_Renderer *renderer);
 
-/**
+/*
  *  \brief Add text to a multi-line text output window
  *
  *  Adds UTF-8 text to the end of the current text. The newline character starts a
@@ -119,7 +119,7 @@
  */
 void SDLTest_TextWindowAddText(SDLTest_TextWindow *textwin, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
 
-/**
+/*
  *  \brief Add text to a multi-line text output window
  *
  *  Adds UTF-8 text to the end of the current text. The newline character starts a
@@ -134,7 +134,7 @@
  */
 void SDLTest_TextWindowAddTextWithLength(SDLTest_TextWindow *textwin, const char *text, size_t len);
 
-/**
+/*
  *  \brief Clear the text in a multi-line text output window
  *
  *  \param textwin The text output window
@@ -143,7 +143,7 @@
  */
 void SDLTest_TextWindowClear(SDLTest_TextWindow *textwin);
 
-/**
+/*
  *  \brief Free the storage associated with a multi-line text output window
  *
  *  \param textwin The text output window
@@ -152,7 +152,7 @@
  */
 void SDLTest_TextWindowDestroy(SDLTest_TextWindow *textwin);
 
-/**
+/*
  *  \brief Cleanup textures used by font drawing functions.
  */
 void SDLTest_CleanupTextDrawing(void);
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_fuzzer.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_fuzzer.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_fuzzer.h
  *
  *  Include file for SDL test framework.
@@ -48,13 +48,13 @@
 */
 
 
-/**
+/*
  * \file
  * Note: The fuzzer implementation uses a static instance of random context
  * internally which makes it thread-UNsafe.
  */
 
-/**
+/*
  * Initializes the fuzzer for a test
  *
  * \param execKey Execution "Key" that initializes the random number generator uniquely for the test.
@@ -63,7 +63,7 @@
 void SDLTest_FuzzerInit(Uint64 execKey);
 
 
-/**
+/*
  * Returns a random Uint8
  *
  * \returns a generated integer
@@ -70,7 +70,7 @@
  */
 Uint8 SDLTest_RandomUint8(void);
 
-/**
+/*
  * Returns a random Sint8
  *
  * \returns a generated signed integer
@@ -78,7 +78,7 @@
 Sint8 SDLTest_RandomSint8(void);
 
 
-/**
+/*
  * Returns a random Uint16
  *
  * \returns a generated integer
@@ -85,7 +85,7 @@
  */
 Uint16 SDLTest_RandomUint16(void);
 
-/**
+/*
  * Returns a random Sint16
  *
  * \returns a generated signed integer
@@ -93,7 +93,7 @@
 Sint16 SDLTest_RandomSint16(void);
 
 
-/**
+/*
  * Returns a random integer
  *
  * \returns a generated integer
@@ -101,7 +101,7 @@
 Sint32 SDLTest_RandomSint32(void);
 
 
-/**
+/*
  * Returns a random positive integer
  *
  * \returns a generated integer
@@ -108,7 +108,7 @@
  */
 Uint32 SDLTest_RandomUint32(void);
 
-/**
+/*
  * Returns random Uint64.
  *
  * \returns a generated integer
@@ -116,7 +116,7 @@
 Uint64 SDLTest_RandomUint64(void);
 
 
-/**
+/*
  * Returns random Sint64.
  *
  * \returns a generated signed integer
@@ -123,29 +123,29 @@
  */
 Sint64 SDLTest_RandomSint64(void);
 
-/**
+/*
  * \returns a random float in range [0.0 - 1.0]
  */
 float SDLTest_RandomUnitFloat(void);
 
-/**
+/*
  * \returns a random double in range [0.0 - 1.0]
  */
 double SDLTest_RandomUnitDouble(void);
 
-/**
+/*
  * \returns a random float.
  *
  */
 float SDLTest_RandomFloat(void);
 
-/**
+/*
  * \returns a random double.
  *
  */
 double SDLTest_RandomDouble(void);
 
-/**
+/*
  * Returns a random boundary value for Uint8 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -166,7 +166,7 @@
  */
 Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain);
 
-/**
+/*
  * Returns a random boundary value for Uint16 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -187,7 +187,7 @@
  */
 Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain);
 
-/**
+/*
  * Returns a random boundary value for Uint32 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -208,7 +208,7 @@
  */
 Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain);
 
-/**
+/*
  * Returns a random boundary value for Uint64 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -229,7 +229,7 @@
  */
 Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain);
 
-/**
+/*
  * Returns a random boundary value for Sint8 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -251,7 +251,7 @@
 Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain);
 
 
-/**
+/*
  * Returns a random boundary value for Sint16 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -272,7 +272,7 @@
  */
 Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain);
 
-/**
+/*
  * Returns a random boundary value for Sint32 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -293,7 +293,7 @@
  */
 Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain);
 
-/**
+/*
  * Returns a random boundary value for Sint64 within the given boundaries.
  * Boundaries are inclusive, see the usage examples below. If validDomain
  * is true, the function will only return valid boundaries, otherwise non-valid
@@ -315,7 +315,7 @@
 Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain);
 
 
-/**
+/*
  * Returns integer in range [min, max] (inclusive).
  * Min and max values can be negative values.
  * If Max in smaller than min, then the values are swapped.
@@ -329,7 +329,7 @@
 Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max);
 
 
-/**
+/*
  * Generates random null-terminated string. The minimum length for
  * the string is 1 character, maximum length for the string is 255
  * characters and it can contain ASCII characters from 32 to 126.
@@ -341,7 +341,7 @@
 char * SDLTest_RandomAsciiString(void);
 
 
-/**
+/*
  * Generates random null-terminated string. The maximum length for
  * the string is defined by the maxLength parameter.
  * String can contain ASCII characters from 32 to 126.
@@ -355,7 +355,7 @@
 char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength);
 
 
-/**
+/*
  * Generates random null-terminated string. The length for
  * the string is defined by the size parameter.
  * String can contain ASCII characters from 32 to 126.
@@ -368,7 +368,8 @@
  */
 char * SDLTest_RandomAsciiStringOfSize(int size);
 
-/**
+
+/*
  * Get the invocation count for the fuzzer since last ...FuzzerInit.
  *
  * \returns the invocation count.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_harness.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_harness.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_harness.h
  *
  *  Include file for SDL test framework.
@@ -69,7 +69,7 @@
 /* !< Function pointer to a test case teardown function (run after every test) */
 typedef void  (*SDLTest_TestCaseTearDownFp)(void *arg);
 
-/**
+/*
  * Holds information about a single test case.
  */
 typedef struct SDLTest_TestCaseReference {
@@ -83,7 +83,7 @@
     int enabled;
 } SDLTest_TestCaseReference;
 
-/**
+/*
  * Holds information about a test suite (multiple test cases).
  */
 typedef struct SDLTest_TestSuiteReference {
@@ -98,7 +98,7 @@
 } SDLTest_TestSuiteReference;
 
 
-/**
+/*
  * \brief Generates a random run seed string for the harness. The generated seed will contain alphanumeric characters (0-9A-Z).
  *
  * Note: The returned string needs to be deallocated by the caller.
@@ -109,7 +109,7 @@
  */
 char *SDLTest_GenerateRunSeed(const int length);
 
-/**
+/*
  * \brief Execute a test suite using the given run seed and execution key.
  *
  * \param testSuites Suites containing the test case.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_images.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_images.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_images.h
  *
  *  Include file for SDL test framework.
@@ -44,7 +44,7 @@
 extern "C" {
 #endif
 
-/**
+/*
  *Type for test images.
  */
 typedef struct SDLTest_SurfaceImage_s {
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_log.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_log.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_log.h
  *
  *  Include file for SDL test framework.
@@ -42,7 +42,7 @@
 extern "C" {
 #endif
 
-/**
+/*
  * \brief Prints given message with a timestamp in the TEST category and INFO priority.
  *
  * \param fmt Message to be logged
@@ -49,7 +49,7 @@
  */
 void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1);
 
-/**
+/*
  * \brief Prints given message with a timestamp in the TEST category and the ERROR priority.
  *
  * \param fmt Message to be logged
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_md5.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_md5.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_md5.h
  *
  *  Include file for SDL test framework.
@@ -77,7 +77,7 @@
 
 /* ---------- Function Prototypes ------------- */
 
-/**
+/*
  * \brief initialize the context
  *
  * \param  mdContext        pointer to context variable
@@ -89,7 +89,7 @@
  void SDLTest_Md5Init(SDLTest_Md5Context * mdContext);
 
 
-/**
+/*
  * \brief update digest from variable length data
  *
  * \param  mdContext       pointer to context variable
@@ -105,7 +105,7 @@
                  unsigned int inLen);
 
 
-/**
+/*
  * \brief complete digest computation
  *
  * \param mdContext     pointer to context variable
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_memory.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_memory.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_memory.h
  *
  *  Include file for SDL test framework.
@@ -37,7 +37,7 @@
 #endif
 
 
-/**
+/*
  * \brief Start tracking SDL memory allocations
  * 
  * \note This should be called before any other SDL functions for complete tracking coverage
@@ -44,7 +44,7 @@
  */
 int SDLTest_TrackAllocations(void);
 
-/**
+/*
  * \brief Print a log of any outstanding allocations
  *
  * \note This can be called after SDL_Quit()
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_random.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_random.h
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
+/*
  *  \file SDL_test_random.h
  *
  *  Include file for SDL test framework.
@@ -67,7 +67,7 @@
 
 /* --- Function prototypes */
 
-/**
+/*
  *  \brief Initialize random number generator with two integers.
  *
  *  Note: The random sequence of numbers returned by ...Random() is the
@@ -81,7 +81,7 @@
  void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi,
                   unsigned int ci);
 
-/**
+/*
  *  \brief Initialize random number generator based on current system time.
  *
  *  \param rndContext     pointer to context structure
@@ -90,7 +90,7 @@
  void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext);
 
 
-/**
+/*
  *  \brief Initialize random number generator based on current system time.
  *
  *  Note: ...RandomInit() or ...RandomInitTime() must have been called
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_thread.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_thread.h
@@ -23,9 +23,9 @@
 #define SDL_thread_h_
 
 /**
- *  \file SDL_thread.h
+ * # CategoryThread
  *
- *  Header for the SDL thread management routines.
+ * Header for the SDL thread management routines.
  */
 
 #include "SDL_stdinc.h"
@@ -63,16 +63,18 @@
 typedef unsigned int SDL_TLSID;
 
 /**
- *  The SDL thread priority.
+ * The SDL thread priority.
  *
- *  SDL will make system changes as necessary in order to apply the thread priority.
- *  Code which attempts to control thread state related to priority should be aware
- *  that calling SDL_SetThreadPriority may alter such state.
- *  SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior.
+ * SDL will make system changes as necessary in order to apply the thread
+ * priority. Code which attempts to control thread state related to priority
+ * should be aware that calling SDL_SetThreadPriority may alter such state.
+ * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this
+ * behavior.
  *
- *  \note On many systems you require special privileges to set high or time critical priority.
+ * On many systems you require special privileges to set high or time critical
+ * priority.
  */
-typedef enum {
+typedef enum SDL_ThreadPriority {
     SDL_THREAD_PRIORITY_LOW,
     SDL_THREAD_PRIORITY_NORMAL,
     SDL_THREAD_PRIORITY_HIGH,
@@ -82,7 +84,7 @@
 /**
  * The function passed to SDL_CreateThread().
  *
- * \param data what was passed as `data` to SDL_CreateThread()
+ * \param data what was passed as `data` to SDL_CreateThread().
  * \returns a value that can be reported through SDL_WaitThread().
  */
 typedef int (SDLCALL * SDL_ThreadFunction) (void *data);
@@ -192,9 +194,9 @@
  * SDL_CreateThreadWithStackSize(fn, name, 0, data);
  * ```
  *
- * \param fn the SDL_ThreadFunction function to call in the new thread
- * \param name the name of the thread
- * \param data a pointer that is passed to `fn`
+ * \param fn the SDL_ThreadFunction function to call in the new thread.
+ * \param name the name of the thread.
+ * \param data a pointer that is passed to `fn`.
  * \returns an opaque pointer to the new thread object on success, NULL if the
  *          new thread could not be created; call SDL_GetError() for more
  *          information.
@@ -238,10 +240,10 @@
  * function, but for backwards compatibility, this is currently a separate
  * function.
  *
- * \param fn the SDL_ThreadFunction function to call in the new thread
- * \param name the name of the thread
+ * \param fn the SDL_ThreadFunction function to call in the new thread.
+ * \param name the name of the thread.
  * \param stacksize the size, in bytes, to allocate for the new thread stack.
- * \param data a pointer that is passed to `fn`
+ * \param data a pointer that is passed to `fn`.
  * \returns an opaque pointer to the new thread object on success, NULL if the
  *          new thread could not be created; call SDL_GetError() for more
  *          information.
@@ -261,7 +263,7 @@
  * This is internal memory, not to be freed by the caller, and remains valid
  * until the specified thread is cleaned up by SDL_WaitThread().
  *
- * \param thread the thread to query
+ * \param thread the thread to query.
  * \returns a pointer to a UTF-8 string that names the specified thread, or
  *          NULL if it doesn't have a name.
  *
@@ -296,7 +298,7 @@
  * If SDL is running on a platform that does not support threads the return
  * value will always be zero.
  *
- * \param thread the thread to query
+ * \param thread the thread to query.
  * \returns the ID of the specified thread, or the ID of the current thread if
  *          `thread` is NULL.
  *
@@ -313,7 +315,7 @@
  * promote the thread to a higher priority) at all, and some require you to be
  * an administrator account. Be prepared for this to fail.
  *
- * \param priority the SDL_ThreadPriority to set
+ * \param priority the SDL_ThreadPriority to set.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -344,7 +346,7 @@
  * afterward.
  *
  * \param thread the SDL_Thread pointer that was returned from the
- *               SDL_CreateThread() call that started this thread
+ *               SDL_CreateThread() call that started this thread.
  * \param status pointer to an integer that will receive the value returned
  *               from the thread function by its 'return', or NULL to not
  *               receive such value back.
@@ -383,7 +385,7 @@
  * It is safe to pass NULL to this function; it is a no-op.
  *
  * \param thread the SDL_Thread pointer that was returned from the
- *               SDL_CreateThread() call that started this thread
+ *               SDL_CreateThread() call that started this thread.
  *
  * \since This function is available since SDL 2.0.2.
  *
@@ -410,7 +412,7 @@
 /**
  * Get the current thread's value associated with a thread local storage ID.
  *
- * \param id the thread local storage ID
+ * \param id the thread local storage ID.
  * \returns the value associated with the ID for the current thread or NULL if
  *          no value has been set; call SDL_GetError() for more information.
  *
@@ -421,6 +423,8 @@
  */
 extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id);
 
+typedef void (SDLCALL *SDL_TLSDestructorCallback)(void*);
+
 /**
  * Set the current thread's value associated with a thread local storage ID.
  *
@@ -432,10 +436,10 @@
  *
  * where its parameter `value` is what was passed as `value` to SDL_TLSSet().
  *
- * \param id the thread local storage ID
- * \param value the value to associate with the ID for the current thread
+ * \param id the thread local storage ID.
+ * \param value the value to associate with the ID for the current thread.
  * \param destructor a function called when the thread exits, to free the
- *                   value
+ *                   value.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -444,7 +448,7 @@
  * \sa SDL_TLSCreate
  * \sa SDL_TLSGet
  */
-extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*));
+extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, SDL_TLSDestructorCallback destructor);
 
 /**
  * Cleanup all TLS data for this thread.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_timer.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_timer.h
@@ -23,9 +23,9 @@
 #define SDL_timer_h_
 
 /**
- *  \file SDL_timer.h
+ * # CategoryTimer
  *
- *  Header for the SDL time management routines.
+ * Header for the SDL time management routines.
  */
 
 #include "SDL_stdinc.h"
@@ -89,8 +89,8 @@
  * days, but should _not_ be used with SDL_GetTicks64(), which does not have
  * that problem.
  *
- * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could
- * do this:
+ * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could do
+ * this:
  *
  * ```c
  * const Uint32 timeout = SDL_GetTicks() + 100;
@@ -99,9 +99,9 @@
  * }
  * ```
  *
- * Note that this does not handle tick differences greater
- * than 2^31 so take care when using the above kind of code
- * with large timeout delays (tens of days).
+ * Note that this does not handle tick differences greater than 2^31 so take
+ * care when using the above kind of code with large timeout delays (tens of
+ * days).
  */
 #define SDL_TICKS_PASSED(A, B)  ((Sint32)((B) - (A)) <= 0)
 
@@ -140,7 +140,7 @@
  * waits at least the specified time, but possibly longer due to OS
  * scheduling.
  *
- * \param ms the number of milliseconds to delay
+ * \param ms the number of milliseconds to delay.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -149,10 +149,10 @@
 /**
  * Function prototype for the timer callback function.
  *
- * The callback function is passed the current timer interval and returns
- * the next timer interval. If the returned value is the same as the one
- * passed in, the periodic alarm continues, otherwise a new alarm is
- * scheduled. If the callback returns 0, the periodic alarm is cancelled.
+ * The callback function is passed the current timer interval and returns the
+ * next timer interval. If the returned value is the same as the one passed
+ * in, the periodic alarm continues, otherwise a new alarm is scheduled. If
+ * the callback returns 0, the periodic alarm is cancelled.
  */
 typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param);
 
@@ -182,10 +182,10 @@
  * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your
  * callback needs to adjust for variances.
  *
- * \param interval the timer delay, in milliseconds, passed to `callback`
+ * \param interval the timer delay, in milliseconds, passed to `callback`.
  * \param callback the SDL_TimerCallback function to call when the specified
- *                 `interval` elapses
- * \param param a pointer that is passed to `callback`
+ *                 `interval` elapses.
+ * \param param a pointer that is passed to `callback`.
  * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more
  *          information.
  *
@@ -200,7 +200,7 @@
 /**
  * Remove a timer created with SDL_AddTimer().
  *
- * \param id the ID of the timer to remove
+ * \param id the ID of the timer to remove.
  * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't
  *          found.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_touch.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_touch.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_touch.h
+ * # CategoryTouch
  *
- *  Include file for SDL touch event handling.
+ * Include file for SDL touch event handling.
  */
 
 #ifndef SDL_touch_h_
@@ -85,7 +85,7 @@
 /**
  * Get the touch ID with the given index.
  *
- * \param index the touch device index
+ * \param index the touch device index.
  * \returns the touch ID with the given index on success or 0 if the index is
  *          invalid; call SDL_GetError() for more information.
  *
@@ -113,7 +113,7 @@
 /**
  * Get the number of active fingers for a given touch device.
  *
- * \param touchID the ID of a touch device
+ * \param touchID the ID of a touch device.
  * \returns the number of active fingers for a given touch device on success
  *          or 0 on failure; call SDL_GetError() for more information.
  *
@@ -128,8 +128,8 @@
  *
  * The returned resource is owned by SDL and should not be deallocated.
  *
- * \param touchID the ID of the requested touch device
- * \param index the index of the requested finger
+ * \param touchID the ID of the requested touch device.
+ * \param index the index of the requested finger.
  * \returns a pointer to the SDL_Finger object or NULL if no object at the
  *          given ID and index could be found.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_types.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_types.h
@@ -19,11 +19,6 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-/**
- *  \file SDL_types.h
- *
- *  \deprecated
- */
-
 /* DEPRECATED */
+
 #include "SDL_stdinc.h"
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_version.h
+ * # CategoryVersion
  *
- *  This header defines the current SDL version.
+ * This header defines the current SDL version.
  */
 
 #ifndef SDL_version_h_
@@ -40,10 +40,9 @@
  * Information about the version of SDL in use.
  *
  * Represents the library's version as three levels: major revision
- * (increments with massive changes, additions, and enhancements),
- * minor revision (increments with backwards-compatible changes to the
- * major revision), and patchlevel (increments with fixes to the minor
- * revision).
+ * (increments with massive changes, additions, and enhancements), minor
+ * revision (increments with backwards-compatible changes to the major
+ * revision), and patchlevel (increments with fixes to the minor revision).
  *
  * \sa SDL_VERSION
  * \sa SDL_GetVersion
@@ -58,18 +57,17 @@
 /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL
 */
 #define SDL_MAJOR_VERSION   2
-#define SDL_MINOR_VERSION   30
-#define SDL_PATCHLEVEL      12
+#define SDL_MINOR_VERSION   32
+#define SDL_PATCHLEVEL      2
 
 /**
  * Macro to determine SDL version program was compiled against.
  *
- * This macro fills in a SDL_version structure with the version of the
- * library you compiled against. This is determined by what header the
- * compiler uses. Note that if you dynamically linked the library, you might
- * have a slightly newer or older version at runtime. That version can be
- * determined with SDL_GetVersion(), which, unlike SDL_VERSION(),
- * is not a macro.
+ * This macro fills in a SDL_version structure with the version of the library
+ * you compiled against. This is determined by what header the compiler uses.
+ * Note that if you dynamically linked the library, you might have a slightly
+ * newer or older version at runtime. That version can be determined with
+ * SDL_GetVersion(), which, unlike SDL_VERSION(), is not a macro.
  *
  * \param x A pointer to a SDL_version struct to initialize.
  *
@@ -85,30 +83,33 @@
 
 /* TODO: Remove this whole block in SDL 3 */
 #if SDL_MAJOR_VERSION < 3
+
 /**
- *  This macro turns the version numbers into a numeric value:
- *  \verbatim
-    (1,2,3) -> (1203)
-    \endverbatim
+ * This macro turns the version numbers into a numeric value:
  *
- *  This assumes that there will never be more than 100 patchlevels.
+ * ```
+ * (1,2,3) -> (1203)
+ * ```
  *
- *  In versions higher than 2.9.0, the minor version overflows into
- *  the thousands digit: for example, 2.23.0 is encoded as 4300,
- *  and 2.255.99 would be encoded as 25799.
- *  This macro will not be available in SDL 3.x.
+ * This assumes that there will never be more than 100 patchlevels.
+ *
+ * In versions higher than 2.9.0, the minor version overflows into the
+ * thousands digit: for example, 2.23.0 is encoded as 4300, and 2.255.99 would
+ * be encoded as 25799.
+ *
+ * This macro will not be available in SDL 3.x.
  */
 #define SDL_VERSIONNUM(X, Y, Z)                     \
     ((X)*1000 + (Y)*100 + (Z))
 
 /**
- *  This is the version number macro for the current SDL version.
+ * This is the version number macro for the current SDL version.
  *
- *  In versions higher than 2.9.0, the minor version overflows into
- *  the thousands digit: for example, 2.23.0 is encoded as 4300.
- *  This macro will not be available in SDL 3.x.
+ * In versions higher than 2.9.0, the minor version overflows into the
+ * thousands digit: for example, 2.23.0 is encoded as 4300. This macro will
+ * not be available in SDL 3.x.
  *
- *  Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead.
+ * Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead.
  */
 #define SDL_COMPILEDVERSION \
     SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL)
@@ -115,7 +116,7 @@
 #endif /* SDL_MAJOR_VERSION < 3 */
 
 /**
- *  This macro will evaluate to true if compiled with SDL at least X.Y.Z.
+ * This macro will evaluate to true if compiled with SDL at least X.Y.Z.
  */
 #define SDL_VERSION_ATLEAST(X, Y, Z) \
     ((SDL_MAJOR_VERSION >= X) && \
@@ -132,7 +133,7 @@
  *
  * This function may be called safely at any time, even before SDL_Init().
  *
- * \param ver the SDL_version structure that contains the version information
+ * \param ver the SDL_version structure that contains the version information.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_video.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_video.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_video.h
+ * # CategoryVideo
  *
- *  Header file for SDL video functions.
+ * Header file for SDL video functions.
  */
 
 #ifndef SDL_video_h_
@@ -40,17 +40,17 @@
 #endif
 
 /**
- *  \brief  The structure that defines a display mode
+ * The structure that defines a display mode
  *
- *  \sa SDL_GetNumDisplayModes()
- *  \sa SDL_GetDisplayMode()
- *  \sa SDL_GetDesktopDisplayMode()
- *  \sa SDL_GetCurrentDisplayMode()
- *  \sa SDL_GetClosestDisplayMode()
- *  \sa SDL_SetWindowDisplayMode()
- *  \sa SDL_GetWindowDisplayMode()
+ * \sa SDL_GetNumDisplayModes
+ * \sa SDL_GetDisplayMode
+ * \sa SDL_GetDesktopDisplayMode
+ * \sa SDL_GetCurrentDisplayMode
+ * \sa SDL_GetClosestDisplayMode
+ * \sa SDL_SetWindowDisplayMode
+ * \sa SDL_GetWindowDisplayMode
  */
-typedef struct
+typedef struct SDL_DisplayMode
 {
     Uint32 format;              /**< pixel format */
     int w;                      /**< width, in screen coordinates */
@@ -60,46 +60,46 @@
 } SDL_DisplayMode;
 
 /**
- *  \brief The type used to identify a window
+ * The opaque type used to identify a window.
  *
- *  \sa SDL_CreateWindow()
- *  \sa SDL_CreateWindowFrom()
- *  \sa SDL_DestroyWindow()
- *  \sa SDL_FlashWindow()
- *  \sa SDL_GetWindowData()
- *  \sa SDL_GetWindowFlags()
- *  \sa SDL_GetWindowGrab()
- *  \sa SDL_GetWindowKeyboardGrab()
- *  \sa SDL_GetWindowMouseGrab()
- *  \sa SDL_GetWindowPosition()
- *  \sa SDL_GetWindowSize()
- *  \sa SDL_GetWindowTitle()
- *  \sa SDL_HideWindow()
- *  \sa SDL_MaximizeWindow()
- *  \sa SDL_MinimizeWindow()
- *  \sa SDL_RaiseWindow()
- *  \sa SDL_RestoreWindow()
- *  \sa SDL_SetWindowData()
- *  \sa SDL_SetWindowFullscreen()
- *  \sa SDL_SetWindowGrab()
- *  \sa SDL_SetWindowKeyboardGrab()
- *  \sa SDL_SetWindowMouseGrab()
- *  \sa SDL_SetWindowIcon()
- *  \sa SDL_SetWindowPosition()
- *  \sa SDL_SetWindowSize()
- *  \sa SDL_SetWindowBordered()
- *  \sa SDL_SetWindowResizable()
- *  \sa SDL_SetWindowTitle()
- *  \sa SDL_ShowWindow()
+ * \sa SDL_CreateWindow
+ * \sa SDL_CreateWindowFrom
+ * \sa SDL_DestroyWindow
+ * \sa SDL_FlashWindow
+ * \sa SDL_GetWindowData
+ * \sa SDL_GetWindowFlags
+ * \sa SDL_GetWindowGrab
+ * \sa SDL_GetWindowKeyboardGrab
+ * \sa SDL_GetWindowMouseGrab
+ * \sa SDL_GetWindowPosition
+ * \sa SDL_GetWindowSize
+ * \sa SDL_GetWindowTitle
+ * \sa SDL_HideWindow
+ * \sa SDL_MaximizeWindow
+ * \sa SDL_MinimizeWindow
+ * \sa SDL_RaiseWindow
+ * \sa SDL_RestoreWindow
+ * \sa SDL_SetWindowData
+ * \sa SDL_SetWindowFullscreen
+ * \sa SDL_SetWindowGrab
+ * \sa SDL_SetWindowKeyboardGrab
+ * \sa SDL_SetWindowMouseGrab
+ * \sa SDL_SetWindowIcon
+ * \sa SDL_SetWindowPosition
+ * \sa SDL_SetWindowSize
+ * \sa SDL_SetWindowBordered
+ * \sa SDL_SetWindowResizable
+ * \sa SDL_SetWindowTitle
+ * \sa SDL_ShowWindow
  */
 typedef struct SDL_Window SDL_Window;
 
 /**
- *  \brief The flags on a window
+ * The flags on a window
  *
- *  \sa SDL_GetWindowFlags()
+ * \sa SDL_GetWindowFlags
  */
-typedef enum
+typedef enum SDL_WindowFlags
 {
     SDL_WINDOW_FULLSCREEN = 0x00000001,         /**< fullscreen window */
     SDL_WINDOW_OPENGL = 0x00000002,             /**< window usable with OpenGL context */
@@ -131,7 +131,7 @@
 } SDL_WindowFlags;
 
 /**
- *  \brief Used to indicate that you don't care what the window position is.
+ * Used to indicate that you don't care what the window position is.
  */
 #define SDL_WINDOWPOS_UNDEFINED_MASK    0x1FFF0000u
 #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X)  (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
@@ -140,7 +140,7 @@
             (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK)
 
 /**
- *  \brief Used to indicate that the window position should be centered.
+ * Used to indicate that the window position should be centered.
  */
 #define SDL_WINDOWPOS_CENTERED_MASK    0x2FFF0000u
 #define SDL_WINDOWPOS_CENTERED_DISPLAY(X)  (SDL_WINDOWPOS_CENTERED_MASK|(X))
@@ -149,9 +149,9 @@
             (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK)
 
 /**
- *  \brief Event subtype for window events
+ * Event subtype for window events
  */
-typedef enum
+typedef enum SDL_WindowEventID
 {
     SDL_WINDOWEVENT_NONE,           /**< Never used */
     SDL_WINDOWEVENT_SHOWN,          /**< Window has been shown */
@@ -180,9 +180,9 @@
 } SDL_WindowEventID;
 
 /**
- *  \brief Event subtype for display events
+ * Event subtype for display events
  */
-typedef enum
+typedef enum SDL_DisplayEventID
 {
     SDL_DISPLAYEVENT_NONE,          /**< Never used */
     SDL_DISPLAYEVENT_ORIENTATION,   /**< Display orientation has changed to data1 */
@@ -192,9 +192,9 @@
 } SDL_DisplayEventID;
 
 /**
- *  \brief Display orientation
+ * Display orientation
  */
-typedef enum
+typedef enum SDL_DisplayOrientation
 {
     SDL_ORIENTATION_UNKNOWN,            /**< The display orientation can't be determined */
     SDL_ORIENTATION_LANDSCAPE,          /**< The display is in landscape mode, with the right side up, relative to portrait mode */
@@ -204,9 +204,9 @@
 } SDL_DisplayOrientation;
 
 /**
- *  \brief Window flash operation
+ * Window flash operation
  */
-typedef enum
+typedef enum SDL_FlashOperation
 {
     SDL_FLASH_CANCEL,                   /**< Cancel any window flash state */
     SDL_FLASH_BRIEFLY,                  /**< Flash the window briefly to get attention */
@@ -214,46 +214,78 @@
 } SDL_FlashOperation;
 
 /**
- *  \brief An opaque handle to an OpenGL context.
+ * An opaque handle to an OpenGL context.
+ *
+ * \sa SDL_GL_CreateContext
  */
 typedef void *SDL_GLContext;
 
 /**
- *  \brief OpenGL configuration attributes
+ * OpenGL configuration attributes.
+ *
+ * While you can set most OpenGL attributes normally, the attributes listed
+ * above must be known before SDL creates the window that will be used with
+ * the OpenGL context. These attributes are set and read with
+ * SDL_GL_SetAttribute and SDL_GL_GetAttribute.
+ *
+ * In some cases, these attributes are minimum requests; the GL does not
+ * promise to give you exactly what you asked for. It's possible to ask for a
+ * 16-bit depth buffer and get a 24-bit one instead, for example, or to ask
+ * for no stencil buffer and still have one available. Context creation should
+ * fail if the GL can't provide your requested attributes at a minimum, but
+ * you should check to see exactly what you got.
+ *
+ *
+ * [Multisample anti-aliasing](http://en.wikipedia.org/wiki/Multisample_anti-aliasing)
+ * is a type of full screen anti-aliasing. Multipsampling defaults to off but
+ * can be turned on by setting SDL_GL_MULTISAMPLEBUFFERS to 1 and
+ * SDL_GL_MULTISAMPLESAMPLES to a value greater than 0. Typical values are 2
+ * and 4.
+ *
+ * SDL_GL_CONTEXT_PROFILE_MASK determines the type of context created, while
+ * both SDL_GL_CONTEXT_MAJOR_VERSION and SDL_GL_CONTEXT_MINOR_VERSION
+ * determine which version. All three attributes must be set prior to creating
+ * the first window, and in general you can't change the value of
+ * SDL_GL_CONTEXT_PROFILE_MASK without first destroying all windows created
+ * with the previous setting.
+ *
+ * SDL_GL_CONTEXT_RELEASE_BEHAVIOR can be set to
+ * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE or
+ * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH.
  */
-typedef enum
+typedef enum SDL_GLattr
 {
-    SDL_GL_RED_SIZE,
-    SDL_GL_GREEN_SIZE,
-    SDL_GL_BLUE_SIZE,
-    SDL_GL_ALPHA_SIZE,
-    SDL_GL_BUFFER_SIZE,
-    SDL_GL_DOUBLEBUFFER,
-    SDL_GL_DEPTH_SIZE,
-    SDL_GL_STENCIL_SIZE,
-    SDL_GL_ACCUM_RED_SIZE,
-    SDL_GL_ACCUM_GREEN_SIZE,
-    SDL_GL_ACCUM_BLUE_SIZE,
-    SDL_GL_ACCUM_ALPHA_SIZE,
-    SDL_GL_STEREO,
-    SDL_GL_MULTISAMPLEBUFFERS,
-    SDL_GL_MULTISAMPLESAMPLES,
-    SDL_GL_ACCELERATED_VISUAL,
-    SDL_GL_RETAINED_BACKING,
-    SDL_GL_CONTEXT_MAJOR_VERSION,
-    SDL_GL_CONTEXT_MINOR_VERSION,
-    SDL_GL_CONTEXT_EGL,
-    SDL_GL_CONTEXT_FLAGS,
-    SDL_GL_CONTEXT_PROFILE_MASK,
-    SDL_GL_SHARE_WITH_CURRENT_CONTEXT,
-    SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,
-    SDL_GL_CONTEXT_RELEASE_BEHAVIOR,
+    SDL_GL_RED_SIZE,                    /**< the minimum number of bits for the red channel of the color buffer; defaults to 3. */
+    SDL_GL_GREEN_SIZE,                  /**< the minimum number of bits for the green channel of the color buffer; defaults to 3. */
+    SDL_GL_BLUE_SIZE,                   /**< the minimum number of bits for the blue channel of the color buffer; defaults to 2. */
+    SDL_GL_ALPHA_SIZE,                  /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 0. */
+    SDL_GL_BUFFER_SIZE,                 /**< the minimum number of bits for frame buffer size; defaults to 0. */
+    SDL_GL_DOUBLEBUFFER,                /**< whether the output is single or double buffered; defaults to double buffering on. */
+    SDL_GL_DEPTH_SIZE,                  /**< the minimum number of bits in the depth buffer; defaults to 16. */
+    SDL_GL_STENCIL_SIZE,                /**< the minimum number of bits in the stencil buffer; defaults to 0. */
+    SDL_GL_ACCUM_RED_SIZE,              /**< the minimum number of bits for the red channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_ACCUM_GREEN_SIZE,            /**< the minimum number of bits for the green channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_ACCUM_BLUE_SIZE,             /**< the minimum number of bits for the blue channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_ACCUM_ALPHA_SIZE,            /**< the minimum number of bits for the alpha channel of the accumulation buffer; defaults to 0. */
+    SDL_GL_STEREO,                      /**< whether the output is stereo 3D; defaults to off. */
+    SDL_GL_MULTISAMPLEBUFFERS,          /**< the number of buffers used for multisample anti-aliasing; defaults to 0. */
+    SDL_GL_MULTISAMPLESAMPLES,          /**< the number of samples used around the current pixel used for multisample anti-aliasing. */
+    SDL_GL_ACCELERATED_VISUAL,          /**< set to 1 to require hardware acceleration, set to 0 to force software rendering; defaults to allow either. */
+    SDL_GL_RETAINED_BACKING,            /**< not used (deprecated). */
+    SDL_GL_CONTEXT_MAJOR_VERSION,       /**< OpenGL context major version. */
+    SDL_GL_CONTEXT_MINOR_VERSION,       /**< OpenGL context minor version. */
+    SDL_GL_CONTEXT_EGL,                 /**< deprecated: set SDL_GL_CONTEXT_PROFILE_MASK to SDL_GL_CONTEXT_PROFILE_ES to enable instead. */
+    SDL_GL_CONTEXT_FLAGS,               /**< some combination of 0 or more of elements of the SDL_GLcontextFlag enumeration; defaults to 0. */
+    SDL_GL_CONTEXT_PROFILE_MASK,        /**< type of GL context (Core, Compatibility, ES). See SDL_GLprofile; default value depends on platform. */
+    SDL_GL_SHARE_WITH_CURRENT_CONTEXT,  /**< OpenGL context sharing; defaults to 0. */
+    SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,    /**< requests sRGB capable visual; defaults to 0. (>= SDL 2.0.1) */
+    SDL_GL_CONTEXT_RELEASE_BEHAVIOR,    /**< sets context the release behavior; defaults to 1. (>= SDL 2.0.4) */
     SDL_GL_CONTEXT_RESET_NOTIFICATION,
     SDL_GL_CONTEXT_NO_ERROR,
     SDL_GL_FLOATBUFFERS
 } SDL_GLattr;
 
-typedef enum
+typedef enum SDL_GLprofile
 {
     SDL_GL_CONTEXT_PROFILE_CORE           = 0x0001,
     SDL_GL_CONTEXT_PROFILE_COMPATIBILITY  = 0x0002,
@@ -260,7 +292,7 @@
     SDL_GL_CONTEXT_PROFILE_ES             = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
 } SDL_GLprofile;
 
-typedef enum
+typedef enum SDL_GLcontextFlag
 {
     SDL_GL_CONTEXT_DEBUG_FLAG              = 0x0001,
     SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002,
@@ -268,13 +300,13 @@
     SDL_GL_CONTEXT_RESET_ISOLATION_FLAG    = 0x0008
 } SDL_GLcontextFlag;
 
-typedef enum
+typedef enum SDL_GLcontextReleaseFlag
 {
     SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE   = 0x0000,
     SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH  = 0x0001
 } SDL_GLcontextReleaseFlag;
 
-typedef enum
+typedef enum SDL_GLContextResetNotification
 {
     SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000,
     SDL_GL_CONTEXT_RESET_LOSE_CONTEXT    = 0x0001
@@ -300,7 +332,7 @@
  * The video drivers are presented in the order in which they are normally
  * checked during initialization.
  *
- * \param index the index of a video driver
+ * \param index the index of a video driver.
  * \returns the name of the video driver with the given **index**.
  *
  * \since This function is available since SDL 2.0.0.
@@ -327,7 +359,7 @@
  * specific `driver_name`.
  *
  * \param driver_name the name of a video driver to initialize, or NULL for
- *                    the default driver
+ *                    the default driver.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -380,7 +412,7 @@
  * Get the name of a display in UTF-8 encoding.
  *
  * \param displayIndex the index of display from which the name should be
- *                     queried
+ *                     queried.
  * \returns the name of a display or NULL for an invalid display index or
  *          failure; call SDL_GetError() for more information.
  *
@@ -395,8 +427,8 @@
  *
  * The primary display (`displayIndex` zero) is always located at 0,0.
  *
- * \param displayIndex the index of the display to query
- * \param rect the SDL_Rect structure filled in with the display bounds
+ * \param displayIndex the index of the display to query.
+ * \param rect the SDL_Rect structure filled in with the display bounds.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -425,8 +457,8 @@
  * range.
  *
  * \param displayIndex the index of the display to query the usable bounds
- *                     from
- * \param rect the SDL_Rect structure filled in with the display bounds
+ *                     from.
+ * \param rect the SDL_Rect structure filled in with the display bounds.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -456,13 +488,13 @@
  * more consistent, reliable, and clear.
  *
  * \param displayIndex the index of the display from which DPI information
- *                     should be queried
+ *                     should be queried.
  * \param ddpi a pointer filled in with the diagonal DPI of the display; may
- *             be NULL
+ *             be NULL.
  * \param hdpi a pointer filled in with the horizontal DPI of the display; may
- *             be NULL
+ *             be NULL.
  * \param vdpi a pointer filled in with the vertical DPI of the display; may
- *             be NULL
+ *             be NULL.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -475,7 +507,7 @@
 /**
  * Get the orientation of a display.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \returns The SDL_DisplayOrientation enum value of the display, or
  *          `SDL_ORIENTATION_UNKNOWN` if it isn't available.
  *
@@ -491,7 +523,7 @@
  * The `displayIndex` needs to be in the range from 0 to
  * SDL_GetNumVideoDisplays() - 1.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \returns a number >= 1 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -513,10 +545,10 @@
  * - packed pixel layout -> largest to smallest
  * - refresh rate -> highest to lowest
  *
- * \param displayIndex the index of the display to query
- * \param modeIndex the index of the display mode to query
+ * \param displayIndex the index of the display to query.
+ * \param modeIndex the index of the display mode to query.
  * \param mode an SDL_DisplayMode structure filled in with the mode at
- *             `modeIndex`
+ *             `modeIndex`.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -535,9 +567,9 @@
  * function will return the previous native display mode, and not the current
  * display mode.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \param mode an SDL_DisplayMode structure filled in with the current display
- *             mode
+ *             mode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -557,9 +589,9 @@
  * function will return the current display mode, and not the previous native
  * display mode.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \param mode an SDL_DisplayMode structure filled in with the current display
- *             mode
+ *             mode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -583,11 +615,11 @@
  * and finally checking the refresh rate. If all the available modes are too
  * small, then NULL is returned.
  *
- * \param displayIndex the index of the display to query
+ * \param displayIndex the index of the display to query.
  * \param mode an SDL_DisplayMode structure containing the desired display
- *             mode
+ *             mode.
  * \param closest an SDL_DisplayMode structure filled in with the closest
- *                match of the available display modes
+ *                match of the available display modes.
  * \returns the passed in value `closest` or NULL if no matching video mode
  *          was available; call SDL_GetError() for more information.
  *
@@ -601,7 +633,7 @@
 /**
  * Get the index of the display containing a point
  *
- * \param point the point to query
+ * \param point the point to query.
  * \returns the index of the display containing the point or a negative error
  *          code on failure; call SDL_GetError() for more information.
  *
@@ -615,7 +647,7 @@
 /**
  * Get the index of the display primarily containing a rect
  *
- * \param rect the rect to query
+ * \param rect the rect to query.
  * \returns the index of the display entirely containing the rect or closest
  *          to the center of the rect on success or a negative error code on
  *          failure; call SDL_GetError() for more information.
@@ -630,7 +662,7 @@
 /**
  * Get the index of the display associated with a window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the index of the display containing the center of the window on
  *          success or a negative error code on failure; call SDL_GetError()
  *          for more information.
@@ -649,10 +681,10 @@
  * change the window size when the window is not fullscreen, use
  * SDL_SetWindowSize().
  *
- * \param window the window to affect
+ * \param window the window to affect.
  * \param mode the SDL_DisplayMode structure representing the mode to use, or
  *             NULL to use the window's dimensions and the desktop's format
- *             and refresh rate
+ *             and refresh rate.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -667,9 +699,9 @@
 /**
  * Query the display mode to use when a window is visible at fullscreen.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param mode an SDL_DisplayMode structure filled in with the fullscreen
- *             display mode
+ *             display mode.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -686,8 +718,8 @@
  *
  * Data returned should be freed with SDL_free.
  *
- * \param window the window to query
- * \param size the size of the ICC profile
+ * \param window the window to query.
+ * \param size the size of the ICC profile.
  * \returns the raw ICC profile data on success or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -698,7 +730,7 @@
 /**
  * Get the pixel format associated with the window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the pixel format of the window on success or
  *          SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more
  *          information.
@@ -762,15 +794,15 @@
  * loader or link to a dynamic library version. This limitation may be removed
  * in a future version of SDL.
  *
- * \param title the title of the window, in UTF-8 encoding
+ * \param title the title of the window, in UTF-8 encoding.
  * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or
- *          `SDL_WINDOWPOS_UNDEFINED`
+ *          `SDL_WINDOWPOS_UNDEFINED`.
  * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or
- *          `SDL_WINDOWPOS_UNDEFINED`
- * \param w the width of the window, in screen coordinates
- * \param h the height of the window, in screen coordinates
- * \param flags 0, or one or more SDL_WindowFlags OR'd together
- * \returns the window that was created or NULL on failure; call
+ *          `SDL_WINDOWPOS_UNDEFINED`.
+ * \param w the width of the window, in screen coordinates.
+ * \param h the height of the window, in screen coordinates.
+ * \param flags 0, or one or more SDL_WindowFlags OR'd together.
+ * \returns the `SDL_Window` that was created or NULL on failure; call
  *          SDL_GetError() for more information.
  *
  * \since This function is available since SDL 2.0.0.
@@ -790,7 +822,7 @@
  * before using SDL_CreateWindowFrom().
  *
  * \param data a pointer to driver-dependent window creation data, typically
- *             your native window cast to a void*
+ *             your native window cast to a void*.
  * \returns the window that was created or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -807,7 +839,7 @@
  * The numeric ID is what SDL_WindowEvent references, and is necessary to map
  * these events to specific SDL_Window objects.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the ID of the window on success or 0 on failure; call
  *          SDL_GetError() for more information.
  *
@@ -823,7 +855,7 @@
  * The numeric ID is what SDL_WindowEvent references, and is necessary to map
  * these events to specific SDL_Window objects.
  *
- * \param id the ID of the window
+ * \param id the ID of the window.
  * \returns the window associated with `id` or NULL if it doesn't exist; call
  *          SDL_GetError() for more information.
  *
@@ -836,8 +868,8 @@
 /**
  * Get the window flags.
  *
- * \param window the window to query
- * \returns a mask of the SDL_WindowFlags associated with `window`
+ * \param window the window to query.
+ * \returns a mask of the SDL_WindowFlags associated with `window`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -856,8 +888,8 @@
  *
  * This string is expected to be in UTF-8 encoding.
  *
- * \param window the window to change
- * \param title the desired window title in UTF-8 format
+ * \param window the window to change.
+ * \param title the desired window title in UTF-8 format.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -869,7 +901,7 @@
 /**
  * Get the title of a window.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the title of the window in UTF-8 format or "" if there is no
  *          title.
  *
@@ -882,8 +914,8 @@
 /**
  * Set the icon for a window.
  *
- * \param window the window to change
- * \param icon an SDL_Surface structure containing the icon for the window
+ * \param window the window to change.
+ * \param icon an SDL_Surface structure containing the icon for the window.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -895,9 +927,9 @@
  *
  * `name` is case-sensitive.
  *
- * \param window the window to associate with the pointer
- * \param name the name of the pointer
- * \param userdata the associated pointer
+ * \param window the window to associate with the pointer.
+ * \param name the name of the pointer.
+ * \param userdata the associated pointer.
  * \returns the previous value associated with `name`.
  *
  * \since This function is available since SDL 2.0.0.
@@ -911,8 +943,8 @@
 /**
  * Retrieve the data pointer associated with a window.
  *
- * \param window the window to query
- * \param name the name of the pointer
+ * \param window the window to query.
+ * \param name the name of the pointer.
  * \returns the value associated with `name`.
  *
  * \since This function is available since SDL 2.0.0.
@@ -927,11 +959,11 @@
  *
  * The window coordinate origin is the upper left of the display.
  *
- * \param window the window to reposition
+ * \param window the window to reposition.
  * \param x the x coordinate of the window in screen coordinates, or
- *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`
+ *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`.
  * \param y the y coordinate of the window in screen coordinates, or
- *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`
+ *          `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -946,11 +978,11 @@
  * If you do not need the value for one of the positions a NULL may be passed
  * in the `x` or `y` parameter.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param x a pointer filled in with the x position of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  * \param y a pointer filled in with the y position of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -970,11 +1002,11 @@
  * Fullscreen windows automatically match the size of the display mode, and
  * you should use SDL_SetWindowDisplayMode() to change their size.
  *
- * \param window the window to change
+ * \param window the window to change.
  * \param w the width of the window in pixels, in screen coordinates, must be
- *          > 0
+ *          > 0.
  * \param h the height of the window in pixels, in screen coordinates, must be
- *          > 0
+ *          > 0.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -996,11 +1028,11 @@
  * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the
  * real client area size in pixels.
  *
- * \param window the window to query the width and height from
+ * \param window the window to query the width and height from.
  * \param w a pointer filled in with the width of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  * \param h a pointer filled in with the height of the window, in screen
- *          coordinates, may be NULL
+ *          coordinates, may be NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1027,15 +1059,15 @@
  * This function also returns -1 if getting the information is not supported.
  *
  * \param window the window to query the size values of the border
- *               (decorations) from
+ *               (decorations) from.
  * \param top pointer to variable for storing the size of the top border; NULL
- *            is permitted
+ *            is permitted.
  * \param left pointer to variable for storing the size of the left border;
- *             NULL is permitted
+ *             NULL is permitted.
  * \param bottom pointer to variable for storing the size of the bottom
- *               border; NULL is permitted
+ *               border; NULL is permitted.
  * \param right pointer to variable for storing the size of the right border;
- *              NULL is permitted
+ *              NULL is permitted.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1055,10 +1087,11 @@
  * platform with high-DPI support (Apple calls this "Retina"), and not
  * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
  *
- * \param window the window from which the drawable size should be queried
- * \param w a pointer to variable for storing the width in pixels, may be NULL
+ * \param window the window from which the drawable size should be queried.
+ * \param w a pointer to variable for storing the width in pixels, may be
+ *          NULL.
  * \param h a pointer to variable for storing the height in pixels, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.26.0.
  *
@@ -1071,9 +1104,9 @@
 /**
  * Set the minimum size of a window's client area.
  *
- * \param window the window to change
- * \param min_w the minimum width of the window in pixels
- * \param min_h the minimum height of the window in pixels
+ * \param window the window to change.
+ * \param min_w the minimum width of the window in pixels.
+ * \param min_h the minimum height of the window in pixels.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1086,11 +1119,11 @@
 /**
  * Get the minimum size of a window's client area.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param w a pointer filled in with the minimum width of the window, may be
- *          NULL
+ *          NULL.
  * \param h a pointer filled in with the minimum height of the window, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1103,9 +1136,9 @@
 /**
  * Set the maximum size of a window's client area.
  *
- * \param window the window to change
- * \param max_w the maximum width of the window in pixels
- * \param max_h the maximum height of the window in pixels
+ * \param window the window to change.
+ * \param max_w the maximum width of the window in pixels.
+ * \param max_h the maximum height of the window in pixels.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1118,11 +1151,11 @@
 /**
  * Get the maximum size of a window's client area.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \param w a pointer filled in with the maximum width of the window, may be
- *          NULL
+ *          NULL.
  * \param h a pointer filled in with the maximum height of the window, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1141,8 +1174,8 @@
  *
  * You can't change the border state of a fullscreen window.
  *
- * \param window the window of which to change the border state
- * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border
+ * \param window the window of which to change the border state.
+ * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1160,8 +1193,8 @@
  *
  * You can't change the resizable state of a fullscreen window.
  *
- * \param window the window of which to change the resizable state
- * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow
+ * \param window the window of which to change the resizable state.
+ * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow.
  *
  * \since This function is available since SDL 2.0.5.
  *
@@ -1176,9 +1209,9 @@
  * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This
  * will bring the window to the front and keep the window above the rest.
  *
- * \param window The window of which to change the always on top state
+ * \param window The window of which to change the always on top state.
  * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to
- *               disable
+ *               disable.
  *
  * \since This function is available since SDL 2.0.16.
  *
@@ -1190,7 +1223,7 @@
 /**
  * Show a window.
  *
- * \param window the window to show
+ * \param window the window to show.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1202,7 +1235,7 @@
 /**
  * Hide a window.
  *
- * \param window the window to hide
+ * \param window the window to hide.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1213,7 +1246,7 @@
 /**
  * Raise a window above other windows and set the input focus.
  *
- * \param window the window to raise
+ * \param window the window to raise.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -1222,7 +1255,7 @@
 /**
  * Make a window as large as possible.
  *
- * \param window the window to maximize
+ * \param window the window to maximize.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1234,7 +1267,7 @@
 /**
  * Minimize a window to an iconic representation.
  *
- * \param window the window to minimize
+ * \param window the window to minimize.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1246,7 +1279,7 @@
 /**
  * Restore the size and position of a minimized or maximized window.
  *
- * \param window the window to restore
+ * \param window the window to restore.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1262,8 +1295,12 @@
  * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen
  * that takes the size of the desktop; and 0 for windowed mode.
  *
- * \param window the window to change
- * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0
+ * Note that for some renderers, this function may trigger an
+ * SDL_RENDER_TARGETS_RESET event. Your application should be prepared to
+ * handle this event by reuploading textures!
+ *
+ * \param window the window to change.
+ * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1297,11 +1334,15 @@
  * This surface will be invalidated if the window is resized. After resizing a
  * window this function must be called again to return a valid surface.
  *
+ * Note that on some platforms the pixels pointer of the surface may be
+ * modified after each call to SDL_UpdateWindowSurface(), so that the platform
+ * code can implement efficient double or triple buffering.
+ *
  * You may not combine this with 3D or the rendering API on this window.
  *
  * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns the surface associated with the window, or NULL on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1322,7 +1363,7 @@
  *
  * This function is equivalent to the SDL 1.2 API SDL_Flip().
  *
- * \param window the window to update
+ * \param window the window to update.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1343,13 +1384,13 @@
  *
  * Note that this function will update _at least_ the rectangles specified,
  * but this is only intended as an optimization; in practice, this might
- * update more of the screen (or all of the screen!), depending on what
- * method SDL uses to send pixels to the system.
+ * update more of the screen (or all of the screen!), depending on what method
+ * SDL uses to send pixels to the system.
  *
- * \param window the window to update
+ * \param window the window to update.
  * \param rects an array of SDL_Rect structures representing areas of the
- *              surface to copy, in pixels
- * \param numrects the number of rectangles
+ *              surface to copy, in pixels.
+ * \param numrects the number of rectangles.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1365,7 +1406,7 @@
 /**
  * Destroy the surface associated with the window.
  *
- * \param window the window to update
+ * \param window the window to update.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1386,8 +1427,8 @@
  * If the caller enables a grab while another window is currently grabbed, the
  * other window loses its grab in favor of the caller's window.
  *
- * \param window the window for which the input grab mode should be set
- * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input
+ * \param window the window for which the input grab mode should be set.
+ * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1448,7 +1489,7 @@
 /**
  * Get a window's input grab mode.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -1460,7 +1501,7 @@
 /**
  * Get a window's keyboard grab mode.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.16.
@@ -1473,7 +1514,7 @@
 /**
  * Get a window's mouse grab mode.
  *
- * \param window the window to query
+ * \param window the window to query.
  * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.16.
@@ -1517,7 +1558,7 @@
 /**
  * Get the mouse confinement rectangle of a window.
  *
- * \param window The window to query
+ * \param window The window to query.
  * \returns A pointer to the mouse confinement rectangle of a window, or NULL
  *          if there isn't one.
  *
@@ -1542,9 +1583,9 @@
  * something similar.
  *
  * \param window the window used to select the display whose brightness will
- *               be changed
+ *               be changed.
  * \param brightness the brightness (gamma multiplier) value to set where 0.0
- *                   is completely dark and 1.0 is normal brightness
+ *                   is completely dark and 1.0 is normal brightness.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1564,7 +1605,7 @@
  * this display can be retrieved using SDL_GetWindowDisplayIndex().)
  *
  * \param window the window used to select the display whose brightness will
- *               be queried
+ *               be queried.
  * \returns the brightness for the display where 0.0 is completely dark and
  *          1.0 is normal brightness.
  *
@@ -1582,8 +1623,8 @@
  *
  * This function also returns -1 if setting the opacity isn't supported.
  *
- * \param window the window which will be made transparent or opaque
- * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque)
+ * \param window the window which will be made transparent or opaque.
+ * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1603,8 +1644,8 @@
  *
  * This function also returns -1 if an invalid window was provided.
  *
- * \param window the window to get the current opacity value from
- * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque)
+ * \param window the window to get the current opacity value from.
+ * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque).
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1617,8 +1658,8 @@
 /**
  * Set the window as a modal for another window.
  *
- * \param modal_window the window that should be set modal
- * \param parent_window the parent window for the modal window
+ * \param modal_window the window that should be set modal.
+ * \param parent_window the parent window for the modal window.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1633,7 +1674,7 @@
  * this with caution, as you might give focus to a window that is completely
  * obscured by other windows.
  *
- * \param window the window that should get the input focus
+ * \param window the window that should get the input focus.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1659,13 +1700,13 @@
  * ramp set will not follow the window if it is moved to another display.
  *
  * \param window the window used to select the display whose gamma ramp will
- *               be changed
+ *               be changed.
  * \param red a 256 element array of 16-bit quantities representing the
- *            translation table for the red channel, or NULL
+ *            translation table for the red channel, or NULL.
  * \param green a 256 element array of 16-bit quantities representing the
- *              translation table for the green channel, or NULL
+ *              translation table for the green channel, or NULL.
  * \param blue a 256 element array of 16-bit quantities representing the
- *             translation table for the blue channel, or NULL
+ *             translation table for the blue channel, or NULL.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1687,13 +1728,13 @@
  * this display can be retrieved using SDL_GetWindowDisplayIndex().)
  *
  * \param window the window used to select the display whose gamma ramp will
- *               be queried
+ *               be queried.
  * \param red a 256 element array of 16-bit quantities filled in with the
- *            translation table for the red channel, or NULL
+ *            translation table for the red channel, or NULL.
  * \param green a 256 element array of 16-bit quantities filled in with the
- *              translation table for the green channel, or NULL
+ *              translation table for the green channel, or NULL.
  * \param blue a 256 element array of 16-bit quantities filled in with the
- *             translation table for the blue channel, or NULL
+ *             translation table for the blue channel, or NULL.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1711,7 +1752,7 @@
  *
  * \sa SDL_HitTest
  */
-typedef enum
+typedef enum SDL_HitTestResult
 {
     SDL_HITTEST_NORMAL,  /**< Region is normal. No special properties. */
     SDL_HITTEST_DRAGGABLE,  /**< Region can drag entire window. */
@@ -1728,9 +1769,9 @@
 /**
  * Callback used for hit-testing.
  *
- * \param win the SDL_Window where hit-testing was set on
- * \param area an SDL_Point which should be hit-tested
- * \param data what was passed as `callback_data` to SDL_SetWindowHitTest()
+ * \param win the SDL_Window where hit-testing was set on.
+ * \param area an SDL_Point which should be hit-tested.
+ * \param data what was passed as `callback_data` to SDL_SetWindowHitTest().
  * \return an SDL_HitTestResult value.
  *
  * \sa SDL_SetWindowHitTest
@@ -1771,9 +1812,9 @@
  * can fire at any time, you should try to keep your callback efficient,
  * devoid of allocations, etc.
  *
- * \param window the window to set hit-testing on
- * \param callback the function to call when doing a hit-test
- * \param callback_data an app-defined void pointer passed to **callback**
+ * \param window the window to set hit-testing on.
+ * \param callback the function to call when doing a hit-test.
+ * \param callback_data an app-defined void pointer passed to **callback**.
  * \returns 0 on success or -1 on error (including unsupported); call
  *          SDL_GetError() for more information.
  *
@@ -1786,8 +1827,8 @@
 /**
  * Request a window to demand attention from the user.
  *
- * \param window the window to be flashed
- * \param operation the flash operation
+ * \param window the window to be flashed.
+ * \param operation the flash operation.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1801,7 +1842,7 @@
  * If `window` is NULL, this function will return immediately after setting
  * the SDL error message to "Invalid window". See SDL_GetError().
  *
- * \param window the window to destroy
+ * \param window the window to destroy.
  *
  * \since This function is available since SDL 2.0.0.
  *
@@ -1872,7 +1913,7 @@
  * program from the dynamic library using SDL_GL_GetProcAddress().
  *
  * \param path the platform dependent OpenGL library name, or NULL to open the
- *             default OpenGL library
+ *             default OpenGL library.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -1924,7 +1965,7 @@
  *   code. This will ensure the proper calling convention is followed on
  *   platforms where this matters (Win32) thereby avoiding stack corruption.
  *
- * \param proc the name of an OpenGL function
+ * \param proc the name of an OpenGL function.
  * \returns a pointer to the named OpenGL function. The returned pointer
  *          should be cast to the appropriate function signature.
  *
@@ -1959,7 +2000,7 @@
  * context and save that information somewhere instead of calling the function
  * every time you need to know.
  *
- * \param extension the name of the extension to check
+ * \param extension the name of the extension to check.
  * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise.
  *
  * \since This function is available since SDL 2.0.0.
@@ -1985,8 +2026,9 @@
  * SDL_GL_GetAttribute() to check the values after creating the OpenGL
  * context, since the values obtained can differ from the requested ones.
  *
- * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set
- * \param value the desired value for the attribute
+ * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to
+ *             set.
+ * \param value the desired value for the attribute.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -2000,8 +2042,9 @@
 /**
  * Get the actual value for an attribute from the current context.
  *
- * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get
- * \param value a pointer filled in with the current value of `attr`
+ * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to
+ *             get.
+ * \param value a pointer filled in with the current value of `attr`.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -2023,7 +2066,7 @@
  *
  * SDL_GLContext is an alias for `void *`. It's opaque to the application.
  *
- * \param window the window to associate with the context
+ * \param window the window to associate with the context.
  * \returns the OpenGL context associated with `window` or NULL on error; call
  *          SDL_GetError() for more details.
  *
@@ -2040,8 +2083,8 @@
  *
  * The context must have been created with a compatible window.
  *
- * \param window the window to associate with the context
- * \param context the OpenGL context to associate with the window
+ * \param window the window to associate with the context.
+ * \param context the OpenGL context to associate with the window.
  * \returns 0 on success or a negative error code on failure; call
  *          SDL_GetError() for more information.
  *
@@ -2084,10 +2127,11 @@
  * platform with high-DPI support (Apple calls this "Retina"), and not
  * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
  *
- * \param window the window from which the drawable size should be queried
- * \param w a pointer to variable for storing the width in pixels, may be NULL
+ * \param window the window from which the drawable size should be queried.
+ * \param w a pointer to variable for storing the width in pixels, may be
+ *          NULL.
  * \param h a pointer to variable for storing the height in pixels, may be
- *          NULL
+ *          NULL.
  *
  * \since This function is available since SDL 2.0.1.
  *
@@ -2116,7 +2160,7 @@
  * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync
  *
  * \param interval 0 for immediate updates, 1 for updates synchronized with
- *                 the vertical retrace, -1 for adaptive vsync
+ *                 the vertical retrace, -1 for adaptive vsync.
  * \returns 0 on success or -1 if setting the swap interval is not supported;
  *          call SDL_GetError() for more information.
  *
@@ -2153,7 +2197,7 @@
  * glBindFramebuffer(), this is the default and you won't have to do anything
  * extra.
  *
- * \param window the window to change
+ * \param window the window to change.
  *
  * \since This function is available since SDL 2.0.0.
  */
@@ -2162,7 +2206,7 @@
 /**
  * Delete an OpenGL context.
  *
- * \param context the OpenGL context to be deleted
+ * \param context the OpenGL context to be deleted.
  *
  * \since This function is available since SDL 2.0.0.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_vulkan.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_vulkan.h
@@ -20,9 +20,9 @@
 */
 
 /**
- *  \file SDL_vulkan.h
+ * # CategoryVulkan
  *
- *  Header file for functions to creating Vulkan surfaces on SDL windows.
+ * Header file for functions to creating Vulkan surfaces on SDL windows.
  */
 
 #ifndef SDL_vulkan_h_
@@ -101,13 +101,13 @@
  * supported. Either do not link to the Vulkan loader or link to a dynamic
  * library version.
  *
- * \param path The platform dependent Vulkan loader library name or NULL
+ * \param path The platform dependent Vulkan loader library name or NULL.
  * \returns 0 on success or -1 if the library couldn't be loaded; call
  *          SDL_GetError() for more information.
  *
  * \since This function is available since SDL 2.0.6.
  *
- * \sa SDL_Vulkan_GetVkInstanceProcAddr
+ * \sa SDL_Vulkan_GetVkGetInstanceProcAddr
  * \sa SDL_Vulkan_UnloadLibrary
  */
 extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path);
@@ -150,11 +150,11 @@
  * however, this parameter will likely be removed in future releases
  *
  * \param window A window for which the required Vulkan instance extensions
- *               should be retrieved (will be deprecated in a future release)
+ *               should be retrieved (will be deprecated in a future release).
  * \param pCount A pointer to an unsigned int corresponding to the number of
- *               extensions to be returned
+ *               extensions to be returned.
  * \param pNames NULL or a pointer to an array to be filled with required
- *               Vulkan instance extensions
+ *               Vulkan instance extensions.
  * \returns SDL_TRUE on success, SDL_FALSE on error.
  *
  * \since This function is available since SDL 2.0.6.
@@ -172,10 +172,10 @@
  * `instance` must have been created with extensions returned by
  * SDL_Vulkan_GetInstanceExtensions() enabled.
  *
- * \param window The window to which to attach the Vulkan surface
- * \param instance The Vulkan instance handle
+ * \param window The window to which to attach the Vulkan surface.
+ * \param instance The Vulkan instance handle.
  * \param surface A pointer to a VkSurfaceKHR handle to output the newly
- *                created surface
+ *                created surface.
  * \returns SDL_TRUE on success, SDL_FALSE on error.
  *
  * \since This function is available since SDL 2.0.6.
@@ -195,9 +195,9 @@
  * platform with high-DPI support (Apple calls this "Retina"), and not
  * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
  *
- * \param window an SDL_Window for which the size is to be queried
- * \param w Pointer to the variable to write the width to or NULL
- * \param h Pointer to the variable to write the height to or NULL
+ * \param window an SDL_Window for which the size is to be queried.
+ * \param w Pointer to the variable to write the width to or NULL.
+ * \param h Pointer to the variable to write the height to or NULL.
  *
  * \since This function is available since SDL 2.0.6.
  *
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/begin_code.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/begin_code.h
@@ -19,12 +19,12 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
+/* WIKI CATEGORY: BeginCode */
+
 /**
- *  \file begin_code.h
- *
- *  This file sets things up for C dynamic library function definitions,
- *  static inlined functions, and structures aligned at 4-byte alignment.
- *  If you don't like ugly C preprocessor code, don't look at this file. :)
+ * begin_code.h sets things up for C dynamic library function definitions,
+ * static inlined functions, and structures aligned at 4-byte alignment.
+ * If you don't like ugly C preprocessor code, don't look at this file. :)
  */
 
 /* This shouldn't be nested -- included it around code only. */
@@ -172,7 +172,7 @@
     (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L)
 #define SDL_FALLTHROUGH [[fallthrough]]
 #else
-#if defined(__has_attribute)
+#if defined(__has_attribute) && !defined(__SUNPRO_C) && !defined(__SUNPRO_CC)
 #define SDL_HAS_FALLTHROUGH __has_attribute(__fallthrough__)
 #else
 #define SDL_HAS_FALLTHROUGH 0
binary files a/vs2019_project/ft2-clone/sdl/lib/SDL2main.lib b/vs2019_project/ft2-clone/sdl/lib/SDL2main.lib differ
binary files a/vs2019_project/ft2-clone/sdl/lib64/SDL2main.lib b/vs2019_project/ft2-clone/sdl/lib64/SDL2main.lib differ
binary files a/vs2019_project/x64/Debug/SDL2.dll b/vs2019_project/x64/Debug/SDL2.dll differ
--