在libgdx中使用大的textureRegion时帧率低

时间:2012-06-08 09:06:18

标签: android textures libgdx

这就是我的表现:

  1. 用min创建textureAtlas。过滤=最近和最大。过滤=最近。
  2. 从textureAtlas.findRegion()获取TextureRegion。
  3. 使用SpriteBatch将其绘制到屏幕上。 这很简单,但是当我绘制一个大区域(在我的情况下是480x320)时,帧速率会非常慢!
  4. 绘制1-30区域通常是30 fps,但只有1个大480x320区域只有20fps!

3 个答案:

答案 0 :(得分:4)

你是在模拟器上运行吗?仿真器不是用于实际应用程序性能的指标。在真实设备上进行测试。

话虽如此:在常见的Android设备上,你可以填充屏幕大约1.6-2倍。这个数字当然只是一个球场数,并且受到诸如启用混合的因素的影响(如果启用则更糟),过滤(接近,线性,越需要越多的处理能力),纹理的颜色深度(16位) RGB,32位RGBA,需要的带宽越多越好。

虽然不是问题的一部分,但您也应避免尽可能多地切换纹理。例如,这将是一种反模式:

batch.begin();
batch.draw(tex1, 0, 0);
batch.draw(tex2, 10, 30);
batch.draw(tex1, 40, 20);
....
batch.end();

这可以通过对相同纹理的绘图进行分组或使用纹理图集来解决。

答案 1 :(得分:2)

如果您还没有阅读过,那么您可能会发现this article有用。它描述了绘制大纹理时的性能特征。

答案 2 :(得分:1)

据我所知,在绘制许多区域时,绘图命令的一部分被发送到GPU进行渲染,而您仍在向spritebatch添加新的绘图命令。 当达到批量大小时,会出现这种情况,绑定新纹理或调用flush() 如果我理解文档是正确的,这样cpu和gpu就不必等待很长时间,并且可以提高性能。
但是,如果每帧只有一个大区域的绘图命令,则spritebatch不能将命令部分发送到gpu,因为......好吧...只有一个^^

如果你真的只想绘制一个精灵,你可以把它分成几个区域......(如你所说,你还有10fps)
但是我想一旦你必须绘制更多的精灵,除了大的精灵之外,没有必要将它分开。