diff options
author | dhewg | 2011-02-20 17:01:46 +0100 |
---|---|---|
committer | dhewg | 2011-02-24 23:18:31 +0100 |
commit | 257913676d5a21c6192a6146e662c21f299c9b09 (patch) | |
tree | 69799ee15f8b0dfd20c84a0f19f6fe89d3f0cce3 /backends/platform/android/texture.h | |
parent | f3ea868cf6b3603e88e0899fef6e71bcc800e481 (diff) | |
download | scummvm-rg350-257913676d5a21c6192a6146e662c21f299c9b09.tar.gz scummvm-rg350-257913676d5a21c6192a6146e662c21f299c9b09.tar.bz2 scummvm-rg350-257913676d5a21c6192a6146e662c21f299c9b09.zip |
ANDROID: Split code into multiple files
And get rid of unnecessary JNI calls to get a pointer to g_system
Diffstat (limited to 'backends/platform/android/texture.h')
-rw-r--r-- | backends/platform/android/texture.h | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/backends/platform/android/texture.h b/backends/platform/android/texture.h new file mode 100644 index 0000000000..050eafa073 --- /dev/null +++ b/backends/platform/android/texture.h @@ -0,0 +1,214 @@ +/* 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$ + * + */ + +#ifndef _ANDROID_TEXTURE_H_ +#define _ANDROID_TEXTURE_H_ + +#if defined(__ANDROID__) + +#include <GLES/gl.h> + +#include "graphics/surface.h" + +#include "common/rect.h" +#include "common/array.h" + +class GLESTexture { +public: + static void initGLExtensions(); + + GLESTexture(); + virtual ~GLESTexture(); + + virtual void reinitGL(); + virtual void allocBuffer(GLuint width, GLuint height); + + virtual void updateBuffer(GLuint x, GLuint y, GLuint width, GLuint height, + const void *buf, int pitch); + virtual void fillBuffer(byte x); + + virtual void drawTexture(GLshort x, GLshort y, GLshort w, GLshort h); + + inline GLuint width() const { + return _surface.w; + } + + inline GLuint height() const { + return _surface.h; + } + + inline GLuint texture_name() const { + return _texture_name; + } + + inline const Graphics::Surface *surface_const() const { + return &_surface; + } + + inline Graphics::Surface *surface() { + setDirty(); + return &_surface; + } + + inline bool dirty() const { + return _all_dirty || !_dirty_rect.isEmpty(); + } + + inline void drawTexture() { + drawTexture(0, 0, _surface.w, _surface.h); + } + +protected: + virtual byte bytesPerPixel() const = 0; + virtual GLenum glFormat() const = 0; + virtual GLenum glType() const = 0; + + virtual size_t paletteSize() const { + return 0; + } + + inline void setDirty() { + _all_dirty = true; + _dirty_rect = Common::Rect(); + } + + inline void setDirtyRect(const Common::Rect& r) { + if (!_all_dirty) { + if (_dirty_rect.isEmpty()) + _dirty_rect = r; + else + _dirty_rect.extend(r); + } + } + + GLuint _texture_name; + Graphics::Surface _surface; + GLuint _texture_width; + GLuint _texture_height; + bool _all_dirty; + + // Covers dirty area + Common::Rect _dirty_rect; +}; + +// RGBA4444 texture +class GLES4444Texture : public GLESTexture { +protected: + virtual byte bytesPerPixel() const { + return 2; + } + + virtual GLenum glFormat() const { + return GL_RGBA; + } + + virtual GLenum glType() const { + return GL_UNSIGNED_SHORT_4_4_4_4; + } +}; + +// RGB565 texture +class GLES565Texture : public GLESTexture { +protected: + virtual byte bytesPerPixel() const { + return 2; + } + + virtual GLenum glFormat() const { + return GL_RGB; + } + + virtual GLenum glType() const { + return GL_UNSIGNED_SHORT_5_6_5; + } +}; + +// RGB888 256-entry paletted texture +class GLESPaletteTexture : public GLESTexture { +public: + GLESPaletteTexture(); + virtual ~GLESPaletteTexture(); + + virtual void allocBuffer(GLuint width, GLuint height); + virtual void updateBuffer(GLuint x, GLuint y, GLuint width, GLuint height, + const void *buf, int pitch); + virtual void fillBuffer(byte x); + + virtual void drawTexture(GLshort x, GLshort y, GLshort w, GLshort h); + + inline void drawTexture() { + drawTexture(0, 0, _surface.w, _surface.h); + } + + inline const byte *palette_const() const { + return _texture; + }; + + inline byte *palette() { + setDirty(); + return _texture; + }; + +protected: + virtual byte bytesPerPixel() const { + return 1; + } + + virtual GLenum glFormat() const { + return GL_RGB; + } + + virtual GLenum glType() const { + return GL_PALETTE8_RGB8_OES; + } + + virtual size_t paletteSize() const { + return 256 * 3; + } + + void uploadTexture() const; + + byte *_texture; +}; + +// RGBA8888 256-entry paletted texture +class GLESPaletteATexture : public GLESPaletteTexture { +protected: + virtual GLenum glFormat() const { + return GL_RGBA; + } + + virtual GLenum glType() const { + return GL_PALETTE8_RGBA8_OES; + } + + virtual size_t paletteSize() const { + return 256 * 4; + } +}; + +#endif +#endif + |