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



我真的需要从GPU获得每个通道缓冲区的RGB 8字节。我需要它传递给受过训练的卷积神经网络,并且它只接受这种格式的数据。我无法在CPU上转换它,因为我绑定了CPU,而且非常慢。

我目前有一个带有renderbuffer的FBO,该FBO定义为: glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB8_OES, bufferWidth, bufferHeight); 当我绑定,定义和渲染到缓冲区时,没有错误。

但是当我使用时 glReadPixels(0, 0, bufferWidth, bufferHeight, GL_RGB, GL_UNSIGNED_BYTE, rgbBufferRawName); 它给出了无效的枚举错误(0x0500)。当我通过GL_RED_EXTGL_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。

最新更新