aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2011-03-17 19:47:18 +0100
committerJohannes Schickel2011-03-17 19:55:06 +0100
commit96979f73fc10679fc0112cfbc55d6b661d744b05 (patch)
treee861325c5555ff3786d1959a5b1b79575e7aa57a
parent70e2c4266b20d09e4bc2d89fcd3d3fba6ddaade9 (diff)
downloadscummvm-rg350-96979f73fc10679fc0112cfbc55d6b661d744b05.tar.gz
scummvm-rg350-96979f73fc10679fc0112cfbc55d6b661d744b05.tar.bz2
scummvm-rg350-96979f73fc10679fc0112cfbc55d6b661d744b05.zip
OPENGL: Slight refactoring.
First step into making all state variables of the OpenGL backend private, to help making the backend more maintainable, by disallowing subclasses to just mess with everything...
-rw-r--r--backends/graphics/opengl/opengl-graphics.cpp21
-rw-r--r--backends/graphics/opengl/opengl-graphics.h23
-rw-r--r--backends/graphics/openglsdl/openglsdl-graphics.cpp23
3 files changed, 55 insertions, 12 deletions
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index e9942b8eb4..5d23405eee 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -100,7 +100,12 @@ bool OpenGLGraphicsManager::hasFeature(OSystem::Feature f) {
void OpenGLGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {
switch (f) {
case OSystem::kFeatureAspectRatioCorrection:
- _videoMode.mode = OpenGL::GFX_4_3;
+ // 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...
+ // Think of a way to get rid of this mess.
+ if (enable)
+ _videoMode.mode = OpenGL::GFX_4_3;
_aspectRatioCorrection = enable;
break;
default:
@@ -109,7 +114,12 @@ void OpenGLGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {
}
bool OpenGLGraphicsManager::getFeatureState(OSystem::Feature f) {
- return false;
+ switch (f) {
+ case OSystem::kFeatureAspectRatioCorrection:
+ return _aspectRatioCorrection || (_videoMode.mode == OpenGL::GFX_4_3);
+ default:
+ return false;
+ }
}
//
@@ -1216,6 +1226,13 @@ void OpenGLGraphicsManager::setScale(int newScale) {
_transactionDetails.sizeChanged = true;
}
+void OpenGLGraphicsManager::toggleAntialiasing() {
+ assert(_transactionMode == kTransactionActive);
+
+ _videoMode.antialiasing = !_videoMode.antialiasing;
+ _transactionDetails.filterChanged = true;
+}
+
uint OpenGLGraphicsManager::getAspectRatio() {
if (_videoMode.mode == OpenGL::GFX_NORMAL)
return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight;
diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h
index baebb9c95f..3eeb52fcc0 100644
--- a/backends/graphics/opengl/opengl-graphics.h
+++ b/backends/graphics/opengl/opengl-graphics.h
@@ -178,6 +178,23 @@ protected:
virtual void setScale(int newScale);
+ /**
+ * Query the scale factor.
+ */
+ inline int getScale() const { return _videoMode.scaleFactor; }
+
+ /**
+ * Toggle the antialiasing state of the current video mode.
+ *
+ * This can only be used in a GFX transaction.
+ */
+ void toggleAntialiasing();
+
+ /**
+ * Query the antialiasing state.
+ */
+ inline bool getAntialiasingState() const { return _videoMode.antialiasing; }
+
// Drawing coordinates for the current display mode and scale
int _displayX;
int _displayY;
@@ -195,13 +212,13 @@ protected:
virtual void calculateDisplaySize(int &width, int &height);
virtual void refreshDisplaySize();
- bool _aspectRatioCorrection;
-
/**
* Returns the current target aspect ratio x 10000
*/
virtual uint getAspectRatio();
+ bool _aspectRatioCorrection;
+
bool _formatBGR;
//
@@ -232,7 +249,7 @@ protected:
bool _overlayVisible;
bool _overlayNeedsRedraw;
Common::Rect _overlayDirtyRect;
-
+
virtual void refreshOverlay();
//
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index c2ec43b90d..bdea64bb44 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -298,7 +298,7 @@ bool OpenGLSdlGraphicsManager::setupFullscreenMode() {
bool OpenGLSdlGraphicsManager::loadGFXMode() {
// Force 4/3 if feature enabled
- if (_aspectRatioCorrection)
+ if (getFeatureState(OSystem::kFeatureAspectRatioCorrection))
_videoMode.mode = OpenGL::GFX_4_3;
// If the screen was resized, do not change its size
@@ -522,11 +522,14 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
// Ctrl-Alt-f toggles antialiasing
if (event.kbd.keycode == 'f') {
beginGFXTransaction();
- _videoMode.antialiasing = !_videoMode.antialiasing;
- _transactionDetails.filterChanged = true;
+ toggleAntialiasing();
endGFXTransaction();
+
#ifdef USE_OSD
- if (_videoMode.antialiasing)
+ // TODO: This makes guesses about what internal antialiasing
+ // modes we use, we might want to consider a better way of
+ // displaying information to the user.
+ if (getAntialiasingState())
displayMessageOnOSD("Active filter mode: Linear");
else
displayMessageOnOSD("Active filter mode: Nearest");
@@ -568,10 +571,16 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
#ifdef USE_OSD
int lastMode = _videoMode.mode;
#endif
+ // We need to query the scale and set it up, because
+ // setGraphicsMode sets the default scale to 2
+ int oldScale = getScale();
beginGFXTransaction();
- _videoMode.mode = sdlKey - (isNormalNumber ? SDLK_1 : SDLK_KP1);
- _transactionDetails.needRefresh = true;
- _aspectRatioCorrection = false;
+ 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)