733
733
// SDL2 can resize window or toggle fullscreen without recreating a new window and therefore keeping existing GL context.
734
734
if (currentScreensetting.fullscreen)
736
bool fullscreenSuccess = false;
736
738
SDL_SetWindowFullscreen(sr_screen, 0);
737
// if desktop resolution was selected, pick it
738
if ( sr_screenWidth + sr_screenHeight == 0 )
740
sr_screenWidth = sr_desktopWidth;
741
sr_screenHeight = sr_desktopHeight;
742
SDL_SetWindowSize(sr_screen, sr_screenWidth, sr_screenHeight);
743
SDL_SetWindowFullscreen(sr_screen, SDL_WINDOW_FULLSCREEN_DESKTOP);
747
// set the display mode
740
if ( sr_screenWidth + sr_screenHeight > 0 )
742
// find best display mode
748
743
SDL_DisplayMode desiredMode, mode;
749
744
desiredMode.format = 0;
750
745
desiredMode.w = sr_screenWidth;
754
749
SDL_DisplayMode *closest = SDL_GetClosestDisplayMode(currentScreensetting.displayIndex, &desiredMode, &mode);
752
// set the display mode
757
753
sr_screenWidth = closest->w;
758
754
sr_screenHeight = closest->h;
760
SDL_SetWindowDisplayMode(sr_screen, closest);
761
SDL_SetWindowSize(sr_screen, sr_screenWidth, sr_screenHeight);
762
SDL_SetWindowFullscreen(sr_screen, SDL_WINDOW_FULLSCREEN);
763
SDL_SetRelativeMouseMode(SDL_TRUE);
756
if(0 == SDL_SetWindowDisplayMode(sr_screen, closest))
758
SDL_SetWindowSize(sr_screen, sr_screenWidth, sr_screenHeight);
759
fullscreenSuccess = (0 == SDL_SetWindowFullscreen(sr_screen, SDL_WINDOW_FULLSCREEN));
763
if(!fullscreenSuccess)
767
currentScreensetting.fullscreen = false;
769
sr_screenWidth = currentScreensetting.windowSize.width;
770
sr_screenHeight = currentScreensetting.windowSize.height;
766
lastError << "Couldn't set video mode: ";
767
lastError << SDL_GetError();
768
std::cerr << lastError << '\n';
772
// if desktop resolution was selected or custom mode setting failed, pick desktop mode
773
if(!fullscreenSuccess)
775
sr_screenWidth = sr_desktopWidth;
776
sr_screenHeight = sr_desktopHeight;
777
SDL_SetWindowSize(sr_screen, sr_screenWidth, sr_screenHeight);
778
fullscreenSuccess = (0 == SDL_SetWindowFullscreen(sr_screen, SDL_WINDOW_FULLSCREEN_DESKTOP));
781
if(fullscreenSuccess)
783
SDL_SetRelativeMouseMode(SDL_TRUE);
788
lastError << "Couldn't set desktop video mode: ";
789
lastError << SDL_GetError();
790
std::cerr << lastError << '\n';
792
currentScreensetting.fullscreen = false;
794
sr_screenWidth = currentScreensetting.windowSize.width;
795
sr_screenHeight = currentScreensetting.windowSize.height;
774
798
if (!currentScreensetting.fullscreen)