2012-04-28 242 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上下文只對surfaceview線程(調用onDrawFrame,onSurfaceChanged,onSurfaceCreated等)有效。您應該在回調中編譯着色器。

3

由於Android 2.2及更高版本支持OpenGL 2.0,因此您必須將Android支持的最低API版本設置爲8。正如Tim所說,如果將版本設置爲較低,則必須在onSurfaceCreated(),onSurfaceChanged()onDrawFrame()中調用setEGLContextClientVersion()方法。