Я пытаюсь прочитать значения альфа-пикселей с помощью glReadPixels. Первое, что я сделал, - это прочитать отдельные пиксели. Для того, чтобы попытаться ускорить процесс, я пытался читать все пиксели сразу:glReadPixels и GL_ALPHA
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)
?
Благодарим вас за это. Что касается вашего последнего предложения, есть ли у вас какие-либо указания относительно того, как это реализовать? – sharvey
@sharvey - Смотрите мою запись здесь: http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios. Пример приложения, который у меня есть: http://www.sunsetlakesoftware.com/sites/default/files/ColorTracking.zip использует внеэкранный фреймбуфер для рендеринга текстуры, хотя я втягиваю результат с помощью 'glReadPixels()', потому что я не удалось закончить усреднение цвета на графическом процессоре, которое я хотел. В итоге я использовал более медленную процедуру C для этого. В какой-то момент я это завершу. –