我真的需要从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.