diff options
author | Yoann Lopes <yoann.lopes@digia.com> | 2014-03-25 17:31:09 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-27 15:33:35 +0100 |
commit | b3f201b8afcf88015f5bff7b3f43e90b13f8a8f1 (patch) | |
tree | a508899d2c72abfdbe0615cd71321d8782b51f07 /src/plugins/platforms/android/qandroidplatformopenglcontext.cpp | |
parent | e7270b68fe36528ba064e0f371f00988b443d1c0 (diff) |
Android: use fbo read back workaround with specific GPUs.
Namely, the Mali 400 and the Adreno 200. We used to enable this
workaround only for the Samsung Galaxy Tab 3, which has a Mali
400. The same problem was confirmed with the Samsung Galaxy
Note N7000 (Mali 400) and the ZTE Blade (Adreno 200).
Task-number: QTBUG-33951
Task-number: QTBUG-34984
Change-Id: Ic624962986f718285b98ab4ca48e22f9aa110753
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformopenglcontext.cpp')
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformopenglcontext.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp index a0b3ae066c..289480c625 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp +++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp @@ -62,6 +62,22 @@ void QAndroidPlatformOpenGLContext::swapBuffers(QPlatformSurface *surface) static_cast<QAndroidPlatformOpenGLWindow *>(surface)->checkNativeSurface(eglConfig()); } +bool QAndroidPlatformOpenGLContext::needsFBOReadBackWorkaroud() +{ + static bool set = false; + static bool needsWorkaround = false; + + if (!set) { + const char *rendererString = reinterpret_cast<const char *>(glGetString(GL_RENDERER)); + needsWorkaround = + qstrcmp(rendererString, "Mali-400 MP") == 0 + || qstrcmp(rendererString, "Adreno (TM) 200") == 0; + set = true; + } + + return needsWorkaround; +} + bool QAndroidPlatformOpenGLContext::makeCurrent(QPlatformSurface *surface) { bool ret = QEGLPlatformContext::makeCurrent(surface); @@ -71,7 +87,7 @@ bool QAndroidPlatformOpenGLContext::makeCurrent(QPlatformSurface *surface) if (rendererString != 0 && qstrncmp(rendererString, "Android Emulator", 16) == 0) ctx_d->workaround_missingPrecisionQualifiers = true; - if (!ctx_d->workaround_brokenFBOReadBack && QAndroidPlatformIntegration::needsWorkaround()) + if (!ctx_d->workaround_brokenFBOReadBack && needsFBOReadBackWorkaroud()) ctx_d->workaround_brokenFBOReadBack = true; return ret; |