summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.cpp4
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.h2
-rw-r--r--src/plugins/platforms/android/qandroidplatformopenglcontext.cpp18
-rw-r--r--src/plugins/platforms/android/qandroidplatformopenglcontext.h2
4 files changed, 22 insertions, 4 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp
index 9adefd5b2c..a06f69b8d5 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.cpp
+++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp
@@ -132,7 +132,7 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList &para
m_androidSystemLocale = new QAndroidSystemLocale;
}
-bool QAndroidPlatformIntegration::needsWorkaround()
+bool QAndroidPlatformIntegration::needsBasicRenderloopWorkaround()
{
static bool needsWorkaround =
QtAndroid::deviceName().compare(QStringLiteral("samsung SM-T211"), Qt::CaseInsensitive) == 0
@@ -150,7 +150,7 @@ bool QAndroidPlatformIntegration::hasCapability(Capability cap) const
case OpenGL: return true;
case ForeignWindows: return true;
case ThreadedOpenGL:
- if (needsWorkaround())
+ if (needsBasicRenderloopWorkaround())
return false;
else
return true;
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h
index 2d685bc567..4a3fe6c766 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.h
+++ b/src/plugins/platforms/android/qandroidplatformintegration.h
@@ -120,9 +120,9 @@ public:
QTouchDevice *touchDevice() const { return m_touchDevice; }
void setTouchDevice(QTouchDevice *touchDevice) { m_touchDevice = touchDevice; }
- static bool needsWorkaround();
EGLDisplay m_eglDisplay;
private:
+ static bool needsBasicRenderloopWorkaround();
QTouchDevice *m_touchDevice;
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;
diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.h b/src/plugins/platforms/android/qandroidplatformopenglcontext.h
index 29e5f596d5..10a89d541b 100644
--- a/src/plugins/platforms/android/qandroidplatformopenglcontext.h
+++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.h
@@ -56,6 +56,8 @@ public:
private:
virtual EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface);
+
+ static bool needsFBOReadBackWorkaroud();
};
QT_END_NAMESPACE