2012-04-28 2 views
2

이유가 무엇이든 내 EGL 컨텍스트 클라이언트 버전이 내 OpenGL 응용 프로그램에 설정되지 않습니다. I 설치 단순히 다음을 수행하여 컨텍스트 : Android setEGLContextClientVersion()이 제대로 등록되지 않았습니다.

final boolean supportEs2 = configurationInfo.reqGlEsVersion >= 0x20000; 

     if (supportEs2) { //<-- this resolves to true. 


      mGLView.setEGLContextClientVersion(2); 

      try { 
       mGLView.setRenderer(new PongDroidRenderer(getApplicationContext())); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

그리고 그 후

, 나는 인해 제대로 호출되지 않는 상황에 셰이더를 컴파일하려고 런타임 예외를 얻을. 몇 가지 조사를 한 후에, 메인 스레드에서 OpenGL을 호출 할 수 없다는 것을 알았지 만, 내 응용 프로그램 자체를 알고있는 한 은 멀티 스레드 (물론 시스템이지만)이 아닙니다. 그래서 저는 여기에있는 사람들이 제가 어떻게이 일을 할 수 있는지에 대해 어떤 생각을 갖고 있는지보기를 희망합니다. 그리고 더 많은 정보가 제공된다면 그 단어를 말하고 여기에 올리겠습니다.

답변

3

glSurfaceView를 사용하고 있습니까? OpenGL 컨텍스트는 표면 뷰 스레드 (onDrawFrame, onSurfaceChanged, onSurfaceCreated 등을 호출하는 스레드)에서만 유효합니다. 이러한 콜백에서 쉐이더를 컴파일해야합니다.

3

Android 2.2 이상에서 OpenGL 2.0이 지원되므로 Android의 최소 지원 API 버전을 8로 설정해야합니다. 버전을 낮게 설정 한 경우 onSurfaceCreated(), onSurfaceChanged() 또는 onDrawFrame() 중 하나를 Tim과 같이 setEGLContextClientVersion() 메서드로 호출해야합니다.

관련 문제