[Android] Finally check if regular OpenGL is possible on devices and display/hide it's fragment based upon this in AboutActivity.java.

Also added another constructor to EGLHelper which can be used to quickly query for information.
This commit is contained in:
Lioncash
2014-01-21 00:12:40 -05:00
parent f8abdbf91a
commit 0dc437e94d
2 changed files with 61 additions and 25 deletions

View File

@ -1,7 +1,7 @@
package org.dolphinemu.dolphinemu.about; package org.dolphinemu.dolphinemu.about;
import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.settings.video.VideoSettingsFragment; import org.dolphinemu.dolphinemu.utils.EGLHelper;
import android.app.ActionBar; import android.app.ActionBar;
import android.app.ActionBar.Tab; import android.app.ActionBar.Tab;
@ -21,7 +21,7 @@ import android.support.v4.view.ViewPager;
public final class AboutActivity extends Activity implements TabListener public final class AboutActivity extends Activity implements TabListener
{ {
private ViewPager viewPager; private ViewPager viewPager;
private boolean supportsGles3; private EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT);
@Override @Override
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
@ -32,9 +32,6 @@ public final class AboutActivity extends Activity implements TabListener
setContentView(R.layout.viewpager); setContentView(R.layout.viewpager);
viewPager = (ViewPager) findViewById(R.id.pager); viewPager = (ViewPager) findViewById(R.id.pager);
// Check if GLES3 is supported
supportsGles3 = VideoSettingsFragment.SupportsGLES3();
// Initialize the ViewPager adapter. // Initialize the ViewPager adapter.
final ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager()); final ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
viewPager.setAdapter(adapter); viewPager.setAdapter(adapter);
@ -45,10 +42,10 @@ public final class AboutActivity extends Activity implements TabListener
actionBar.addTab(actionBar.newTab().setText(R.string.general).setTabListener(this)); actionBar.addTab(actionBar.newTab().setText(R.string.general).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.cpu).setTabListener(this)); actionBar.addTab(actionBar.newTab().setText(R.string.cpu).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.gles_two).setTabListener(this)); actionBar.addTab(actionBar.newTab().setText(R.string.gles_two).setTabListener(this));
if (supportsGles3) if (eglHelper.supportsGLES3())
actionBar.addTab(actionBar.newTab().setText(R.string.gles_three).setTabListener(this)); actionBar.addTab(actionBar.newTab().setText(R.string.gles_three).setTabListener(this));
// TODO: Check if Desktop GL is possible before enabling. if (eglHelper.supportsOpenGL())
actionBar.addTab(actionBar.newTab().setText(R.string.desktop_gl).setTabListener(this)); actionBar.addTab(actionBar.newTab().setText(R.string.desktop_gl).setTabListener(this));
// Set the page change listener // Set the page change listener
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()
@ -61,6 +58,14 @@ public final class AboutActivity extends Activity implements TabListener
}); });
} }
@Override
public void onDestroy()
{
super.onDestroy();
eglHelper.closeHelper();
}
@Override @Override
public void onTabSelected(Tab tab, FragmentTransaction ft) public void onTabSelected(Tab tab, FragmentTransaction ft)
{ {
@ -94,30 +99,46 @@ public final class AboutActivity extends Activity implements TabListener
@Override @Override
public Fragment getItem(int position) public Fragment getItem(int position)
{ {
switch (position) if (position == 0)
{ {
case 0: return new DolphinInfoFragment(); return new DolphinInfoFragment();
// TODO: The rest of these fragments
case 1: return new Fragment(); // CPU
case 2: return new Fragment(); // GLES 2
case 3: return new Fragment(); // GLES 3
case 4: return new Fragment(); // Desktop GL
default: // Should never happen
return null;
} }
else if (position == 1)
{
return new Fragment(); // CPU
}
else if (position == 2) // GLES 2
{
return new Fragment();
}
else if (position == 3) // GLES 3 or OpenGL (depending on circumstances)
{
if (eglHelper.supportsGLES3())
return new Fragment(); // TODO: Return the GLES 3 fragment in this case (normal case)
else
return new Fragment(); // TODO: Return the OpenGL fragment in this case (GLES3 not supported case)
}
else if (position == 4) // OpenGL fragment
{
return new Fragment();
}
// This should never happen.
return null;
} }
@Override @Override
public int getCount() public int getCount()
{ {
// TODO: In the future, make sure to take into account if (eglHelper.supportsGLES3() && eglHelper.supportsOpenGL())
// whether or not regular Desktop GL is possible.
if (supportsGles3)
{ {
return 5; return 5;
} }
else else if (!eglHelper.supportsGLES3() && !eglHelper.supportsOpenGL())
{
return 3;
}
else // Either regular OpenGL or GLES3 isn't supported
{ {
return 4; return 4;
} }

View File

@ -34,6 +34,21 @@ public final class EGLHelper
public static final int EGL_OPENGL_BIT = 0x0008; public static final int EGL_OPENGL_BIT = 0x0008;
public static final int EGL_OPENGL_ES3_BIT_KHR = 0x0040; public static final int EGL_OPENGL_ES3_BIT_KHR = 0x0040;
/**
* Constructor
* <p>
* Initializes the underlying {@link EGLSurface} with a width and height of 1.
* This is useful if all you need to use this class for is to query information
* from specific API contexts.
*
* @param renderableType Bitmask indicating which types of client API contexts
* the framebuffer config must support.
*/
public EGLHelper(int renderableType)
{
this(1, 1, renderableType);
}
/** /**
* Constructor * Constructor
* *
@ -85,8 +100,8 @@ public final class EGLHelper
* Gets information through EGL.<br/> * Gets information through EGL.<br/>
* <p> * <p>
* Index 0: Vendor <br/> * Index 0: Vendor <br/>
* Index 1: Renderer <br/> * Index 1: Version <br/>
* Index 2: Version <br/> * Index 2: Renderer <br/>
* Index 3: Extensions <br/> * Index 3: Extensions <br/>
* *
* @return information retrieved through EGL. * @return information retrieved through EGL.
@ -95,8 +110,8 @@ public final class EGLHelper
{ {
String[] info = { String[] info = {
mGL.glGetString(GL10.GL_VENDOR), mGL.glGetString(GL10.GL_VENDOR),
mGL.glGetString(GL10.GL_RENDERER),
mGL.glGetString(GL10.GL_VERSION), mGL.glGetString(GL10.GL_VERSION),
mGL.glGetString(GL10.GL_RENDERER),
mGL.glGetString(GL10.GL_EXTENSIONS), mGL.glGetString(GL10.GL_EXTENSIONS),
}; };