GRIM: Take adventage of kFeatureFullscreenToggleKeepsContext
This commit is contained in:
parent
be5a139ce5
commit
f4e3bd0424
7 changed files with 19 additions and 20 deletions
|
@ -48,7 +48,7 @@ namespace Grim {
|
||||||
GfxBase::GfxBase() :
|
GfxBase::GfxBase() :
|
||||||
_renderBitmaps(true), _renderZBitmaps(true), _shadowModeActive(false),
|
_renderBitmaps(true), _renderZBitmaps(true), _shadowModeActive(false),
|
||||||
_currentPos(0, 0, 0), _dimLevel(0.0f),
|
_currentPos(0, 0, 0), _dimLevel(0.0f),
|
||||||
_screenWidth(0), _screenHeight(0), _isFullscreen(false),
|
_screenWidth(0), _screenHeight(0),
|
||||||
_scaleW(1.0f), _scaleH(1.0f), _currentShadowArray(nullptr),
|
_scaleW(1.0f), _scaleH(1.0f), _currentShadowArray(nullptr),
|
||||||
_shadowColorR(255), _shadowColorG(255), _shadowColorB(255) {
|
_shadowColorR(255), _shadowColorG(255), _shadowColorB(255) {
|
||||||
for (unsigned int i = 0; i < _numSpecialtyTextures; i++) {
|
for (unsigned int i = 0; i < _numSpecialtyTextures; i++) {
|
||||||
|
|
|
@ -93,12 +93,7 @@ public:
|
||||||
* @return true if supports shaders, false otherwise
|
* @return true if supports shaders, false otherwise
|
||||||
*/
|
*/
|
||||||
virtual bool supportsShaders() = 0;
|
virtual bool supportsShaders() = 0;
|
||||||
/**
|
|
||||||
* Query whether the current context is fullscreen.
|
|
||||||
*
|
|
||||||
* @return true if fullscreen, false otherwise
|
|
||||||
*/
|
|
||||||
virtual bool isFullscreen() { return _isFullscreen; }
|
|
||||||
virtual uint getScreenWidth() { return _screenWidth; }
|
virtual uint getScreenWidth() { return _screenWidth; }
|
||||||
virtual uint getScreenHeight() { return _screenHeight; }
|
virtual uint getScreenHeight() { return _screenHeight; }
|
||||||
|
|
||||||
|
@ -285,7 +280,6 @@ protected:
|
||||||
static const int _gameWidth = 640;
|
static const int _gameWidth = 640;
|
||||||
float _scaleW, _scaleH;
|
float _scaleW, _scaleH;
|
||||||
int _screenWidth, _screenHeight;
|
int _screenWidth, _screenHeight;
|
||||||
bool _isFullscreen;
|
|
||||||
Shadow *_currentShadowArray;
|
Shadow *_currentShadowArray;
|
||||||
unsigned char _shadowColorR;
|
unsigned char _shadowColorR;
|
||||||
unsigned char _shadowColorG;
|
unsigned char _shadowColorG;
|
||||||
|
|
|
@ -134,7 +134,6 @@ byte *GfxOpenGL::setupScreen(int screenW, int screenH, bool fullscreen) {
|
||||||
_scaleW = _screenWidth / (float)_gameWidth;
|
_scaleW = _screenWidth / (float)_gameWidth;
|
||||||
_scaleH = _screenHeight / (float)_gameHeight;
|
_scaleH = _screenHeight / (float)_gameHeight;
|
||||||
|
|
||||||
_isFullscreen = g_system->getFeatureState(OSystem::kFeatureFullscreenMode);
|
|
||||||
_useDepthShader = false;
|
_useDepthShader = false;
|
||||||
_useDimShader = false;
|
_useDimShader = false;
|
||||||
|
|
||||||
|
|
|
@ -411,7 +411,6 @@ byte *GfxOpenGLS::setupScreen(int screenW, int screenH, bool fullscreen) {
|
||||||
_scaleW = _screenWidth / (float)_gameWidth;
|
_scaleW = _screenWidth / (float)_gameWidth;
|
||||||
_scaleH = _screenHeight / (float)_gameHeight;
|
_scaleH = _screenHeight / (float)_gameHeight;
|
||||||
|
|
||||||
_isFullscreen = g_system->getFeatureState(OSystem::kFeatureFullscreenMode);
|
|
||||||
#ifdef USE_GLES2
|
#ifdef USE_GLES2
|
||||||
g_system->setFeatureState(OSystem::kFeatureVirtControls, true);
|
g_system->setFeatureState(OSystem::kFeatureVirtControls, true);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -86,8 +86,6 @@ byte *GfxTinyGL::setupScreen(int screenW, int screenH, bool fullscreen) {
|
||||||
_scaleW = _screenWidth / (float)_gameWidth;
|
_scaleW = _screenWidth / (float)_gameWidth;
|
||||||
_scaleH = _screenHeight / (float)_gameHeight;
|
_scaleH = _screenHeight / (float)_gameHeight;
|
||||||
|
|
||||||
_isFullscreen = g_system->getFeatureState(OSystem::kFeatureFullscreenMode);
|
|
||||||
|
|
||||||
g_system->showMouse(!fullscreen);
|
g_system->showMouse(!fullscreen);
|
||||||
|
|
||||||
g_system->setWindowCaption("ResidualVM: Software 3D Renderer");
|
g_system->setWindowCaption("ResidualVM: Software 3D Renderer");
|
||||||
|
|
|
@ -232,12 +232,11 @@ LuaBase *GrimEngine::createLua() {
|
||||||
return new Lua_V1();
|
return new Lua_V1();
|
||||||
}
|
}
|
||||||
|
|
||||||
GfxBase *GrimEngine::createRenderer(int screenW, int screenH) {
|
GfxBase *GrimEngine::createRenderer(int screenW, int screenH, bool fullscreen) {
|
||||||
Common::String rendererConfig = ConfMan.get("renderer");
|
Common::String rendererConfig = ConfMan.get("renderer");
|
||||||
Graphics::RendererType desiredRendererType = Graphics::parseRendererTypeCode(rendererConfig);
|
Graphics::RendererType desiredRendererType = Graphics::parseRendererTypeCode(rendererConfig);
|
||||||
Graphics::RendererType matchingRendererType = Graphics::getBestMatchingAvailableRendererType(desiredRendererType);
|
Graphics::RendererType matchingRendererType = Graphics::getBestMatchingAvailableRendererType(desiredRendererType);
|
||||||
|
|
||||||
bool fullscreen = ConfMan.getBool("fullscreen");
|
|
||||||
_softRenderer = matchingRendererType == Graphics::kRendererTypeTinyGL;
|
_softRenderer = matchingRendererType == Graphics::kRendererTypeTinyGL;
|
||||||
_system->setupScreen(screenW, screenH, fullscreen, !_softRenderer);
|
_system->setupScreen(screenW, screenH, fullscreen, !_softRenderer);
|
||||||
|
|
||||||
|
@ -346,7 +345,8 @@ Common::Error GrimEngine::run() {
|
||||||
}
|
}
|
||||||
g_sound = new SoundPlayer();
|
g_sound = new SoundPlayer();
|
||||||
|
|
||||||
g_driver = createRenderer(640, 480);
|
bool fullscreen = ConfMan.getBool("fullscreen");
|
||||||
|
g_driver = createRenderer(640, 480, fullscreen);
|
||||||
|
|
||||||
if (getGameType() == GType_MONKEY4 && SearchMan.hasFile("AMWI.m4b")) {
|
if (getGameType() == GType_MONKEY4 && SearchMan.hasFile("AMWI.m4b")) {
|
||||||
// Play EMI Mac Aspyr logo
|
// Play EMI Mac Aspyr logo
|
||||||
|
@ -772,15 +772,24 @@ void GrimEngine::mainLoop() {
|
||||||
savegameSave();
|
savegameSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the backend can keep the OpenGL context when switching to fullscreen,
|
||||||
|
// just toggle the fullscreen feature (SDL2 path).
|
||||||
|
if (_changeFullscreenState &&
|
||||||
|
_system->hasFeature(OSystem::kFeatureFullscreenToggleKeepsContext)) {
|
||||||
|
bool fullscreen = _system->getFeatureState(OSystem::kFeatureFullscreenMode);
|
||||||
|
_system->setFeatureState(OSystem::kFeatureFullscreenMode, !fullscreen);
|
||||||
|
_changeFullscreenState = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the backend destroys the OpenGL context or the user switched to a different
|
||||||
|
// renderer, the GFX driver needs to be recreated (SDL1 path).
|
||||||
if (_changeHardwareState || _changeFullscreenState) {
|
if (_changeHardwareState || _changeFullscreenState) {
|
||||||
_changeHardwareState = false;
|
_changeHardwareState = false;
|
||||||
|
|
||||||
bool fullscreen = g_driver->isFullscreen();
|
bool fullscreen = _system->getFeatureState(OSystem::kFeatureFullscreenMode);
|
||||||
if (_changeFullscreenState) {
|
if (_changeFullscreenState) {
|
||||||
fullscreen = !fullscreen;
|
fullscreen = !fullscreen;
|
||||||
}
|
}
|
||||||
g_system->setFeatureState(OSystem::kFeatureFullscreenMode, fullscreen);
|
|
||||||
ConfMan.setBool("fullscreen", fullscreen);
|
|
||||||
|
|
||||||
uint screenWidth = g_driver->getScreenWidth();
|
uint screenWidth = g_driver->getScreenWidth();
|
||||||
uint screenHeight = g_driver->getScreenHeight();
|
uint screenHeight = g_driver->getScreenHeight();
|
||||||
|
@ -792,7 +801,7 @@ void GrimEngine::mainLoop() {
|
||||||
clearPools();
|
clearPools();
|
||||||
|
|
||||||
delete g_driver;
|
delete g_driver;
|
||||||
g_driver = createRenderer(screenWidth, screenHeight);
|
g_driver = createRenderer(screenWidth, screenHeight, fullscreen);
|
||||||
savegameRestore();
|
savegameRestore();
|
||||||
|
|
||||||
if (mode == DrawMode) {
|
if (mode == DrawMode) {
|
||||||
|
|
|
@ -197,7 +197,7 @@ protected:
|
||||||
void cameraPostChangeHandle(int num);
|
void cameraPostChangeHandle(int num);
|
||||||
void buildActiveActorsList();
|
void buildActiveActorsList();
|
||||||
void savegameCallback();
|
void savegameCallback();
|
||||||
GfxBase *createRenderer(int screenW, int screenH);
|
GfxBase *createRenderer(int screenW, int screenH, bool fullscreen);
|
||||||
void playAspyrLogo();
|
void playAspyrLogo();
|
||||||
virtual LuaBase *createLua();
|
virtual LuaBase *createLua();
|
||||||
virtual void updateNormalMode();
|
virtual void updateNormalMode();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue