如何更改FloatBuffer的内容,同时保持性能?

7
我已经尝试使用。
floatbuffer.put(float[]);

但是我处理了超过200个方块,每个方块都有不同的纹理坐标,并且每帧都会更新,我的fps急剧下降,游戏变得不流畅。

我看到了badlogicgames.com上提到的方法,即使用intbuffer而不是floatbuffer,但实际上它们是相同的,都会在"put"缓冲区方法时变慢。

那么,我该如何以最佳性能更新所有的floatbuffer呢?

编辑:我解决了我的问题,问题并不在于"put"方法本身很慢,而是每次为每个floatbuffer初始化一个新的float,取而代之的是,我只改变floatarray中包含的每个元素的值,这避免了许多GC活动...好吧,我想是这样吧。

1个回答

1

有许多方法可以提高性能。简单来说,以下是一些方法:

1)初始化floatbuffer并在每个帧应用变换:- 如果您的正方形正在屏幕上移动,请将它们放置在floatbuffer中,并对每个正方形应用单独的矩阵变换。使用此方法,您只需填充一次floatbuffer,然后每次更新变换即可。

2)仅将唯一的形状放入floatbuffer - 如果您的任何正方形都是彼此的副本,请每帧调用相同的缓冲区以节省内存。

3)使用顶点缓冲对象和索引缓冲对象 - 您可能已经这样做了,但请将数据存储在顶点缓冲区中,并使用数组的索引调用顶点。

如果您仍然遇到问题,我建议查看此教程:http://www.learnopengles.com/android-lesson-one-getting-started/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接