Я хочу захватить экран. 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 программно и использую информацию, хранящуюся в моих объектах, для рисования в растровое изображение.