在iOS上从OpenGL ES 3.0读取RGB8缓冲区?

我真的需要从GPU获得每个通道的RGB 8字节缓冲区.

我需要它传递给训练有素的卷积神经网络,它只接受该格式的数据.

我不能在CPU上转换它,因为我受到很大的CPU限制而且它很慢.

我目前有附加渲染缓冲区的FBO,其定义为:

glRenderbufferStorage(GL_RENDERBUFFER,GL_RGB8_OES,bufferWidth,bufferHeight);

绑定,定义和呈现缓冲区时没有错误.

但是当我使用时

glReadPixels(0,0,bufferWidth,bufferHeight,GL_RGB,GL_UNSIGNED_BYTE,rgbBufferRawName);

它给出了无效的枚举错误(0x0500).当我传递GL_RED_EXT或GL_RGBA并生成正确的缓冲区时,它工作正常(我通过将这些缓冲区上传到纹理并渲染它们来检查它,它们看起来是正确的).

我尝试设置glPixelStorei(GL_PACK_ALIGNMENT,1);但这没有任何区别.

我在iOS10和iPhone 6上.我在做ES2.0,但现在尝试切换到ES3.0,希望它能帮我解决问题.它没.

我非常感谢以任何方式获取RGB8缓冲区的帮助,
谢谢.

最佳答案 根据OpenGL 3.0规范,GL_RGB不是格式的有效值.

https://www.khronos.org/opengles/sdk/docs/man3/html/glReadPixels.xhtml

您可能希望在检索GL_RGBA格式化缓冲区后将其转换为RGB,或者调整算法以补偿RGBA.

点赞