Повышение производительности для glReadPixels в Android с помощью OpenGL ES 3.0
Я нашел несколько способов ускорить glReadPixels с помощью OpenGL ES 3.0, но я не уверен, работает ли он или нет.
- указывает пятый аргумент glReadPixels() как GL_BGRA, чтобы избежать ненужного перебора.
- используйте PBO, как это уже упоминалось.
Для проверки я обновил Android SDK и ADT до последней версии и попытался использовать OpenGL ES 3.0. Тем не менее, я не могу найти GL_BGRA
определение, как я ожидал, и я не знаю, как использовать glMapBuffer()
, Я что-то пропустил?
Подвести итоги,
- Есть ли более быстрый способ получить доступ к кадровому буферу, чем использование glReadPixels()?
- Как использовать GL_BGRA и PBO с помощью OpenGL ES 3.0 на Android?
Если кто-нибудь знает, пожалуйста, укажите мне. Некоторые фрагменты кода будут лучше. Заранее спасибо.
1 ответ
На самом деле, нет. Я не знаю, получите ли вы прирост производительности, используя формат BGRA, но стоит попробовать. В ES 2.0 GL_BGRA доступен только через расширение: EXT_read_format_bgra, поэтому вам нужно будет использовать enum GL_BGRA_EXT, и, очевидно, то же самое в OpenGL ES 3.0.
Да, glMapBufferRange - это путь к OpenGL ES 3.0. Похоже, ваш звонок правильный, согласно вашему комментарию. Согласно спецификации и странице man, glMapBufferRange не должен генерировать ошибки GL_INVALID_ENUM, поэтому я думаю, что здесь что-то не так. Убедитесь, что ошибка не возникла при более раннем вызове.