Повышение производительности для glReadPixels в Android с помощью OpenGL ES 3.0

Я нашел несколько способов ускорить glReadPixels с помощью OpenGL ES 3.0, но я не уверен, работает ли он или нет.

  1. указывает пятый аргумент glReadPixels() как GL_BGRA, чтобы избежать ненужного перебора.
  2. используйте PBO, как это уже упоминалось.

Для проверки я обновил Android SDK и ADT до последней версии и попытался использовать OpenGL ES 3.0. Тем не менее, я не могу найти GL_BGRA определение, как я ожидал, и я не знаю, как использовать glMapBuffer(), Я что-то пропустил?

Подвести итоги,

  • Есть ли более быстрый способ получить доступ к кадровому буферу, чем использование glReadPixels()?
  • Как использовать GL_BGRA и PBO с помощью OpenGL ES 3.0 на Android?

Если кто-нибудь знает, пожалуйста, укажите мне. Некоторые фрагменты кода будут лучше. Заранее спасибо.

1 ответ

  1. На самом деле, нет. Я не знаю, получите ли вы прирост производительности, используя формат BGRA, но стоит попробовать. В ES 2.0 GL_BGRA доступен только через расширение: EXT_read_format_bgra, поэтому вам нужно будет использовать enum GL_BGRA_EXT, и, очевидно, то же самое в OpenGL ES 3.0.

  2. Да, glMapBufferRange - это путь к OpenGL ES 3.0. Похоже, ваш звонок правильный, согласно вашему комментарию. Согласно спецификации и странице man, glMapBufferRange не должен генерировать ошибки GL_INVALID_ENUM, поэтому я думаю, что здесь что-то не так. Убедитесь, что ошибка не возникла при более раннем вызове.

Другие вопросы по тегам