diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/platform/android/gfx.cpp | 5 | ||||
-rw-r--r-- | backends/platform/android/texture.cpp | 36 |
2 files changed, 25 insertions, 16 deletions
diff --git a/backends/platform/android/gfx.cpp b/backends/platform/android/gfx.cpp index 5b03af9698..e32e2095bc 100644 --- a/backends/platform/android/gfx.cpp +++ b/backends/platform/android/gfx.cpp @@ -146,7 +146,6 @@ void OSystem_Android::initTexture(GLESBaseTexture **texture, } (*texture)->allocBuffer(width, height); - (*texture)->fillBuffer(0); } #endif @@ -253,7 +252,6 @@ void OSystem_Android::initOverlay() { LOGI("overlay size is %ux%u", overlay_width, overlay_height); _overlay_texture->allocBuffer(overlay_width, overlay_height); - _overlay_texture->fillBuffer(0); _overlay_texture->setDrawRect(0, 0, _egl_surface_width, _egl_surface_height); } @@ -268,7 +266,6 @@ void OSystem_Android::initSize(uint width, uint height, initTexture(&_game_texture, width, height, format); #else _game_texture->allocBuffer(width, height); - _game_texture->fillBuffer(0); #endif updateScreenRect(); @@ -710,8 +707,8 @@ void OSystem_Android::setMouseCursor(const byte *buf, uint w, uint h, assert(keycolor < 256); byte *p = _mouse_texture_palette->palette() + _mouse_keycolor * 2; - WRITE_UINT16(p, READ_UINT16(p) | 1); + _mouse_keycolor = keycolor; WRITE_UINT16(_mouse_texture_palette->palette() + keycolor * 2, 0); } diff --git a/backends/platform/android/texture.cpp b/backends/platform/android/texture.cpp index 691c384a18..b96d6bf443 100644 --- a/backends/platform/android/texture.cpp +++ b/backends/platform/android/texture.cpp @@ -229,8 +229,10 @@ void GLESTexture::allocBuffer(GLuint w, GLuint h) { GLESBaseTexture::allocBuffer(w, h); - if (_surface.w == oldw && _surface.h == oldh) + if (_surface.w == oldw && _surface.h == oldh) { + fillBuffer(0); return; + } delete[] _buf; delete[] _pixels; @@ -241,6 +243,8 @@ void GLESTexture::allocBuffer(GLuint w, GLuint h) { _surface.pixels = _pixels; _surface.pitch = w * _pixelFormat.bytesPerPixel; + fillBuffer(0); + _buf = new byte[w * h * _surface.bytesPerPixel]; assert(_buf); } @@ -358,22 +362,26 @@ void GLESPaletteTexture::allocBuffer(GLuint w, GLuint h) { GLESBaseTexture::allocBuffer(w, h); - if (_surface.w == oldw && _surface.h == oldh) + if (_surface.w == oldw && _surface.h == oldh) { + fillBuffer(0); return; + } - byte *new_buffer = new byte[_paletteSize + - _texture_width * _texture_height]; - assert(new_buffer); + byte *old_texture = _texture; - if (_texture) { - // preserve palette - memcpy(new_buffer, _texture, _paletteSize); - delete[] _texture; - } + _texture = new byte[_paletteSize + _texture_width * _texture_height]; + assert(_texture); - _texture = new_buffer; _surface.pixels = _texture + _paletteSize; _surface.pitch = _texture_width; + + fillBuffer(0); + + if (old_texture) { + // preserve palette + memcpy(_texture, old_texture, _paletteSize); + delete[] old_texture; + } } void GLESPaletteTexture::fillBuffer(uint32 color) { @@ -480,8 +488,10 @@ void GLESFakePaletteTexture::allocBuffer(GLuint w, GLuint h) { GLESBaseTexture::allocBuffer(w, h); - if (_surface.w == oldw && _surface.h == oldh) + if (_surface.w == oldw && _surface.h == oldh) { + fillBuffer(0); return; + } delete[] _buf; delete[] _pixels; @@ -494,6 +504,8 @@ void GLESFakePaletteTexture::allocBuffer(GLuint w, GLuint h) { _surface.bytesPerPixel = 1; _surface.pitch = w; + fillBuffer(0); + _buf = new uint16[w * h]; assert(_buf); } |