2011-04-26 156 views
3

我正在爲iPhone(iOS 4.1)編寫一個OpenGL ES 2.0應用程序。在着色器完成的計算結束時,我需要將一些數據寫回CPU。據我所知,這可以通過glReadPixels()來完成。爲了保持精確性,我想在着色器之間使用half_float或浮動紋理,這似乎被擴展支持。OpenGL ES 2.0:glReadPixels()與浮動或half_float紋理

問題: 是否可以使用glReadPixels()讀取float或half_float紋理?

感謝,

拉爾斯

回答

3

我要麼正視這個問題。對於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);