From fa72b5a298881e57c25298e3cbf32549e05d2376 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 27 May 2026 14:10:33 +0000 Subject: [PATCH] Revert "fix/sdl3-gamepad-bugs (#19)" (#116) This reverts commit 7f0e82fe481ce9c2cb6eb57e63171421254d2c6b. Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/116 --- src/Ryujinx.Input.SDL3/SDL3Gamepad.cs | 4 +--- src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs | 26 ++++++++++++++------- src/Ryujinx.Input/HLE/NpadController.cs | 11 +++++---- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/Ryujinx.Input.SDL3/SDL3Gamepad.cs b/src/Ryujinx.Input.SDL3/SDL3Gamepad.cs index 421e9beff..47ef0b59f 100644 --- a/src/Ryujinx.Input.SDL3/SDL3Gamepad.cs +++ b/src/Ryujinx.Input.SDL3/SDL3Gamepad.cs @@ -155,9 +155,7 @@ namespace Ryujinx.Input.SDL3 result |= GamepadFeaturesFlag.Led; } SDL_UnlockProperties(propID); - - // NOTE: Do not call SDL_DestroyProperties here. These properties are owned - // internally by SDL and are freed when SDL_CloseGamepad is called (in Dispose). + SDL_DestroyProperties(propID); return result; } diff --git a/src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs b/src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs index 0e2a63579..897966689 100644 --- a/src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs +++ b/src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs @@ -331,18 +331,28 @@ namespace Ryujinx.Input.SDL3 public IEnumerable GetGamepads() { - string[] ids; - lock (_lock) + lock (_gamepadsIds) { - ids = _gamepadsIds.Values - .Concat(_joyConsIds.Values) - .Concat(_linkedJoyConsIds.Values) - .ToArray(); + foreach (var gamepad in _gamepadsIds) + { + yield return GetGamepad(gamepad.Value); + } } - foreach (string id in ids) + lock (_joyConsIds) { - yield return GetGamepad(id); + foreach (var gamepad in _joyConsIds) + { + yield return GetGamepad(gamepad.Value); + } + } + + lock (_linkedJoyConsIds) + { + foreach (var gamepad in _linkedJoyConsIds) + { + yield return GetGamepad(gamepad.Value); + } } } } diff --git a/src/Ryujinx.Input/HLE/NpadController.cs b/src/Ryujinx.Input/HLE/NpadController.cs index ee34e9eb8..75e04ae40 100644 --- a/src/Ryujinx.Input/HLE/NpadController.cs +++ b/src/Ryujinx.Input/HLE/NpadController.cs @@ -561,24 +561,25 @@ namespace Ryujinx.Input.HLE !controllerConfig.Rumble.EnableRumble) { return; + } - + VibrationValue leftVibrationValue = dualVibrationValue.Item1; VibrationValue rightVibrationValue = dualVibrationValue.Item2; - + leftVibrationValue.AmplitudeLow *= controllerConfig.Rumble.WeakRumble; leftVibrationValue.AmplitudeHigh *= controllerConfig.Rumble.StrongRumble; rightVibrationValue.AmplitudeLow *= controllerConfig.Rumble.WeakRumble; rightVibrationValue.AmplitudeHigh *= controllerConfig.Rumble.StrongRumble; - + if (!controllerConfig.Rumble.UseHDRumble || _gamepad?.HDRumble(leftVibrationValue, rightVibrationValue) == false) { float low = Math.Min(1f, (float)((rightVibrationValue.AmplitudeLow * 0.85 + rightVibrationValue.AmplitudeHigh * 0.15))); float high = Math.Min(1f, (float)((leftVibrationValue.AmplitudeLow * 0.15 + leftVibrationValue.AmplitudeHigh * 0.85))); _gamepad?.Rumble(low, high, 0xFFFFFFFF); } - - Logger.Debug?.Print(LogClass.Hid, $"Effect for {controllerConfig.PlayerIndex} " + + + Logger.Debug?.Print(LogClass.Hid, $"Effect for {controllerConfig.PlayerIndex} " + // Value=value/multiplier * multiplier (result) $"L.low.amp={leftVibrationValue.AmplitudeLow / controllerConfig.Rumble.WeakRumble} * {controllerConfig.Rumble.WeakRumble} ({leftVibrationValue.AmplitudeLow}), " + $"L.high.amp={leftVibrationValue.AmplitudeHigh / controllerConfig.Rumble.WeakRumble} * {controllerConfig.Rumble.WeakRumble} ({leftVibrationValue.AmplitudeHigh}), " +