diff --git a/Source/ThirdParty/SDL/SDL3/SDL_asyncio.h b/Source/ThirdParty/SDL/SDL3/SDL_asyncio.h index 89dd365c6..d8af8b6c9 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_asyncio.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_asyncio.h @@ -117,7 +117,7 @@ extern "C" { * This operates as an opaque handle. One can then request read or write * operations on it. * - * \since This struct is available since SDL 3.0.0. + * \since This struct is available since SDL 3.2.0. * * \sa SDL_AsyncIOFromFile */ @@ -126,7 +126,7 @@ typedef struct SDL_AsyncIO SDL_AsyncIO; /** * Types of asynchronous I/O tasks. * - * \since This enum is available since SDL 3.0.0. + * \since This enum is available since SDL 3.2.0. */ typedef enum SDL_AsyncIOTaskType { @@ -138,7 +138,7 @@ typedef enum SDL_AsyncIOTaskType /** * Possible outcomes of an asynchronous I/O task. * - * \since This enum is available since SDL 3.0.0. + * \since This enum is available since SDL 3.2.0. */ typedef enum SDL_AsyncIOResult { @@ -150,7 +150,7 @@ typedef enum SDL_AsyncIOResult /** * Information about a completed asynchronous I/O request. * - * \since This struct is available since SDL 3.0.0. + * \since This struct is available since SDL 3.2.0. */ typedef struct SDL_AsyncIOOutcome { @@ -172,7 +172,7 @@ typedef struct SDL_AsyncIOOutcome * allowing an app to manage multiple pending tasks in one place, in whatever * order they complete. * - * \since This struct is available since SDL 3.0.0. + * \since This struct is available since SDL 3.2.0. * * \sa SDL_CreateAsyncIOQueue * \sa SDL_ReadAsyncIO diff --git a/Source/ThirdParty/SDL/SDL3/SDL_filesystem.h b/Source/ThirdParty/SDL/SDL3/SDL_filesystem.h index 8e79fcec8..8bc2356e9 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_filesystem.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_filesystem.h @@ -425,10 +425,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetPathInfo(const char *path, SDL_PathInfo * Enumerate a directory tree, filtered by pattern, and return a list. * * Files are filtered out if they don't match the string in `pattern`, which - * may contain wildcard characters '*' (match everything) and '?' (match one + * may contain wildcard characters '\*' (match everything) and '?' (match one * character). If pattern is NULL, no filtering is done and all results are * returned. Subdirectories are permitted, and are specified with a path - * separator of '/'. Wildcard characters '*' and '?' never match a path + * separator of '/'. Wildcard characters '\*' and '?' never match a path * separator. * * `flags` may be set to SDL_GLOB_CASEINSENSITIVE to make the pattern matching diff --git a/Source/ThirdParty/SDL/SDL3/SDL_gamepad.h b/Source/ThirdParty/SDL/SDL3/SDL_gamepad.h index d0637cc07..60f98e251 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_gamepad.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_gamepad.h @@ -63,6 +63,12 @@ * By default SDL will try to use the most capable driver available, but you * can tune which OS drivers to use with the various joystick hints in * SDL_hints.h. + * + * Your application should always support gamepad hotplugging. On some + * platforms like Xbox, Steam Deck, etc., this is a requirement for + * certification. On other platforms, like macOS and Windows when using + * Windows.Gaming.Input, controllers may not be available at startup and will + * come in at some point after you've started processing events. */ #ifndef SDL_gamepad_h_ diff --git a/Source/ThirdParty/SDL/SDL3/SDL_hints.h b/Source/ThirdParty/SDL/SDL3/SDL_hints.h index 310aa6471..8f8db4615 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_hints.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_hints.h @@ -1264,6 +1264,31 @@ extern "C" { */ #define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" +/** + * A variable controlling whether enhanced reports should be used for + * controllers when using the HIDAPI driver. + * + * Enhanced reports allow rumble and effects on Bluetooth PlayStation + * controllers and gyro on Nintendo Switch controllers, but break Windows + * DirectInput for other applications that don't use SDL. + * + * Once enhanced reports are enabled, they can't be disabled on PlayStation + * controllers without power cycling the controller. + * + * The variable can be set to the following values: + * + * - "0": enhanced reports are not enabled. + * - "1": enhanced reports are enabled. (default) + * - "auto": enhanced features are advertised to the application, but SDL + * doesn't change the controller report mode unless the application uses + * them. + * + * This hint can be enabled anytime. + * + * \since This hint is available since SDL 3.1.8. + */ +#define SDL_HINT_JOYSTICK_ENHANCED_REPORTS "SDL_JOYSTICK_ENHANCED_REPORTS" + /** * A variable containing a list of flightstick style controllers. * @@ -1571,32 +1596,6 @@ extern "C" { */ #define SDL_HINT_JOYSTICK_HIDAPI_PS4_REPORT_INTERVAL "SDL_JOYSTICK_HIDAPI_PS4_REPORT_INTERVAL" -/** - * A variable controlling whether extended input reports should be used for - * PS4 controllers when using the HIDAPI driver. - * - * The variable can be set to the following values: - * - * - "0": extended reports are not enabled. (default) - * - "1": extended reports are enabled. - * - * Extended input reports allow rumble on Bluetooth PS4 controllers, but break - * DirectInput handling for applications that don't use SDL. - * - * Once extended reports are enabled, they can not be disabled without power - * cycling the controller. - * - * For compatibility with applications written for versions of SDL prior to - * the introduction of PS5 controller support, this value will also control - * the state of extended reports on PS5 controllers when the - * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. - * - * This hint can be enabled anytime. - * - * \since This hint is available since SDL 3.1.3. - */ -#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" - /** * A variable controlling whether the HIDAPI driver for PS5 controllers should * be used. @@ -1627,31 +1626,6 @@ extern "C" { */ #define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" -/** - * A variable controlling whether extended input reports should be used for - * PS5 controllers when using the HIDAPI driver. - * - * The variable can be set to the following values: - * - * - "0": extended reports are not enabled. (default) - * - "1": extended reports. - * - * Extended input reports allow rumble on Bluetooth PS5 controllers, but break - * DirectInput handling for applications that don't use SDL. - * - * Once extended reports are enabled, they can not be disabled without power - * cycling the controller. - * - * For compatibility with applications written for versions of SDL prior to - * the introduction of PS5 controller support, this value defaults to the - * value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. - * - * This hint can be enabled anytime. - * - * \since This hint is available since SDL 3.1.3. - */ -#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" - /** * A variable controlling whether the HIDAPI driver for NVIDIA SHIELD * controllers should be used. @@ -3497,6 +3471,8 @@ extern "C" { * * - Rounding errors can result with odd window sizes and/or desktop scales, * which can cause the window contents to appear slightly blurry. + * - Positioning the window may be imprecise due to unit conversions and + * rounding. * - The window may be unusably small on scaled desktops. * - The window may jump in size when moving between displays of different * scale factors. diff --git a/Source/ThirdParty/SDL/SDL3/SDL_oldnames.h b/Source/ThirdParty/SDL/SDL3/SDL_oldnames.h index db685fa2c..c93607e3f 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_oldnames.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_oldnames.h @@ -307,6 +307,8 @@ #define SDL_HINT_DIRECTINPUT_ENABLED SDL_HINT_JOYSTICK_DIRECTINPUT #define SDL_HINT_GDK_TEXTINPUT_DEFAULT SDL_HINT_GDK_TEXTINPUT_DEFAULT_TEXT #define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE_RUMBLE_BRAKE +#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE SDL_HINT_JOYSTICK_ENHANCED_REPORTS +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE SDL_HINT_JOYSTICK_ENHANCED_REPORTS #define SDL_HINT_LINUX_DIGITAL_HATS SDL_HINT_JOYSTICK_LINUX_DIGITAL_HATS #define SDL_HINT_LINUX_HAT_DEADZONES SDL_HINT_JOYSTICK_LINUX_HAT_DEADZONES #define SDL_HINT_LINUX_JOYSTICK_CLASSIC SDL_HINT_JOYSTICK_LINUX_CLASSIC @@ -949,6 +951,8 @@ #define SDL_HINT_DIRECTINPUT_ENABLED SDL_HINT_DIRECTINPUT_ENABLED_renamed_SDL_HINT_JOYSTICK_DIRECTINPUT #define SDL_HINT_GDK_TEXTINPUT_DEFAULT SDL_HINT_GDK_TEXTINPUT_DEFAULT_renamed_SDL_HINT_GDK_TEXTINPUT_DEFAULT_TEXT #define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE_renamed_SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE_RUMBLE_BRAKE +#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE_renamed_SDL_HINT_JOYSTICK_ENHANCED_REPORTS +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE_renamed_SDL_HINT_JOYSTICK_ENHANCED_REPORTS #define SDL_HINT_LINUX_DIGITAL_HATS SDL_HINT_LINUX_DIGITAL_HATS_renamed_SDL_HINT_JOYSTICK_LINUX_DIGITAL_HATS #define SDL_HINT_LINUX_HAT_DEADZONES SDL_HINT_LINUX_HAT_DEADZONES_renamed_SDL_HINT_JOYSTICK_LINUX_HAT_DEADZONES #define SDL_HINT_LINUX_JOYSTICK_CLASSIC SDL_HINT_LINUX_JOYSTICK_CLASSIC_renamed_SDL_HINT_JOYSTICK_LINUX_CLASSIC diff --git a/Source/ThirdParty/SDL/SDL3/SDL_revision.h b/Source/ThirdParty/SDL/SDL3/SDL_revision.h index 0d151704d..1b6c9ce82 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_revision.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_revision.h @@ -31,9 +31,9 @@ /* #undef SDL_VENDOR_INFO */ #ifdef SDL_VENDOR_INFO -#define SDL_REVISION "SDL3-3.1.7-2b1d809 (" SDL_VENDOR_INFO ")" +#define SDL_REVISION "SDL3-3.1.7-preview-3.1.6-602-g0a5d2f3da2 (" SDL_VENDOR_INFO ")" #else -#define SDL_REVISION "SDL3-3.1.7-2b1d809" +#define SDL_REVISION "SDL3-3.1.7-preview-3.1.6-602-g0a5d2f3da2" #endif #endif /* SDL_revision_h_ */ diff --git a/Source/ThirdParty/SDL/SDL3/SDL_storage.h b/Source/ThirdParty/SDL/SDL3/SDL_storage.h index 1543aa0ad..ea5933d57 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_storage.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_storage.h @@ -24,7 +24,8 @@ * * The storage API is a high-level API designed to abstract away the * portability issues that come up when using something lower-level (in SDL's - * case, this sits on top of SDL_filesystem). It is significantly more + * case, this sits on top of the [Filesystem](CategoryFilesystem) and + * [IOStream](CategoryIOStream) subsystems). It is significantly more * restrictive than a typical filesystem API, for a number of reasons: * * 1. **What to Access:** A common pitfall with existing filesystem APIs is diff --git a/Source/ThirdParty/SDL/SDL3/SDL_surface.h b/Source/ThirdParty/SDL/SDL3/SDL_surface.h index 7abbc663e..db3103142 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_surface.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_surface.h @@ -1021,12 +1021,14 @@ extern SDL_DECLSPEC bool SDLCALL SDL_FillSurfaceRect(SDL_Surface *dst, const SDL extern SDL_DECLSPEC bool SDLCALL SDL_FillSurfaceRects(SDL_Surface *dst, const SDL_Rect *rects, int count, Uint32 color); /** - * Performs a fast blit from the source surface to the destination surface. + * Performs a fast blit from the source surface to the destination surface + * with clipping. * - * 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. + * `dst`) is copied while ensuring clipping to `dst->clip_rect`. + * + * The final blit rectangles are saved in `srcrect` and `dstrect` after all + * clipping is performed. * * The blit function should not be called on a locked surface. * diff --git a/Source/ThirdParty/SDL/SDL3/SDL_video.h b/Source/ThirdParty/SDL/SDL3/SDL_video.h index 2989c7048..00b98b330 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_video.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_video.h @@ -1228,10 +1228,12 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreatePopupWindow(SDL_Window *paren * - `SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER`: the width of the window * - `SDL_PROP_WINDOW_CREATE_X_NUMBER`: the x position of the window, or * `SDL_WINDOWPOS_CENTERED`, defaults to `SDL_WINDOWPOS_UNDEFINED`. This is - * relative to the parent for windows with the "parent" property set. + * relative to the parent for windows with the "tooltip" or "menu" property + * set. * - `SDL_PROP_WINDOW_CREATE_Y_NUMBER`: the y position of the window, or * `SDL_WINDOWPOS_CENTERED`, defaults to `SDL_WINDOWPOS_UNDEFINED`. This is - * relative to the parent for windows with the "parent" property set. + * relative to the parent for windows with the "tooltip" or "menu" property + * set. * * These are additional supported properties on macOS: * @@ -2786,6 +2788,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_FlashWindow(SDL_Window *window, SDL_FlashOp * Any child windows owned by the window will be recursively destroyed as * well. * + * Note that on some platforms, the visible window may not actually be removed + * from the screen until the SDL event loop is pumped again, even though the + * SDL_Window is no longer valid after this call. + * * \param window the window to destroy. * * \threadsafety This function should only be called on the main thread. diff --git a/Source/ThirdParty/SDL/SDL3/SDL_vulkan.h b/Source/ThirdParty/SDL/SDL3/SDL_vulkan.h index 1ce0e34c6..e85efc963 100644 --- a/Source/ThirdParty/SDL/SDL3/SDL_vulkan.h +++ b/Source/ThirdParty/SDL/SDL3/SDL_vulkan.h @@ -87,6 +87,13 @@ struct VkAllocationCallbacks; * creating any Vulkan windows. If no Vulkan loader library is loaded, the * default library will be loaded upon creation of the first Vulkan window. * + * SDL keeps a counter of how many times this function has been successfully + * called, so it is safe to call this function multiple times, so long as it + * is eventually paired with an equivalent number of calls to + * SDL_Vulkan_UnloadLibrary. The `path` argument is ignored unless there is no + * library currently loaded, and and the library isn't actually unloaded until + * there have been an equivalent number of calls to SDL_Vulkan_UnloadLibrary. + * * It is fairly common for Vulkan applications to link with libvulkan instead * of explicitly loading it at run time. This will work with SDL provided the * application links to a dynamic library and both it and SDL use the same @@ -116,6 +123,8 @@ struct VkAllocationCallbacks; * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety This function is not thread safe. + * * \since This function is available since SDL 3.1.3. * * \sa SDL_Vulkan_GetVkGetInstanceProcAddr @@ -147,6 +156,19 @@ extern SDL_DECLSPEC SDL_FunctionPointer SDLCALL SDL_Vulkan_GetVkGetInstanceProcA /** * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary(). * + * SDL keeps a counter of how many times this function has been called, so it + * is safe to call this function multiple times, so long as it is paired with + * an equivalent number of calls to SDL_Vulkan_LoadLibrary. The library isn't + * actually unloaded until there have been an equivalent number of calls to + * SDL_Vulkan_UnloadLibrary. + * + * Once the library has actually been unloaded, if any Vulkan instances + * remain, they will likely crash the program. Clean up any existing Vulkan + * resources, and destroy appropriate windows, renderers and GPU devices + * before calling this function. + * + * \threadsafety This function is not thread safe. + * * \since This function is available since SDL 3.1.3. * * \sa SDL_Vulkan_LoadLibrary diff --git a/Source/Tools/Flax.Build/Deps/Dependencies/SDL.cs b/Source/Tools/Flax.Build/Deps/Dependencies/SDL.cs index ee6db22e9..3573acab5 100644 --- a/Source/Tools/Flax.Build/Deps/Dependencies/SDL.cs +++ b/Source/Tools/Flax.Build/Deps/Dependencies/SDL.cs @@ -88,9 +88,8 @@ namespace Flax.Deps.Dependencies Path.Combine(root, "include", "SDL3"), }; - CloneGitRepoFastSince(root, "https://github.com/libsdl-org/SDL", new DateTime(2025, 01, 01)); - //CloneGitRepo(root, "https://github.com/Kontrabant/SDL"); - GitResetToCommit(root, "4797970bfa6d6258bc9e636b6797acdfc1e73c31"); + CloneGitRepoFastSince(root, "https://github.com/libsdl-org/SDL", new DateTime(2025, 01, 03)); + GitResetToCommit(root, "0a5d2f3da216130f0c701317dd390431fbc557a0"); foreach (var platform in options.Platforms) {