summaryrefslogtreecommitdiff
path: root/Source/Android/src
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2014-01-22 11:56:25 -0500
committerLioncash <mathew1800@gmail.com>2014-01-22 11:56:25 -0500
commit36863bf7b8ecf6c33bbe412b48a3af280d907d04 (patch)
tree55b301f5241699258f1c5e900e2d59d8b600a106 /Source/Android/src
parent5c4d087e8fa85e5b667396d1efca937f09d99b8b (diff)
[Android] Get rid of the version check class in VideoSettingsFragment.java. Not needed anymore since the introduction of the EGLHelper class. Also decouples some classes from the VideoSettingsFragment.java class (yay).
- Minor other change is that the EGL helper fields in GLES3InfoFragment.java, GLES2InfoFragment.java, and GLInfoFragment.java are made final.
Diffstat (limited to 'Source/Android/src')
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/about/AboutActivity.java2
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/about/DolphinInfoFragment.java6
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java2
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java2
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java3
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java45
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java201
7 files changed, 75 insertions, 186 deletions
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/AboutActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/AboutActivity.java
index 2ab2d2b9e7..ab2bda3e0a 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/about/AboutActivity.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/AboutActivity.java
@@ -29,7 +29,7 @@ import java.util.List;
public final class AboutActivity extends Activity implements TabListener
{
private ViewPager viewPager;
- private EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
+ private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
// Represents an item in the multiple About fragments.
public static final class AboutFragmentItem
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/DolphinInfoFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/DolphinInfoFragment.java
index 6820ae9923..af7d1a14e2 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/about/DolphinInfoFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/DolphinInfoFragment.java
@@ -12,6 +12,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
+
import java.util.ArrayList;
import java.util.List;
@@ -19,7 +20,7 @@ import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.about.AboutActivity.AboutFragmentItem;
import org.dolphinemu.dolphinemu.about.AboutActivity.InfoFragmentAdapter;
-import org.dolphinemu.dolphinemu.settings.video.VideoSettingsFragment;
+import org.dolphinemu.dolphinemu.utils.EGLHelper;
/**
* Represents the about screen.
@@ -30,13 +31,14 @@ public final class DolphinInfoFragment extends ListFragment
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
ListView rootView = (ListView) inflater.inflate(R.layout.gamelist_listview, container, false);
+ EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
final String yes = getString(R.string.yes);
final String no = getString(R.string.no);
List<AboutFragmentItem> Input = new ArrayList<AboutFragmentItem>();
Input.add(new AboutFragmentItem(getString(R.string.build_revision), NativeLibrary.GetVersionString()));
- Input.add(new AboutFragmentItem(getString(R.string.supports_gles3), VideoSettingsFragment.SupportsGLES3() ? yes : no));
+ Input.add(new AboutFragmentItem(getString(R.string.supports_gles3), eglHelper.supportsGLES3() ? yes : no));
Input.add(new AboutFragmentItem(getString(R.string.supports_neon), NativeLibrary.SupportsNEON() ? yes : no));
InfoFragmentAdapter adapter = new InfoFragmentAdapter(getActivity(), R.layout.about_layout, Input);
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java
index 10556e3faf..12d5374d79 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java
@@ -28,7 +28,7 @@ import java.util.List;
*/
public final class GLES2InfoFragment extends ListFragment
{
- private EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
+ private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
private final Limit[] Limits = {
new Limit("Vendor", GLES20.GL_VENDOR, Type.STRING),
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java
index 563e46e21c..3bf6e8a3cd 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java
@@ -28,7 +28,7 @@ import java.util.List;
*/
public final class GLES3InfoFragment extends ListFragment
{
- private EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES3_BIT_KHR);
+ private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES3_BIT_KHR);
private final Limit[] Limits = {
new Limit("Vendor", GLES30.GL_VENDOR, Type.STRING),
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java
index 14afce2028..a3d7167528 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java
@@ -31,7 +31,7 @@ import javax.microedition.khronos.opengles.GL10;
*/
public final class GLInfoFragment extends ListFragment
{
- private EGLHelper eglHelper;
+ private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_BIT);
private final Limit[] Limits = {
new Limit("Vendor", GL10.GL_VENDOR, Type.STRING),
@@ -43,7 +43,6 @@ public final class GLInfoFragment extends ListFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
- eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_BIT);
ListView rootView = (ListView) inflater.inflate(R.layout.gamelist_listview, container, false);
List<AboutActivity.AboutFragmentItem> Input = new ArrayList<AboutActivity.AboutFragmentItem>();
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java
index f04bf77e4e..7f6896536c 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java
@@ -22,10 +22,12 @@ import android.view.WindowManager.LayoutParams;
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.settings.input.InputConfigFragment;
-import org.dolphinemu.dolphinemu.settings.video.VideoSettingsFragment;
+import org.dolphinemu.dolphinemu.utils.EGLHelper;
import java.util.List;
+import javax.microedition.khronos.opengles.GL10;
+
/**
* This is the activity where all of the emulation handling happens.
* This activity is responsible for displaying the SurfaceView that we render to.
@@ -65,11 +67,7 @@ public final class EmulationActivity extends Activity
// This bug is fixed in Qualcomm driver v53
// Mali isn't affected by this bug.
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
- if (sharedPrefs.getString("gpuPref", "Software Rendering").equals("OGL")
- && VideoSettingsFragment.SupportsGLES3()
- && VideoSettingsFragment.m_GLVendor != null
- && VideoSettingsFragment.m_GLVendor.equals("Qualcomm")
- && VideoSettingsFragment.m_QualcommVersion < 53.0f)
+ if (hasBuggedDriverDimensions())
NativeLibrary.SetDimensions((int)screenHeight, (int)screenWidth);
else
NativeLibrary.SetDimensions((int)screenWidth, (int)screenHeight);
@@ -330,4 +328,39 @@ public final class EmulationActivity extends Activity
return true;
}
+
+ // For handling bugged driver dimensions (applies mainly to Qualcomm devices)
+ private boolean hasBuggedDriverDimensions()
+ {
+ final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
+ final String vendor = eglHelper.getGL().glGetString(GL10.GL_VENDOR);
+ final String version = eglHelper.getGL().glGetString(GL10.GL_VERSION);
+ final String renderer = eglHelper.getGL().glGetString(GL10.GL_RENDERER);
+
+ if (sharedPrefs.getString("gpuPref", "Software Rendering").equals("OGL")
+ && eglHelper.supportsGLES3()
+ && vendor.equals("Qualcomm")
+ && renderer.equals("Adreno (TM) 3"))
+ {
+ final int start = version.indexOf("V@") + 2;
+ final StringBuilder versionBuilder = new StringBuilder();
+
+ for (int i = start; i < version.length(); i++)
+ {
+ char c = version.charAt(i);
+
+ // End of numeric portion of version string.
+ if (c == ' ')
+ break;
+
+ versionBuilder.append(c);
+ }
+
+ if (Float.parseFloat(versionBuilder.toString()) < 53.0f)
+ return true;
+ }
+
+
+ return false;
+ }
}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java
index f36a7d3ec7..55c1eb8963 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java
@@ -15,9 +15,10 @@ import android.preference.ListPreference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
+
import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.utils.EGLHelper;
-import javax.microedition.khronos.egl.*;
import javax.microedition.khronos.opengles.GL10;
/**
@@ -25,173 +26,9 @@ import javax.microedition.khronos.opengles.GL10;
*/
public final class VideoSettingsFragment extends PreferenceFragment
{
- public static String m_GLVersion;
- public static String m_GLVendor;
- public static String m_GLRenderer;
- public static String m_GLExtensions;
- public static boolean m_SupportsGLES3 = false;
- public static float m_QualcommVersion;
- public static boolean m_Inited = false;
-
- /**
- * Class which provides a means to retrieve various
- * info about the OpenGL ES support/features within a device.
- */
- public static final class VersionCheck
- {
- private EGL10 mEGL;
- private EGLDisplay mEGLDisplay;
- private EGLConfig[] mEGLConfigs;
- private EGLConfig mEGLConfig;
- private EGLContext mEGLContext;
- private EGLSurface mEGLSurface;
- private GL10 mGL;
-
- String mThreadOwner;
-
- public VersionCheck()
- {
- int[] version = new int[2];
- int[] attribList = new int[] {
- EGL10.EGL_WIDTH, 1,
- EGL10.EGL_HEIGHT, 1,
- EGL10.EGL_RENDERABLE_TYPE, 4,
- EGL10.EGL_NONE
- };
- int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
- int[] ctx_attribs = new int[] {
- EGL_CONTEXT_CLIENT_VERSION, 2,
- EGL10.EGL_NONE
- };
-
- // No error checking performed, minimum required code to elucidate logic
- mEGL = (EGL10) EGLContext.getEGL();
- mEGLDisplay = mEGL.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
- mEGL.eglInitialize(mEGLDisplay, version);
- mEGLConfig = chooseConfig(); // Choosing a config is a little more complicated
- mEGLContext = mEGL.eglCreateContext(mEGLDisplay, mEGLConfig, EGL10.EGL_NO_CONTEXT, ctx_attribs);
- mEGLSurface = mEGL.eglCreatePbufferSurface(mEGLDisplay, mEGLConfig, attribList);
- mEGL.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext);
- mGL = (GL10) mEGLContext.getGL();
-
- // Record thread owner of OpenGL context
- mThreadOwner = Thread.currentThread().getName();
- }
-
- /**
- * Gets the OpenGL ES version string.
- *
- * @return the OpenGL ES version string.
- */
- public String getVersion()
- {
- return mGL.glGetString(GL10.GL_VERSION);
- }
-
- /**
- * Gets the OpenGL ES vendor string.
- *
- * @return the OpenGL ES vendor string.
- */
- public String getVendor()
- {
- return mGL.glGetString(GL10.GL_VENDOR);
- }
-
- /**
- * Gets the name of the OpenGL ES renderer.
- *
- * @return the name of the OpenGL ES renderer.
- */
- public String getRenderer()
- {
- return mGL.glGetString(GL10.GL_RENDERER);
- }
-
- /**
- * Gets the extension that the device supports
- *
- * @return String containing the extensions
- */
- public String getExtensions()
- {
- return mGL.glGetString(GL10.GL_EXTENSIONS);
- }
-
- private EGLConfig chooseConfig()
- {
- int[] attribList = new int[] {
- EGL10.EGL_RED_SIZE, 8,
- EGL10.EGL_GREEN_SIZE, 8,
- EGL10.EGL_BLUE_SIZE, 8,
- EGL10.EGL_ALPHA_SIZE, 8,
- EGL10.EGL_NONE
- };
-
- // Grab how many configs there are
- int[] numConfig = new int[1];
- mEGL.eglChooseConfig(mEGLDisplay, attribList, null, 0, numConfig);
- int configSize = numConfig[0];
- mEGLConfigs = new EGLConfig[configSize];
- mEGL.eglChooseConfig(mEGLDisplay, attribList, mEGLConfigs, configSize, numConfig);
-
- // Check if one config supports GLES3
- for (int i = 0; i < configSize; ++i)
- {
- int[] value = new int[1];
- boolean retval = mEGL.eglGetConfigAttrib(mEGLDisplay, mEGLConfigs[i], EGL10.EGL_RENDERABLE_TYPE, value);
- if (retval && (value[0] & (1 << 6)) != 0)
- {
- m_SupportsGLES3 = true;
- break;
- }
- }
-
- return mEGLConfigs[0]; // Best match is probably the first configuration
- }
- }
-
- /**
- * Checks if this device supports OpenGL ES 3.
- *
- * @return true if this device supports OpenGL ES 3; false otherwise.
- */
- public static boolean SupportsGLES3()
- {
- if (!m_Inited)
- {
- VersionCheck mbuffer = new VersionCheck();
- m_GLVersion = mbuffer.getVersion();
- m_GLVendor = mbuffer.getVendor();
- m_GLRenderer = mbuffer.getRenderer();
- m_GLExtensions = mbuffer.getExtensions();
-
- // Checking for OpenGL ES 3 support for certain Qualcomm devices.
- if (m_GLVendor != null && m_GLVendor.equals("Qualcomm"))
- {
- if (m_GLRenderer.contains("Adreno (TM) 3"))
- {
- int mVStart = m_GLVersion.indexOf("V@") + 2;
- int mVEnd = 0;
-
- for (int a = mVStart; a < m_GLVersion.length(); ++a)
- {
- if (m_GLVersion.charAt(a) == ' ')
- {
- mVEnd = a;
- break;
- }
- }
-
- m_QualcommVersion = Float.parseFloat(m_GLVersion.substring(mVStart, mVEnd));
- }
- }
-
- m_Inited = true;
- }
-
- return m_SupportsGLES3;
- }
+ private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
+ private final String vendor = eglHelper.getGL().glGetString(GL10.GL_VENDOR);
+ private final String version = eglHelper.getGL().glGetString(GL10.GL_VERSION);
@Override
public void onCreate(Bundle savedInstanceState)
@@ -205,7 +42,7 @@ public final class VideoSettingsFragment extends PreferenceFragment
// Setting valid video backends.
//
final ListPreference videoBackends = (ListPreference) findPreference("gpuPref");
- final boolean deviceSupportsGLES3 = SupportsGLES3();
+ final boolean deviceSupportsGLES3 = eglHelper.supportsGLES3();
if (deviceSupportsGLES3)
{
@@ -264,10 +101,9 @@ public final class VideoSettingsFragment extends PreferenceFragment
//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)
+ if (eglHelper.supportsGLES3()
+ && vendor.equals("Qualcomm")
+ && getQualcommVersion() == 14.0f)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.device_compat_warning);
@@ -295,4 +131,23 @@ public final class VideoSettingsFragment extends PreferenceFragment
}
});
}
+
+ private float getQualcommVersion()
+ {
+ final int start = version.indexOf("V@") + 2;
+ final StringBuilder versionBuilder = new StringBuilder();
+
+ for (int i = start; i < version.length(); i++)
+ {
+ char c = version.charAt(i);
+
+ // End of numeric portion of version string.
+ if (c == ' ')
+ break;
+
+ versionBuilder.append(c);
+ }
+
+ return Float.parseFloat(versionBuilder.toString());
+ }
}