【问题标题】:glfw pollevents() really, really slowglfw pollevents() 真的,真的很慢
【发布时间】:2015-08-27 16:43:29
【问题描述】:

我一直在对我的游戏引擎进行一些基准测试,发现了一个罪魁祸首:

glfwPollevents();

我已经对此进行了彻底的计时,并且 95% 的时间都按预期运行,但有时它会占用我更新间隔的 5-200%(即 1/60 秒)。我真的不知道是什么原因造成的。在这些巨大的民意调查中,没有调用我定义的回调。一切都很安静。这是完全不可预测的。

我有一些理论: 1. 调度程序在函数内的某处中断。这不太可能发生,我会在循环的其他部分看到相同的行为,但我没有。

  1. 有一些我不知道的邪恶回调在某处被调用并占用时间。

  2. lwjgl 问题。 LWJGL 是来自 glfw 的包装器,因此它可以在 Java 中使用,我就是这样做的。

  3. 驱动程序,但是哪个?

【问题讨论】:

  • 你安装了哪些回调?如果它实际上的行为方式与您讨论的方式相同,我怀疑 VSYNC 已打开,并且可能卡在您的刷新窗口回调中。
  • 我只为键和鼠标创建了回调,而不是窗口。如果你还没有创建它,它就不会捉弄你,对吧?

标签: java opengl lwjgl glfw


【解决方案1】:

glfwPollEvents();是特定于操作系统的系统调用的包装器,使您能够检查应用于窗口的任何事件。有很多东西可以算作事件,包括用户级别的东西,例如选择或调整窗口大小,但也包括 GLFW 不允许您访问的系统级别的东西。有很多事情可能会导致您所描述的短暂中断/挂起。

一般来说,最好的建议是在不同的线程上处理渲染,并使用消息队列来指示主线程执行“主线程关键任务”(如打开新窗口或其他类似的重要任务)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2010-12-28
    • 2013-01-25
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多