В iOS 5 были введены кэши текстур OpenGL ES, чтобы обеспечить прямой путь от видеоданных камеры к OpenGL без необходимости копирования буферов. Краткое введение в кэш текстур было представлено в сессии 414 — Достижения в OpenGL ES для iOS 5 от WWDC 2011.
Я нашел интересный article, которая в конце еще больше злоупотребляет этой концепцией и обходит вызов glReadPixels
, просто блокируя текстуру, а затем напрямую обращаясь к буферу.
glReadPixels
работает очень медленно из-за тайлового рендерера, который используется в iPad 2 (даже если вы используете только текстуры 1x1). Однако описанный метод работает быстрее, чем glReadPixels
.
Действительно ли предложенный в статье метод вообще действителен и можно ли его использовать для повышения приложений, которые полагаются на glReadPixels
?
Поскольку OpenGL обрабатывает графические данные параллельно с ЦП, как вызов CVPixelBufferLockBaseAddress
должен знать, когда рендеринг завершен, не обращаясь к OpenGL?