From 15e337fff804e10f43bbf3ca31db0bcf13a32065 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 12 Nov 2024 23:52:31 -0600 Subject: [PATCH] Only call SDL_NumJoysticks() once per loop It does non-trivial work when using sdl2-compat. --- app/gui/sdlgamepadkeynavigation.cpp | 6 ++++-- app/streaming/input/gamepad.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/gui/sdlgamepadkeynavigation.cpp b/app/gui/sdlgamepadkeynavigation.cpp index c10ae4dd..88693b87 100644 --- a/app/gui/sdlgamepadkeynavigation.cpp +++ b/app/gui/sdlgamepadkeynavigation.cpp @@ -55,7 +55,8 @@ void SdlGamepadKeyNavigation::enable() SDL_FlushEvent(SDL_CONTROLLERDEVICEADDED); // Open all currently attached game controllers - for (int i = 0; i < SDL_NumJoysticks(); i++) { + int numJoysticks = SDL_NumJoysticks(); + for (int i = 0; i < numJoysticks; i++) { if (SDL_IsGameController(i)) { SDL_GameController* gc = SDL_GameControllerOpen(i); if (gc != nullptr) { @@ -289,7 +290,8 @@ int SdlGamepadKeyNavigation::getConnectedGamepads() Q_ASSERT(m_Enabled); int count = 0; - for (int i = 0; i < SDL_NumJoysticks(); i++) { + int numJoysticks = SDL_NumJoysticks(); + for (int i = 0; i < numJoysticks; i++) { if (SDL_IsGameController(i)) { count++; } diff --git a/app/streaming/input/gamepad.cpp b/app/streaming/input/gamepad.cpp index 502511f8..131ec193 100644 --- a/app/streaming/input/gamepad.cpp +++ b/app/streaming/input/gamepad.cpp @@ -913,7 +913,8 @@ QString SdlInputHandler::getUnmappedGamepads() MappingManager mappingManager; mappingManager.applyMappings(); - for (int i = 0; i < SDL_NumJoysticks(); i++) { + int numJoysticks = SDL_NumJoysticks(); + for (int i = 0; i < numJoysticks; i++) { if (!SDL_IsGameController(i)) { char guidStr[33]; SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(i), @@ -973,7 +974,8 @@ int SdlInputHandler::getAttachedGamepadMask() } count = mask = 0; - for (int i = 0; i < SDL_NumJoysticks(); i++) { + int numJoysticks = SDL_NumJoysticks(); + for (int i = 0; i < numJoysticks; i++) { if (SDL_IsGameController(i)) { char guidStr[33]; SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(i),