Libgdx использует ScreenUtils асинхронно и не останавливает игровой цикл

Я хочу захватить экран. Libgdx предоставляет некоторые функции, определенные в классе ScreenUtils .

Например, final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, w, h);

Моя проблема заключается в том, что для получения этой информации требуется около 1-3 секунд. За это время игровой цикл блокируется, и пользователь будет определять его как задержку.

Внутри класса Gdx.gl.glReadPixels используется Gdx.gl.glReadPixels . Если я запустил метод ScreenUtils.getFrameBufferPixmap в потоке, то нет задержки, но он захватывает экран неправильным методом, что логично, поскольку цикл игры работает и меняет материал.

Возможно ли скопировать контекст GL или сохранить его и сгенерировать Pixmap в более поздний момент с помощью Thread? Конечно, операция копирования / сохранения должна выполняться мгновенно, иначе я ничего не пощажу.

Я использую ShapeRenderer для отображения моих вещей на экране.

После небольшого исследования я нашел более быструю альтернативу glReadPixels – Pixel Buffer Object, который доступен с Android 4.3 – https://vec.io/posts/faster-alternatives-to-glreadpixels-and-glteximage2d-in-opengl-es

Невозможно вызвать glReadPixels в другом потоке, кроме рендеринга потока – https://stackoverflow.com/a/19975386/2158970

Я нашел решение, которое работает в моем случае, поскольку у меня есть только незначительная графика / фигуры. В основном я копирую все объекты, которые нарисованы для представления, как описано здесь. В фоновом потоке я генерирую Bitmap программно и использую информацию, хранящуюся в моих объектах, для рисования в растровое изображение.