我正在为iPhone(iOS 4.1)编写OpenGL ES 2.0应用程序。在着色器中完成计算的最后,我需要将一些数据写回CPU。据我所知,可以通过glReadPixels()完成此操作。为了保持精度,我想在着色器之间使用half_float或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);

关于iphone - 具有float或half_float纹理的OpenGL ES 2.0:glReadPixels(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5788197/

10-13 04:05