我把这个作为一个问题写在评论里,但我觉得它值得单独提问。
我想在iPhone/iPad上建立一个共轭梯度求解器,因为它将为这些设备上的GPGPU编程开辟一个新的可能性领域,例如实时光流/实时模拟/实时有限元。
GpuGems写得很好的一章解释了如何使用浮点纹理。
我遇到的第一个问题是,我还没有设法创建一个浮点渲染到纹理。也许我只是没有为我的纹理设置正确的参数。例如,这段代码在第一行成功,但在第二行失败,并出现GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT错误。
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 256, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0);
所以,我的问题是我如何在iPhone/iPad上做渲染到浮点纹理?
或者有其他方法来解决这个问题吗?我认为一个混乱的替代方案是在碎片着色器中使用浮点纹理,然后通过简单地将其前8位存储在R中,后8位存储在gl_FragColor的G中,将结果16位半浮点渲染为碎片着色器中的常规gl_FragColor。然后我可以使用glReadPixels从FB读取这些值,并将它们重新解释为半浮点数,并将该数据传输到新纹理并重复该过程。明显的问题是,它需要一个非常浪费的往返从GPU回到CPU,然后再回到GPU,我很确定它不会给任何速度提高。
有人有什么想法吗?
查找加速库,vDSP函数