我花了一个多小时寻找答案(尝试了Munshi的"OpenGL ES2.0编程指南“中的内容,搜索苹果的文档,搜索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 ES2.0编程指南“中的方法,该方法通过查询glGetIntegerv()来获取帧缓冲区的信息,从而处理读取类型和读取格式的所有情况。
有什么想法吗?我肯定有人会说,“使用搜索功能”,但我已经认真地发现了这一点,不能再进一步了。谢谢你的帮忙!
发布于 2013-03-14 17:21:22
来自Opengl ES手册:
仅接受两个格式/类型参数对。GL_RGBA/GL_UNSIGNED_BYTE始终被接受,通过查询GL_IMPLEMENTATION_COLOR_READ_FORMAT和GL_IMPLEMENTATION_COLOR_READ_TYPE可以发现另一个可接受的对。
因此,您最好使用GL_RGBA而不是GL_RGB。
https://stackoverflow.com/questions/15404970
复制相似问题