如何在OpenGL 2.0 ES中从当前的角度获取纹理?

标题可能是混乱,但我不知道如何更好地问,对此感到抱歉。 我想要做的是获得一个位图纹理,它代表了在某个时间点上呈现的是什么,并将其保存为一个文件(我知道如何保存它,我只需要找出如何从OpenGL获取位图数据)一个屏幕拍摄,sorting。

我认为改变渲染目标就是你要找的。 这也被称为“渲染纹理”。

当你在GLES(或者GL,或者DirectX,或者你使用的任何东西)中绘制东西时,你绘制的东西被称为“渲染目标”。 通常你在一个backbuffer上渲染到屏幕上,但是graphics引擎也允许你绘制一个自定义的渲染目标,然后你可以用它作为绘制其他东西的纹理。

自定义渲染纹理是启用有趣效果的关键,如镜子, 阴影映射 , PiP等等。

这里是XNA的渲染缓冲区的另一种解释 。

特别是对于GLES,你可能要看glGenRenderbuffersglRenderbufferStorageglBindRenderbuffer和其他相关的函数。

这里是一个如何在桌面OpenGL中实现的例子 。

glReadPixels可以从帧缓冲区读取像素值,然后将其保存到磁盘。

(请注意,您不需要正常使用glReadPixels,因为它会让您的代码在GPU追赶时停顿,并且从GPU读取像素通常是一个相当慢的操作。但为了保存屏幕截图或debugging渲染问题,如果最终的目标是将渲染的图像反馈到渲染系统中作为纹理使用,那么Panda的答案是正确的和性能友好的方法,但是如果你需要获取像素值返回到CPU,所以你可以将它们保存,glReadPixels是真正的唯一方法来做到这一点。)