经过一个多小时的寻找答案(尝试使用Munshi的“OpenGL ES 2.0编程指南”,搜索Apple的文档,搜索StackOverflow),我仍然无法让glReadPixels工作。我已经尝试了很多不同的方法,而且我得到的最好的结果是波动(因而错误)。
我已经设置了使用着色器渲染四边形到屏幕的简单情况,并且我手动将gl_FragColor指定为纯红色,因此屏幕上应该绝对没有波动。然后我在presentRenderbuffer:
GLubyte *pixels = (GLubyte *)malloc(3);
glReadPixels(100, 100, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixels);
NSLog(@"%d", (int)pixels[0]);
free(pixels);
基本上,尝试读取(100,100)处的单个像素并读取它的红色值,我希望它是1或255.相反,我得到的值如1522775,3587和65536,尽管图像在屏幕上永远不会改变。我在Mac上做了类似的事情并且工作正常,但出于某种原因我无法在iOS上使用它。在致电glDrawArrays()
之后和presentBuffer:
来电之前,我有上述声明(并尝试了我在互联网上遇到的一些变体)。我甚至尝试过“OpenGL ES 2.0编程指南”中的方法,通过查询glGetIntegerv()获取帧缓冲区的信息来处理所有读取类型和读取格式的情况。
有什么想法吗?我敢肯定有人会说,“使用搜索功能”,但我认真对待它并且无法继续下去。谢谢你的帮助!
答案 0 :(得分:1)
来自Opengl ES手册:
只接受两个格式/类型参数对。始终接受GL_RGBA / GL_UNSIGNED_BYTE,并且可以通过查询GL_IMPLEMENTATION_COLOR_READ_FORMAT和GL_IMPLEMENTATION_COLOR_READ_TYPE来发现其他可接受的对。
因此,您最好使用GL_RGBA而不是GL_RGB。