Чтение пикселей из закадрового пиксельного буфера OpenGL в iOS (OopenGL-ES) - PullRequest
4 голосов
/ 30 июля 2011

Я хочу прочитать пиксели из закадрового (не поддерживаемого CAEAGLLayer) фреймбуфера. Мой код для создания буфера выглядит так:

glGenFramebuffersOES(1, &_storeFramebuffer);
glGenRenderbuffersOES(1, &_storeRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, _storeFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _storeRenderbuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES,   GL_RENDERBUFFER_OES, _storeRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGBA8_OES, w, h);

Я читаю необработанные пиксели с:

glBindFramebufferOES(GL_FRAMEBUFFER_OES, _storeFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _storeRenderbuffer); 
glReadPixels(0, 0, _videoDimensions.width, _videoDimensions.height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress(outPixelBuffer)); 

Это хорошо работает. Я могу сделать рендеринг в этот буфер и скопировать его на экран. Но я не могу получить сырые пиксели. glReadPixels всегда возвращает нули, а glReadBuffer, кажется, не существует. Я могу читать из экранного буфера кадров с glReadPixels. Есть идеи?

1 Ответ

5 голосов
/ 31 июля 2011

решаемая. Преобразование RGBA в BGRA не поддерживается glReadPixels на iOS. Изменение

glReadPixels(0, 0, _videoDimensions.width, _videoDimensions.height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress(outPixelBuffer)); 

до

glReadPixels(0, 0, _videoDimensions.width, _videoDimensions.height, GL_RGBA, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress(outPixelBuffer));

Решает проблему. glGetError - мой новый друг;)

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