[英]Best way to save data of many instances
我有一个粒子系统,为此我渲染(例如1个粒子效果)带有纹理的100个四边形。 如果我添加多个粒子效果,则它会滞后,因为每个粒子都有其自己的垂直度(2f矢量),位置(3f vec)等...(矢量来自LwJGL)
结果,每个实例意味着5或6种数据类型。 现在我的问题是:
有没有一种方法可以使它变得更好,以便不是每个实例都有5个新向量? (而且,我知道创建粒子系统还有许多其他更好的方法,但是我选择的这种方法很简单,我可以练习“性能提升”。)
好的,因此,我将参考此代码 ,您可能会从中受到启发。
我还假设您至少具有GL 3.3配置文件。
从理论上讲,要充其量进行优化,您应该在GPU上移动Map<ParticleTexture, List<Particle>> particles
(使用纹理图集),并且每帧仅上载变化的数据,例如camera
。 但这一步很难做到,所以我建议您通过在gpu上一次移动一件事来逐步修改当前算法。
一些观察:
prepare()
和finishRendering()
,启用第i个VertexAttribArray是vao的一部分,如果您绑定/取消绑定vao,就足够了。 可以删除glEnableVertexAttribArray
和glDisableVertexAttribArray
loader.updateVbo()
非常昂贵 ,它在每次render
时都创建一个FloatBuffer
并在复制数据之前清除缓冲区。 您应该只分配一次float []
或FloatBuffer
,重用它,然后简单地调用glBufferSubData
,避免使用glBufferData
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.