Ticket #2845: fake_fullscreen_option.diff

File fake_fullscreen_option.diff, 5.7 KB (added by fcxSanya, 8 years ago)
  • binaries/data/config/default.cfg

     
    2626; Enable/disable windowed mode by default. (Use Alt+Enter to toggle in the game.)
    2727windowed = false
    2828
     29; Use 'fake' fullscreen mode (SDL_WINDOW_FULLSCREEN_DESKTOP)
     30; when creating the game window to work around some issues
     31; with true fullscreen mode (SDL_WINDOW_FULLSCREEN).
     32; See details in http://trac.wildfiregames.com/ticket/2845
     33fakefullscreen = true
     34
    2935; Show detailed tooltips (Unit stats)
    3036showdetailedtooltips = false
    3137
  • source/ps/GameSetup/GameSetup.cpp

    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
     
    396396        if (!reentering)
    397397        {
    398398            reentering = true;
    399             g_VideoMode.SetFullscreen(false);
     399            g_VideoMode.SetFullscreen(false, false);
    400400            reentering = false;
    401401        }
    402402    }
  • source/ps/VideoMode.cpp

     
    4949CVideoMode::CVideoMode() :
    5050    m_IsFullscreen(false), m_IsInitialised(false), m_Window(NULL),
    5151    m_PreferredW(0), m_PreferredH(0), m_PreferredBPP(0), m_PreferredFreq(0),
    52     m_ConfigW(0), m_ConfigH(0), m_ConfigBPP(0), m_ConfigFullscreen(false), m_ConfigForceS3TCEnable(true),
     52    m_ConfigW(0), m_ConfigH(0), m_ConfigBPP(0),
     53    m_ConfigFullscreen(false), m_ConfigFakeFullscreen(true), m_ConfigForceS3TCEnable(true),
    5354    m_WindowedW(DEFAULT_WINDOW_W), m_WindowedH(DEFAULT_WINDOW_H), m_WindowedX(0), m_WindowedY(0)
    5455{
    5556    // (m_ConfigFullscreen defaults to false, so users don't get stuck if
     
    6263    CFG_GET_VAL("windowed", windowed);
    6364    m_ConfigFullscreen = !windowed;
    6465
     66    CFG_GET_VAL("fakefullscreen", m_ConfigFakeFullscreen);
     67
    6568    CFG_GET_VAL("xres", m_ConfigW);
    6669    CFG_GET_VAL("yres", m_ConfigH);
    6770    CFG_GET_VAL("bpp", m_ConfigBPP);
     
    6972    CFG_GET_VAL("force_s3tc_enable", m_ConfigForceS3TCEnable);
    7073}
    7174
    72 bool CVideoMode::SetVideoMode(int w, int h, int bpp, bool fullscreen)
     75bool CVideoMode::SetVideoMode(int w, int h, int bpp, bool fullscreen, bool fakeFullscreen)
    7376{
    7477    Uint32 flags = 0;
    7578    if (fullscreen)
    76         flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
     79        flags |= (fakeFullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : SDL_WINDOW_FULLSCREEN);
    7780
    7881    if (!m_Window)
    7982    {
     
    9295                    w, h, bpp, SDL_GetError());
    9396                // Using default size for the window for now, as the attempted setting
    9497                // could be as large, or larger than the screen size.
    95                 return SetVideoMode(DEFAULT_WINDOW_W, DEFAULT_WINDOW_H, bpp, false);   
     98                return SetVideoMode(DEFAULT_WINDOW_W, DEFAULT_WINDOW_H, bpp, false, false);
    9699            }
    97100            else
    98101            {
     
    215218    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
    216219#endif
    217220
    218     if (!SetVideoMode(w, h, bpp, m_ConfigFullscreen))
     221    if (!SetVideoMode(w, h, bpp, m_ConfigFullscreen, m_ConfigFakeFullscreen))
    219222    {
    220223        // Fall back to a smaller depth buffer
    221224        // (The rendering may be ugly but this helps when running in VMware)
    222225        SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
    223226
    224         if (!SetVideoMode(w, h, bpp, m_ConfigFullscreen))
     227        if (!SetVideoMode(w, h, bpp, m_ConfigFullscreen, m_ConfigFakeFullscreen))
    225228            return false;
    226229    }
    227230
     
    320323
    321324    int bpp = GetBestBPP();
    322325
    323     if (!SetVideoMode(w, h, bpp, false))
     326    if (!SetVideoMode(w, h, bpp, false, false))
    324327        return false;
    325328
    326329    m_WindowedW = w;
     
    331334    return true;
    332335}
    333336
    334 bool CVideoMode::SetFullscreen(bool fullscreen)
     337bool CVideoMode::SetFullscreen(bool fullscreen, bool fakeFullscreen)
    335338{
    336339    // This might get called before initialisation by psDisplayError;
    337340    // if so then silently fail
     
    367370
    368371        int bpp = GetBestBPP();
    369372
    370         if (!SetVideoMode(w, h, bpp, fullscreen))
     373        if (!SetVideoMode(w, h, bpp, fullscreen, fakeFullscreen))
    371374            return false;
    372375
    373376        UpdateRenderer(m_CurrentW, m_CurrentH);
     
    383386
    384387        int bpp = GetBestBPP();
    385388
    386         if (!SetVideoMode(w, h, bpp, fullscreen))
     389        if (!SetVideoMode(w, h, bpp, fullscreen, fakeFullscreen))
    387390            return false;
    388391
    389392        UpdateRenderer(w, h);
     
    394397
    395398bool CVideoMode::ToggleFullscreen()
    396399{
    397     return SetFullscreen(!m_IsFullscreen);
     400    return SetFullscreen(!m_IsFullscreen, m_ConfigFakeFullscreen);
    398401}
    399402
    400403void CVideoMode::UpdatePosition(int x, int y)
  • source/ps/VideoMode.h

     
    5050    /**
    5151     * Switch to fullscreen or windowed mode.
    5252     */
    53     bool SetFullscreen(bool fullscreen);
     53    bool SetFullscreen(bool fullscreen, bool fakeFullscreen);
    5454
    5555    /**
    5656     * Switch between fullscreen and windowed mode.
     
    8383private:
    8484    void ReadConfig();
    8585    int GetBestBPP();
    86     bool SetVideoMode(int w, int h, int bpp, bool fullscreen);
     86    bool SetVideoMode(int w, int h, int bpp, bool fullscreen, bool fakeFullscreen);
    8787    void EnableS3TC();
    8888
    8989    /**
     
    107107    int m_ConfigBPP;
    108108    int m_ConfigDisplay;
    109109    bool m_ConfigFullscreen;
     110    bool m_ConfigFakeFullscreen;
    110111    bool m_ConfigForceS3TCEnable;
    111112
    112113    // If we're fullscreen, size/position of window when we were last windowed (or the default window