diff options
Diffstat (limited to 'backends/graphics/opengl')
-rw-r--r-- | backends/graphics/opengl/gltexture.h | 20 | ||||
-rw-r--r-- | backends/graphics/opengl/opengl-graphics.cpp | 53 | ||||
-rw-r--r-- | backends/graphics/opengl/opengl-graphics.h | 21 |
3 files changed, 39 insertions, 55 deletions
diff --git a/backends/graphics/opengl/gltexture.h b/backends/graphics/opengl/gltexture.h index f0cd7aed56..71f1eeb78f 100644 --- a/backends/graphics/opengl/gltexture.h +++ b/backends/graphics/opengl/gltexture.h @@ -20,6 +20,9 @@ * */ +#ifndef BACKENDS_GRAPHICS_OPENGL_GLTEXTURE_H +#define BACKENDS_GRAPHICS_OPENGL_GLTEXTURE_H + #include "common/scummsys.h" #ifdef WIN32 @@ -31,7 +34,20 @@ #undef ARRAYSIZE #endif -#if defined(USE_GLES) +// HACK: At this point in Windows platforms, common/util.h has been included +// via common/rect.h (from backends/graphics/sdl/sdl-graphics.h), via +// backends/graphics/openglsdl/openglsdl-graphics.h. Thus, we end up with +// COMMON_UTIL_H defined, and ARRAYSIZE undefined (bad!). Therefore, +// ARRAYSIZE is undefined in openglsdl-graphics.cpp. This is a temporary +// hackish solution fo fix compilation under Windows. +#if !defined(ARRAYSIZE) && defined(COMMON_UTIL_H) +#define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0]))) +#endif + +#if defined(BADA) +#include <FGraphicsOpengl.h> +using namespace Osp::Graphics::Opengl; +#elif defined(USE_GLES) #include <GLES/gl.h> #elif defined(SDL_BACKEND) #include <SDL_opengl.h> @@ -106,3 +122,5 @@ protected: GLint _filter; bool _refresh; }; + +#endif diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 046be4c669..8e01e76f16 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -67,10 +67,6 @@ OpenGLGraphicsManager::OpenGLGraphicsManager() } OpenGLGraphicsManager::~OpenGLGraphicsManager() { - // Unregister the event observer - if (g_system->getEventManager()->getEventDispatcher() != NULL) - g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this); - free(_gamePalette); free(_cursorPalette); @@ -79,11 +75,6 @@ OpenGLGraphicsManager::~OpenGLGraphicsManager() { delete _cursorTexture; } -void OpenGLGraphicsManager::initEventObserver() { - // Register the graphics manager as a event observer - g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false); -} - // // Feature // @@ -1254,12 +1245,16 @@ void OpenGLGraphicsManager::toggleAntialiasing() { _transactionDetails.filterChanged = true; } -uint OpenGLGraphicsManager::getAspectRatio() { +uint OpenGLGraphicsManager::getAspectRatio() const { // In case we enable aspect ratio correction we force a 4/3 ratio. + // But just for 320x200 and 640x400 games, since other games do not need + // this. // 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) + if (_videoMode.aspectRatioCorrection + && ((_videoMode.screenWidth == 320 && _videoMode.screenHeight == 200) + || (_videoMode.screenWidth == 640 && _videoMode.screenHeight == 400))) return 13333; else if (_videoMode.mode == OpenGL::GFX_NORMAL) return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight; @@ -1282,36 +1277,6 @@ void OpenGLGraphicsManager::adjustMousePosition(int16 &x, int16 &y) { } } -bool OpenGLGraphicsManager::notifyEvent(const Common::Event &event) { - switch (event.type) { - case Common::EVENT_MOUSEMOVE: - if (!event.synthetic) { - _cursorState.x = event.mouse.x; - _cursorState.y = event.mouse.y; - } - case Common::EVENT_LBUTTONDOWN: - case Common::EVENT_RBUTTONDOWN: - case Common::EVENT_WHEELUP: - case Common::EVENT_WHEELDOWN: - case Common::EVENT_MBUTTONDOWN: - case Common::EVENT_LBUTTONUP: - case Common::EVENT_RBUTTONUP: - case Common::EVENT_MBUTTONUP: - if (!event.synthetic) { - Common::Event newEvent(event); - newEvent.synthetic = true; - adjustMousePosition(newEvent.mouse.x, newEvent.mouse.y); - g_system->getEventManager()->pushEvent(newEvent); - } - return !event.synthetic; - - default: - break; - } - - return false; -} - bool OpenGLGraphicsManager::saveScreenshot(const char *filename) { int width = _videoMode.hardwareWidth; int height = _videoMode.hardwareHeight; @@ -1383,9 +1348,13 @@ const char *OpenGLGraphicsManager::getCurrentModeName() { } #ifdef USE_OSD +const Graphics::Font *OpenGLGraphicsManager::getFontOSD() { + return FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont); +} + void OpenGLGraphicsManager::updateOSD() { // The font we are going to use: - const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont); + const Graphics::Font *font = getFontOSD(); if (_osdSurface.w != _osdTexture->getWidth() || _osdSurface.h != _osdTexture->getHeight()) _osdSurface.create(_osdTexture->getWidth(), _osdTexture->getHeight(), _overlayFormat); diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index 56f7d92a12..6ded680eae 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -26,7 +26,8 @@ #include "backends/graphics/opengl/gltexture.h" #include "backends/graphics/graphics.h" #include "common/array.h" -#include "common/events.h" +#include "common/rect.h" +#include "graphics/font.h" #include "graphics/pixelformat.h" // Uncomment this to enable the 'on screen display' code. @@ -50,13 +51,11 @@ enum { * the buffers swap, and implement loadGFXMode for handling the window/context if * needed. If USE_RGB_COLOR is enabled, getSupportedFormats must be implemented. */ -class OpenGLGraphicsManager : public GraphicsManager, public Common::EventObserver { +class OpenGLGraphicsManager : public GraphicsManager { public: OpenGLGraphicsManager(); virtual ~OpenGLGraphicsManager(); - virtual void initEventObserver(); - virtual bool hasFeature(OSystem::Feature f); virtual void setFeatureState(OSystem::Feature f, bool enable); virtual bool getFeatureState(OSystem::Feature f); @@ -109,10 +108,6 @@ public: virtual void setCursorPalette(const byte *colors, uint start, uint num); virtual void displayMessageOnOSD(const char *msg); - - // Override from Common::EventObserver - bool notifyEvent(const Common::Event &event); - protected: /** * Setup OpenGL settings @@ -220,10 +215,7 @@ protected: virtual void calculateDisplaySize(int &width, int &height); virtual void refreshDisplaySize(); - /** - * Returns the current target aspect ratio x 10000 - */ - virtual uint getAspectRatio(); + uint getAspectRatio() const; bool _formatBGR; @@ -324,6 +316,11 @@ protected: */ Common::Array<Common::String> _osdLines; + /** + * Returns the font used for on screen display + */ + virtual const Graphics::Font *getFontOSD(); + /** * Update the OSD texture / surface. */ |