Как может gl_ReadPixels зависеть от сложности шейдера? - PullRequest
1 голос
/ 24 марта 2011

Я пишу приложение для Android, которое использует фрагментные шейдеры для обработки изображений. Я использую два FBO с текстурами в качестве цветовых вложений, чтобы я мог перевернуть их и сделать более одного прохода над исходным изображением.

Все хорошо, приложение работает просто отлично. Тем не менее, я пытаюсь установить время, используя System.currentTimeMillis() и GLES20.glFinish() между последовательными вызовами OpenGL.

То, что я вижу по времени, удивляет меня. Во-первых, время довольно стабильно между разными прогонами. Во-вторых, вызов glReadPixels, кажется, зависит от сложности моего шейдера, то есть если графический процессор тратит больше времени на обработку изображения, он тратит больше времени на чтение пикселей из текстуры FBO. Имейте в виду, я поставил GLES20.glFinish() перед звонком GLES20.glReadPixels, но не имеет значения, положил я это или нет.

Есть ли у вас какие-либо понятия о том, почему такая зависимость может существовать? Это проблема на базе Android, то есть Android вообще не выполняет вызовы glFinish()?

Спасибо!

1 Ответ

2 голосов
/ 24 марта 2011

Я попытался профилировать GPU, используя glFinish, и сдался - похоже, он не блокируется полностью, как вы думаете Я предполагаю, что у водителя просто неточная интерпретация того, что должен делать glFinish. Возможно, это также проблема, связанная с драйвером.

...