aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/android
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/android')
-rw-r--r--backends/platform/android/android.cpp11
-rw-r--r--backends/platform/android/android.h1
-rw-r--r--backends/platform/android/gfx.cpp8
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() {