2012-02-08 5 views
23

사용한 장치가 OpenGL ES 2.0을 지원하는지 동적으로 확인해야합니다. 어떻게 할 수 있습니까?안드로이드 장치가 OpenGL ES 2.0을 지원하는지 확인하는 방법이 있습니까?

+0

GLES20는 API 레벨 8에 추가되고, 그 대신에 확인하기에 충분하지 않겠습니까? – harism

+2

harism : 그것은 사실이 아닙니다. Android 2.2.1과 함께 HTC Wildfire를 사용하고 있습니다. 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()는 사양에 따라 '응용 프로그램에서 선언 한 하드웨어 구성 기본 설정에 대한 정보를 검색 할 수있는 ConfigurationInfo를 반환합니다. 이는 AndroidManifest.xml의 태그에서 수집 된 정보에 해당합니다. '이제는 기기에 대한 정보가 아닌 앱에 추가 한 기기 요구 사항입니다. – jeroent

+0

@jeroent 'ConfigurationInfo'클래스가 사양에 명시되어 있지만 'getSystemService'의 'ACTIVITY_SERVICE'컨텍스트를 사용하면 전역 시스템 상태와 상호 작용하기위한 'ActivityManager'가 검색됩니다. – Foggzie

+0

실례합니다. 그리고 지원 여부를 확인하는 방법 3.0 –

2

결정 OpenGL을 확장 : OpenGL을

구현이 지원됩니다는 OpenGL ES API에 확장의 측면에서 안드로이드 장치에 따라 다릅니다. 이러한 확장에는 텍스처 압축이 포함되지만 일반적으로 OpenGL 기능 세트의 다른 확장도 포함됩니다.

은 특정 장치에 지원되는 텍스처 압축 포맷을 다른 OpenGL을 확장 확인하려면 다음

지원되는 텍스처 압축 포맷을 확인하려면 대상 장치에서 다음 코드를 실행

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

경고 :이 호출의 결과는 장치에 따라 다릅니다! 일반적으로 지원되는 압축 유형을 판별하려면 여러 대상 장치에서이 호출을 실행해야합니다. 이 메서드의 출력을 검토하여 장치에서 지원되는 OpenGL 확장명을 확인하십시오.

+1

이 방법은 복잡합니다. GL_EXTENSIONS를 사용하여 glGetString()을 사용하려는 경우 GL_VERSION을 사용하여 호출 한 다음 나중에 문자열을 구문 분석합니다. ConfigurationInfo 클래스는이 문제를 빠르고 쉽게 해결하도록 설계되었습니다. – Foggzie

0

OpenGL ES는 사용하지 않았지만 OpenGL과 동일한 glGetString 메서드를 사용합니다. 이 트릭을 수행해야합니다

당신이 시장을 restrct하려면 다음 매니페스트 2.0 만 장치에, 다른 사람이 언급 한 방법으로 코드를 확인하는 것 외에도 http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml

5

:

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

둘 다 수행해야합니다. 사람들에게 APK를 부적합한 장치에 직접 설치하고 이상한 예외를 처리해야했습니다. 도

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

관련 문제