2012-02-08 17 views
23

यदि उपयोग किया गया डिवाइस OpenGL ES 2.0 का समर्थन करता है तो मुझे गतिशील रूप से जांच करने की आवश्यकता है। मैं यह कैसे कर सकता हूं?क्या यह जांचने का कोई तरीका है कि एंड्रॉइड डिवाइस ओपनजीएल ईएस 2.0 का समर्थन करता है या नहीं?

+0

GLES20 एपीआई स्तर 8 पर जोड़ा जाता है, नहीं यह बजाय इसके खिलाफ जांच करने के लिए पर्याप्त होना चाहिए? – harism

+2

harism: यह सच नहीं है। मेरे पास एंड्रॉइड 2.2.1 के साथ एचटीसी वाइल्डफायर है। यह OpenGL ES 2.0 का समर्थन नहीं करता है। – petrnohejl

उत्तर

33

हां।

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" /> 

the doc of uses-feature भी देखें।

+0

getDeviceConfigurationInfo() एक कॉन्फ़िगरेशनइन्फो देता है, जो चश्मा के अनुसार है: 'जानकारी जो आप किसी एप्लिकेशन द्वारा घोषित हार्डवेयर कॉन्फ़िगरेशन वरीयताओं के बारे में पुनर्प्राप्त कर सकते हैं। यह AndroidManifest.xml के <उपयोग-कॉन्फ़िगरेशन> और <उपयोग-सुविधा> टैग से एकत्र की गई जानकारी से मेल खाता है। 'ऐसा लगता है कि डिवाइस के बारे में जानकारी होने के बजाए ये आपके डिवाइस में जोड़े गए डिवाइस की आवश्यकताएं हैं। – jeroent

+0

@jeroent 'कॉन्फ़िगरेशनइन्फो' वर्ग अपनी चश्मे में बताता है लेकिन 'getSystemService' में 'ACTIVITY_SERVICE' संदर्भ का उपयोग करके वैश्विक सिस्टम स्थिति के साथ बातचीत के लिए 'गतिविधि प्रबंधक' पुनर्प्राप्त करता है। – Foggzie

+0

क्षमा करें? और कैसे जांचें 3.0 –

2

निर्धारण ओपन एक्सटेंशन: ओपन के

क्रियान्वयन कि समर्थन कर रहे OpenGL ES एपीआई के लिए एक्सटेंशन के मामले में एंड्रॉयड डिवाइस के हिसाब से बदलती। इन एक्सटेंशन में बनावट संपीड़न शामिल है, लेकिन आम तौर पर ओपनजीएल फीचर सेट में अन्य एक्सटेंशन भी शामिल हैं।

निर्धारित करने के लिए क्या बनावट संपीड़न प्रारूपों, और अन्य ओपन एक्सटेंशन, किसी विशिष्ट डिवाइस पर समर्थित हैं:

निर्धारित करने के लिए क्या बनावट संपीड़न प्रारूपों का समर्थन कर रहे अपने लक्ष्य उपकरणों पर निम्न कोड चलाएँ:

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

चेतावनी: इस कॉल के परिणाम डिवाइस द्वारा भिन्न होते हैं! यह कॉल यह निर्धारित करने के लिए कि कौन से संपीड़न प्रकार सामान्य रूप से समर्थित हैं, आपको कई लक्ष्य उपकरणों पर यह कॉल चलाना होगा। डिवाइस पर ओपनजीएल एक्सटेंशन समर्थित हैं यह निर्धारित करने के लिए इस विधि के आउटपुट की समीक्षा करें।

+1

यह विधि गठित है। यदि आप glGetString() का उपयोग करने जा रहे हैं तो आप इसे GL_EXTENSIONS के साथ नहीं बुलाएंगे, आप इसे GL_VERSION के साथ कॉल करेंगे और फिर बाद में स्ट्रिंग को पार्स करेंगे। कॉन्फ़िगरेशनइन्फो क्लास को इस समस्या को जल्दी और आसानी से हल करने के लिए डिज़ाइन किया गया है। – Foggzie

5

केवल 2.0 के साथ उन उपकरणों तो प्रकट में करने के लिए, तरीके कि दूसरों का उल्लेख किया है में कोड में पता चल सके कि आप बाजार में यह restrct करना चाहते हैं के अलावा:

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

आपको दोनों करना चाहिए, मैंने लोगों को सीधे अनुपयुक्त उपकरणों पर एपीके स्थापित किया है और अजीब अपवादों से निपटना पड़ा है।

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

इस कोड को ठीक काम कर रहा ..

 // 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

थोड़ी देर के लिए, मैं एक ही जवाब तलाश रहे हैं, भी: अब मैं एक क्रम फेंक देते हैं। लेकिन दुर्भाग्य से, मुझे इसके लिए उचित विवरण नहीं मिला। मुझे बस एक मिनट पहले एक रास्ता मिला, और मुझे लगता है कि मैं इसे सबके साथ साझा करना चाहता हूं।

@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

अपने कोड में इस कोड का उपयोग कर सकते हैं:

  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

इसे उत्तर के रूप में स्वीकार किया जाना चाहिए – Bunny

संबंधित मुद्दे

 संबंधित मुद्दे