diff options
Diffstat (limited to 'backends/graphics/opengl/opengl-graphics.h')
-rw-r--r-- | backends/graphics/opengl/opengl-graphics.h | 351 |
1 files changed, 0 insertions, 351 deletions
diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h deleted file mode 100644 index 9d8d418d11..0000000000 --- a/backends/graphics/opengl/opengl-graphics.h +++ /dev/null @@ -1,351 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef BACKENDS_GRAPHICS_OPENGL_H -#define BACKENDS_GRAPHICS_OPENGL_H - -#include "backends/graphics/opengl/gltexture.h" -#include "backends/graphics/graphics.h" -#include "common/array.h" -#include "common/rect.h" -#include "graphics/font.h" -#include "graphics/pixelformat.h" - -// Uncomment this to enable the 'on screen display' code. -#define USE_OSD 1 - -namespace OpenGL { -// The OpenGL GFX modes. They have to be inside the OpenGL namespace so they -// do not clash with the SDL GFX modes. -enum { - GFX_NORMAL = 0, - GFX_CONSERVE = 1, - GFX_ORIGINAL = 2 -}; - -} - -/** - * OpenGL graphics manager. This is an abstract class, it does not do the - * window and OpenGL context initialization. - * Derived classes should at least override internUpdateScreen for doing - * 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: - OpenGLGraphicsManager(); - virtual ~OpenGLGraphicsManager(); - - virtual bool hasFeature(OSystem::Feature f); - virtual void setFeatureState(OSystem::Feature f, bool enable); - virtual bool getFeatureState(OSystem::Feature f); - - static const OSystem::GraphicsMode *supportedGraphicsModes(); - virtual const OSystem::GraphicsMode *getSupportedGraphicsModes() const; - virtual int getDefaultGraphicsMode() const; - virtual bool setGraphicsMode(int mode); - virtual int getGraphicsMode() const; - virtual void resetGraphicsScale(); -#ifdef USE_RGB_COLOR - virtual Graphics::PixelFormat getScreenFormat() const; - virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const = 0; -#endif - virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format = NULL); - virtual int getScreenChangeID() const; - - virtual void beginGFXTransaction(); - virtual OSystem::TransactionError endGFXTransaction(); - - virtual int16 getHeight(); - virtual int16 getWidth(); -protected: - // PaletteManager API - virtual void setPalette(const byte *colors, uint start, uint num); - virtual void grabPalette(byte *colors, uint start, uint num); - -public: - virtual void copyRectToScreen(const void *buf, int pitch, int x, int y, int w, int h); - virtual Graphics::Surface *lockScreen(); - virtual void unlockScreen(); - virtual void fillScreen(uint32 col); - virtual void updateScreen(); - virtual void setShakePos(int shakeOffset); - virtual void setFocusRectangle(const Common::Rect &rect); - virtual void clearFocusRectangle(); - - virtual void showOverlay(); - virtual void hideOverlay(); - virtual Graphics::PixelFormat getOverlayFormat() const; - virtual void clearOverlay(); - virtual void grabOverlay(void *buf, int pitch); - virtual void copyRectToOverlay(const void *buf, int pitch, int x, int y, int w, int h); - virtual int16 getOverlayHeight(); - virtual int16 getOverlayWidth(); - - virtual bool showMouse(bool visible); - virtual void warpMouse(int x, int y); - virtual void setMouseCursor(const void *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, bool dontScale = false, const Graphics::PixelFormat *format = NULL); - virtual void setCursorPalette(const byte *colors, uint start, uint num); - - virtual void displayMessageOnOSD(const char *msg); -protected: - /** - * Setup OpenGL settings - */ - virtual void initGL(); - - /** - * Creates and refreshs OpenGL textures. - */ - virtual void loadTextures(); - - // - // GFX and video - // - enum { - kTransactionNone = 0, - kTransactionActive = 1, - kTransactionRollback = 2 - }; - - struct TransactionDetails { - bool sizeChanged; - bool needRefresh; - bool needUpdatescreen; - bool filterChanged; -#ifdef USE_RGB_COLOR - bool formatChanged; -#endif - }; - TransactionDetails _transactionDetails; - int _transactionMode; - - struct VideoState { - bool setup; - - bool fullscreen; - - int mode; - int scaleFactor; - bool antialiasing; - bool aspectRatioCorrection; - - int screenWidth, screenHeight; - int overlayWidth, overlayHeight; - int hardwareWidth, hardwareHeight; -#ifdef USE_RGB_COLOR - Graphics::PixelFormat format; -#endif - }; - VideoState _videoMode, _oldVideoMode; - - /** - * Sets the OpenGL texture format for the given pixel format. If format is not support will raise an error. - */ - virtual void getGLPixelFormat(Graphics::PixelFormat pixelFormat, byte &bpp, GLenum &intFormat, GLenum &glFormat, GLenum &type); - - virtual void internUpdateScreen(); - virtual bool loadGFXMode(); - virtual void unloadGFXMode(); - - /** - * Setup the fullscreen mode state. - */ - void setFullscreenMode(bool enable); - - /** - * Query the fullscreen state. - */ - inline bool getFullscreenMode() const { return _videoMode.fullscreen; } - - /** - * Set the scale factor. - * - * This can only be used in a GFX transaction. - * - * @param newScale New scale factor. - */ - 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; - int _displayWidth; - int _displayHeight; - - virtual const char *getCurrentModeName(); - - virtual void calculateDisplaySize(int &width, int &height); - virtual void refreshDisplaySize(); - - uint getAspectRatio() const; - - void setFormatIsBGR(bool isBGR) { _formatBGR = isBGR; } - bool _formatBGR; - - // - // Game screen - // - GLTexture *_gameTexture; - Graphics::Surface _screenData; - int _screenChangeCount; - bool _screenNeedsRedraw; - Common::Rect _screenDirtyRect; - -#ifdef USE_RGB_COLOR - Graphics::PixelFormat _screenFormat; -#endif - byte *_gamePalette; - - virtual void refreshGameScreen(); - - // Shake mode - int _shakePos; - - // - // Overlay - // - GLTexture *_overlayTexture; - Graphics::Surface _overlayData; - Graphics::PixelFormat _overlayFormat; - bool _overlayVisible; - bool _overlayNeedsRedraw; - Common::Rect _overlayDirtyRect; - - virtual void refreshOverlay(); - - // - // Mouse - // - struct MousePos { - // The mouse position in hardware screen coordinates. - int16 x, y; - - // The size and hotspot of the original cursor image. - int16 w, h; - int16 hotX, hotY; - - // The size and hotspot of the scaled cursor, in real coordinates. - int16 rW, rH; - int16 rHotX, rHotY; - - // The size and hotspot of the scaled cursor, in game coordinates. - int16 vW, vH; - int16 vHotX, vHotY; - - MousePos() : x(0), y(0), w(0), h(0), hotX(0), hotY(0), - rW(0), rH(0), rHotX(0), rHotY(0), vW(0), vH(0), - vHotX(0), vHotY(0) {} - }; - - GLTexture *_cursorTexture; - Graphics::Surface _cursorData; - Graphics::PixelFormat _cursorFormat; - byte *_cursorPalette; - bool _cursorPaletteDisabled; - MousePos _cursorState; - bool _cursorVisible; - uint32 _cursorKeyColor; - bool _cursorDontScale; - bool _cursorNeedsRedraw; - - /** - * Set up the mouse position for graphics output. - * - * @param x X coordinate in native coordinates. - * @param y Y coordinate in native coordinates. - */ - void setMousePosition(int x, int y) { _cursorState.x = x; _cursorState.y = y; } - - virtual void refreshCursor(); - virtual void refreshCursorScale(); - - /** - * Set up the mouse position for the (event) system. - * - * @param x X coordinate in native coordinates. - * @param y Y coordinate in native coordinates. - */ - virtual void setInternalMousePosition(int x, int y) = 0; - - /** - * Adjusts hardware screen coordinates to either overlay or game screen - * coordinates depending on whether the overlay is visible or not. - * - * @param x X coordinate of the mouse position. - * @param y Y coordinate of the mouse position. - */ - virtual void adjustMousePosition(int16 &x, int16 &y); - - // - // Misc - // - virtual bool saveScreenshot(const char *filename); - -#ifdef USE_OSD - /** - * Returns the font used for on screen display - */ - virtual const Graphics::Font *getFontOSD(); - - /** - * Update the OSD texture / surface. - */ - void updateOSD(); - - /** - * The OSD contents. - */ - Common::Array<Common::String> _osdLines; - - GLTexture *_osdTexture; - Graphics::Surface _osdSurface; - uint8 _osdAlpha; - uint32 _osdFadeStartTime; - bool _requireOSDUpdate; - enum { - kOSDFadeOutDelay = 2 * 1000, - kOSDFadeOutDuration = 500, - kOSDInitialAlpha = 80 - }; -#endif -}; - -#endif |