我正在为iPhone(iOS 4.1)编写一个OpenGL ES 2.0应用程序。在着色器完成的计算结束时,我需要将一些数据写回CPU。据我所知,这可以通过glReadPixels()来完成。为了保持精确性,我想在着色器之间使用half_float或浮动纹理,这似乎被扩展支持。OpenGL ES 2.0:glReadPixels()与浮动或half_float纹理
问题: 是否可以使用glReadPixels()读取float或half_float纹理?
感谢,
拉尔斯
我正在为iPhone(iOS 4.1)编写一个OpenGL ES 2.0应用程序。在着色器完成的计算结束时,我需要将一些数据写回CPU。据我所知,这可以通过glReadPixels()来完成。为了保持精确性,我想在着色器之间使用half_float或浮动纹理,这似乎被扩展支持。OpenGL ES 2.0:glReadPixels()与浮动或half_float纹理
问题: 是否可以使用glReadPixels()读取float或half_float纹理?
感谢,
拉尔斯
我要么正视这个问题。对于iOS,您可以使用GL_EXTENSIONS参数检查可用的扩展列表 - GL_OES_texture_float必须存在。但!根据specification,这没有给出从GPU读取浮点值的机会。这是来自glReadPixels()文档:
只接受两个格式/类型参数对。总是接受GL_RGBA/GL_UNSIGNED_BYTE,并且可以通过查询GL_IMPLEMENTATION_COLOR_READ_FORMAT和GL_IMPLEMENTATION_COLOR_READ_TYPE来发现其他可接受的对。
所以,你可以检查可用的类型/格式,你可以用下面的代码阅读:
GLint ext_format, ext_type;
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &ext_format);
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &ext_type);