我真的需要从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缓冲区的帮助, 感谢。
答案 0 :(得分:1)
根据OpenGL 3.0规范,GL_RGB不是格式的有效值。
https://www.khronos.org/opengles/sdk/docs/man3/html/glReadPixels.xhtml
您可能希望在检索GL_RGBA格式的缓冲区后将其转换为RGB,或者调整算法以补偿RGBA。