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.

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.

  • Error de Android Studio: "El método getText () debe ser llamado desde el subproceso de interfaz de usuario, el subproceso inferido actualmente es el trabajador
  • Android: la mejor práctica para realizar operaciones asíncronas en getView ()
  • Android: java.lang.OutOfMemoryError: falla en la creación del hilo
  • Limitar el rendimiento con RxJava
  • Programación Android Camera.PreviewCallback (con OpenGL y OpenCV)
  • Prueba unitaria de interfaz de usuario asíncrono con Espresso, IdlingResource falla con condición de carrera
  • Servicio androide con repetición de hilo en el fondo con el bloqueo parcial de la estela
  • Thread.sleep detiene todas las Asyntasks anidadas
  • Seguridad de subprocesos al realizar iteraciones a través de un ArrayList utilizando foreach
  • java.lang.IllegalStateException: Llamar Ver métodos en otro subproceso que el subproceso de interfaz de usuario
  • Actualización de Android TextView en subprocesos y ejecución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.