scummvm/backends/graphics/opengl/gltexture.h
Alejandro Marzini b89412d7e4 OPENGL: Redesign blitting system. Add basics for aspect correction.
Removed the extra surface in GLTexture. Now there are copies of the texture data in their original format (so engine can get the original data when lockScreen or grabOverlay is called). This copies will be updated when the engine calls a function that modifies the game screen/overlay, and the textures will be marked as dirty. When updating screen, the textures will be updated from the copies data if they are dirty.

svn-id: r51234
2010-07-24 05:54:51 +00:00

114 lines
2.6 KiB
C++

/* 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.
*
* $URL$
* $Id$
*
*/
#ifdef WIN32
#if defined(ARRAYSIZE) && !defined(_WINDOWS_)
#undef ARRAYSIZE
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef ARRAYSIZE
#endif
#if defined(USE_GLES)
#include <GLES/gl.h>
#include <GLES/glext.h>
#elif defined(MACOSX)
#include <gl.h>
#include <glext.h>
#else
#include <GL/gl.h>
#include <GL/glext.h>
#endif
#include "graphics/surface.h"
#include "common/rect.h"
#include "common/array.h"
/**
* OpenGL texture manager class
*/
class GLTexture {
public:
/**
* Initialize OpenGL Extensions
*/
static void initGLExtensions();
GLTexture(byte bpp, GLenum format, GLenum type);
virtual ~GLTexture();
/**
* Refresh the texture after a context change. The
* process will be completed on next allocBuffer call.
*/
virtual void refresh();
/**
* Allocates memory needed for the given size.
*/
virtual void allocBuffer(GLuint width, GLuint height);
/**
* Updates the texture pixels.
*/
virtual void updateBuffer(const void *buf, int pitch, GLuint x, GLuint y,
GLuint w, GLuint h);
/**
* Draws the texture to the screen buffer.
*/
virtual void drawTexture(GLshort x, GLshort y, GLshort w, GLshort h);
/**
* Get the texture width.
*/
GLuint getWidth() const { return _realWidth; }
/**
* Get the texture height.
*/
GLuint getHeight() const { return _realHeight; }
/**
* Set the texture filter.
* GL_NEAREST or GL_LINEAR should be passed.
*/
void setFilter(GLint filter) { _filter = filter; }
protected:
const byte _bytesPerPixel;
const GLenum _glFormat;
const GLenum _glType;
GLuint _realWidth;
GLuint _realHeight;
GLuint _textureName;
GLuint _textureWidth;
GLuint _textureHeight;
GLint _filter;
bool _refresh;
};