2011-03-08 15 views
6

Seçenekler menüsünden bir öğe seçildiğinde, GLES20 yöntemini çağırmak istiyorum.OpenGL'yi Android'deki ana iş parçacığından kullanma

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.clear: 
      GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); 
      break; 
     // ... 
    } 
} 

ben main dizisindeki değil GLThread olduğum beri bu işe yaramaz. Şöyle ki: hiçbir geçerli bağlam OpenGL ES API

çağrı (diş başına bir kez kaydedilir)

Ama işler çalışma almak için ne gerekiyor?

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.clear: 
      // GLSurfaceView.queueEvent 
      surface.queueEvent(new Runnable() { 
       @Override 
       public void run() { 
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); 
       } 
      }); 
      break; 
     // ... 
    } 
} 

cevap

14

başıma cevabını buldu?
+0

hi Matthias, sana başvurunuzda bu hatayı karşılaştıklarında söyleyebilir android 3.2.Could aynı hatayı alıyorum: –

+0

@RunO OpenGL ve ana uygulama farklı iş parçacıklarında çalışıyor. Bu nedenle, ana iş parçacığından OpenGL komutlarını çalıştıramazsınız (söz konusu kaynak koduna bakın). Yani, ana iş parçacığında olmak, bu komutu OpenGL iş parçacığına sıralamak zorundasınız (cevabımdaki kaynak koduna bakın). Umarım bu yardımcı olur. Aksi takdirde yeni bir soru başlatabilir, sorununuzu açıklayabilir, bir yorumda bana bir bağlantı bırakabilir ve ne yapabileceğimi görebilirim. – Matthias

+0

@Matthias çok teşekkürler –

İlgili konular