Merge commit '3a7f96fd99528968c39b5be81db067ca018d432b' into dev
This commit is contained in:
@@ -64,6 +64,10 @@ Note the `/**` at the start of the comment. That's a "Doxygen-style" comment,
|
||||
and wikiheaders will treat this differently than a comment with one `*`, as
|
||||
this signifies that this is not just a comment, but _documentation_.
|
||||
|
||||
These comments _must_ start in the first column of the line, or wikiheaders
|
||||
will ignore them, even with the "/**" start (we should improve the script
|
||||
someday to handle this, but currently this is a requirement).
|
||||
|
||||
We do _not_ parse every magic Doxygen tag, and we don't parse them in `@param`
|
||||
format. The goal here was to mostly coexist with people that might want
|
||||
to run Doxygen on the SDL headers, not to build Doxygen from scratch. That
|
||||
|
||||
4
external/SDL/docs/README-dynapi.md
vendored
4
external/SDL/docs/README-dynapi.md
vendored
@@ -35,7 +35,7 @@ SDL now has, internally, a table of function pointers. So, this is what SDL_Init
|
||||
now looks like:
|
||||
|
||||
```c
|
||||
SDL_bool SDL_Init(SDL_InitFlags flags)
|
||||
bool SDL_Init(SDL_InitFlags flags)
|
||||
{
|
||||
return jump_table.SDL_Init(flags);
|
||||
}
|
||||
@@ -49,7 +49,7 @@ SDL_Init() that you've been calling all this time. But at startup, it looks more
|
||||
like this:
|
||||
|
||||
```c
|
||||
SDL_bool SDL_Init_DEFAULT(SDL_InitFlags flags)
|
||||
bool SDL_Init_DEFAULT(SDL_InitFlags flags)
|
||||
{
|
||||
SDL_InitDynamicAPI();
|
||||
return jump_table.SDL_Init(flags);
|
||||
|
||||
4
external/SDL/docs/README-ios.md
vendored
4
external/SDL/docs/README-ios.md
vendored
@@ -139,7 +139,7 @@ void SDL_StartTextInput()
|
||||
void SDL_StopTextInput()
|
||||
-- disables text events and hides the onscreen keyboard.
|
||||
|
||||
SDL_bool SDL_TextInputActive()
|
||||
bool SDL_TextInputActive()
|
||||
-- returns whether or not text events are enabled (and the onscreen keyboard is visible)
|
||||
|
||||
|
||||
@@ -225,7 +225,7 @@ Game Center
|
||||
|
||||
Game Center integration might require that you break up your main loop in order to yield control back to the system. In other words, instead of running an endless main loop, you run each frame in a callback function, using:
|
||||
|
||||
SDL_bool SDL_SetiOSAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam);
|
||||
bool SDL_SetiOSAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam);
|
||||
|
||||
This will set up the given function to be called back on the animation callback, and then you have to return from main() to let the Cocoa event loop run.
|
||||
|
||||
|
||||
316
external/SDL/docs/README-migration.md
vendored
316
external/SDL/docs/README-migration.md
vendored
@@ -6,7 +6,7 @@ Details on API changes are organized by SDL 2.0 header below.
|
||||
|
||||
The file with your main() function should include <SDL3/SDL_main.h>, as that is no longer included in SDL.h.
|
||||
|
||||
Functions that previously returned a negative error code now return SDL_bool.
|
||||
Functions that previously returned a negative error code now return bool.
|
||||
|
||||
Code that used to look like this:
|
||||
```c
|
||||
@@ -86,11 +86,14 @@ The following structures have been renamed:
|
||||
- SDL_atomic_t => SDL_AtomicInt
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_AtomicCAS() => SDL_AtomicCompareAndSwap()
|
||||
* SDL_AtomicCASPtr() => SDL_AtomicCompareAndSwapPointer()
|
||||
* SDL_AtomicGetPtr() => SDL_AtomicGetPointer()
|
||||
* SDL_AtomicAdd() => SDL_AddAtomicInt()
|
||||
* SDL_AtomicCAS() => SDL_CompareAndSwapAtomicInt()
|
||||
* SDL_AtomicCASPtr() => SDL_CompareAndSwapAtomicPointer()
|
||||
* SDL_AtomicGet() => SDL_GetAtomicInt()
|
||||
* SDL_AtomicGetPtr() => SDL_GetAtomicPointer()
|
||||
* SDL_AtomicLock() => SDL_LockSpinlock()
|
||||
* SDL_AtomicSetPtr() => SDL_AtomicSetPointer()
|
||||
* SDL_AtomicSet() => SDL_SetAtomicInt()
|
||||
* SDL_AtomicSetPtr() => SDL_SetAtomicPointer()
|
||||
* SDL_AtomicTryLock() => SDL_TryLockSpinlock()
|
||||
* SDL_AtomicUnlock() => SDL_UnlockSpinlock()
|
||||
|
||||
@@ -223,7 +226,7 @@ SDL_FreeWAV has been removed and calls can be replaced with SDL_free.
|
||||
|
||||
SDL_LoadWAV() is a proper function now and no longer a macro (but offers the same functionality otherwise).
|
||||
|
||||
SDL_LoadWAV_IO() and SDL_LoadWAV() return an SDL_bool now, like most of SDL. They no longer return a pointer to an SDL_AudioSpec.
|
||||
SDL_LoadWAV_IO() and SDL_LoadWAV() return an bool now, like most of SDL. They no longer return a pointer to an SDL_AudioSpec.
|
||||
|
||||
SDL_AudioCVT interface has been removed, the SDL_AudioStream interface (for audio supplied in pieces) or the new SDL_ConvertAudioSamples() function (for converting a complete audio buffer in one call) can be used instead.
|
||||
|
||||
@@ -280,13 +283,13 @@ In SDL2, SDL_AUDIODEVICEREMOVED events would fire for open devices with the `whi
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_AudioStreamAvailable() => SDL_GetAudioStreamAvailable()
|
||||
* SDL_AudioStreamClear() => SDL_ClearAudioStream(), returns SDL_bool
|
||||
* SDL_AudioStreamFlush() => SDL_FlushAudioStream(), returns SDL_bool
|
||||
* SDL_AudioStreamClear() => SDL_ClearAudioStream(), returns bool
|
||||
* SDL_AudioStreamFlush() => SDL_FlushAudioStream(), returns bool
|
||||
* SDL_AudioStreamGet() => SDL_GetAudioStreamData()
|
||||
* SDL_AudioStreamPut() => SDL_PutAudioStreamData(), returns SDL_bool
|
||||
* SDL_AudioStreamPut() => SDL_PutAudioStreamData(), returns bool
|
||||
* SDL_FreeAudioStream() => SDL_DestroyAudioStream()
|
||||
* SDL_LoadWAV_RW() => SDL_LoadWAV_IO(), returns SDL_bool
|
||||
* SDL_MixAudioFormat() => SDL_MixAudio(), returns SDL_bool
|
||||
* SDL_LoadWAV_RW() => SDL_LoadWAV_IO(), returns bool
|
||||
* SDL_MixAudioFormat() => SDL_MixAudio(), returns bool
|
||||
* SDL_NewAudioStream() => SDL_CreateAudioStream()
|
||||
|
||||
|
||||
@@ -341,6 +344,7 @@ SDL_HasRDTSC() has been removed; there is no replacement. Don't use the RDTSC op
|
||||
SDL_SIMDAlloc(), SDL_SIMDRealloc(), and SDL_SIMDFree() have been removed. You can use SDL_aligned_alloc() and SDL_aligned_free() with SDL_GetSIMDAlignment() to get the same functionality.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_GetCPUCount() => SDL_GetNumLogicalCPUCores()
|
||||
* SDL_SIMDGetAlignment() => SDL_GetSIMDAlignment()
|
||||
|
||||
## SDL_endian.h
|
||||
@@ -360,6 +364,8 @@ The following functions have been removed:
|
||||
|
||||
## SDL_events.h
|
||||
|
||||
SDL_PRESSED and SDL_RELEASED have been removed. For the most part you can replace uses of these with true and false respectively. Events which had a field `state` to represent these values have had those fields changed to bool `down`, e.g. `event.key.state` is now `event.key.down`.
|
||||
|
||||
The timestamp member of the SDL_Event structure now represents nanoseconds, and is populated with SDL_GetTicksNS()
|
||||
|
||||
The timestamp_us member of the sensor events has been renamed sensor_timestamp and now represents nanoseconds. This value is filled in from the hardware, if available, and may not be synchronized with values returned from SDL_GetTicksNS().
|
||||
@@ -411,7 +417,7 @@ SDL_AddEventWatch() now returns SDL_FALSE_ if it fails because it ran out of mem
|
||||
|
||||
SDL_RegisterEvents() now returns 0 if it couldn't allocate any user events.
|
||||
|
||||
SDL_EventFilter functions now return SDL_bool.
|
||||
SDL_EventFilter functions now return bool.
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_APP_DIDENTERBACKGROUND => SDL_EVENT_DID_ENTER_BACKGROUND
|
||||
@@ -505,15 +511,15 @@ The gamepad face buttons have been renamed from A/B/X/Y to North/South/East/West
|
||||
#define CONFIRM_BUTTON SDL_GAMEPAD_BUTTON_SOUTH
|
||||
#define CANCEL_BUTTON SDL_GAMEPAD_BUTTON_EAST
|
||||
|
||||
SDL_bool flipped_buttons;
|
||||
bool flipped_buttons;
|
||||
|
||||
void InitMappedButtons(SDL_Gamepad *gamepad)
|
||||
{
|
||||
if (!GetFlippedButtonSetting(&flipped_buttons)) {
|
||||
if (SDL_GetGamepadButtonLabel(gamepad, SDL_GAMEPAD_BUTTON_SOUTH) == SDL_GAMEPAD_BUTTON_LABEL_B) {
|
||||
flipped_buttons = SDL_TRUE;
|
||||
flipped_buttons = true;
|
||||
} else {
|
||||
flipped_buttons = SDL_FALSE;
|
||||
flipped_buttons = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -571,7 +577,7 @@ SDL_CONTROLLER_TYPE_VIRTUAL has been removed, so virtual controllers can emulate
|
||||
|
||||
SDL_CONTROLLER_TYPE_AMAZON_LUNA has been removed, and can be replaced with this code:
|
||||
```c
|
||||
SDL_bool SDL_IsJoystickAmazonLunaController(Uint16 vendor_id, Uint16 product_id)
|
||||
bool SDL_IsJoystickAmazonLunaController(Uint16 vendor_id, Uint16 product_id)
|
||||
{
|
||||
return ((vendor_id == 0x1949 && product_id == 0x0419) ||
|
||||
(vendor_id == 0x0171 && product_id == 0x0419));
|
||||
@@ -580,7 +586,7 @@ SDL_bool SDL_IsJoystickAmazonLunaController(Uint16 vendor_id, Uint16 product_id)
|
||||
|
||||
SDL_CONTROLLER_TYPE_GOOGLE_STADIA has been removed, and can be replaced with this code:
|
||||
```c
|
||||
SDL_bool SDL_IsJoystickGoogleStadiaController(Uint16 vendor_id, Uint16 product_id)
|
||||
bool SDL_IsJoystickGoogleStadiaController(Uint16 vendor_id, Uint16 product_id)
|
||||
{
|
||||
return (vendor_id == 0x18d1 && product_id == 0x9400);
|
||||
}
|
||||
@@ -588,7 +594,7 @@ SDL_bool SDL_IsJoystickGoogleStadiaController(Uint16 vendor_id, Uint16 product_i
|
||||
|
||||
SDL_CONTROLLER_TYPE_NVIDIA_SHIELD has been removed, and can be replaced with this code:
|
||||
```c
|
||||
SDL_bool SDL_IsJoystickNVIDIASHIELDController(Uint16 vendor_id, Uint16 product_id)
|
||||
bool SDL_IsJoystickNVIDIASHIELDController(Uint16 vendor_id, Uint16 product_id)
|
||||
{
|
||||
return (vendor_id == 0x0955 && (product_id == 0x7210 || product_id == 0x7214));
|
||||
}
|
||||
@@ -596,6 +602,8 @@ SDL_bool SDL_IsJoystickNVIDIASHIELDController(Uint16 vendor_id, Uint16 product_i
|
||||
|
||||
The inputType and outputType fields of SDL_GamepadBinding have been renamed input_type and output_type.
|
||||
|
||||
SDL_GetGamepadTouchpadFinger() takes a pointer to bool for the finger state instead of a pointer to Uint8.
|
||||
|
||||
The following enums have been renamed:
|
||||
* SDL_GameControllerAxis => SDL_GamepadAxis
|
||||
* SDL_GameControllerBindType => SDL_GamepadBindingType
|
||||
@@ -626,13 +634,13 @@ The following functions have been renamed:
|
||||
* SDL_GameControllerGetPlayerIndex() => SDL_GetGamepadPlayerIndex()
|
||||
* SDL_GameControllerGetProduct() => SDL_GetGamepadProduct()
|
||||
* SDL_GameControllerGetProductVersion() => SDL_GetGamepadProductVersion()
|
||||
* SDL_GameControllerGetSensorData() => SDL_GetGamepadSensorData(), returns SDL_bool
|
||||
* SDL_GameControllerGetSensorData() => SDL_GetGamepadSensorData(), returns bool
|
||||
* SDL_GameControllerGetSensorDataRate() => SDL_GetGamepadSensorDataRate()
|
||||
* SDL_GameControllerGetSerial() => SDL_GetGamepadSerial()
|
||||
* SDL_GameControllerGetSteamHandle() => SDL_GetGamepadSteamHandle()
|
||||
* SDL_GameControllerGetStringForAxis() => SDL_GetGamepadStringForAxis()
|
||||
* SDL_GameControllerGetStringForButton() => SDL_GetGamepadStringForButton()
|
||||
* SDL_GameControllerGetTouchpadFinger() => SDL_GetGamepadTouchpadFinger(), returns SDL_bool
|
||||
* SDL_GameControllerGetTouchpadFinger() => SDL_GetGamepadTouchpadFinger(), returns bool
|
||||
* SDL_GameControllerGetType() => SDL_GetGamepadType()
|
||||
* SDL_GameControllerGetVendor() => SDL_GetGamepadVendor()
|
||||
* SDL_GameControllerHasAxis() => SDL_GamepadHasAxis()
|
||||
@@ -644,12 +652,12 @@ The following functions have been renamed:
|
||||
* SDL_GameControllerName() => SDL_GetGamepadName()
|
||||
* SDL_GameControllerOpen() => SDL_OpenGamepad()
|
||||
* SDL_GameControllerPath() => SDL_GetGamepadPath()
|
||||
* SDL_GameControllerRumble() => SDL_RumbleGamepad(), returns SDL_bool
|
||||
* SDL_GameControllerRumbleTriggers() => SDL_RumbleGamepadTriggers(), returns SDL_bool
|
||||
* SDL_GameControllerSendEffect() => SDL_SendGamepadEffect(), returns SDL_bool
|
||||
* SDL_GameControllerSetLED() => SDL_SetGamepadLED(), returns SDL_bool
|
||||
* SDL_GameControllerSetPlayerIndex() => SDL_SetGamepadPlayerIndex(), returns SDL_bool
|
||||
* SDL_GameControllerSetSensorEnabled() => SDL_SetGamepadSensorEnabled(), returns SDL_bool
|
||||
* SDL_GameControllerRumble() => SDL_RumbleGamepad(), returns bool
|
||||
* SDL_GameControllerRumbleTriggers() => SDL_RumbleGamepadTriggers(), returns bool
|
||||
* SDL_GameControllerSendEffect() => SDL_SendGamepadEffect(), returns bool
|
||||
* SDL_GameControllerSetLED() => SDL_SetGamepadLED(), returns bool
|
||||
* SDL_GameControllerSetPlayerIndex() => SDL_SetGamepadPlayerIndex(), returns bool
|
||||
* SDL_GameControllerSetSensorEnabled() => SDL_SetGamepadSensorEnabled(), returns bool
|
||||
* SDL_GameControllerUpdate() => SDL_UpdateGamepads()
|
||||
* SDL_IsGameController() => SDL_IsGamepad()
|
||||
|
||||
@@ -671,7 +679,7 @@ The following symbols have been renamed:
|
||||
* SDL_CONTROLLER_AXIS_INVALID => SDL_GAMEPAD_AXIS_INVALID
|
||||
* SDL_CONTROLLER_AXIS_LEFTX => SDL_GAMEPAD_AXIS_LEFTX
|
||||
* SDL_CONTROLLER_AXIS_LEFTY => SDL_GAMEPAD_AXIS_LEFTY
|
||||
* SDL_CONTROLLER_AXIS_MAX => SDL_GAMEPAD_AXIS_MAX
|
||||
* SDL_CONTROLLER_AXIS_MAX => SDL_GAMEPAD_AXIS_COUNT
|
||||
* SDL_CONTROLLER_AXIS_RIGHTX => SDL_GAMEPAD_AXIS_RIGHTX
|
||||
* SDL_CONTROLLER_AXIS_RIGHTY => SDL_GAMEPAD_AXIS_RIGHTY
|
||||
* SDL_CONTROLLER_AXIS_TRIGGERLEFT => SDL_GAMEPAD_AXIS_LEFT_TRIGGER
|
||||
@@ -691,7 +699,7 @@ The following symbols have been renamed:
|
||||
* SDL_CONTROLLER_BUTTON_INVALID => SDL_GAMEPAD_BUTTON_INVALID
|
||||
* SDL_CONTROLLER_BUTTON_LEFTSHOULDER => SDL_GAMEPAD_BUTTON_LEFT_SHOULDER
|
||||
* SDL_CONTROLLER_BUTTON_LEFTSTICK => SDL_GAMEPAD_BUTTON_LEFT_STICK
|
||||
* SDL_CONTROLLER_BUTTON_MAX => SDL_GAMEPAD_BUTTON_MAX
|
||||
* SDL_CONTROLLER_BUTTON_MAX => SDL_GAMEPAD_BUTTON_COUNT
|
||||
* SDL_CONTROLLER_BUTTON_MISC1 => SDL_GAMEPAD_BUTTON_MISC1
|
||||
* SDL_CONTROLLER_BUTTON_PADDLE1 => SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1
|
||||
* SDL_CONTROLLER_BUTTON_PADDLE2 => SDL_GAMEPAD_BUTTON_LEFT_PADDLE1
|
||||
@@ -752,12 +760,12 @@ Rather than iterating over haptic devices using device index, there is a new fun
|
||||
}
|
||||
```
|
||||
|
||||
SDL_GetHapticEffectStatus() now returns SDL_bool instead of an int result. You should call SDL_GetHapticFeatures() to make sure effect status is supported before calling this function.
|
||||
SDL_GetHapticEffectStatus() now returns bool instead of an int result. You should call SDL_GetHapticFeatures() to make sure effect status is supported before calling this function.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_HapticClose() => SDL_CloseHaptic()
|
||||
* SDL_HapticDestroyEffect() => SDL_DestroyHapticEffect()
|
||||
* SDL_HapticGetEffectStatus() => SDL_GetHapticEffectStatus(), returns SDL_bool
|
||||
* SDL_HapticGetEffectStatus() => SDL_GetHapticEffectStatus(), returns bool
|
||||
* SDL_HapticNewEffect() => SDL_CreateHapticEffect()
|
||||
* SDL_HapticNumAxes() => SDL_GetNumHapticAxes()
|
||||
* SDL_HapticNumEffects() => SDL_GetMaxHapticEffects()
|
||||
@@ -765,18 +773,18 @@ The following functions have been renamed:
|
||||
* SDL_HapticOpen() => SDL_OpenHaptic()
|
||||
* SDL_HapticOpenFromJoystick() => SDL_OpenHapticFromJoystick()
|
||||
* SDL_HapticOpenFromMouse() => SDL_OpenHapticFromMouse()
|
||||
* SDL_HapticPause() => SDL_PauseHaptic(), returns SDL_bool
|
||||
* SDL_HapticPause() => SDL_PauseHaptic(), returns bool
|
||||
* SDL_HapticQuery() => SDL_GetHapticFeatures()
|
||||
* SDL_HapticRumbleInit() => SDL_InitHapticRumble(), returns SDL_bool
|
||||
* SDL_HapticRumblePlay() => SDL_PlayHapticRumble(), returns SDL_bool
|
||||
* SDL_HapticRumbleStop() => SDL_StopHapticRumble(), returns SDL_bool
|
||||
* SDL_HapticRunEffect() => SDL_RunHapticEffect(), returns SDL_bool
|
||||
* SDL_HapticSetAutocenter() => SDL_SetHapticAutocenter(), returns SDL_bool
|
||||
* SDL_HapticSetGain() => SDL_SetHapticGain(), returns SDL_bool
|
||||
* SDL_HapticStopAll() => SDL_StopHapticEffects(), returns SDL_bool
|
||||
* SDL_HapticStopEffect() => SDL_StopHapticEffect(), returns SDL_bool
|
||||
* SDL_HapticUnpause() => SDL_ResumeHaptic(), returns SDL_bool
|
||||
* SDL_HapticUpdateEffect() => SDL_UpdateHapticEffect(), returns SDL_bool
|
||||
* SDL_HapticRumbleInit() => SDL_InitHapticRumble(), returns bool
|
||||
* SDL_HapticRumblePlay() => SDL_PlayHapticRumble(), returns bool
|
||||
* SDL_HapticRumbleStop() => SDL_StopHapticRumble(), returns bool
|
||||
* SDL_HapticRunEffect() => SDL_RunHapticEffect(), returns bool
|
||||
* SDL_HapticSetAutocenter() => SDL_SetHapticAutocenter(), returns bool
|
||||
* SDL_HapticSetGain() => SDL_SetHapticGain(), returns bool
|
||||
* SDL_HapticStopAll() => SDL_StopHapticEffects(), returns bool
|
||||
* SDL_HapticStopEffect() => SDL_StopHapticEffect(), returns bool
|
||||
* SDL_HapticUnpause() => SDL_ResumeHaptic(), returns bool
|
||||
* SDL_HapticUpdateEffect() => SDL_UpdateHapticEffect(), returns bool
|
||||
* SDL_JoystickIsHaptic() => SDL_IsJoystickHaptic()
|
||||
* SDL_MouseIsHaptic() => SDL_IsMouseHaptic()
|
||||
|
||||
@@ -835,7 +843,10 @@ The following hints have been removed:
|
||||
* SDL_HINT_VIDEO_X11_XVIDMODE - Xvidmode no longer supported by the X11 backend
|
||||
* SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING - SDL now properly handles the 0x406D1388 Exception if no debugger intercepts it, preventing its propagation.
|
||||
* SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS - Slim Reader/Writer Locks are always used if available
|
||||
* SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 - replaced with SDL_HINT_WINDOWS_CLOSE_ON_ALT_F4, defaulting to SDL_TRUE
|
||||
* SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 - replaced with SDL_HINT_WINDOWS_CLOSE_ON_ALT_F4, defaulting to true
|
||||
* SDL_HINT_WINRT_HANDLE_BACK_BUTTON - WinRT support was removed in SDL3.
|
||||
* SDL_HINT_WINRT_PRIVACY_POLICY_LABEL - WinRT support was removed in SDL3.
|
||||
* SDL_HINT_WINRT_PRIVACY_POLICY_URL - WinRT support was removed in SDL3.
|
||||
* SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING
|
||||
* SDL_HINT_AUDIO_DEVICE_APP_NAME - replaced by either using the appname param to SDL_SetAppMetadata() or setting SDL_PROP_APP_METADATA_NAME_STRING with SDL_SetAppMetadataProperty()
|
||||
|
||||
@@ -887,6 +898,7 @@ The following symbols have been renamed:
|
||||
The following symbols have been removed:
|
||||
* SDL_INIT_NOPARACHUTE
|
||||
* SDL_INIT_EVERYTHING - you should only initialize the subsystems you are using
|
||||
* SDL_INIT_TIMER - no longer needed before calling SDL_AddTimer()
|
||||
|
||||
## SDL_joystick.h
|
||||
|
||||
@@ -920,18 +932,18 @@ The functions SDL_GetJoysticks(), SDL_GetJoystickNameForID(), SDL_GetJoystickPat
|
||||
|
||||
SDL_AttachVirtualJoystick() now returns the joystick instance ID instead of a device index, and returns 0 if there was an error.
|
||||
|
||||
SDL_VirtualJoystickDesc no longer takes a struct version; if we need to extend this in the future, we'll make a second struct and a second SDL_AttachVirtualJoystickEx-style function that uses it. Just zero the struct and don't set a version.
|
||||
SDL_VirtualJoystickDesc version should not be set to SDL_VIRTUAL_JOYSTICK_DESC_VERSION, instead the structure should be initialized using SDL_INIT_INTERFACE().
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_JoystickAttachVirtualEx() => SDL_AttachVirtualJoystick()
|
||||
* SDL_JoystickClose() => SDL_CloseJoystick()
|
||||
* SDL_JoystickDetachVirtual() => SDL_DetachVirtualJoystick(), returns SDL_bool
|
||||
* SDL_JoystickDetachVirtual() => SDL_DetachVirtualJoystick(), returns bool
|
||||
* SDL_JoystickFromInstanceID() => SDL_GetJoystickFromID()
|
||||
* SDL_JoystickFromPlayerIndex() => SDL_GetJoystickFromPlayerIndex()
|
||||
* SDL_JoystickGetAttached() => SDL_JoystickConnected()
|
||||
* SDL_JoystickGetAxis() => SDL_GetJoystickAxis()
|
||||
* SDL_JoystickGetAxisInitialState() => SDL_GetJoystickAxisInitialState()
|
||||
* SDL_JoystickGetBall() => SDL_GetJoystickBall(), returns SDL_bool
|
||||
* SDL_JoystickGetBall() => SDL_GetJoystickBall(), returns bool
|
||||
* SDL_JoystickGetButton() => SDL_GetJoystickButton()
|
||||
* SDL_JoystickGetFirmwareVersion() => SDL_GetJoystickFirmwareVersion()
|
||||
* SDL_JoystickGetGUID() => SDL_GetJoystickGUID()
|
||||
@@ -952,14 +964,14 @@ The following functions have been renamed:
|
||||
* SDL_JoystickNumHats() => SDL_GetNumJoystickHats()
|
||||
* SDL_JoystickOpen() => SDL_OpenJoystick()
|
||||
* SDL_JoystickPath() => SDL_GetJoystickPath()
|
||||
* SDL_JoystickRumble() => SDL_RumbleJoystick(), returns SDL_bool
|
||||
* SDL_JoystickRumbleTriggers() => SDL_RumbleJoystickTriggers(), returns SDL_bool
|
||||
* SDL_JoystickSendEffect() => SDL_SendJoystickEffect(), returns SDL_bool
|
||||
* SDL_JoystickSetLED() => SDL_SetJoystickLED(), returns SDL_bool
|
||||
* SDL_JoystickSetPlayerIndex() => SDL_SetJoystickPlayerIndex(), returns SDL_bool
|
||||
* SDL_JoystickSetVirtualAxis() => SDL_SetJoystickVirtualAxis(), returns SDL_bool
|
||||
* SDL_JoystickSetVirtualButton() => SDL_SetJoystickVirtualButton(), returns SDL_bool
|
||||
* SDL_JoystickSetVirtualHat() => SDL_SetJoystickVirtualHat(), returns SDL_bool
|
||||
* SDL_JoystickRumble() => SDL_RumbleJoystick(), returns bool
|
||||
* SDL_JoystickRumbleTriggers() => SDL_RumbleJoystickTriggers(), returns bool
|
||||
* SDL_JoystickSendEffect() => SDL_SendJoystickEffect(), returns bool
|
||||
* SDL_JoystickSetLED() => SDL_SetJoystickLED(), returns bool
|
||||
* SDL_JoystickSetPlayerIndex() => SDL_SetJoystickPlayerIndex(), returns bool
|
||||
* SDL_JoystickSetVirtualAxis() => SDL_SetJoystickVirtualAxis(), returns bool
|
||||
* SDL_JoystickSetVirtualButton() => SDL_SetJoystickVirtualButton(), returns bool
|
||||
* SDL_JoystickSetVirtualHat() => SDL_SetJoystickVirtualHat(), returns bool
|
||||
* SDL_JoystickUpdate() => SDL_UpdateJoysticks()
|
||||
|
||||
The following symbols have been renamed:
|
||||
@@ -983,7 +995,7 @@ The following functions have been removed:
|
||||
* SDL_JoystickNameForIndex() - replaced with SDL_GetJoystickNameForID()
|
||||
* SDL_JoystickPathForIndex() - replaced with SDL_GetJoystickPathForID()
|
||||
* SDL_NumJoysticks() - replaced with SDL_GetJoysticks()
|
||||
* SDL_VIRTUAL_JOYSTICK_DESC_VERSION - no longer needed, version info has been removed from SDL_VirtualJoystickDesc.
|
||||
* SDL_VIRTUAL_JOYSTICK_DESC_VERSION - no longer needed
|
||||
|
||||
The following symbols have been removed:
|
||||
* SDL_JOYBALLMOTION
|
||||
@@ -999,6 +1011,8 @@ The text input state hase been changed to be window-specific. SDL_StartTextInput
|
||||
|
||||
SDL_GetDefaultKeyFromScancode(), SDL_GetKeyFromScancode(), and SDL_GetScancodeFromKey() take an SDL_Keymod parameter and use that to provide the correct result based on keyboard modifier state.
|
||||
|
||||
SDL_GetKeyboardState() returns a pointer to bool instead of Uint8.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_IsScreenKeyboardShown() => SDL_ScreenKeyboardShown()
|
||||
* SDL_IsTextInputActive() => SDL_TextInputActive()
|
||||
@@ -1107,6 +1121,9 @@ The following functions have been renamed:
|
||||
* SDL_LogSetOutputFunction() => SDL_SetLogOutputFunction()
|
||||
* SDL_LogSetPriority() => SDL_SetLogPriority()
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_NUM_LOG_PRIORITIES => SDL_LOG_PRIORITY_COUNT
|
||||
|
||||
## SDL_main.h
|
||||
|
||||
SDL3 doesn't have a static libSDLmain to link against anymore.
|
||||
@@ -1118,15 +1135,21 @@ Using it is really simple: Just `#include <SDL3/SDL_main.h>` in the source file
|
||||
Several platform-specific entry point functions have been removed as unnecessary. If for some reason you explicitly need them, here are easy replacements:
|
||||
|
||||
```c
|
||||
#define SDL_WinRTRunApp(MAIN_FUNC, RESERVED) SDL_RunApp(0, NULL, MAIN_FUNC, RESERVED)
|
||||
#define SDL_UIKitRunApp(ARGC, ARGV, MAIN_FUNC) SDL_RunApp(ARGC, ARGV, MAIN_FUNC, NULL)
|
||||
#define SDL_GDKRunApp(MAIN_FUNC, RESERVED) SDL_RunApp(0, NULL, MAIN_FUNC, RESERVED)
|
||||
```
|
||||
|
||||
The following functions have been removed:
|
||||
* SDL_WinRTRunApp() - WinRT support was removed in SDL3.
|
||||
|
||||
|
||||
## SDL_messagebox.h
|
||||
|
||||
The buttonid field of SDL_MessageBoxButtonData has been renamed buttonID.
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_MESSAGEBOX_COLOR_MAX => SDL_MESSAGEBOX_COLOR_COUNT
|
||||
|
||||
## SDL_metal.h
|
||||
|
||||
SDL_Metal_GetDrawableSize() has been removed. SDL_GetWindowSizeInPixels() can be used in its place.
|
||||
@@ -1147,6 +1170,7 @@ The following functions have been removed:
|
||||
* SDL_GetRelativeMouseMode() - replaced with SDL_GetWindowRelativeMouseMode()
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_NUM_SYSTEM_CURSORS => SDL_SYSTEM_CURSOR_COUNT
|
||||
* SDL_SYSTEM_CURSOR_ARROW => SDL_SYSTEM_CURSOR_DEFAULT
|
||||
* SDL_SYSTEM_CURSOR_HAND => SDL_SYSTEM_CURSOR_POINTER
|
||||
* SDL_SYSTEM_CURSOR_IBEAM => SDL_SYSTEM_CURSOR_TEXT
|
||||
@@ -1162,24 +1186,24 @@ The following symbols have been renamed:
|
||||
|
||||
SDL_MUTEX_MAXWAIT has been removed; it suggested there was a maximum timeout one could outlive, instead of an infinite wait. Instead, pass a -1 to functions that accepted this symbol.
|
||||
|
||||
SDL_MUTEX_TIMEDOUT has been removed, the wait functions return SDL_TRUE if the operation succeeded or SDL_FALSE if they timed out.
|
||||
SDL_MUTEX_TIMEDOUT has been removed, the wait functions return true if the operation succeeded or false if they timed out.
|
||||
|
||||
SDL_LockMutex(), SDL_UnlockMutex(), SDL_WaitSemaphore(), SDL_SignalSemaphore(), SDL_WaitCondition(), SDL_SignalCondition(), and SDL_BroadcastCondition() now return void; if the object is valid (including being a NULL pointer, which returns immediately), these functions never fail. If the object is invalid or the caller does something illegal, like unlock another thread's mutex, this is considered undefined behavior.
|
||||
|
||||
SDL_TryWaitSemaphore(), SDL_WaitSemaphoreTimeout(), and SDL_WaitConditionTimeout() now return SDL_TRUE if the operation succeeded or SDL_FALSE if they timed out.
|
||||
SDL_TryWaitSemaphore(), SDL_WaitSemaphoreTimeout(), and SDL_WaitConditionTimeout() now return true if the operation succeeded or false if they timed out.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_CondBroadcast() => SDL_BroadcastCondition()
|
||||
* SDL_CondSignal() => SDL_SignalCondition()
|
||||
* SDL_CondWait() => SDL_WaitCondition()
|
||||
* SDL_CondWaitTimeout() => SDL_WaitConditionTimeout(), returns SDL_bool
|
||||
* SDL_CondWaitTimeout() => SDL_WaitConditionTimeout(), returns bool
|
||||
* SDL_CreateCond() => SDL_CreateCondition()
|
||||
* SDL_DestroyCond() => SDL_DestroyCondition()
|
||||
* SDL_SemPost() => SDL_SignalSemaphore()
|
||||
* SDL_SemTryWait() => SDL_TryWaitSemaphore(), returns SDL_bool
|
||||
* SDL_SemTryWait() => SDL_TryWaitSemaphore(), returns bool
|
||||
* SDL_SemValue() => SDL_GetSemaphoreValue()
|
||||
* SDL_SemWait() => SDL_WaitSemaphore()
|
||||
* SDL_SemWaitTimeout() => SDL_WaitSemaphoreTimeout(), returns SDL_bool
|
||||
* SDL_SemWaitTimeout() => SDL_WaitSemaphoreTimeout(), returns bool
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_cond => SDL_Condition
|
||||
@@ -1219,7 +1243,7 @@ The following functions have been renamed:
|
||||
* SDL_AllocPalette() => SDL_CreatePalette()
|
||||
* SDL_FreePalette() => SDL_DestroyPalette()
|
||||
* SDL_MasksToPixelFormatEnum() => SDL_GetPixelFormatForMasks()
|
||||
* SDL_PixelFormatEnumToMasks() => SDL_GetMasksForPixelFormat(), returns SDL_bool
|
||||
* SDL_PixelFormatEnumToMasks() => SDL_GetMasksForPixelFormat(), returns bool
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_PIXELFORMAT_BGR444 => SDL_PIXELFORMAT_XBGR4444
|
||||
@@ -1275,7 +1299,6 @@ The following platform preprocessor macros have been renamed:
|
||||
| `__VITA__` | `SDL_PLATFORM_VITA` |
|
||||
| `__WIN32__` | `SDL_PLATFORM_WIN32` |
|
||||
| `__WINGDK__` | `SDL_PLATFORM_WINGDK` |
|
||||
| `__WINRT__` | `SDL_PLATFORM_WINRT` |
|
||||
| `__XBOXONE__` | `SDL_PLATFORM_XBOXONE` |
|
||||
| `__XBOXSERIES__` | `SDL_PLATFORM_XBOXSERIES` |
|
||||
|
||||
@@ -1288,6 +1311,8 @@ The following platform preprocessor macros have been removed:
|
||||
* `__NACL__`
|
||||
* `__PNACL__`
|
||||
* `__WINDOWS__`
|
||||
* `__WINRT__`
|
||||
|
||||
|
||||
## SDL_quit.h
|
||||
|
||||
@@ -1318,8 +1343,8 @@ The following functions have been renamed:
|
||||
* SDL_IntersectRectAndLine() => SDL_GetRectAndLineIntersection()
|
||||
* SDL_PointInFRect() => SDL_PointInRectFloat()
|
||||
* SDL_RectEquals() => SDL_RectsEqual()
|
||||
* SDL_UnionFRect() => SDL_GetRectUnionFloat(), returns SDL_bool
|
||||
* SDL_UnionRect() => SDL_GetRectUnion(), returns SDL_bool
|
||||
* SDL_UnionFRect() => SDL_GetRectUnionFloat(), returns bool
|
||||
* SDL_UnionRect() => SDL_GetRectUnion(), returns bool
|
||||
|
||||
## SDL_render.h
|
||||
|
||||
@@ -1365,42 +1390,42 @@ SDL_Vertex has been changed to use floating point colors, in the range of [0..1]
|
||||
SDL_RenderReadPixels() returns a surface instead of filling in preallocated memory.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_GetRendererOutputSize() => SDL_GetCurrentRenderOutputSize(), returns SDL_bool
|
||||
* SDL_RenderCopy() => SDL_RenderTexture(), returns SDL_bool
|
||||
* SDL_RenderCopyEx() => SDL_RenderTextureRotated(), returns SDL_bool
|
||||
* SDL_RenderCopyExF() => SDL_RenderTextureRotated(), returns SDL_bool
|
||||
* SDL_RenderCopyF() => SDL_RenderTexture(), returns SDL_bool
|
||||
* SDL_RenderDrawLine() => SDL_RenderLine(), returns SDL_bool
|
||||
* SDL_RenderDrawLineF() => SDL_RenderLine(), returns SDL_bool
|
||||
* SDL_RenderDrawLines() => SDL_RenderLines(), returns SDL_bool
|
||||
* SDL_RenderDrawLinesF() => SDL_RenderLines(), returns SDL_bool
|
||||
* SDL_RenderDrawPoint() => SDL_RenderPoint(), returns SDL_bool
|
||||
* SDL_RenderDrawPointF() => SDL_RenderPoint(), returns SDL_bool
|
||||
* SDL_RenderDrawPoints() => SDL_RenderPoints(), returns SDL_bool
|
||||
* SDL_RenderDrawPointsF() => SDL_RenderPoints(), returns SDL_bool
|
||||
* SDL_RenderDrawRect() => SDL_RenderRect(), returns SDL_bool
|
||||
* SDL_RenderDrawRectF() => SDL_RenderRect(), returns SDL_bool
|
||||
* SDL_RenderDrawRects() => SDL_RenderRects(), returns SDL_bool
|
||||
* SDL_RenderDrawRectsF() => SDL_RenderRects(), returns SDL_bool
|
||||
* SDL_RenderFillRectF() => SDL_RenderFillRect(), returns SDL_bool
|
||||
* SDL_RenderFillRectsF() => SDL_RenderFillRects(), returns SDL_bool
|
||||
* SDL_RenderFlush() => SDL_FlushRenderer(), returns SDL_bool
|
||||
* SDL_RenderGetClipRect() => SDL_GetRenderClipRect(), returns SDL_bool
|
||||
* SDL_GetRendererOutputSize() => SDL_GetCurrentRenderOutputSize(), returns bool
|
||||
* SDL_RenderCopy() => SDL_RenderTexture(), returns bool
|
||||
* SDL_RenderCopyEx() => SDL_RenderTextureRotated(), returns bool
|
||||
* SDL_RenderCopyExF() => SDL_RenderTextureRotated(), returns bool
|
||||
* SDL_RenderCopyF() => SDL_RenderTexture(), returns bool
|
||||
* SDL_RenderDrawLine() => SDL_RenderLine(), returns bool
|
||||
* SDL_RenderDrawLineF() => SDL_RenderLine(), returns bool
|
||||
* SDL_RenderDrawLines() => SDL_RenderLines(), returns bool
|
||||
* SDL_RenderDrawLinesF() => SDL_RenderLines(), returns bool
|
||||
* SDL_RenderDrawPoint() => SDL_RenderPoint(), returns bool
|
||||
* SDL_RenderDrawPointF() => SDL_RenderPoint(), returns bool
|
||||
* SDL_RenderDrawPoints() => SDL_RenderPoints(), returns bool
|
||||
* SDL_RenderDrawPointsF() => SDL_RenderPoints(), returns bool
|
||||
* SDL_RenderDrawRect() => SDL_RenderRect(), returns bool
|
||||
* SDL_RenderDrawRectF() => SDL_RenderRect(), returns bool
|
||||
* SDL_RenderDrawRects() => SDL_RenderRects(), returns bool
|
||||
* SDL_RenderDrawRectsF() => SDL_RenderRects(), returns bool
|
||||
* SDL_RenderFillRectF() => SDL_RenderFillRect(), returns bool
|
||||
* SDL_RenderFillRectsF() => SDL_RenderFillRects(), returns bool
|
||||
* SDL_RenderFlush() => SDL_FlushRenderer(), returns bool
|
||||
* SDL_RenderGetClipRect() => SDL_GetRenderClipRect(), returns bool
|
||||
* SDL_RenderGetIntegerScale() => SDL_GetRenderIntegerScale()
|
||||
* SDL_RenderGetLogicalSize() => SDL_GetRenderLogicalPresentation(), returns SDL_bool
|
||||
* SDL_RenderGetLogicalSize() => SDL_GetRenderLogicalPresentation(), returns bool
|
||||
* SDL_RenderGetMetalCommandEncoder() => SDL_GetRenderMetalCommandEncoder()
|
||||
* SDL_RenderGetMetalLayer() => SDL_GetRenderMetalLayer()
|
||||
* SDL_RenderGetScale() => SDL_GetRenderScale(), returns SDL_bool
|
||||
* SDL_RenderGetViewport() => SDL_GetRenderViewport(), returns SDL_bool
|
||||
* SDL_RenderGetScale() => SDL_GetRenderScale(), returns bool
|
||||
* SDL_RenderGetViewport() => SDL_GetRenderViewport(), returns bool
|
||||
* SDL_RenderGetWindow() => SDL_GetRenderWindow()
|
||||
* SDL_RenderIsClipEnabled() => SDL_RenderClipEnabled()
|
||||
* SDL_RenderLogicalToWindow() => SDL_RenderCoordinatesToWindow(), returns SDL_bool
|
||||
* SDL_RenderSetClipRect() => SDL_SetRenderClipRect(), returns SDL_bool
|
||||
* SDL_RenderSetLogicalSize() => SDL_SetRenderLogicalPresentation(), returns SDL_bool
|
||||
* SDL_RenderSetScale() => SDL_SetRenderScale(), returns SDL_bool
|
||||
* SDL_RenderSetVSync() => SDL_SetRenderVSync(), returns SDL_bool
|
||||
* SDL_RenderSetViewport() => SDL_SetRenderViewport(), returns SDL_bool
|
||||
* SDL_RenderWindowToLogical() => SDL_RenderCoordinatesFromWindow(), returns SDL_bool
|
||||
* SDL_RenderLogicalToWindow() => SDL_RenderCoordinatesToWindow(), returns bool
|
||||
* SDL_RenderSetClipRect() => SDL_SetRenderClipRect(), returns bool
|
||||
* SDL_RenderSetLogicalSize() => SDL_SetRenderLogicalPresentation(), returns bool
|
||||
* SDL_RenderSetScale() => SDL_SetRenderScale(), returns bool
|
||||
* SDL_RenderSetVSync() => SDL_SetRenderVSync(), returns bool
|
||||
* SDL_RenderSetViewport() => SDL_SetRenderViewport(), returns bool
|
||||
* SDL_RenderWindowToLogical() => SDL_RenderCoordinatesFromWindow(), returns bool
|
||||
|
||||
The following functions have been removed:
|
||||
* SDL_GL_BindTexture() - use SDL_GetTextureProperties() to get the OpenGL texture ID and bind the texture directly
|
||||
@@ -1489,7 +1514,7 @@ You can implement this in your own code easily:
|
||||
typedef struct IOStreamStdioFPData
|
||||
{
|
||||
FILE *fp;
|
||||
SDL_bool autoclose;
|
||||
bool autoclose;
|
||||
} IOStreamStdioFPData;
|
||||
|
||||
static Sint64 SDLCALL stdio_seek(void *userdata, Sint64 offset, int whence)
|
||||
@@ -1544,20 +1569,20 @@ static size_t SDLCALL stdio_write(void *userdata, const void *ptr, size_t size,
|
||||
return bytes;
|
||||
}
|
||||
|
||||
static SDL_bool SDLCALL stdio_close(void *userdata)
|
||||
static bool SDLCALL stdio_close(void *userdata)
|
||||
{
|
||||
IOStreamStdioData *rwopsdata = (IOStreamStdioData *) userdata;
|
||||
SDL_bool status = SDL_TRUE;
|
||||
bool status = true;
|
||||
if (rwopsdata->autoclose) {
|
||||
if (fclose(rwopsdata->fp) != 0) {
|
||||
SDL_SetError("Couldn't close stream");
|
||||
status = SDL_FALSE;
|
||||
status = false;
|
||||
}
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
SDL_IOStream *SDL_RWFromFP(FILE *fp, SDL_bool autoclose)
|
||||
SDL_IOStream *SDL_RWFromFP(FILE *fp, bool autoclose)
|
||||
{
|
||||
SDL_IOStreamInterface iface;
|
||||
IOStreamStdioFPData *rwopsdata;
|
||||
@@ -1568,7 +1593,7 @@ SDL_IOStream *SDL_RWFromFP(FILE *fp, SDL_bool autoclose)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SDL_zero(iface);
|
||||
SDL_INIT_INTERFACE(&iface);
|
||||
/* There's no stdio_size because SDL_GetIOSize emulates it the same way we'd do it for stdio anyhow. */
|
||||
iface.seek = stdio_seek;
|
||||
iface.read = stdio_read;
|
||||
@@ -1591,13 +1616,13 @@ The internal `FILE *` is available through a standard SDL_IOStream property, for
|
||||
On Apple platforms, SDL_RWFromFile (now called SDL_IOFromFile) no longer tries to read from inside the app bundle's resource directory, instead now using the specified path unchanged. One can use SDL_GetBasePath() to find the resource directory on these platforms.
|
||||
|
||||
|
||||
The functions SDL_ReadU8(), SDL_ReadU16LE(), SDL_ReadU16BE(), SDL_ReadU32LE(), SDL_ReadU32BE(), SDL_ReadU64LE(), and SDL_ReadU64BE() now return SDL_TRUE if the read succeeded and SDL_FALSE if it didn't, and store the data in a pointer passed in as a parameter.
|
||||
The functions SDL_ReadU8(), SDL_ReadU16LE(), SDL_ReadU16BE(), SDL_ReadU32LE(), SDL_ReadU32BE(), SDL_ReadU64LE(), and SDL_ReadU64BE() now return true if the read succeeded and false if it didn't, and store the data in a pointer passed in as a parameter.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_RWFromConstMem() => SDL_IOFromConstMem()
|
||||
* SDL_RWFromFile() => SDL_IOFromFile()
|
||||
* SDL_RWFromMem() => SDL_IOFromMem()
|
||||
* SDL_RWclose() => SDL_CloseIO(), returns SDL_bool
|
||||
* SDL_RWclose() => SDL_CloseIO(), returns bool
|
||||
* SDL_RWread() => SDL_ReadIO()
|
||||
* SDL_RWseek() => SDL_SeekIO()
|
||||
* SDL_RWsize() => SDL_GetIOSize()
|
||||
@@ -1637,6 +1662,7 @@ The following symbols have been removed:
|
||||
* SDL_SCANCODE_APP2
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_NUM_SCANCODES => SDL_SCANCODE_COUNT
|
||||
* SDL_SCANCODE_AUDIOFASTFORWARD => SDL_SCANCODE_MEDIA_FAST_FORWARD
|
||||
* SDL_SCANCODE_AUDIOMUTE => SDL_SCANCODE_MUTE
|
||||
* SDL_SCANCODE_AUDIONEXT => SDL_SCANCODE_MEDIA_NEXT_TRACK
|
||||
@@ -1678,7 +1704,7 @@ Removed SDL_SensorGetDataWithTimestamp(), if you want timestamps for the sensor
|
||||
The following functions have been renamed:
|
||||
* SDL_SensorClose() => SDL_CloseSensor()
|
||||
* SDL_SensorFromInstanceID() => SDL_GetSensorFromID()
|
||||
* SDL_SensorGetData() => SDL_GetSensorData(), returns SDL_bool
|
||||
* SDL_SensorGetData() => SDL_GetSensorData(), returns bool
|
||||
* SDL_SensorGetInstanceID() => SDL_GetSensorID()
|
||||
* SDL_SensorGetName() => SDL_GetSensorName()
|
||||
* SDL_SensorGetNonPortableType() => SDL_GetSensorNonPortableType()
|
||||
@@ -1704,7 +1730,7 @@ This header has been removed and a simplified version of this API has been added
|
||||
The standard C headers like stdio.h and stdlib.h are no longer included, you should include them directly in your project if you use non-SDL C runtime functions.
|
||||
M_PI is no longer defined in SDL_stdinc.h, you can use the new symbols SDL_PI_D (double) and SDL_PI_F (float) instead.
|
||||
|
||||
SDL_bool is now defined as bool, and is 1 byte instead of the size of an int.
|
||||
bool is now defined as bool, and is 1 byte instead of the size of an int.
|
||||
|
||||
SDL3 attempts to apply consistency to case-insensitive string functions. In SDL2, things like SDL_strcasecmp() would usually only work on English letters, and depending on the user's locale, possibly not even those. In SDL3, consistency is applied:
|
||||
|
||||
@@ -1719,17 +1745,26 @@ SDL3 attempts to apply consistency to case-insensitive string functions. In SDL2
|
||||
|
||||
Please note that the case-folding technique used by SDL3 will not produce correct results for the "Turkish 'I'"; this one letter is a surprisingly hard problem in the Unicode world, and since these functions do not specify the human language in use, we have chosen to ignore this problem.
|
||||
|
||||
SDL_strtoll(), SDL_strtoull(), SDL_lltoa(), and SDL_ulltoa() use long long values instead of 64-bit values, to match their C runtime counterparts.
|
||||
|
||||
SDL_setenv() is not thread-safe and has been renamed SDL_setenv_unsafe().
|
||||
|
||||
The following macros have been removed:
|
||||
* SDL_TABLESIZE() - use SDL_arraysize() instead
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_size_add_overflow() => SDL_size_add_check_overflow(), returns SDL_bool
|
||||
* SDL_size_mul_overflow() => SDL_size_mul_check_overflow(), returns SDL_bool
|
||||
* SDL_size_add_overflow() => SDL_size_add_check_overflow(), returns bool
|
||||
* SDL_size_mul_overflow() => SDL_size_mul_check_overflow(), returns bool
|
||||
* SDL_strtokr() => SDL_strtok_r()
|
||||
|
||||
The following functions have been removed:
|
||||
* SDL_memcpy4()
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_FALSE => false
|
||||
* SDL_TRUE => true
|
||||
* SDL_bool => bool
|
||||
|
||||
## SDL_surface.h
|
||||
|
||||
SDL_Surface has been simplified and internal details are no longer in the public structure.
|
||||
@@ -1797,34 +1832,34 @@ But if you're migrating your code which uses masks, you probably have a format i
|
||||
|
||||
SDL_BlitSurface() and SDL_BlitSurfaceScaled() now have a const `dstrect` parameter and do not fill it in with the final destination rectangle.
|
||||
|
||||
SDL_BlitSurfaceScaled() and SDL_BlitSurfaceUncheckedScaled() now take a scale paramater.
|
||||
SDL_BlitSurfaceScaled() and SDL_BlitSurfaceUncheckedScaled() now take a scale parameter.
|
||||
|
||||
SDL_SoftStretch() now takes a scale paramater.
|
||||
SDL_SoftStretch() now takes a scale parameter.
|
||||
|
||||
SDL_PixelFormat is used instead of Uint32 for API functions that refer to pixel format by enumerated value.
|
||||
|
||||
SDL_SetSurfaceColorKey() takes an SDL_bool to enable and disable colorkey. RLE acceleration isn't controlled by the parameter, you should use SDL_SetSurfaceRLE() to change that separately.
|
||||
SDL_SetSurfaceColorKey() takes an bool to enable and disable colorkey. RLE acceleration isn't controlled by the parameter, you should use SDL_SetSurfaceRLE() to change that separately.
|
||||
|
||||
SDL_SetSurfaceRLE() takes an SDL_bool to enable and disable RLE acceleration.
|
||||
SDL_SetSurfaceRLE() takes an bool to enable and disable RLE acceleration.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_BlitScaled() => SDL_BlitSurfaceScaled(), returns SDL_bool
|
||||
* SDL_BlitScaled() => SDL_BlitSurfaceScaled(), returns bool
|
||||
* SDL_ConvertSurfaceFormat() => SDL_ConvertSurface()
|
||||
* SDL_FillRect() => SDL_FillSurfaceRect(), returns SDL_bool
|
||||
* SDL_FillRects() => SDL_FillSurfaceRects(), returns SDL_bool
|
||||
* SDL_FillRect() => SDL_FillSurfaceRect(), returns bool
|
||||
* SDL_FillRects() => SDL_FillSurfaceRects(), returns bool
|
||||
* SDL_FreeSurface() => SDL_DestroySurface()
|
||||
* SDL_GetClipRect() => SDL_GetSurfaceClipRect(), returns SDL_bool
|
||||
* SDL_GetColorKey() => SDL_GetSurfaceColorKey(), returns SDL_bool
|
||||
* SDL_GetClipRect() => SDL_GetSurfaceClipRect(), returns bool
|
||||
* SDL_GetColorKey() => SDL_GetSurfaceColorKey(), returns bool
|
||||
* SDL_HasColorKey() => SDL_SurfaceHasColorKey()
|
||||
* SDL_HasSurfaceRLE() => SDL_SurfaceHasRLE()
|
||||
* SDL_LoadBMP_RW() => SDL_LoadBMP_IO()
|
||||
* SDL_LowerBlit() => SDL_BlitSurfaceUnchecked(), returns SDL_bool
|
||||
* SDL_LowerBlitScaled() => SDL_BlitSurfaceUncheckedScaled(), returns SDL_bool
|
||||
* SDL_SaveBMP_RW() => SDL_SaveBMP_IO(), returns SDL_bool
|
||||
* SDL_LowerBlit() => SDL_BlitSurfaceUnchecked(), returns bool
|
||||
* SDL_LowerBlitScaled() => SDL_BlitSurfaceUncheckedScaled(), returns bool
|
||||
* SDL_SaveBMP_RW() => SDL_SaveBMP_IO(), returns bool
|
||||
* SDL_SetClipRect() => SDL_SetSurfaceClipRect()
|
||||
* SDL_SetColorKey() => SDL_SetSurfaceColorKey(), returns SDL_bool
|
||||
* SDL_UpperBlit() => SDL_BlitSurface(), returns SDL_bool
|
||||
* SDL_UpperBlitScaled() => SDL_BlitSurfaceScaled(), returns SDL_bool
|
||||
* SDL_SetColorKey() => SDL_SetSurfaceColorKey(), returns bool
|
||||
* SDL_UpperBlit() => SDL_BlitSurface(), returns bool
|
||||
* SDL_UpperBlitScaled() => SDL_BlitSurfaceScaled(), returns bool
|
||||
|
||||
The following symbols have been removed:
|
||||
* SDL_SWSURFACE
|
||||
@@ -1850,10 +1885,12 @@ SDL_RequestAndroidPermission is no longer a blocking call; the caller now provid
|
||||
SDL_iPhoneSetAnimationCallback() and SDL_iPhoneSetEventPump() have been renamed to SDL_SetiOSAnimationCallback() and SDL_SetiOSEventPump(), respectively. SDL2 has had macros to provide this new name with the old symbol since the introduction of the iPad, but now the correctly-named symbol is the only option.
|
||||
|
||||
The following functions have been removed:
|
||||
* SDL_GetWinRTFSPathUNICODE() - WinRT support was removed in SDL3.
|
||||
* SDL_GetWinRTFSPathUTF8() - WinRT support was removed in SDL3.
|
||||
* SDL_RenderGetD3D11Device() - replaced with the "SDL.renderer.d3d11.device" property
|
||||
* SDL_RenderGetD3D12Device() - replaced with the "SDL.renderer.d3d12.device" property
|
||||
* SDL_RenderGetD3D9Device() - replaced with the "SDL.renderer.d3d9.device" property
|
||||
* SDL_GetWinRTFSPathUNICODE() - Use SDL_GetWinRTFSPath() and SDL_iconv_string to convert from UTF-8 to UTF-16.
|
||||
* SDL_WinRTGetDeviceFamily() - WinRT support was removed in SDL3.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_AndroidBackButton() => SDL_SendAndroidBackButton()
|
||||
@@ -1862,23 +1899,21 @@ The following functions have been renamed:
|
||||
* SDL_AndroidGetExternalStorageState() => SDL_GetAndroidExternalStorageState()
|
||||
* SDL_AndroidGetInternalStoragePath() => SDL_GetAndroidInternalStoragePath()
|
||||
* SDL_AndroidGetJNIEnv() => SDL_GetAndroidJNIEnv()
|
||||
* SDL_AndroidRequestPermission() => SDL_RequestAndroidPermission(), returns SDL_bool
|
||||
* SDL_AndroidRequestPermission() => SDL_RequestAndroidPermission(), returns bool
|
||||
* SDL_AndroidRequestPermissionCallback() => SDL_RequestAndroidPermissionCallback()
|
||||
* SDL_AndroidSendMessage() => SDL_SendAndroidMessage(), returns SDL_bool
|
||||
* SDL_AndroidShowToast() => SDL_ShowAndroidToast(), returns SDL_bool
|
||||
* SDL_DXGIGetOutputInfo() => SDL_GetDXGIOutputInfo(), returns SDL_bool
|
||||
* SDL_AndroidSendMessage() => SDL_SendAndroidMessage(), returns bool
|
||||
* SDL_AndroidShowToast() => SDL_ShowAndroidToast(), returns bool
|
||||
* SDL_DXGIGetOutputInfo() => SDL_GetDXGIOutputInfo(), returns bool
|
||||
* SDL_Direct3D9GetAdapterIndex() => SDL_GetDirect3D9AdapterIndex()
|
||||
* SDL_GDKGetDefaultUser() => SDL_GetGDKDefaultUser(), returns SDL_bool
|
||||
* SDL_GDKGetTaskQueue() => SDL_GetGDKTaskQueue(), returns SDL_bool
|
||||
* SDL_LinuxSetThreadPriority() => SDL_SetLinuxThreadPriority(), returns SDL_bool
|
||||
* SDL_LinuxSetThreadPriorityAndPolicy() => SDL_SetLinuxThreadPriorityAndPolicy(), returns SDL_bool
|
||||
* SDL_GDKGetDefaultUser() => SDL_GetGDKDefaultUser(), returns bool
|
||||
* SDL_GDKGetTaskQueue() => SDL_GetGDKTaskQueue(), returns bool
|
||||
* SDL_LinuxSetThreadPriority() => SDL_SetLinuxThreadPriority(), returns bool
|
||||
* SDL_LinuxSetThreadPriorityAndPolicy() => SDL_SetLinuxThreadPriorityAndPolicy(), returns bool
|
||||
* SDL_OnApplicationDidBecomeActive() => SDL_OnApplicationDidEnterForeground()
|
||||
* SDL_OnApplicationWillResignActive() => SDL_OnApplicationWillEnterBackground()
|
||||
* SDL_WinRTGetDeviceFamily() => SDL_GetWinRTDeviceFamily()
|
||||
* SDL_GetWinRTFSPathUTF8() => SDL_GetWinRTFSPath()
|
||||
* SDL_iOSSetAnimationCallback() => SDL_SetiOSAnimationCallback(), returns SDL_bool
|
||||
* SDL_iOSSetAnimationCallback() => SDL_SetiOSAnimationCallback(), returns bool
|
||||
* SDL_iOSSetEventPump() => SDL_SetiOSEventPump()
|
||||
* SDL_iPhoneSetAnimationCallback() => SDL_SetiOSAnimationCallback(), returns SDL_bool
|
||||
* SDL_iPhoneSetAnimationCallback() => SDL_SetiOSAnimationCallback(), returns bool
|
||||
* SDL_iPhoneSetEventPump() => SDL_SetiOSEventPump()
|
||||
|
||||
## SDL_syswm.h
|
||||
@@ -1986,7 +2021,7 @@ SDL_GetTLS() and SDL_SetTLS() take a pointer to a TLS ID, and will automatically
|
||||
The following functions have been renamed:
|
||||
* SDL_TLSCleanup() => SDL_CleanupTLS()
|
||||
* SDL_TLSGet() => SDL_GetTLS()
|
||||
* SDL_TLSSet() => SDL_SetTLS(), returns SDL_bool
|
||||
* SDL_TLSSet() => SDL_SetTLS(), returns bool
|
||||
* SDL_ThreadID() => SDL_GetCurrentThreadID()
|
||||
|
||||
The following functions have been removed:
|
||||
@@ -2139,7 +2174,7 @@ SDL_GL_GetProcAddress() and SDL_EGL_GetProcAddress() now return `SDL_FunctionPoi
|
||||
|
||||
SDL_GL_DeleteContext() has been renamed to SDL_GL_DestroyContext to match SDL naming conventions (and glX/EGL!).
|
||||
|
||||
SDL_GL_GetSwapInterval() takes the interval as an output parameter and returns SDL_TRUE if the function succeeds or SDL_FALSE if there was an error.
|
||||
SDL_GL_GetSwapInterval() takes the interval as an output parameter and returns true if the function succeeds or false if there was an error.
|
||||
|
||||
SDL_GL_GetDrawableSize() has been removed. SDL_GetWindowSizeInPixels() can be used in its place.
|
||||
|
||||
@@ -2150,8 +2185,8 @@ SDL_WindowFlags is used instead of Uint32 for API functions that refer to window
|
||||
SDL_GetWindowOpacity() directly returns the opacity instead of using an out parameter.
|
||||
|
||||
The following functions have been renamed:
|
||||
* SDL_GL_DeleteContext() => SDL_GL_DestroyContext(), returns SDL_bool
|
||||
* SDL_GetClosestDisplayMode() => SDL_GetClosestFullscreenDisplayMode(), returns SDL_bool
|
||||
* SDL_GL_DeleteContext() => SDL_GL_DestroyContext(), returns bool
|
||||
* SDL_GetClosestDisplayMode() => SDL_GetClosestFullscreenDisplayMode(), returns bool
|
||||
* SDL_GetDisplayOrientation() => SDL_GetCurrentDisplayOrientation()
|
||||
* SDL_GetPointDisplayIndex() => SDL_GetDisplayForPoint()
|
||||
* SDL_GetRectDisplayIndex() => SDL_GetDisplayForRect()
|
||||
@@ -2159,7 +2194,7 @@ The following functions have been renamed:
|
||||
* SDL_GetWindowDisplayMode() => SDL_GetWindowFullscreenMode()
|
||||
* SDL_HasWindowSurface() => SDL_WindowHasSurface()
|
||||
* SDL_IsScreenSaverEnabled() => SDL_ScreenSaverEnabled()
|
||||
* SDL_SetWindowDisplayMode() => SDL_SetWindowFullscreenMode(), returns SDL_bool
|
||||
* SDL_SetWindowDisplayMode() => SDL_SetWindowFullscreenMode(), returns bool
|
||||
|
||||
The following functions have been removed:
|
||||
* SDL_GetClosestFullscreenDisplayMode()
|
||||
@@ -2173,6 +2208,7 @@ The following functions have been removed:
|
||||
* SDL_SetWindowData() - use SDL_GetWindowProperties() instead
|
||||
* SDL_CreateWindowFrom() - use SDL_CreateWindowWithProperties() with the properties that allow you to wrap an existing window
|
||||
* SDL_SetWindowInputFocus() - use SDL_RaiseWindow() instead
|
||||
* SDL_SetWindowModalFor() - use SDL_SetWindowParent() with SDL_SetWindowModal() instead
|
||||
|
||||
The SDL_Window id type is named SDL_WindowID
|
||||
|
||||
|
||||
2
external/SDL/docs/README-porting.md
vendored
2
external/SDL/docs/README-porting.md
vendored
@@ -5,7 +5,7 @@ Porting
|
||||
|
||||
The first thing you have to do when porting to a new platform, is look at
|
||||
include/SDL_platform.h and create an entry there for your operating system.
|
||||
The standard format is "__PLATFORM__", where PLATFORM is the name of the OS.
|
||||
The standard format is "SDL_PLATFORM_X", where X is the name of the OS.
|
||||
Ideally SDL_platform_defines.h will be able to auto-detect the system it's building
|
||||
on based on C preprocessor symbols.
|
||||
|
||||
|
||||
6
external/SDL/docs/README-vita.md
vendored
6
external/SDL/docs/README-vita.md
vendored
@@ -21,13 +21,13 @@ Notes
|
||||
-----
|
||||
* gles1/gles2 support and renderers are disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PVR=ON`
|
||||
These renderers support 720p and 1080i resolutions. These can be specified with:
|
||||
`SDL_setenv("VITA_RESOLUTION", "720", 1);` and `SDL_setenv("VITA_RESOLUTION", "1080", 1);`
|
||||
`SDL_SetHint(SDL_HINT_VITA_RESOLUTION, "720");` and `SDL_SetHint(SDL_HINT_VITA_RESOLUTION, "1080");`
|
||||
* Desktop GL 1.X and 2.X support and renderers are also disabled by default and also can be enabled with `-DVIDEO_VITA_PVR=ON` as long as gl4es4vita is present in your SDK.
|
||||
They support the same resolutions as the gles1/gles2 backends and require specifying `SDL_setenv("VITA_PVR_OGL", "1", 1);`
|
||||
They support the same resolutions as the gles1/gles2 backends and require specifying `SDL_SetHint(SDL_HINT_VITA_PVR_OPENGL, "1");`
|
||||
anytime before video subsystem initialization.
|
||||
* gles2 support via PIB is disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PIB=ON`
|
||||
* By default SDL emits mouse events for touch events on every touchscreen.
|
||||
Vita has two touchscreens, so it's recommended to use `SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");` and handle touch events instead.
|
||||
Individual touchscreens can be disabled with:
|
||||
`SDL_setenv("VITA_DISABLE_TOUCH_FRONT", "1", 1);` and `SDL_setenv("VITA_DISABLE_TOUCH_BACK", "1", 1);`
|
||||
`SDL_SetHint(SDL_HINT_VITA_ENABLE_FRONT_TOUCH, "0");` and `SDL_SetHint(SDL_HINT_VITA_ENABLE_BACK_TOUCH, "0");`
|
||||
* Support for L2/R2/R3/R3 buttons, haptic feedback and gamepad led only available on PSTV, or when using external ds4 gamepad on vita.
|
||||
|
||||
10
external/SDL/docs/README-wayland.md
vendored
10
external/SDL/docs/README-wayland.md
vendored
@@ -61,7 +61,7 @@ having SDL handle input and rendering, it needs to create a custom, roleless sur
|
||||
toplevel window.
|
||||
|
||||
This is done by using `SDL_CreateWindowWithProperties()` and setting the
|
||||
`SDL_PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN` property to `SDL_TRUE`. Once the window has been
|
||||
`SDL_PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN` property to `true`. Once the window has been
|
||||
successfully created, the `wl_display` and `wl_surface` objects can then be retrieved from the
|
||||
`SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER` and `SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER` properties respectively.
|
||||
|
||||
@@ -69,10 +69,10 @@ Surfaces don't receive any size change notifications, so if an application chang
|
||||
that the surface size has changed by calling SDL_SetWindowSize() with the new dimensions.
|
||||
|
||||
Custom surfaces will automatically handle scaling internally if the window was created with the
|
||||
`SDL_PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN` property set to `SDL_TRUE`. In this case, applications should
|
||||
`SDL_PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN` property set to `true`. In this case, applications should
|
||||
not manually attach viewports or change the surface scale value, as SDL will handle this internally. Calls
|
||||
to `SDL_SetWindowSize()` should use the logical size of the window, and `SDL_GetWindowSizeInPixels()` should be used to
|
||||
query the size of the backbuffer surface in pixels. If this property is not set or is `SDL_FALSE`, applications can
|
||||
query the size of the backbuffer surface in pixels. If this property is not set or is `false`, applications can
|
||||
attach their own viewports or change the surface scale manually, and the SDL backend will not interfere or change any
|
||||
values internally. In this case, calls to `SDL_SetWindowSize()` should pass the requested surface size in pixels, not
|
||||
the logical window size, as no scaling calculations will be done internally.
|
||||
@@ -101,7 +101,7 @@ SDL receives no notification regarding size changes on external surfaces or topl
|
||||
needs to be resized, SDL must be informed by calling SDL_SetWindowSize() with the new dimensions.
|
||||
|
||||
If desired, SDL can automatically handle the scaling for the surface by setting the
|
||||
`SDL_PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN` property to `SDL_TRUE`, however, if the surface being imported
|
||||
`SDL_PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN` property to `true`, however, if the surface being imported
|
||||
already has, or will have, a viewport/fractional scale manager attached to it by the application or an external toolkit,
|
||||
a protocol violation will result. Avoid setting this property if importing surfaces from toolkits such as Qt or GTK.
|
||||
|
||||
@@ -176,7 +176,7 @@ int main(int argc, char *argv[])
|
||||
*/
|
||||
props = SDL_CreateProperties();
|
||||
SDL_SetPointerProperty(props, SDL_PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER, surface);
|
||||
SDL_SetBooleanProperty(props, SDL_PROP_WINDOW_CREATE_OPENGL_BOOLEAN, SDL_TRUE);
|
||||
SDL_SetBooleanProperty(props, SDL_PROP_WINDOW_CREATE_OPENGL_BOOLEAN, true);
|
||||
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, 640);
|
||||
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, 480);
|
||||
sdlWindow = SDL_CreateWindowWithProperties(props);
|
||||
|
||||
6
external/SDL/docs/README-windows.md
vendored
6
external/SDL/docs/README-windows.md
vendored
@@ -1,5 +1,11 @@
|
||||
# Windows
|
||||
|
||||
## Old systems
|
||||
|
||||
WinRT, Windows Phone, and UWP are no longer supported.
|
||||
|
||||
All desktop Windows versions, back to Windows XP, are still supported.
|
||||
|
||||
## LLVM and Intel C++ compiler support
|
||||
|
||||
SDL will build with the Visual Studio project files with LLVM-based compilers, such as the Intel oneAPI C++
|
||||
|
||||
483
external/SDL/docs/README-winrt.md
vendored
483
external/SDL/docs/README-winrt.md
vendored
@@ -1,483 +0,0 @@
|
||||
WinRT
|
||||
=====
|
||||
|
||||
This port allows SDL applications to run on Microsoft's platforms that require
|
||||
use of "Windows Runtime", aka. "WinRT", APIs. Microsoft may, in some cases,
|
||||
refer to them as either "Windows Store", or for Windows 10, "UWP" apps.
|
||||
|
||||
In the past, SDL has supported Windows RT 8.x, Windows Phone, etc, but in
|
||||
modern times this port is focused on UWP apps, which run on Windows 10,
|
||||
and modern Xbox consoles.
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
* Microsoft Visual C++ (aka Visual Studio) 2019.
|
||||
- Free, "Community" or "Express" editions may be used, so long as they
|
||||
include support for either "Windows Store" or "Windows Phone" apps.
|
||||
"Express" versions marked as supporting "Windows Desktop" development
|
||||
typically do not include support for creating WinRT apps, to note.
|
||||
(The "Community" editions of Visual C++ do, however, support both
|
||||
desktop/Win32 and WinRT development).
|
||||
* A valid Microsoft account - This requirement is not imposed by SDL, but
|
||||
rather by Microsoft's Visual C++ toolchain. This is required to launch or
|
||||
debug apps.
|
||||
|
||||
|
||||
Status
|
||||
------
|
||||
|
||||
Here is a rough list of what works, and what doesn't:
|
||||
|
||||
* What works:
|
||||
* compilation via Visual C++ 2019.
|
||||
* compile-time platform detection for SDL programs. The C/C++ #define,
|
||||
`SDL_PLATFORM_WINRT`, will be set to 1 (by SDL) when compiling for WinRT.
|
||||
* GPU-accelerated 2D rendering, via SDL_Renderer.
|
||||
* OpenGL ES 2, via the ANGLE library (included separately from SDL)
|
||||
* software rendering, via either SDL_Surface (optionally in conjunction with
|
||||
SDL_GetWindowSurface() and SDL_UpdateWindowSurface()) or via the
|
||||
SDL_Renderer APIs
|
||||
* threads
|
||||
* timers (via SDL_GetTicks(), SDL_AddTimer(), SDL_GetPerformanceCounter(),
|
||||
SDL_GetPerformanceFrequency(), etc.)
|
||||
* file I/O via SDL_IOStream
|
||||
* mouse input (unsupported on Windows Phone)
|
||||
* audio, via SDL's WASAPI backend (if you want to record, your app must
|
||||
have "Microphone" capabilities enabled in its manifest, and the user must
|
||||
not have blocked access. Otherwise, recording devices will fail to work,
|
||||
presenting as a device disconnect shortly after opening it.)
|
||||
* .DLL file loading. Libraries *MUST* be packaged inside applications. Loading
|
||||
anything outside of the app is not supported.
|
||||
* system path retrieval via SDL's filesystem APIs
|
||||
* game controllers. Support is provided via the SDL_Joystick and
|
||||
SDL_Gamepad APIs, and is backed by Microsoft's XInput API. Please
|
||||
note, however, that Windows limits game-controller support in UWP apps to,
|
||||
"Xbox compatible controllers" (many controllers that work in Win32 apps,
|
||||
do not work in UWP, due to restrictions in UWP itself.)
|
||||
* multi-touch input
|
||||
* app events. SDL_APP_WILLENTER* and SDL_APP_DIDENTER* events get sent out as
|
||||
appropriate.
|
||||
* window events
|
||||
* using Direct3D 11.x APIs outside of SDL. Non-XAML / Direct3D-only apps can
|
||||
choose to render content directly via Direct3D, using SDL to manage the
|
||||
internal WinRT window, as well as input and audio. (Use
|
||||
the window properties to get the WinRT 'CoreWindow', and pass it into
|
||||
IDXGIFactory2::CreateSwapChainForCoreWindow() as appropriate.)
|
||||
|
||||
* What partially works:
|
||||
* keyboard input. Most of WinRT's documented virtual keys are supported, as
|
||||
well as many keys with documented hardware scancodes. Converting
|
||||
SDL_Scancodes to or from SDL_Keycodes may not work, due to missing APIs
|
||||
(MapVirtualKey()) in Microsoft's Windows Store / UWP APIs.
|
||||
* SDL_main. WinRT uses a different signature for each app's main() function
|
||||
and requires it to be implemented in C++, so SDL_main.h must be #include'd
|
||||
in a C++ source file, that also must be compiled with /ZW.
|
||||
|
||||
* What doesn't work:
|
||||
* compilation with anything other than Visual C++
|
||||
* programmatically-created custom cursors. These don't appear to be supported
|
||||
by WinRT. Different OS-provided cursors can, however, be created via
|
||||
SDL_CreateSystemCursor() (unsupported on Windows Phone)
|
||||
* SDL_WarpMouseInWindow() or SDL_WarpMouseGlobal(). This are not currently
|
||||
supported by WinRT itself.
|
||||
* joysticks and game controllers that either are not supported by
|
||||
Microsoft's XInput API, or are not supported within UWP apps (many
|
||||
controllers that work in Win32, do not work in UWP, due to restrictions in
|
||||
UWP itself).
|
||||
* turning off VSync when rendering on Windows Phone. Attempts to turn VSync
|
||||
off on Windows Phone result either in Direct3D not drawing anything, or it
|
||||
forcing VSync back on. As such, vsync will always get turned-on on Windows
|
||||
Phone. This limitation is not present in non-Phone WinRT (such as Windows 8.x),
|
||||
where turning off VSync appears to work.
|
||||
* probably anything else that's not listed as supported
|
||||
|
||||
|
||||
|
||||
Setup, High-Level Steps
|
||||
-----------------------
|
||||
|
||||
The steps for setting up a project for an SDL/WinRT app looks like the
|
||||
following, at a high-level:
|
||||
|
||||
1. create a new Visual C++ project using Microsoft's template for a,
|
||||
"Direct3D App".
|
||||
2. remove most of the files from the project.
|
||||
3. make your app's project directly reference SDL/WinRT's own Visual C++
|
||||
project file, via use of Visual C++'s "References" dialog. This will setup
|
||||
the linker, and will copy SDL's .dll files to your app's final output.
|
||||
4. adjust your app's build settings, at minimum, telling it where to find SDL's
|
||||
header files.
|
||||
5. add files that contains a WinRT-appropriate main function, along with some
|
||||
data to make sure mouse-cursor-hiding (via SDL_ShowCursor(SDL_DISABLE) calls)
|
||||
work properly.
|
||||
6. add SDL-specific app code.
|
||||
7. build and run your app.
|
||||
|
||||
|
||||
Setup, Detailed Steps
|
||||
---------------------
|
||||
|
||||
### 1. Create a new project ###
|
||||
|
||||
Create a new project using one of Visual C++'s templates for a plain, non-XAML,
|
||||
"Direct3D App" (XAML support for SDL/WinRT is not yet ready for use). If you
|
||||
don't see one of these templates, in Visual C++'s 'New Project' dialog, try
|
||||
using the textbox titled, 'Search Installed Templates' to look for one.
|
||||
|
||||
|
||||
### 2. Remove unneeded files from the project ###
|
||||
|
||||
In the new project, delete any file that has one of the following extensions:
|
||||
|
||||
- .cpp
|
||||
- .h
|
||||
- .hlsl
|
||||
|
||||
When you are done, you should be left with a few files, each of which will be a
|
||||
necessary part of your app's project. These files will consist of:
|
||||
|
||||
- an .appxmanifest file, which contains metadata on your WinRT app. This is
|
||||
similar to an Info.plist file on iOS, or an AndroidManifest.xml on Android.
|
||||
- a few .png files, one of which is a splash screen (displayed when your app
|
||||
launches), others are app icons.
|
||||
- a .pfx file, used for code signing purposes.
|
||||
|
||||
|
||||
### 3. Add references to SDL's project files ###
|
||||
|
||||
SDL/WinRT can be built in multiple variations, spanning across three different
|
||||
CPU architectures (x86, x64, and ARM) and two different configurations
|
||||
(Debug and Release). WinRT and Visual C++ do not currently provide a means
|
||||
for combining multiple variations of one library into a single file.
|
||||
Furthermore, it does not provide an easy means for copying pre-built .dll files
|
||||
into your app's final output (via Post-Build steps, for example). It does,
|
||||
however, provide a system whereby an app can reference the MSVC projects of
|
||||
libraries such that, when the app is built:
|
||||
|
||||
1. each library gets built for the appropriate CPU architecture(s) and WinRT
|
||||
platform(s).
|
||||
2. each library's output, such as .dll files, get copied to the app's build
|
||||
output.
|
||||
|
||||
To set this up for SDL/WinRT, you'll need to run through the following steps:
|
||||
|
||||
1. open up the Solution Explorer inside Visual C++ (under the "View" menu, then
|
||||
"Solution Explorer")
|
||||
2. right click on your app's solution.
|
||||
3. navigate to "Add", then to "Existing Project..."
|
||||
4. find SDL/WinRT's Visual C++ project file and open it, in the `VisualC-WinRT`
|
||||
directory.
|
||||
5. once the project has been added, right-click on your app's project and
|
||||
select, "References..."
|
||||
6. click on the button titled, "Add New Reference..."
|
||||
7. check the box next to SDL
|
||||
8. click OK to close the dialog
|
||||
9. SDL will now show up in the list of references. Click OK to close that
|
||||
dialog.
|
||||
|
||||
Your project is now linked to SDL's project, insofar that when the app is
|
||||
built, SDL will be built as well, with its build output getting included with
|
||||
your app.
|
||||
|
||||
|
||||
### 4. Adjust Your App's Build Settings ###
|
||||
|
||||
Some build settings need to be changed in your app's project. This guide will
|
||||
outline the following:
|
||||
|
||||
- making sure that the compiler knows where to find SDL's header files
|
||||
- **Optional for C++, but NECESSARY for compiling C code:** telling the
|
||||
compiler not to use Microsoft's C++ extensions for WinRT development.
|
||||
- **Optional:** telling the compiler not generate errors due to missing
|
||||
precompiled header files.
|
||||
|
||||
To change these settings:
|
||||
|
||||
1. right-click on the project
|
||||
2. choose "Properties"
|
||||
3. in the drop-down box next to "Configuration", choose, "All Configurations"
|
||||
4. in the drop-down box next to "Platform", choose, "All Platforms"
|
||||
5. in the left-hand list, expand the "C/C++" section
|
||||
**Note:** If you don't see this section, you may have to add a .c or .cpp
|
||||
Source file to the Project first.
|
||||
6. select "General"
|
||||
7. edit the "Additional Include Directories" setting, and add a path to SDL's
|
||||
"include" directory
|
||||
8. **Optional: to enable compilation of C code:** change the setting for
|
||||
"Consume Windows Runtime Extension" from "Yes (/ZW)" to "No". If you're
|
||||
working with a completely C++ based project, this step can usually be
|
||||
omitted.
|
||||
9. **Optional: to disable precompiled headers (which can produce
|
||||
'stdafx.h'-related build errors, if setup incorrectly:** in the left-hand
|
||||
list, select "Precompiled Headers", then change the setting for "Precompiled
|
||||
Header" from "Use (/Yu)" to "Not Using Precompiled Headers".
|
||||
10. close the dialog, saving settings, by clicking the "OK" button
|
||||
|
||||
|
||||
### 5. Add a WinRT-appropriate main function, and a blank-cursor image, to the app. ###
|
||||
|
||||
A few files should be included directly in your app's MSVC project, specifically:
|
||||
1. a WinRT-appropriate main function (which is different than main() functions on
|
||||
other platforms)
|
||||
2. a Win32-style cursor resource, used by SDL_ShowCursor() to hide the mouse cursor
|
||||
(if and when the app needs to do so). *If this cursor resource is not
|
||||
included, mouse-position reporting may fail if and when the cursor is
|
||||
hidden, due to possible bugs/design-oddities in Windows itself.*
|
||||
|
||||
To include these files for C/C++ projects:
|
||||
|
||||
1. right-click on your project (again, in Visual C++'s Solution Explorer),
|
||||
navigate to "Add", then choose "Existing Item...".
|
||||
2. navigate to the directory containing SDL's source code, then into its
|
||||
subdirectory, 'src/main/winrt/'. Select, then add, the following files:
|
||||
- `SDL3-WinRTResources.rc`
|
||||
- `SDL3-WinRTResource_BlankCursor.cur`
|
||||
3. For the next step you need a C++ source file.
|
||||
- If your standard main() function is implemented in a **C++** source file,
|
||||
use that file.
|
||||
- If your standard main() function is implemented in a **plain C** source file,
|
||||
create an empty .cpp source file (e.g. `main.cpp`) that only contains the line
|
||||
`#include <SDL3/SDL_main.h>` and use that file instead.
|
||||
4. Right click on the C++ source file from step 3 (as listed in your project),
|
||||
then click on "Properties...".
|
||||
5. in the drop-down box next to "Configuration", choose, "All Configurations"
|
||||
6. in the drop-down box next to "Platform", choose, "All Platforms"
|
||||
7. in the left-hand list, click on "C/C++"
|
||||
8. change the setting for "Consume Windows Runtime Extension" to "Yes (/ZW)".
|
||||
9. click the OK button. This will close the dialog.
|
||||
|
||||
**NOTE: C++/CX compilation is currently required in at least one file of your
|
||||
app's project. This is to make sure that Visual C++'s linker builds a 'Windows
|
||||
Metadata' file (.winmd) for your app. Not doing so can lead to build errors.**
|
||||
|
||||
For non-C++ projects, you will need to call SDL_RunApp from your language's
|
||||
main function, and generate SDL3-WinRTResources.res manually by using `rc` via
|
||||
the Developer Command Prompt and including it as a <Win32Resource> within the
|
||||
first <PropertyGroup> block in your Visual Studio project file.
|
||||
|
||||
### 6. Add app code and assets ###
|
||||
|
||||
At this point, you can add in SDL-specific source code. Be sure to include a
|
||||
C-style main function (ie: `int main(int argc, char *argv[])`). From there you
|
||||
should be able to create a single `SDL_Window` (WinRT apps can only have one
|
||||
window, at present), as well as an `SDL_Renderer`. Direct3D will be used to
|
||||
draw content. Events are received via SDL's usual event functions
|
||||
(`SDL_PollEvent`, etc.) If you have a set of existing source files and assets,
|
||||
you can start adding them to the project now. If not, or if you would like to
|
||||
make sure that you're setup correctly, some short and simple sample code is
|
||||
provided below.
|
||||
|
||||
|
||||
#### 6.A. ... when creating a new app ####
|
||||
|
||||
If you are creating a new app (rather than porting an existing SDL-based app),
|
||||
or if you would just like a simple app to test SDL/WinRT with before trying to
|
||||
get existing code working, some working SDL/WinRT code is provided below. To
|
||||
set this up:
|
||||
|
||||
1. right click on your app's project
|
||||
2. select Add, then New Item. An "Add New Item" dialog will show up.
|
||||
3. from the left-hand list, choose "Visual C++"
|
||||
4. from the middle/main list, choose "C++ File (.cpp)"
|
||||
5. near the bottom of the dialog, next to "Name:", type in a name for your
|
||||
source file, such as, "main.cpp".
|
||||
6. click on the Add button. This will close the dialog, add the new file to
|
||||
your project, and open the file in Visual C++'s text editor.
|
||||
7. Copy and paste the following code into the new file, then save it.
|
||||
|
||||
```c
|
||||
#include <SDL3/SDL.h>
|
||||
#include <SDL3/SDL_main.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
SDL_Window *window = NULL;
|
||||
SDL_Renderer *renderer = NULL;
|
||||
SDL_Event evt;
|
||||
SDL_bool keep_going = SDL_TRUE;
|
||||
|
||||
if (!SDL_Init(SDL_INIT_VIDEO)) {
|
||||
return 1;
|
||||
} else if (!SDL_CreateWindowAndRenderer("Hello SDL", 0, 0, SDL_WINDOW_FULLSCREEN, &window, &renderer)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (keep_going) {
|
||||
while (SDL_PollEvent(&evt)) {
|
||||
if ((evt.type == SDL_EVENT_KEY_DOWN) && (evt.key.keysym.sym == SDLK_ESCAPE)) {
|
||||
keep_going = SDL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
|
||||
SDL_RenderClear(renderer);
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
#### 6.B. Adding code and assets ####
|
||||
|
||||
If you have existing code and assets that you'd like to add, you should be able
|
||||
to add them now. The process for adding a set of files is as such.
|
||||
|
||||
1. right click on the app's project
|
||||
2. select Add, then click on "New Item..."
|
||||
3. open any source, header, or asset files as appropriate. Support for C and
|
||||
C++ is available.
|
||||
|
||||
Do note that WinRT only supports a subset of the APIs that are available to
|
||||
Win32-based apps. Many portions of the Win32 API and the C runtime are not
|
||||
available.
|
||||
|
||||
A list of unsupported C APIs can be found at
|
||||
<http://msdn.microsoft.com/en-us/library/windows/apps/jj606124.aspx>
|
||||
|
||||
General information on using the C runtime in WinRT can be found at
|
||||
<https://msdn.microsoft.com/en-us/library/hh972425.aspx>
|
||||
|
||||
A list of supported Win32 APIs for WinRT apps can be found at
|
||||
<http://msdn.microsoft.com/en-us/library/windows/apps/br205757.aspx>. To note,
|
||||
the list of supported Win32 APIs for Windows Phone 8.0 is different.
|
||||
That list can be found at
|
||||
<http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662956(v=vs.105).aspx>
|
||||
|
||||
|
||||
### 7. Build and run your app ###
|
||||
|
||||
Your app project should now be setup, and you should be ready to build your app.
|
||||
To run it on the local machine, open the Debug menu and choose "Start
|
||||
Debugging". This will build your app, then run your app full-screen. To switch
|
||||
out of your app, press the Windows key. Alternatively, you can choose to run
|
||||
your app in a window. To do this, before building and running your app, find
|
||||
the drop-down menu in Visual C++'s toolbar that says, "Local Machine". Expand
|
||||
this by clicking on the arrow on the right side of the list, then click on
|
||||
Simulator. Once you do that, any time you build and run the app, the app will
|
||||
launch in window, rather than full-screen.
|
||||
|
||||
|
||||
#### 7.A. Running apps on older, ARM-based, "Windows RT" devices ####
|
||||
|
||||
**These instructions do not include Windows Phone, despite Windows Phone
|
||||
typically running on ARM processors.** They are specifically for devices
|
||||
that use the "Windows RT" operating system, which was a modified version of
|
||||
Windows 8.x that ran primarily on ARM-based tablet computers.
|
||||
|
||||
To build and run the app on ARM-based, "Windows RT" devices, you'll need to:
|
||||
|
||||
- install Microsoft's "Remote Debugger" on the device. Visual C++ installs and
|
||||
debugs ARM-based apps via IP networks.
|
||||
- change a few options on the development machine, both to make sure it builds
|
||||
for ARM (rather than x86 or x64), and to make sure it knows how to find the
|
||||
Windows RT device (on the network).
|
||||
|
||||
Microsoft's Remote Debugger can be found at
|
||||
<https://msdn.microsoft.com/en-us/library/hh441469.aspx>. Please note
|
||||
that separate versions of this debugger exist for different versions of Visual
|
||||
C++, one each for MSVC 2015, 2013, and 2012.
|
||||
|
||||
To setup Visual C++ to launch your app on an ARM device:
|
||||
|
||||
1. make sure the Remote Debugger is running on your ARM device, and that it's on
|
||||
the same IP network as your development machine.
|
||||
2. from Visual C++'s toolbar, find a drop-down menu that says, "Win32". Click
|
||||
it, then change the value to "ARM".
|
||||
3. make sure Visual C++ knows the hostname or IP address of the ARM device. To
|
||||
do this:
|
||||
1. open the app project's properties
|
||||
2. select "Debugging"
|
||||
3. next to "Machine Name", enter the hostname or IP address of the ARM
|
||||
device
|
||||
4. if, and only if, you've turned off authentication in the Remote Debugger,
|
||||
then change the setting for "Require Authentication" to No
|
||||
5. click "OK"
|
||||
4. build and run the app (from Visual C++). The first time you do this, a
|
||||
prompt will show up on the ARM device, asking for a Microsoft Account. You
|
||||
do, unfortunately, need to log in here, and will need to follow the
|
||||
subsequent registration steps in order to launch the app. After you do so,
|
||||
if the app didn't already launch, try relaunching it again from within Visual
|
||||
C++.
|
||||
|
||||
|
||||
Troubleshooting
|
||||
---------------
|
||||
|
||||
#### Build fails with message, "error LNK2038: mismatch detected for 'vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker'"
|
||||
|
||||
Try adding the following to your linker flags. In MSVC, this can be done by
|
||||
right-clicking on the app project, navigating to Configuration Properties ->
|
||||
Linker -> Command Line, then adding them to the Additional Options
|
||||
section.
|
||||
|
||||
* For Release builds / MSVC-Configurations, add:
|
||||
|
||||
/nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib
|
||||
|
||||
* For Debug builds / MSVC-Configurations, add:
|
||||
|
||||
/nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib
|
||||
|
||||
|
||||
#### Mouse-motion events fail to get sent, or SDL_GetMouseState() fails to return updated values
|
||||
|
||||
This may be caused by a bug in Windows itself, whereby hiding the mouse
|
||||
cursor can cause mouse-position reporting to fail.
|
||||
|
||||
SDL provides a workaround for this, but it requires that an app links to a
|
||||
set of Win32-style cursor image-resource files. A copy of suitable resource
|
||||
files can be found in `src/main/winrt/`. Adding them to an app's Visual C++
|
||||
project file should be sufficient to get the app to use them.
|
||||
|
||||
|
||||
#### SDL's Visual Studio project file fails to open, with message, "The system can't find the file specified."
|
||||
|
||||
This can be caused for any one of a few reasons, which Visual Studio can
|
||||
report, but won't always do so in an up-front manner.
|
||||
|
||||
To help determine why this error comes up:
|
||||
|
||||
1. open a copy of Visual Studio without opening a project file. This can be
|
||||
accomplished via Windows' Start Menu, among other means.
|
||||
2. show Visual Studio's Output window. This can be done by going to VS'
|
||||
menu bar, then to View, and then to Output.
|
||||
3. try opening the SDL project file directly by going to VS' menu bar, then
|
||||
to File, then to Open, then to Project/Solution. When a File-Open dialog
|
||||
appears, open the SDL project (such as the one in SDL's source code, in its
|
||||
directory, VisualC-WinRT/UWP_VS2015/).
|
||||
4. after attempting to open SDL's Visual Studio project file, additional error
|
||||
information will be output to the Output window.
|
||||
|
||||
If Visual Studio reports (via its Output window) that the project:
|
||||
|
||||
"could not be loaded because it's missing install components. To fix this launch Visual Studio setup with the following selections:
|
||||
Microsoft.VisualStudio.ComponentGroup.UWP.VC"
|
||||
|
||||
... then you will need to re-launch Visual Studio's installer, and make sure that
|
||||
the workflow for "Universal Windows Platform development" is checked, and that its
|
||||
optional component, "C++ Universal Windows Platform tools" is also checked. While
|
||||
you are there, if you are planning on targeting UWP / Windows 10, also make sure
|
||||
that you check the optional component, "Windows 10 SDK (10.0.10240.0)". After
|
||||
making sure these items are checked as-appropriate, install them.
|
||||
|
||||
Once you install these components, try re-launching Visual Studio, and re-opening
|
||||
the SDL project file. If you still get the error dialog, try using the Output
|
||||
window, again, seeing what Visual Studio says about it.
|
||||
|
||||
|
||||
#### Game controllers / joysticks aren't working!
|
||||
|
||||
Windows only permits certain game controllers and joysticks to work within
|
||||
WinRT / UWP apps. Even if a game controller or joystick works in a Win32
|
||||
app, that device is not guaranteed to work inside a WinRT / UWP app.
|
||||
|
||||
According to Microsoft, "Xbox compatible controllers" should work inside
|
||||
UWP apps, potentially with more working in the future. This includes, but
|
||||
may not be limited to, Microsoft-made Xbox controllers and USB adapters.
|
||||
(Source: https://social.msdn.microsoft.com/Forums/en-US/9064838b-e8c3-4c18-8a83-19bf0dfe150d/xinput-fails-to-detect-game-controllers?forum=wpdevelop)
|
||||
|
||||
|
||||
1
external/SDL/docs/README.md
vendored
1
external/SDL/docs/README.md
vendored
@@ -48,7 +48,6 @@ More documentation and FAQs are available online at [the wiki](http://wiki.libsd
|
||||
- [Raspberry Pi](README-raspberrypi.md)
|
||||
- [RISC OS](README-riscos.md)
|
||||
- [Windows GDK](README-gdk.md)
|
||||
- [Windows UWP](README-winrt.md)
|
||||
- [Windows](README-windows.md)
|
||||
|
||||
If you need help with the library, or just want to discuss SDL related
|
||||
|
||||
Reference in New Issue
Block a user