~armagetronad-dev/armagetronad/0.4-armagetronad-sdl2

« back to all changes in this revision

Viewing changes to src/render/rScreen.cpp

  • Committer: Manuel Moos
  • Date: 2015-03-26 21:32:42 UTC
  • Revision ID: z-man@users.sf.net-20150326213242-hxouij3rkoxieheu
Screen mode init error checking. Hmm. The thing now flickers on startup. Order of operations needs improvement.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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)
735
735
    {
 
736
        bool fullscreenSuccess = false;
 
737
 
736
738
        SDL_SetWindowFullscreen(sr_screen, 0);
737
 
        // if desktop resolution was selected, pick it
738
 
        if ( sr_screenWidth + sr_screenHeight == 0 ) 
739
 
        {
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);
744
 
        } 
745
 
        else 
746
 
        {
747
 
            // set the display mode
 
739
 
 
740
        if ( sr_screenWidth + sr_screenHeight > 0 ) 
 
741
        {
 
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);
755
750
            if(closest)
756
751
            {
 
752
                // set the display mode
757
753
                sr_screenWidth = closest->w;
758
754
                sr_screenHeight = closest->h;
759
755
 
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))
 
757
                {
 
758
                    SDL_SetWindowSize(sr_screen, sr_screenWidth, sr_screenHeight);
 
759
                    fullscreenSuccess = (0 == SDL_SetWindowFullscreen(sr_screen, SDL_WINDOW_FULLSCREEN));
 
760
                }
764
761
            }
765
 
            else
 
762
 
 
763
            if(!fullscreenSuccess)
766
764
            {
767
 
                currentScreensetting.fullscreen = false;
768
 
 
769
 
                sr_screenWidth  = currentScreensetting.windowSize.width;
770
 
                sr_screenHeight = currentScreensetting.windowSize.height;
 
765
                lastError.Clear();
 
766
                lastError << "Couldn't set video mode: ";
 
767
                lastError << SDL_GetError();
 
768
                std::cerr << lastError << '\n';
771
769
            }
772
770
        }
 
771
 
 
772
        // if desktop resolution was selected or custom mode setting failed, pick desktop mode
 
773
        if(!fullscreenSuccess)
 
774
        {
 
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));
 
779
        } 
 
780
 
 
781
        if(fullscreenSuccess)
 
782
        {
 
783
            SDL_SetRelativeMouseMode(SDL_TRUE);
 
784
        }
 
785
        else
 
786
        {
 
787
            lastError.Clear();
 
788
            lastError << "Couldn't set desktop video mode: ";
 
789
            lastError << SDL_GetError();
 
790
            std::cerr << lastError << '\n';
 
791
 
 
792
            currentScreensetting.fullscreen = false;
 
793
            
 
794
            sr_screenWidth  = currentScreensetting.windowSize.width;
 
795
            sr_screenHeight = currentScreensetting.windowSize.height;
 
796
        }
773
797
    }
774
798
    if (!currentScreensetting.fullscreen)
775
799
    {
783
807
        else
784
808
        {
785
809
            lastError.Clear();
786
 
            lastError << "Couldn't set video mode: ";
 
810
            lastError << "Couldn't set windowed mode: ";
787
811
            lastError << SDL_GetError();
788
812
            std::cerr << lastError << '\n';
789
813
            return false;