From 302ba934716b1de58138fb0def791ef60012dff0 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 14 Jan 2024 23:25:54 +0100 Subject: [PATCH] Fix: [SDL2] only resolutions of the first display were shown (#11778) --- src/gfx.cpp | 4 ++++ src/video/sdl2_v.cpp | 14 ++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index 64b10844b8..3953e7497e 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1779,6 +1779,10 @@ bool ToggleFullScreen(bool fs) void SortResolutions() { std::sort(_resolutions.begin(), _resolutions.end()); + + /* Remove any duplicates from the list. */ + auto last = std::unique(_resolutions.begin(), _resolutions.end()); + _resolutions.erase(last, _resolutions.end()); } /** diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 183b8354c1..41fc5e99ec 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -59,13 +59,15 @@ static void FindResolutions() { _resolutions.clear(); - for (int i = 0; i < SDL_GetNumDisplayModes(0); i++) { - SDL_DisplayMode mode; - SDL_GetDisplayMode(0, i, &mode); + for (int display = 0; display < SDL_GetNumVideoDisplays(); display++) { + for (int i = 0; i < SDL_GetNumDisplayModes(display); i++) { + SDL_DisplayMode mode; + SDL_GetDisplayMode(display, i, &mode); - if (mode.w < 640 || mode.h < 480) continue; - if (std::find(_resolutions.begin(), _resolutions.end(), Dimension(mode.w, mode.h)) != _resolutions.end()) continue; - _resolutions.emplace_back(mode.w, mode.h); + if (mode.w < 640 || mode.h < 480) continue; + if (std::find(_resolutions.begin(), _resolutions.end(), Dimension(mode.w, mode.h)) != _resolutions.end()) continue; + _resolutions.emplace_back(mode.w, mode.h); + } } /* We have found no resolutions, show the default list */