我确信萨满的方法很好,但 Google 的文档似乎确实推荐了另外两种方法。从这里:https://developer.android.com/guide/topics/graphics/opengl.html
在使用高于应用清单中要求的最低版本的 OpenGL ES 功能之前,您的应用应检查设备上可用的 API 版本。您可以通过以下两种方式之一执行此操作:
尝试创建更高级别的 OpenGL ES 上下文 (EGLContext) 和
检查结果。
创建最低支持的 OpenGL ES 上下文并检查版本
价值。
以下示例代码演示了如何检查可用的
通过创建 EGLContext 并检查结果的 OpenGL ES 版本。
这个例子展示了如何检查 OpenGL ES 3.0 版本:
private static double glVersion = 3.0;
private static class ContextFactory implements GLSurfaceView.EGLContextFactory {
private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
public EGLContext createContext(
EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
Log.w(TAG, "creating OpenGL ES " + glVersion + " context");
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, (int) glVersion,
EGL10.EGL_NONE };
// attempt to create a OpenGL ES 3.0 context
EGLContext context = egl.eglCreateContext(
display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
return context; // returns null if 3.0 is not supported;
}
}
如果上面显示的 createContext() 方法返回 null,则您的代码
应该创建一个 OpenGL ES 2.0 上下文并回退到使用
只有那个 API。
以下代码示例演示如何检查 OpenGL ES
版本通过首先创建一个最小支持的上下文,然后
检查版本字符串:
// Create a minimum supported OpenGL ES context, then check:
String version = javax.microedition.khronos.opengles.GL10.glGetString(
GL10.GL_VERSION);
Log.w(TAG, "Version: " + version );
// The version format is displayed as: "OpenGL ES <major>.<minor>"
// followed by optional content provided by the implementation.
使用这种方法,如果您发现设备支持
更高级别的 API 版本,必须销毁最低 OpenGL ES
上下文并使用更高可用的 API 创建新上下文
版本。