首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释glReadPixels()

解释glReadPixels()
EN

Stack Overflow用户
提问于 2013-03-14 17:03:33
回答 1查看 384关注 0票数 0

我花了一个多小时寻找答案(尝试了Munshi的"OpenGL ES2.0编程指南“中的内容,搜索苹果的文档,搜索StackOverflow),我仍然对如何让glReadPixels正常工作感到困惑。我尝试了很多不同的方法,我得到的最好的结果是不稳定的(因此是错误的)。

我已经设置了一个使用着色器渲染到屏幕上的四边形的简单情况,并且我已经手动将gl_FragColor指定为纯红色,因此屏幕上应该绝对没有波动。然后,在presentRenderbuffer:之前尝试类似以下代码的代码

代码语言:javascript
复制
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()来获取帧缓冲区的信息,从而处理读取类型和读取格式的所有情况。

有什么想法吗?我肯定有人会说,“使用搜索功能”,但我已经认真地发现了这一点,不能再进一步了。谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15404970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档