Devo controllare dinamicamente se il dispositivo utilizzato supporta openGL ES 2.0. Come posso farlo?C'è un modo per verificare se il dispositivo Android supporta openGL ES 2.0?
risposta
Sì. Il seguente codice farà il trucco:
final ActivityManager activityManager =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo =
activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
Leggi questo per ulteriori informazioni: http://www.learnopengles.com/android-lesson-one-getting-started/
Si possono anche richiedere voler limitare i dispositivi che non supportano 2.0 di vedere la vostra applicazione nel mercato con l'aggiunta di il seguente al manifest:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Vedere anche the doc of uses-feature
.
getDeviceConfigurationInfo() restituisce un ConfigurationInfo, che in base alle specifiche è: "Informazioni che è possibile recuperare sulle preferenze di configurazione hardware dichiarate da un'applicazione. Ciò corrisponde alle informazioni raccolte dai tag
@jeroent Questo è ciò che la classe 'ConfigurationInfo' afferma nelle sue specifiche ma utilizzando il contesto 'ACTIVITY_SERVICE' in 'getSystemService' recupera un 'ActivityManager' per interagire con lo stato globale del sistema. – Foggzie
Scusami? E come verificare se supporto 3.0 –
Determinazione estensioni OpenGL:
implementazioni di OpenGL variano da dispositivo Android in termini di estensioni alle API OpenGL ES supportati. Queste estensioni includono le compressioni texture, ma in genere includono anche altre estensioni del set di funzionalità OpenGL.
per determinare quali formati di compressione, e altre estensioni OpenGL tessitura, sono supportati su un particolare dispositivo:
Eseguire il seguente codice sui vostri dispositivi di destinazione per determinare quali formati di compressione delle texture sono supportati:
String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS);
Avvertenza: i risultati di questa chiamata variano in base al dispositivo! È necessario eseguire questa chiamata su diversi dispositivi di destinazione per determinare quali tipi di compressione sono comunemente supportati. Rivedere l'output di questo metodo per determinare quali estensioni OpenGL sono supportate sul dispositivo.
Questo metodo è contorto. Se hai intenzione di usare glGetString() non lo chiameresti con GL_EXTENSIONS, lo chiameresti con GL_VERSION e poi analizzerò la stringa in seguito. La classe ConfigurationInfo è progettata per risolvere questo problema rapidamente e facilmente. – Foggzie
Mai usato OpenGL ES, ma visto che ha lo stesso metodo glGetString
come OpenGL. Si dovrebbe fare il trucco:
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml
Oltre a controllare nel codice nei modi che altri hanno detto, se si vuole restrct nel mercato solo a quei dispositivi con 2.0 quindi a manifestarsi:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Si dovrebbe fare entrambe le cose, ho avuto persone che installano l'apk direttamente su dispositivi non adatti e hanno dovuto fare i conti con strane eccezioni. Ora mi butto un 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");
}
Questo codice funziona bene ..
// 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;
}
Per un po ', ho cercato per la stessa risposta, anche. Ma sfortunatamente, non sono riuscito a trovare una descrizione adeguata per questo. Ho appena trovato un modo un minuto fa da solo, e mi sento come se mi piacerebbe condividerlo con tutti.
@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();
}
È possibile utilizzare questo codice nel codice:
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());
questo dovrebbe essere accettato come risposta – Bunny
GLES20 è aggiunto il livello di API 8, non dovrebbe essere sufficiente per controllare contro di esso, invece? – harism
harism: Non è vero. Ho HTC Wildfire con Android 2.2.1. Non supporta OpenGL ES 2.0. – petrnohejl