2012-04-28 3 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

Вы должны установить минимально поддерживаемую версию API для Android до 8, поскольку OpenGL 2.0 поддерживается в Android 2.2 и выше. Если вы установите версию ниже, вы должны вызвать метод setEGLContextClientVersion() либо в onSurfaceCreated(), onSurfaceChanged(), либо onDrawFrame(), как сказал Тим.

Смежные вопросы