LibGDX- libgdx 的意外计算

LibGDX- Unexpected computing by libgdx

我最近遇到了 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));
}

我的时间 "since last frame" 大约是 22 毫秒,我的 "render" 大约是 7 毫秒。我只是不明白 libgdx 在这 15 毫秒内做了什么,或者这是我的错。

我建议你做一个堆转储来检查你是否以及在哪里可能有内存泄漏。我猜你忘了处理一些对象(StageSpriteBatch 经常忘记处理)。

LibGDX 正在交换后台和前台缓冲区。这需要等待 GPU 完成渲染。因此,无论您在 render() 中告诉 GPU 做什么尚未完成,都必须在下一次调用 render() 方法之前完成。

CPU和GPU并行运行。例如当您调用 SpriteBatch#end() 时,它几乎会立即 return (如果它不必等待其他事情先完成)。但这并不意味着它实际上被渲染了。这仅意味着它已 指示 GPU 渲染您添加到批处理中的任何内容,例如使用draw(...) 方法。

此渲染发生在后台缓冲区上,这是一个屏幕外图像。当您的 render() 方法完成时,此后缓冲区将与前缓冲区交换,以便屏幕显示您在 render() 方法中呈现的任何内容。它只能在 GPU 完成执行您的指令时交换这些缓冲区,因此如果尚未完成则需要等待。