我有一个粒子系统,为此我渲染(例如,对于一个粒子效果) 100个带有纹理的四边形。如果我添加几个粒子效果,它会滞后,因为每个粒子都有自己的velicity (2f向量),位置(3f vec),等等。(矢量来自LwJGL)
因此,每个实例意味着大约5或6种数据类型。现在我的问题是:
有没有办法让它变得更好,这样不是每个实例都有5个新向量?(我知道,还有许多其他更好的方法来创建粒子系统,但我选择的方法很简单,我可以练习“性能提升”。
发布于 2018-03-19 15:46:57
好的,那么,我将参考这个code,您可能会从中获得灵感。
我还假设你至少有GL 3.3个人资料。
理论上,最好的优化方法是像camera
一样,在图形处理器上移动Map<ParticleTexture, List<Particle>> particles
(使用纹理图集),只上传每帧变化的数据。但这并不是一步就能完成的,所以我建议你通过在gpu上一次移动一件事情来一步一步地修改你目前的算法。
一些观察结果:
prepare()
和finishRendering()
中,第i个VertexAttribArray的启用是vao的一部分,如果您绑定/解绑vao,就足够了。glEnableVertexAttribArray
和glDisableVertexAttribArray
可以被移除,使用统一的缓冲区,而不是所有那些单一的alone.loader.updateVbo()
is render
创建一个FloatBuffer
并清除缓冲区。您应该只分配一次float []
或FloatBuffer
,避免使用glBufferData
,重用它并简单地调用glBufferSubData
https://stackoverflow.com/questions/49287736
复制相似问题