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 administrar una conexión Bluetooth en Android a través de cambios de configuración?
  • ¿En qué hilo se ejecuta onReceive () de un BroacastReceiver registrado con LocalBroadcastManager?
  • Android: CursorLoader, LoaderManager, SQLite
  • Multithreading de Android: WaitForGcToComplete después de enviar la aplicación al fondo
  • ¿La imagen tarda demasiado en cargarse?
  • Android: varios intentservices o un intentservice con múltiples intenciones?
  • Mejor práctica: Actualizar ArrayAdapter continuamente
  • El servicio de Android comienza de forma automática / automática
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.