Libgdx utiliza ScreenUtils de forma asincrónica y no detiene el bucle del juego

Quiero capturar la pantalla. Libgdx proporciona algunas funciones definidas en la clase ScreenUtils .

Por ejemplo, final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, w, h);

Mi problema es que se tarda unos 1-3 segundos en obtener esa información. Durante ese tiempo, el bucle del juego se bloquea y el usuario lo define como un retraso.

Internamente la clase ScreenUtils , usa Gdx.gl.glReadPixels . Si ejecuto el método ScreenUtils.getFrameBufferPixmap en un subproceso, no hay retraso, pero captura la pantalla en el método incorrecto, lo cual es lógico desde que se ejecuta el bucle de juego y cambia la información.

¿Es de alguna manera posible copiar el contexto GL o guardarlo y generar el Pixmap en un momento posterior del tiempo con la ayuda de un hilo? Por supuesto, la copia / guardar la operación debe hacerse de forma instantánea, de lo contrario no ahorro nada.

Yo uso ShapeRenderer para hacer mis cosas en la pantalla.

2 Solutions collect form web for “Libgdx utiliza ScreenUtils de forma asincrónica y no detiene el bucle del juego”

Después de poca investigación he encontrado una alternativa más rápida a glReadPixels – Pixel Buffer Object que está disponible desde Android 4.3 – https://vec.io/posts/faster-alternatives-to-glreadpixels-and-glteximage2d-in-opengl-es

No es posible llamar a glReadPixels en otro subproceso que render thread – https://stackoverflow.com/a/19975386/2158970

He encontrado una solución, que funciona en mi caso ya que sólo tengo gráficos / formas menores. Básicamente, copio todos los objetos, que son dibujados a la vista, como se describe aquí. En un subproceso de fondo genero un mapa de bits mediante programación y uso la información almacenada en mis objetos para dibujar al mapa de bits.

  • Cómo detener el hilo de ASyncTask en android
  • ¿Por qué los servicios de android se ejecutan en el hilo de la interfaz de usuario?
  • Programación de procesos Android
  • TarsosDSP y SurfaceView múltiple problema de subprocesamiento
  • Android - cómo hacer el fondo de rosca correctamente?
  • Android de larga duración 'servicio'
  • Facebook y GoogleAnalytics está causando la señal fatal 11 (SIGSEGV)
  • ¿Cuál es la diferencia entre View.postDelayed () y Handler.postDelayed () en el hilo principal?
  • Android "Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas." Error en Fragmento
  • Comportamiento impredecible al acceder a Ver desde otro hilo
  • Cargar anuncio (adMob) en el subproceso de fondo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.