我试图在iPhone上使用OpenGL es2.0实现一个保持状态的粒子系统。所谓状态保持,我的意思是每个粒子在时间上是向前积分的,它有一个唯一的速度和位置矢量,它随时间而变化,不能在每次渲染调用时根据初始条件来计算。
这是我能想到的一种可能的方法。
我唯一不知道如何有效地做的事情就是第三步,我必须通过CPU吗?我想知道是否有可能完全在GPU上使用OpenGL ES 2.0来完成这个任务。任何提示都非常感谢!
发布于 2013-06-13 17:54:25
我认为如果不使用glReadPixels,这是不可能的-- ES2没有OpenGL允许您使用GPU复制缓冲区内容的灵活缓冲区管理(例如,您可以在纹理和vbo之间复制数据,或者使用简单的转换反馈,这基本上是为了实现您想做的事情)。
我认为,如果需要使用GPU,唯一的选择是在呈现后使用glReadPixels将框架缓冲区内容复制回外部。您也可能希望检查和使用浮动或相关的,如果可用的话,以确保您有高精度的值(RGBA8可能不足以满足您的粒子)。如果您将其与普通呈现混合使用,您可能希望构建一堆缓冲(等待一两帧),这样就不会让CPU等待GPU (这在PowerVR上尤其糟糕,因为它在呈现之前会缓冲整个帧)。
ES3.0将支持转换反馈,这不会有帮助,但希望给您一些未来的希望。
另外,如果你在ARM cpu上运行,使用霓虹灯快速更新所有粒子似乎会更快。它可以非常快,并将跳过CPU+GPU方法所带来的所有开销。
https://stackoverflow.com/questions/17089955
复制相似问题