diff --git a/src/sdl2/i_video.c b/src/sdl2/i_video.c
index 43485540faa914d46dccc03ca299d78375924dbc..3a23d5f0d03ad4bcab3d031880b69c02eaa60f65 100644
--- a/src/sdl2/i_video.c
+++ b/src/sdl2/i_video.c
@@ -185,14 +185,6 @@ static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen)
 		{
 			wasfullscreen = SDL_TRUE;
 			SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
-			// Logical fullscreen is not implemented yet for OpenGL, so...
-			// Special case handling
-			if (rendermode == render_opengl)
-			{
-				int sdlw, sdlh;
-				SDL_GetWindowSize(window, &sdlw, &sdlh);
-				VID_SetMode(VID_GetModeForSize(sdlw, sdlh));
-			}
 		}
 		else if (!fullscreen && wasfullscreen)
 		{
@@ -217,6 +209,15 @@ static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen)
 
 	if (rendermode == render_opengl)
 	{
+		int sdlw, sdlh;
+		SDL_GetWindowSize(window, &sdlw, &sdlh);
+		// Logical fullscreen is not implemented yet for OpenGL, so...
+		// Special case handling
+		if (USE_FULLSCREEN && width != sdlw && height != sdlh)
+		{
+			VID_SetMode(VID_GetModeForSize(sdlw, sdlh));
+			return;
+		}
 		OglSdlSurface(vid.width, vid.height);
 	}