diff options
Diffstat (limited to 'backends/platform/android')
-rw-r--r-- | backends/platform/android/android.cpp | 11 | ||||
-rw-r--r-- | backends/platform/android/android.h | 1 | ||||
-rw-r--r-- | backends/platform/android/gfx.cpp | 8 |
3 files changed, 19 insertions, 1 deletions
diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp index 9a6995646c..1a83289c25 100644 --- a/backends/platform/android/android.cpp +++ b/backends/platform/android/android.cpp @@ -101,6 +101,7 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) : _screen_changeid(0), _egl_surface_width(0), _egl_surface_height(0), + _htc_fail(false), _force_redraw(false), _game_texture(0), _overlay_texture(0), @@ -132,11 +133,19 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) : _touchpad_scale(66), _dpad_scale(4), _trackball_scale(2) { + Common::String fp = getSystemProperty("ro.build.fingerprint"); + LOGI("Running on: [%s] [%s] SDK:%s ABI:%s", - getSystemProperty("ro.build.fingerprint").c_str(), + fp.c_str(), getSystemProperty("ro.build.display.id").c_str(), getSystemProperty("ro.build.version.sdk").c_str(), getSystemProperty("ro.product.cpu.abi").c_str()); + + fp.toLowercase(); + _htc_fail = fp.contains("htc"); + + if (_htc_fail) + LOGI("Enabling HTC workaround"); } OSystem_Android::~OSystem_Android() { diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h index eb05dbd390..40dc0fe4fd 100644 --- a/backends/platform/android/android.h +++ b/backends/platform/android/android.h @@ -99,6 +99,7 @@ private: int _screen_changeid; int _egl_surface_width; int _egl_surface_height; + bool _htc_fail; bool _force_redraw; diff --git a/backends/platform/android/gfx.cpp b/backends/platform/android/gfx.cpp index bbd09ad20a..ab7240e648 100644 --- a/backends/platform/android/gfx.cpp +++ b/backends/platform/android/gfx.cpp @@ -523,6 +523,14 @@ void OSystem_Android::updateScreen() { if (!JNI::swapBuffers()) LOGW("swapBuffers failed: 0x%x", glGetError()); + + // HTC's GLES drivers are made of fail + // http://code.google.com/p/android/issues/detail?id=3047 + if (!_show_overlay && _htc_fail) { + const Common::Rect &rect = _game_texture->getDrawRect(); + + glScissor(rect.left, rect.top, rect.width(), rect.height()); + } } Graphics::Surface *OSystem_Android::lockScreen() { |