diff options
author | Alejandro Marzini | 2010-08-13 04:48:58 +0000 |
---|---|---|
committer | Alejandro Marzini | 2010-08-13 04:48:58 +0000 |
commit | a3711160ef531a73b55c7f6ddb7548f44c843bec (patch) | |
tree | a746eb88fe936e058b311a803745f3dd11ff2661 /backends/graphics/opengl/opengl-graphics.cpp | |
parent | e18c9a189006108a33d5e32ae20ce2fa1bebaf7d (diff) | |
download | scummvm-rg350-a3711160ef531a73b55c7f6ddb7548f44c843bec.tar.gz scummvm-rg350-a3711160ef531a73b55c7f6ddb7548f44c843bec.tar.bz2 scummvm-rg350-a3711160ef531a73b55c7f6ddb7548f44c843bec.zip |
OPENGL: Remove unnecessary aspect ratio corrections, and add "Original Size" correction. Rename _transactionDetails.needHotswap to _transactionDetails.needRefresh.
svn-id: r52054
Diffstat (limited to 'backends/graphics/opengl/opengl-graphics.cpp')
-rw-r--r-- | backends/graphics/opengl/opengl-graphics.cpp | 101 |
1 files changed, 33 insertions, 68 deletions
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 0f6c8b648e..f1b6cdd410 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -39,9 +39,6 @@ OpenGLGraphicsManager::OpenGLGraphicsManager() #ifdef USE_OSD _osdTexture(0), _osdAlpha(0), _osdFadeStartTime(0), #endif -#ifndef USE_ALL_ASR - _desiredAspectRatio(kAspectRatio4_3), -#endif _gameTexture(0), _overlayTexture(0), _cursorTexture(0), _screenChangeCount(1 << (sizeof(int) * 8 - 2)), _screenNeedsRedraw(false), _shakePos(0), @@ -61,25 +58,13 @@ OpenGLGraphicsManager::OpenGLGraphicsManager() _videoMode.scaleFactor = 2; _videoMode.fullscreen = ConfMan.getBool("fullscreen"); _videoMode.antialiasing = false; - _videoMode.aspectRatioCorrection = 0; + _videoMode.aspectRatioCorrection = ConfMan.getBool("aspect_ratio") ? kAspectRatioConserve : kAspectRatioNone; _gamePalette = (byte *)calloc(sizeof(byte) * 4, 256); _cursorPalette = (byte *)calloc(sizeof(byte) * 4, 256); // Register the graphics manager as a event observer g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 2, false); - -#ifndef USE_ALL_ASR - Common::String desiredAspectRatio = ConfMan.get("desired_screen_aspect_ratio"); - if (!scumm_stricmp(desiredAspectRatio.c_str(), "16/9")) - _desiredAspectRatio = kAspectRatio16_9; - else if (!scumm_stricmp(desiredAspectRatio.c_str(), "16/10")) - _desiredAspectRatio = kAspectRatio16_10; - else if (!scumm_stricmp(desiredAspectRatio.c_str(), "5/3")) - _desiredAspectRatio = kAspectRatio5_3; - else if (!scumm_stricmp(desiredAspectRatio.c_str(), "5/4")) - _desiredAspectRatio = kAspectRatio5_4; -#endif } OpenGLGraphicsManager::~OpenGLGraphicsManager() { @@ -173,7 +158,7 @@ bool OpenGLGraphicsManager::setGraphicsMode(int mode) { } if (_oldVideoMode.setup && _oldVideoMode.scaleFactor != newScaleFactor) - _transactionDetails.needHotswap = true; + _transactionDetails.needRefresh = true; _transactionDetails.needUpdatescreen = true; @@ -243,7 +228,7 @@ void OpenGLGraphicsManager::beginGFXTransaction() { _transactionMode = kTransactionActive; _transactionDetails.sizeChanged = false; - _transactionDetails.needHotswap = false; + _transactionDetails.needRefresh = false; _transactionDetails.needUpdatescreen = false; _transactionDetails.filterChanged = false; #ifdef USE_RGB_COLOR @@ -298,7 +283,7 @@ OSystem::TransactionError OpenGLGraphicsManager::endGFXTransaction() { } } - if (_transactionDetails.sizeChanged || _transactionDetails.needHotswap) { + if (_transactionDetails.sizeChanged || _transactionDetails.needRefresh) { unloadGFXMode(); if (!loadGFXMode()) { if (_oldVideoMode.setup) { @@ -832,6 +817,10 @@ void OpenGLGraphicsManager::refreshCursorScale() { uint screenScaleFactor = MIN(_videoMode.hardwareWidth * 10000 / _videoMode.screenWidth, _videoMode.hardwareHeight * 10000 / _videoMode.screenHeight); + // Do not scale cursor if original size is used + if (_videoMode.aspectRatioCorrection == kAspectRatioOriginal) + screenScaleFactor = _videoMode.scaleFactor * 10000; + if ((uint)_cursorTargetScale * 10000 >= screenScaleFactor && (uint)_videoMode.scaleFactor * 10000 >= screenScaleFactor) { // If the cursor target scale and the video mode scale factor are bigger than // the current window scale, do not scale the cursor for the overlay @@ -857,17 +846,22 @@ void OpenGLGraphicsManager::refreshCursorScale() { } void OpenGLGraphicsManager::refreshAspectRatio() { - _aspectWidth = _videoMode.hardwareWidth; - _aspectHeight = _videoMode.hardwareHeight; + if (_videoMode.aspectRatioCorrection == kAspectRatioOriginal) { + _aspectWidth = _videoMode.overlayWidth; + _aspectHeight = _videoMode.overlayHeight; + } else { + _aspectWidth = _videoMode.hardwareWidth; + _aspectHeight = _videoMode.hardwareHeight; - uint aspectRatio = _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight; - uint desiredAspectRatio = getAspectRatio(); + uint aspectRatio = _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight; + uint desiredAspectRatio = getAspectRatio(); - // Adjust one screen dimension for mantaining the aspect ratio - if (aspectRatio < desiredAspectRatio) - _aspectHeight = _aspectWidth * 10000 / desiredAspectRatio; - else if (aspectRatio > desiredAspectRatio) - _aspectWidth = _aspectHeight * desiredAspectRatio / 10000; + // Adjust one screen dimension for mantaining the aspect ratio + if (aspectRatio < desiredAspectRatio) + _aspectHeight = _aspectWidth * 10000 / desiredAspectRatio; + else if (aspectRatio > desiredAspectRatio) + _aspectWidth = _aspectHeight * desiredAspectRatio / 10000; + } // Adjust x and y for centering the screen _aspectX = (_videoMode.hardwareWidth - _aspectWidth) / 2; @@ -1183,26 +1177,17 @@ void OpenGLGraphicsManager::setScale(int newScale) { _transactionDetails.sizeChanged = true; } -void OpenGLGraphicsManager::setAspectRatioCorrection(int ratio) { - if (_oldVideoMode.setup && _oldVideoMode.aspectRatioCorrection == ratio) +void OpenGLGraphicsManager::setAspectRatioCorrection(int mode) { + if (_oldVideoMode.setup && _oldVideoMode.aspectRatioCorrection == mode) return; if (_transactionMode == kTransactionActive) { - if (ratio == -1) + if (mode == -1) // If -1, switch to next mode -#ifdef USE_ALL_ASR - _videoMode.aspectRatioCorrection = (_videoMode.aspectRatioCorrection + 1) % 7; -#else - if (_videoMode.aspectRatioCorrection == kAspectRatioNone) - _videoMode.aspectRatioCorrection = kAspectRatioConserve; - else if (_videoMode.aspectRatioCorrection == kAspectRatioConserve) - _videoMode.aspectRatioCorrection = _desiredAspectRatio; - else - _videoMode.aspectRatioCorrection = kAspectRatioNone; -#endif + _videoMode.aspectRatioCorrection = (_videoMode.aspectRatioCorrection + 1) % 3; else - _videoMode.aspectRatioCorrection = ratio; - _transactionDetails.needHotswap = true; + _videoMode.aspectRatioCorrection = mode; + _transactionDetails.needRefresh = true; } } @@ -1212,38 +1197,18 @@ Common::String OpenGLGraphicsManager::getAspectRatioName() { return "None"; case kAspectRatioConserve: return "Conserve"; - case kAspectRatio4_3: - return "4/3"; - case kAspectRatio16_9: - return "16/9"; - case kAspectRatio16_10: - return "16/10"; - case kAspectRatio5_3: - return "5/3"; - case kAspectRatio5_4: - return "5/4"; + case kAspectRatioOriginal: + return "Original"; default: return ""; } } uint OpenGLGraphicsManager::getAspectRatio() { - switch (_videoMode.aspectRatioCorrection) { - case kAspectRatioConserve: - return _videoMode.screenWidth * 10000 / _videoMode.screenHeight; - case kAspectRatio4_3: - return 13333; - case kAspectRatio16_9: - return 17777; - case kAspectRatio16_10: - return 16000; - case kAspectRatio5_3: - return 16666; - case kAspectRatio5_4: - return 12500; - default: + if (_videoMode.aspectRatioCorrection == kAspectRatioNone) return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight; - } + else + return _videoMode.screenWidth * 10000 / _videoMode.screenHeight; } void OpenGLGraphicsManager::adjustMouseEvent(const Common::Event &event) { |