From 7ed8e6a29c5f8a0f619104bc68b8854feda98fac Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 24 Nov 2013 22:45:48 -0600 Subject: [PATCH] [Android] Fix the check for the Qualcomm graphics driver version for v53 drivers with the screen being rotated 90 degrees. Initialize the OpenGL information grabbing only once. Check for v14 Qualcomm drivers and spit out an error if the user tries selecting OpenGL ES 3. --- Source/Android/res/values-ja/strings.xml | 1 + Source/Android/res/values/strings.xml | 1 + .../settings/VideoSettingsFragment.java | 56 +++++++++++++++---- 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/Source/Android/res/values-ja/strings.xml b/Source/Android/res/values-ja/strings.xml index 77db4fee79..db9c1854fd 100644 --- a/Source/Android/res/values-ja/strings.xml +++ b/Source/Android/res/values-ja/strings.xml @@ -29,6 +29,7 @@ デバイスの互換性の警告 この電話は、NEON拡張をサポートしていません。 おそらくDolphinを実行することはできません。\nあなたはとにかくそれを実行してみますか? + デバイスはOpenGLES3のビデオドライバのバグがあります。\nあなたはとにかくそれを使用してみたいのですか? クリックされたファイル: %1$s diff --git a/Source/Android/res/values/strings.xml b/Source/Android/res/values/strings.xml index ca7157fd44..7ffc2bcfd2 100644 --- a/Source/Android/res/values/strings.xml +++ b/Source/Android/res/values/strings.xml @@ -29,6 +29,7 @@ Device Compatibility Warning Your phone doesn\'t support NEON which makes it incapable of running Dolphin Mobile?\nDo you want to try anyway? + Your device has known buggy video drivers for OpenGL ES 3.\nDo you want to try anyway? File clicked: %1$s diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java index e181fc32bc..81d4d2dad7 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java @@ -7,6 +7,8 @@ package org.dolphinemu.dolphinemu.settings; import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; @@ -29,6 +31,7 @@ public final class VideoSettingsFragment extends PreferenceFragment public static String m_GLRenderer; public static String m_GLExtensions; public static float m_QualcommVersion; + public static boolean m_Inited = false; private Activity m_activity; /** @@ -147,20 +150,24 @@ public final class VideoSettingsFragment extends PreferenceFragment */ public static boolean SupportsGLES3() { - VersionCheck mbuffer = new VersionCheck(); - m_GLVersion = mbuffer.getVersion(); - m_GLVendor = mbuffer.getVendor(); - m_GLRenderer = mbuffer.getRenderer(); - m_GLExtensions = mbuffer.getExtensions(); - boolean mSupportsGLES3 = false; + if (!m_Inited) + { + VersionCheck mbuffer = new VersionCheck(); + m_GLVersion = mbuffer.getVersion(); + m_GLVendor = mbuffer.getVendor(); + m_GLRenderer = mbuffer.getRenderer(); + m_GLExtensions = mbuffer.getExtensions(); + m_Inited = true; + } + // Check for OpenGL ES 3 support (General case). if (m_GLVersion != null && m_GLVersion.contains("OpenGL ES 3.0")) mSupportsGLES3 = true; // Checking for OpenGL ES 3 support for certain Qualcomm devices. - if (!mSupportsGLES3 && m_GLVendor != null && m_GLVendor.equals("Qualcomm")) + if (m_GLVendor != null && m_GLVendor.equals("Qualcomm")) { if (m_GLRenderer.contains("Adreno (TM) 3")) { @@ -182,6 +189,7 @@ public final class VideoSettingsFragment extends PreferenceFragment mSupportsGLES3 = true; } } + return mSupportsGLES3; } @@ -253,10 +261,36 @@ public final class VideoSettingsFragment extends PreferenceFragment } else if (preference.getString(key, "Software Renderer").equals("OGL")) { - mainScreen.getPreference(0).setEnabled(true); - mainScreen.getPreference(1).setEnabled(true); - mainScreen.getPreference(3).setEnabled(true); - //mainScreen.getPreference(4).setEnabled(false); + // Create an alert telling them that their phone sucks + if (VideoSettingsFragment.SupportsGLES3() + && VideoSettingsFragment.m_GLVendor != null + && VideoSettingsFragment.m_GLVendor.equals("Qualcomm") + && VideoSettingsFragment.m_QualcommVersion == 14.0f) + { + AlertDialog.Builder builder = new AlertDialog.Builder(m_activity); + builder.setTitle(R.string.device_compat_warning); + builder.setMessage(R.string.device_gles3compat_warning_msg); + builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + mainScreen.getPreference(0).setEnabled(true); + mainScreen.getPreference(1).setEnabled(true); + mainScreen.getPreference(3).setEnabled(true); + //mainScreen.getPreference(4).setEnabled(false); + } + }); + builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) + { + // Get an editor. + SharedPreferences.Editor editor = sPrefs.edit(); + editor.putString("gpuPref", "Software Renderer"); + editor.commit(); + videoBackends.setValue("Software Renderer"); + videoBackends.setSummary("Software Renderer"); + } + }); + builder.show(); + } } } }