2011-03-08 22 views
6

Me gustaría llamar a un método GLES20 cuando se selecciona un elemento del menú de opciones.Uso de OpenGL desde el hilo principal en Android

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

Esto no funciona ya que estoy en el hilo main y no en GLThread. Dice:

llamada a la API de OpenGL ES sin ningún contexto actual (conectado una vez al hilo)

Pero, ¿qué tengo que hacer para que las cosas funcionen?

Respuesta

14

he encontrado la respuesta en mi propia:

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; 
     // ... 
    } 
} 
+0

Matthias Hola, me sale el mismo error en 3.2.Could androide le dice cuando se enfrenta este error con su aplicación? –

+0

@RunO OpenGL y la aplicación principal se están ejecutando en diferentes subprocesos. Por lo tanto, no puede ejecutar comandos OpenGL a partir del hilo principal (consulte el código fuente en cuestión). Entonces, al estar en el hilo principal, tiene que poner en cola este comando al hilo de OpenGL (ver el código fuente en mi respuesta). Espero que esto ayude. De lo contrario, comience una nueva pregunta, describa su problema, déjeme un enlace en un comentario y veré qué puedo hacer. – Matthias

+0

@Matthias muchas gracias –

Cuestiones relacionadas