glReadPixels и GL_ALPHA - PullRequest
       18

glReadPixels и GL_ALPHA

5 голосов
/ 21 ноября 2010

Я пытаюсь прочитать значения альфа-пикселей, используя glReadPixels.Первым делом я прочитал пиксели по отдельности.Чтобы ускорить процесс, я попытался прочитать все пиксели одновременно:

GLubyte *pixels = new GLubyte[w*h*4];
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

, и это сработало, но очень медленно.Сейчас я пытаюсь просто получить альфа-значение, не тратя места на компоненты RGB:

GLubyte *pixels = new GLubyte[w*h];
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, pixels);

Но я получаю: OpenGL error 0x0500 in -[EAGLView swapBuffers].

Есть идеи, почему выбрасывается INVALID_ENUM (0x0500)?

1 Ответ

6 голосов
/ 21 ноября 2010

Согласно документации для glReadPixels () для OpenGL ES , единственными допустимыми значениями перечисления для параметра формата являются GL_RGBA и GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES.Вам нужно проверить и посмотреть, что означает GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES как формат для iPhone, но он может не обеспечить поддержку GL_ALPHA.

. В любом случае, я сомневаюсь, что движение по этому маршруту значительно ускоритваши чтения, потому что все, что будет делать, это отбросить компоненты RGB.Ваши проблемы с производительностью с glReadPixels (), вероятно, лежат в другом месте.Хорошее обсуждение причин этого можно найти в ветке обсуждения здесь .

Можно ли выполнить рендеринг в неэкранный кадровый буфер, который был поддержан текстурой, а затем выполнитедальнейшая обработка на GPU с использованием этой текстуры?Похоже, это даст лучшую производительность, чем при использовании glReadPixels().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...