glReadPixels слишком медленный для использования - PullRequest
5 голосов
/ 22 ноября 2011

Я использую glReadPixels для создания снимка через равные промежутки времени в drawFrame методе GLSurfaceView.Renderer.Мне нужно делать этот снимок через регулярные промежутки времени, чтобы сохранять данные в соответствии с требованиями моего приложения.

Однако производительность glReadPixels очень низкая и показывает отставание.Вот как я использую метод:

gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);

Есть ли альтернатива для использования glReadPixels?Как я могу сохранить изображение, не вызывая задержки?

1 Ответ

10 голосов
/ 22 ноября 2011

Я не знаю, доступно ли это на андроиде, но, возможно, PBO (объекты буфера пикселей) дадут прирост производительности.Смотрите эту тему OpenGL.org .

Однако не ожидайте чудес!С изображением RGBA 1280 * 752 вы передаете 3,67 МБ данных в каждом кадре.Я не знаю цифр для Android, но держу пари, что вы сталкиваетесь с проблемой пропускной способности памяти или записи на жесткий диск.Если вы уменьшите размер вашего readPixel и получите намного лучшую производительность, вы знаете, что это проблема.

Кроме того, вам нужен компонент "A"?Может быть, чтение назад RGB быстрее.Попробуйте прочитать в разных форматах.Некоторые из них способ быстрее, чем другие, потому что они лучше отображаются в представлении памяти OpenGL.Например, BGRA может быть быстрее, чем RGBA.Когда вы запрашиваете формат, который не соответствует OpenGL, каждый пиксель должен быть преобразован во время операции.

...