aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2011-03-20 17:29:08 +0100
committerJohannes Schickel2011-03-20 17:29:08 +0100
commit6502e191b939ad836c92dc602a6f0e4e4c75b044 (patch)
treed4878261f9aab946bc0fa8b9316f4ac3f7d33cf1
parent89f9c5a9c35834856bb3692fb30a9eb42606ec91 (diff)
downloadscummvm-rg350-6502e191b939ad836c92dc602a6f0e4e4c75b044.tar.gz
scummvm-rg350-6502e191b939ad836c92dc602a6f0e4e4c75b044.tar.bz2
scummvm-rg350-6502e191b939ad836c92dc602a6f0e4e4c75b044.zip
OPENGL: Handle aspect ratio correction as flag instead of having a special mode for it.
This partly fixes the OpenGL mode mess, but now OpenGL Normal and OpenGL Conserve will feature the same semantics when aspect ratio correction is enabled... That is still something to solve.
-rw-r--r--backends/graphics/opengl/opengl-graphics.cpp26
-rw-r--r--backends/graphics/opengl/opengl-graphics.h4
-rw-r--r--backends/graphics/openglsdl/openglsdl-graphics.cpp39
3 files changed, 27 insertions, 42 deletions
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index fd8c2ccffe..6904a1d094 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -103,14 +103,8 @@ void OpenGLGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {
break;
case OSystem::kFeatureAspectRatioCorrection:
- // TODO: If we enable aspect ratio correction, we automatically set
- // the video mode to 4/3. That is quity messy, but since we have that
- // messy OpenGL mode use there's not much to do about it right now...
- // Of course in case we disasble the aspect ratio correction, we
- // might want to setup a different mode, but which one?
- // Think of a way to get rid of this mess.
- if (enable)
- _videoMode.mode = OpenGL::GFX_4_3;
+ _videoMode.aspectRatioCorrection = enable;
+ _transactionDetails.needRefresh = true;
break;
default:
@@ -124,7 +118,7 @@ bool OpenGLGraphicsManager::getFeatureState(OSystem::Feature f) {
return _videoMode.fullscreen;
case OSystem::kFeatureAspectRatioCorrection:
- return _videoMode.mode == OpenGL::GFX_4_3;
+ return _videoMode.aspectRatioCorrection;
default:
return false;
@@ -138,7 +132,6 @@ bool OpenGLGraphicsManager::getFeatureState(OSystem::Feature f) {
static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
{"gl1", _s("OpenGL Normal"), OpenGL::GFX_NORMAL},
{"gl2", _s("OpenGL Conserve"), OpenGL::GFX_CONSERVE},
- {"gl3", _s("OpenGL 4/3"), OpenGL::GFX_4_3},
{"gl4", _s("OpenGL Original"), OpenGL::GFX_ORIGINAL},
{0, 0, 0}
};
@@ -166,11 +159,10 @@ bool OpenGLGraphicsManager::setGraphicsMode(int mode) {
switch (mode) {
case OpenGL::GFX_NORMAL:
case OpenGL::GFX_CONSERVE:
- case OpenGL::GFX_4_3:
case OpenGL::GFX_ORIGINAL:
break;
default:
- warning("unknown gfx mode %d", mode);
+ warning("Unknown gfx mode %d", mode);
return false;
}
@@ -1262,10 +1254,14 @@ void OpenGLGraphicsManager::toggleAntialiasing() {
}
uint OpenGLGraphicsManager::getAspectRatio() {
- if (_videoMode.mode == OpenGL::GFX_NORMAL)
- return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight;
- else if (_videoMode.mode == OpenGL::GFX_4_3)
+ // In case we enable aspect ratio correction we force a 4/3 ratio.
+ // TODO: This makes OpenGL Normal behave like OpenGL Conserve, when aspect
+ // ratio correction is enabled, but it's better than the previous 4/3 mode
+ // mess at least...
+ if (_videoMode.aspectRatioCorrection)
return 13333;
+ else if (_videoMode.mode == OpenGL::GFX_NORMAL)
+ return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight;
else
return _videoMode.screenWidth * 10000 / _videoMode.screenHeight;
}
diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h
index f674015b4a..33eab7653c 100644
--- a/backends/graphics/opengl/opengl-graphics.h
+++ b/backends/graphics/opengl/opengl-graphics.h
@@ -39,8 +39,7 @@ namespace OpenGL {
enum {
GFX_NORMAL = 0,
GFX_CONSERVE = 1,
- GFX_4_3 = 2,
- GFX_ORIGINAL = 3
+ GFX_ORIGINAL = 2
};
}
@@ -156,6 +155,7 @@ protected:
int mode;
int scaleFactor;
bool antialiasing;
+ bool aspectRatioCorrection;
int screenWidth, screenHeight;
int overlayWidth, overlayHeight;
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index de9dba1ab1..b9022af120 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -295,10 +295,6 @@ bool OpenGLSdlGraphicsManager::setupFullscreenMode() {
}
bool OpenGLSdlGraphicsManager::loadGFXMode() {
- // Force 4/3 if feature enabled
- if (getFeatureState(OSystem::kFeatureAspectRatioCorrection))
- _videoMode.mode = OpenGL::GFX_4_3;
-
// If the screen was resized, do not change its size
if (!_screenResized) {
const int scaleFactor = getScale();
@@ -509,10 +505,19 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
// Ctrl-Alt-a switch between display modes
if (event.kbd.keycode == 'a') {
beginGFXTransaction();
- switchDisplayMode(-1);
+ setFeatureState(OSystem::kFeatureAspectRatioCorrection, !getFeatureState(OSystem::kFeatureAspectRatioCorrection));
endGFXTransaction();
#ifdef USE_OSD
- displayModeChangedMsg();
+ char buffer[128];
+ if (getFeatureState(OSystem::kFeatureAspectRatioCorrection))
+ sprintf(buffer, "Enabled aspect ratio correction\n%d x %d -> %d x %d",
+ _videoMode.screenWidth, _videoMode.screenHeight,
+ _hwscreen->w, _hwscreen->h);
+ else
+ sprintf(buffer, "Disabled aspect ratio correction\n%d x %d -> %d x %d",
+ _videoMode.screenWidth, _videoMode.screenHeight,
+ _hwscreen->w, _hwscreen->h);
+ displayMessageOnOSD(buffer);
#endif
internUpdateScreen();
return true;
@@ -561,12 +566,12 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
}
}
- const bool isNormalNumber = (SDLK_1 <= sdlKey && sdlKey <= SDLK_4);
- const bool isKeypadNumber = (SDLK_KP1 <= sdlKey && sdlKey <= SDLK_KP4);
+ const bool isNormalNumber = (SDLK_1 <= sdlKey && sdlKey <= SDLK_3);
+ const bool isKeypadNumber = (SDLK_KP1 <= sdlKey && sdlKey <= SDLK_KP3);
// Ctrl-Alt-<number key> will change the GFX mode
if (isNormalNumber || isKeypadNumber) {
- if (sdlKey - (isNormalNumber ? SDLK_1 : SDLK_KP1) <= 4) {
+ if (sdlKey - (isNormalNumber ? SDLK_1 : SDLK_KP1) <= 3) {
#ifdef USE_OSD
int lastMode = _videoMode.mode;
#endif
@@ -576,10 +581,6 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
beginGFXTransaction();
setGraphicsMode(sdlKey - (isNormalNumber ? SDLK_1 : SDLK_KP1));
setScale(oldScale);
- // TODO: We disable the aspect ratio correction here,
- // we might switch to mode which ignores it...
- // We should really fix this mess up.
- setFeatureState(OSystem::kFeatureAspectRatioCorrection, false);
endGFXTransaction();
#ifdef USE_OSD
if (lastMode != _videoMode.mode)
@@ -597,18 +598,6 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
toggleFullScreen(-1);
return true;
}
-
- // Ctrl-Shift-a switch backwards between display modes
- if (event.kbd.keycode == 'a') {
- beginGFXTransaction();
- switchDisplayMode(-2);
- endGFXTransaction();
-#ifdef USE_OSD
- displayModeChangedMsg();
-#endif
- internUpdateScreen();
- return true;
- }
}
break;
case Common::EVENT_KEYUP: