首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibGDX- libgdx意外计算

LibGDX- libgdx意外计算
EN

Stack Overflow用户
提问于 2015-06-11 20:17:33
回答 2查看 95关注 0票数 0

我最近遇到了FPS下降(~40 FPS)的问题,当我搜索它在哪里时。我发现那不是我,我所有的计算都是在7毫秒内完成的,远远低于16毫秒的上限。

这是我使用的代码:

代码语言:javascript
复制
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内做了什么,或者这是否是我的错。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-11 20:39:04

LibGDX正在交换后面和前面的缓冲区。这需要等待GPU完成呈现。因此,无论您让GPU在render()中做什么,它还没有完成,在下一次调用render()方法之前还必须完成。

CPU和GPU并行工作。例如,当您调用SpriteBatch#end()时,它几乎会立即返回(如果它不需要等待其他东西首先完成)。但这并不意味着它实际上是呈现出来的。它只意味着它已经指示GPU使用例如draw(...)方法来呈现您添加到批处理中的任何内容。

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

票数 4
EN

Stack Overflow用户

发布于 2015-06-11 20:23:07

我建议您做一个堆转储,以检查是否和哪里可能有内存泄漏。我想您忘记了释放一些对象(StageSpriteBatch经常被遗忘)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30790612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档