I'm creating an application for Android for API levels >= 7. One screen uses a GLSurfaceView
with OpenGL ES 2.0 through the NDK. How can I detect if OpenGL 2.0 is available? I can't use android:glEsVersion="0x00020000"
in my AndroidManifest.xml
because I have to support all phones with API levels >= 7. If there is no support for 2.0, I will be showing a static screen.
I'm using similar code from the hello-gl2 sample app that comes with the NDK. In GL2JNIView, when it sets the OpenGL context, if it doesn't find an appropriate OpenGL config (in my case a config that requires OpenGL ES 2.0) it throws an IllegalArgumentException("No configs match configSpec")
and the app crashes. I can't find a way to intercept that exception and do something else on that screen. Any ideas?
Here's what I found in internets:
private boolean checkGL20Support( Context context )
{
EGL10 egl = (EGL10) EGLContext.getEGL();
EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
int[] version = new int[2];
egl.eglInitialize(display, version);
int EGL_OPENGL_ES2_BIT = 4;
int[] configAttribs =
{
EGL10.EGL_RED_SIZE, 4,
EGL10.EGL_GREEN_SIZE, 4,
EGL10.EGL_BLUE_SIZE, 4,
EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL10.EGL_NONE
};
EGLConfig[] configs = new EGLConfig[10];
int[] num_config = new int[1];
egl.eglChooseConfig(display, configAttribs, configs, 10, num_config);
egl.eglTerminate(display);
return num_config[0] > 0;
}