2013-03-14 103 views
0

经过一个多小时的寻找答案(尝试Munshi的“OpenGL ES 2.0编程指南”中的东西,搜索Apple的文档,搜索StackOverflow),我仍然无法让glReadPixels工作。我尝试了很多不同的方式,而我得到的最好的结果是波动的(因此是错误的)结果。解释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:之前,我有上面的说明(并尝试了一些我在互联网上遇到的变化)。我甚至尝试了通过查询glGetIntegerv()获取帧缓冲区信息来处理所有读取类型和读取格式的“OpenGL ES 2.0编程指南”中的方法。

任何想法?我相信有人会说,“使用搜索功能”,但我认真干起来,无法进一步。谢谢你的帮助!

回答

1

从OpenGL ES的手册:

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

所以,你最好使用GL_RGBA而不是GL_RGB。

+0

没办法!我以前认真地尝试过,并没有奏效。突然它有效。我完全不知道我现在做什么(哪些工作)与我之前做的不同(当我尝试GL_RGBA时)。但是,谢谢! – Mike 2013-03-14 09:40:36

+0

@Mike,我无法在iOS上使用GL_RGB。你能分享你的代码吗? – grisevg 2016-12-06 23:37:28