1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/* Copyright (C) 2014 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef INCLUDED_VIDEOMODE
#define INCLUDED_VIDEOMODE
typedef struct SDL_Window SDL_Window;
class CVideoMode
{
public:
CVideoMode();
/**
* Initialise the video mode, for use in an SDL-using application.
*/
bool InitSDL();
/**
* Initialise parts of the video mode, for use in Atlas (which uses
* wxWidgets instead of SDL for GL).
* Currently this just tries to enable S3TC.
*/
bool InitNonSDL();
/**
* Shut down after InitSDL/InitNonSDL, so that they can be used again.
*/
void Shutdown();
/**
* Resize the SDL window and associated graphics stuff to the new size.
*/
bool ResizeWindow(int w, int h);
/**
* Switch to fullscreen or windowed mode.
*/
bool SetFullscreen(bool fullscreen);
/**
* Switch between fullscreen and windowed mode.
*/
bool ToggleFullscreen();
/**
* Update window position, to restore later if necessary (SDL2 only).
*/
void UpdatePosition(int x, int y);
/**
* Update the graphics code to start drawing to the new size.
* This should be called after the GL context has been resized.
* This can also be used when the GL context is managed externally, not via SDL.
*/
static void UpdateRenderer(int w, int h);
int GetXRes();
int GetYRes();
int GetBPP();
int GetDesktopXRes();
int GetDesktopYRes();
int GetDesktopBPP();
int GetDesktopFreq();
SDL_Window* GetWindow();
private:
void ReadConfig();
int GetBestBPP();
bool SetVideoMode(int w, int h, int bpp, bool fullscreen);
void EnableS3TC();
/**
* Remember whether Init has been called. (This isn't used for anything
* important, just for verifying that the callers call our methods in
* the right order.)
*/
bool m_IsInitialised;
SDL_Window* m_Window;
// Initial desktop settings
int m_PreferredW;
int m_PreferredH;
int m_PreferredBPP;
int m_PreferredFreq;
// Config file settings (0 if unspecified)
int m_ConfigW;
int m_ConfigH;
int m_ConfigBPP;
int m_ConfigDisplay;
bool m_ConfigFullscreen;
bool m_ConfigForceS3TCEnable;
// If we're fullscreen, size/position of window when we were last windowed (or the default window
// size/position if we started fullscreen), to support switching back to the old window size/position
int m_WindowedW;
int m_WindowedH;
int m_WindowedX;
int m_WindowedY;
// Whether we're currently being displayed fullscreen
bool m_IsFullscreen;
// The last mode selected
int m_CurrentW;
int m_CurrentH;
int m_CurrentBPP;
};
extern CVideoMode g_VideoMode;
#endif // INCLUDED_VIDEOMODE
|