我需要动态检查所用设备是否支持openGL ES 2.0。 我怎么能这样做?
答案 0 :(得分:36)
是。以下代码将起到作用:
final ActivityManager activityManager =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo =
activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
阅读本文以获取更多信息: http://www.learnopengles.com/android-lesson-one-getting-started/
您可能还需要通过在清单中添加以下内容来限制不支持2.0的设备在市场中查看您的应用:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
答案 1 :(得分:5)
除了以其他人提到的方式检入代码之外,如果你想在市场上将它重新转移到只有那些带有2.0的设备,那么在清单中:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
您应该同时执行这两项操作,我让人们直接将apk安装到不合适的设备上,并且必须处理奇怪的异常。现在我抛出一个runTime:
private boolean detectOpenGLES20() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo info = am.getDeviceConfigurationInfo();
return (info.reqGlEsVersion >= 0x20000);
}
//in activity onCreate
if (!detectOpenGLES20()) {
throw new RuntimeException("Open GL ES 2.0 was not found on device");
}
答案 2 :(得分:2)
确定OpenGL扩展程序:
OpenGL的实现因Android设备在支持的OpenGL ES API扩展方面而异。这些扩展包括纹理压缩,但通常还包括OpenGL功能集的其他扩展。
确定特定设备支持的纹理压缩格式和其他OpenGL扩展:
在目标设备上运行以下代码,以确定支持哪种纹理压缩格式:
String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS);
警告:此通话的结果因设备而异!您必须在多个目标设备上运行此调用,以确定通常支持的压缩类型。 查看此方法的输出以确定设备支持哪些OpenGL扩展。
答案 3 :(得分:2)
您可以在代码中使用此代码:
int result;
ActivityManager activityManager =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo configInfo = activityManager.getDeviceConfigurationInfo();
if (configInfo.reqGlEsVersion != ConfigurationInfo.GL_ES_VERSION_UNDEFINED) {
result= configInfo.reqGlEsVersion;
} else {
result= 1 << 16; // Lack of property means OpenGL ES version 1
}
Log.e("reqGlEsVersion", String.valueOf(result));
Log.e("getGlEsVersion", configInfo.getGlEsVersion());
答案 4 :(得分:0)
从未使用OpenGL ES,但看到它与OpenGL具有相同的glGetString
方法。它应该做的伎俩:
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml
答案 5 :(得分:0)
此代码工作正常..
// Check if the system supports OpenGL ES 2.0.
final ActivityManager activityManager = ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager
.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
if (supportsEs2) {
Log.i("JO", "configurationInfo.reqGlEsVersion:"
+ configurationInfo.reqGlEsVersion + "supportsEs2:"
+ supportsEs2);
// Request an OpenGL ES 2.0 compatible context.
myGlsurfaceView.setEGLContextClientVersion(2);
final DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
// Set the renderer to our demo renderer, defined below.
myRenderer = new MyRenderer(this, myGlsurfaceView);
} else {
// This is where you could create an OpenGL ES 1.x compatible
// renderer if you wanted to support both ES 1 and ES 2.
return;
}
答案 6 :(得分:0)
有一段时间,我也一直在寻找相同的答案。但不幸的是,我无法找到适当的描述。我一分钟前就找到了自己的方式,我觉得我想与大家分享。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FeatureInfo[] list = this.getPackageManager()
.getSystemAvailableFeatures();
Toast.makeText(this,
"OpenGL ES Version: " + list[list.length - 1].getGlEsVersion(),
Toast.LENGTH_LONG).show();
}