2012-04-28 32 views
2

何らかの理由で、私のEGLコンテキストクライアントのバージョンがOpenGLアプリケーションに設定されていません。私は単純に次の手順を実行して、セットアップのコンテキストを: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に設定する必要があります。バージョンを低く設定する場合はsetEGLContextClientVersion()メソッドをonSurfaceCreated()onSurfaceChanged()またはonDrawFrame()のいずれかとして呼び出す必要があります。

関連する問題