我想读取屏幕外的像素(没有CAEAGLLayer支持)Framebuffer.我创建缓冲区的代码如下:
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);
Run Code Online (Sandbox Code Playgroud)
我读了原始像素:
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));
Run Code Online (Sandbox Code Playgroud)
这很好用.我可以渲染到这个缓冲区,并从它复制到屏幕.但我不能得到原始像素.glReadPixels总是返回零,并且glReadBuffer似乎不存在.我可以使用glReadPixels从屏幕上的帧缓冲区中读取.有任何想法吗?
解决了.iOS上的glReadPixels不支持RGBA到BGRA转换.更改
glReadPixels(0, 0, _videoDimensions.width, _videoDimensions.height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress(outPixelBuffer));
Run Code Online (Sandbox Code Playgroud)
至
glReadPixels(0, 0, _videoDimensions.width, _videoDimensions.height, GL_RGBA, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress(outPixelBuffer));
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.glGetError是我的新朋友;)
| 归档时间: |
|
| 查看次数: |
2906 次 |
| 最近记录: |