From 91ce7a41e5becf8406b9c635ecacb96d19f44570 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 28 Mar 2026 21:57:51 -0500 Subject: [PATCH] Cache the result of SDL_GetNumDisplayModes() It's not free when using SDL2-compat. --- app/backend/systemproperties.cpp | 3 ++- app/streaming/session.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/backend/systemproperties.cpp b/app/backend/systemproperties.cpp index 2b72fb87..1140c93e 100644 --- a/app/backend/systemproperties.cpp +++ b/app/backend/systemproperties.cpp @@ -244,7 +244,8 @@ void SystemProperties::refreshDisplays() // Start at desktop mode and work our way up bestMode = desktopMode; - for (int i = 0; i < SDL_GetNumDisplayModes(displayIndex); i++) { + int numDisplayModes = SDL_GetNumDisplayModes(displayIndex); + for (int i = 0; i < numDisplayModes; i++) { SDL_DisplayMode mode; if (SDL_GetDisplayMode(displayIndex, i, &mode) == 0) { if (mode.w == desktopMode.w && mode.h == desktopMode.h) { diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index bac58ed5..4952b600 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -1423,7 +1423,8 @@ void Session::updateOptimalWindowDisplayMode() if (!matchVideo) { // Start with the native desktop resolution and try to find // the highest refresh rate that our stream FPS evenly divides. - for (int i = 0; i < SDL_GetNumDisplayModes(displayIndex); i++) { + int numDisplayModes = SDL_GetNumDisplayModes(displayIndex); + for (int i = 0; i < numDisplayModes; i++) { if (SDL_GetDisplayMode(displayIndex, i, &mode) == 0) { if (mode.w == desktopMode.w && mode.h == desktopMode.h && mode.refresh_rate % m_StreamConfig.fps == 0) { @@ -1446,7 +1447,8 @@ void Session::updateOptimalWindowDisplayMode() if (bestMode.refresh_rate == 0) { float bestModeAspectRatio = 0; float videoAspectRatio = (float)m_ActiveVideoWidth / (float)m_ActiveVideoHeight; - for (int i = 0; i < SDL_GetNumDisplayModes(displayIndex); i++) { + int numDisplayModes = SDL_GetNumDisplayModes(displayIndex); + for (int i = 0; i < numDisplayModes; i++) { if (SDL_GetDisplayMode(displayIndex, i, &mode) == 0) { float modeAspectRatio = (float)mode.w / (float)mode.h; if (mode.w >= m_ActiveVideoWidth && mode.h >= m_ActiveVideoHeight &&