0

在寻找答案一个多小时后(在 Munshi 的“OpenGL ES 2.0 Programming Guide”中尝试了一些东西,搜索了 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() 获取帧缓冲区的信息来处理所有读取类型和读取格式的情况。

有任何想法吗?我相信有人会说,“使用搜索功能”,但我已经认真地提出了这一点,无法再进一步了。谢谢你的帮助!

4

1 回答 1

1

来自 Opengl ES 手册:

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

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

于 2013-03-14T09:21:21.823 回答