From 96979f73fc10679fc0112cfbc55d6b661d744b05 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Thu, 17 Mar 2011 19:47:18 +0100 Subject: 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... --- backends/graphics/opengl/opengl-graphics.cpp | 21 +++++++++++++++++++-- backends/graphics/opengl/opengl-graphics.h | 23 ++++++++++++++++++++--- 2 files changed, 39 insertions(+), 5 deletions(-) (limited to 'backends/graphics/opengl') 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(); // -- cgit v1.2.3