From 24923615b7b381a10b5c734790d7bf8b02a144cd Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sat, 20 Sep 2014 19:16:08 -0500 Subject: [PATCH] Don't add duplicate resolutions to r_availableModes SDL can give the same resolution with different refresh rates. The refresh rate isn't used, so only add resolution to mode list once. --- code/sdl/sdl_glimp.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index 1402031f..1f12fb72 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -128,7 +128,7 @@ GLimp_DetectAvailableModes */ static void GLimp_DetectAvailableModes(void) { - int i; + int i, j; char buf[ MAX_STRING_CHARS ] = { 0 }; SDL_Rect modes[ 128 ]; int numModes = 0; @@ -158,6 +158,17 @@ static void GLimp_DetectAvailableModes(void) if( windowMode.format != mode.format ) continue; + // SDL can give the same resolution with different refresh rates. + // Only list resolution once. + for( j = 0; j < numModes; j++ ) + { + if( mode.w == modes[ j ].w && mode.h == modes[ j ].h ) + break; + } + + if( j != numModes ) + continue; + modes[ numModes ].w = mode.w; modes[ numModes ].h = mode.h; numModes++; @@ -173,7 +184,7 @@ static void GLimp_DetectAvailableModes(void) if( strlen( newModeString ) < (int)sizeof( buf ) - strlen( buf ) ) Q_strcat( buf, sizeof( buf ), newModeString ); else - ri.Printf( PRINT_WARNING, "Skipping mode %ux%x, buffer too small\n", modes[ i ].w, modes[ i ].h ); + ri.Printf( PRINT_WARNING, "Skipping mode %ux%u, buffer too small\n", modes[ i ].w, modes[ i ].h ); } if( *buf )