2012-02-08 34 views

cevap

33

Evet.

final ActivityManager activityManager = 
    (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
final ConfigurationInfo configurationInfo = 
    activityManager.getDeviceConfigurationInfo(); 
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000; 

fazla bilgi için bunu okuyun: http://www.learnopengles.com/android-lesson-one-getting-started/

Ayrıca ekleyerek uygulamanızı mağazada görmesini 2.0 desteklemeyen cihazlar kısıtlamak istediğiniz gerektirebilir aşağıdaki kod işinizi görecektir Açıklamanızın izlediği:

<uses-feature android:glEsVersion="0x00020000" android:required="true" /> 

Ayrıca bkz. the doc of uses-feature.

+0

getDeviceConfigurationInfo() özelliği, özelliklerine göre aşağıdaki şekilde bir ConfigurationInfo döndürür: 'Bir uygulama tarafından bildirilen donanım yapılandırma tercihleri ​​hakkında bilgi alabilirsiniz. Bu, AndroidManifest.xml'nin ve etiketlerinden toplanan bilgilere karşılık gelir. 'Öyleyse bunlar, cihazınızla ilgili bilgi vermek yerine uygulamanıza eklediğiniz cihaz gereksinimleridir. – jeroent

+0

@jeroent 'ConfigurationInfo' sınıfının özelliklerinde belirtildiği, ancak 'getSystemService' içindeki 'ACTIVITY_SERVICE' bağlamının kullanıldığı durum, global sistem durumuyla etkileşim için bir 'ActivityManager' alır. – Foggzie

+0

Özür diler misiniz? Ve destek 3.0 –

2

belirlenmesi OpenGL uzantıları: OpenGL

Uygulamaları desteklenir OpenGL ES API uzantıları açısından Android cihaza göre değişir. Bu uzantılar, doku sıkıştırmalarını içerir, ancak tipik olarak OpenGL özellik kümesine diğer uzantıları da içerir.

, belirli bir cihazda desteklenen ne doku sıkıştırma biçimlerini ve diğer OpenGL eklentileri belirlemek için:

desteklenen ne doku sıkıştırma formatları belirlemek için hedef cihazlar üzerinde şu kodu çalıştırın:

String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS); 

Uyarı: Bu çağrının sonuçları cihaza göre değişir! Hangi sıkıştırma türlerinin yaygın olarak desteklendiğini belirlemek için bu aramayı birkaç hedef cihazda çalıştırmalısınız. Aygıtta hangi OpenGL uzantılarının desteklendiğini belirlemek için bu yöntemin çıktısını gözden geçirin.

+1

Bu yöntem kıvrımlıdır. Eğer glGetString() kullanacaksanız, bunu GL_EXTENSIONS ile çağırmazsınız, bunu GL_VERSION ile çağırır ve sonra dizeyi daha sonra ayrıştırırsınız. ConfigurationInfo sınıfı, bu sorunu hızlı ve kolay bir şekilde çözmek için tasarlanmıştır. – Foggzie

5

:

<uses-feature android:glEsVersion="0x00020000" android:required="true" /> 

Her ikisini de yapmalısınız, insanları doğrudan uygun olmayan cihazlara yükledim ve garip istisnalarla uğraşmak zorunda kaldım. de

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"); 
    } 
0

Bu kod Güzel çalışma .. Bir süre

 // 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; 
    } 
0

, ben aynı cevabı arıyordum: Şimdi bir çalışma zamanı atmak. Fakat maalesef bunun için uygun bir açıklama bulamadım. Bir dakika önce kendim tarafından bir yol buldum ve bunu herkesle paylaşmak isterim.

@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(); 
} 
2

Kodunuzdaki bu kodu kullanabilirsiniz:

  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()); 
+0

bu cevap olarak kabul edilmelidir – Bunny

İlgili konular