我最近遇到了FPS下降(~40 FPS)的问题,当我搜索它在哪里时。我发现那不是我,我所有的计算都是在7毫秒内完成的,远远低于16毫秒的上限。
这是我使用的代码:
long time = 0;
public void render(float delta)
{
System.out.println("since last frame : " +( System.currentTimeMillis()-time));
time = System.currentTimeMillis();
// Rendering...
System.out.println("render : " + (System.currentTimeMillis()-time));
}而我的时间“自上一帧”约为22毫秒,而我的“渲染”约为7毫秒。我只是不明白libgdx在15 ms内做了什么,或者这是否是我的错。
发布于 2015-06-11 20:39:04
LibGDX正在交换后面和前面的缓冲区。这需要等待GPU完成呈现。因此,无论您让GPU在render()中做什么,它还没有完成,在下一次调用render()方法之前还必须完成。
CPU和GPU并行工作。例如,当您调用SpriteBatch#end()时,它几乎会立即返回(如果它不需要等待其他东西首先完成)。但这并不意味着它实际上是呈现出来的。它只意味着它已经指示GPU使用例如draw(...)方法来呈现您添加到批处理中的任何内容。
这种呈现发生在后台缓冲区上,这是一个屏幕外的图像.当您的render()方法完成时,这个后台缓冲区将与frontbuffer交换,以便屏幕显示您在render()方法中呈现的所有内容。只有当GPU完成执行您的指令时,它才能交换这些缓冲区,因此,如果尚未完成,则需要等待。
发布于 2015-06-11 20:23:07
我建议您做一个堆转储,以检查是否和哪里可能有内存泄漏。我想您忘记了释放一些对象(Stage或SpriteBatch经常被遗忘)。
https://stackoverflow.com/questions/30790612
复制相似问题