解释glReadPixels()

时间:2013-03-14 09:03:33

标签: ios objective-c opengl-es-2.0

经过一个多小时的寻找答案(尝试使用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()获取帧缓冲区的信息来处理所有读取类型和读取格式的情况。

有什么想法吗?我敢肯定有人会说,“使用搜索功能”,但我认真对待它并且无法继续下去。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

来自Opengl ES手册:

  

只接受两个格式/类型参数对。始终接受GL_RGBA / GL_UNSIGNED_BYTE,并且可以通过查询GL_IMPLEMENTATION_COLOR_READ_FORMAT和GL_IMPLEMENTATION_COLOR_READ_TYPE来发现其他可接受的对。

因此,您最好使用GL_RGBA而不是GL_RGB。