【问题标题】:After a while, glGenBuffers is very slow过了一会儿,glGenBuffers 很慢
【发布时间】:2015-11-26 00:16:29
【问题描述】:

我正在为我的简单 2D 游戏编写游戏内编辑器,其中经常动态创建和删除网格。我正在使用 libgdx

一切正常,只是编辑器变慢了。它对输入事件的响应很晚。

为了找到我的代码中的弱点(根本没有优化),我运行了 jprofiler 并分析了 CPU。事实证明,glGenBuffers 14 次调用耗时超过 2 秒!那是 7 个网格,每个网格有一个顶点和索引缓冲区。实际上,我有一台速度很快的机器(i7-4790T、GTX980m、16GB...),所以这应该不是问题。

我只是想知道这怎么可能,因为我不知道。

【问题讨论】:

  • 您是否正在删除不再使用的缓冲区?仅根据症状,它可能是内存泄漏。您能否查看您的应用的总体内存使用情况,看看它是否在增加?
  • 只是想说明缓冲区可能会保存在您的显卡内存中,因此您可能无法看到您的 RAM 使用率上升。否则,您应该始终通过调用 glDeleteBuffers 来清理缓冲区。

标签: opengl libgdx lwjgl


【解决方案1】:

第一个两个 cmets 是对的。我正在重建大部分场景来检查它是否仍然存在(一般来说不是那么聪明)。如果它仍然存在,则重建的部分不会被处理。只有更换的零件被正确更换。 :/ .

如评论 1 中所建议,我使用 jprofiler 和分析内存发现了该问题。

我没有检查显存,但没有其他办法,垃圾也在那里。

【讨论】:

    【解决方案2】:

    缓冲区始终存储在内存中。总是需要清理,帧缓冲区、字节缓冲区等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-05
      • 2018-05-13
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2014-10-02
      相关资源
      最近更新 更多