我一直在对游戏引擎进行基准测试,发现犯规的原因是:

glfwPollevents();

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

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


有一些邪恶的回调函数,我不知道它在哪里被蜜蜂打扰并占用时间。
lwjgl问题。 LWJGL是glfw的包装器,因此可以在Java中使用,我就是这样做的。
司机,但是哪个?

最佳答案

glfwPollEvents();是特定于操作系统的系统调用的包装,使您可以检查应用于窗口的任何事件。有很多事情可以视为事件,包括选择或调整窗口大小等用户级别的内容,还包括GLFW不允许您访问的系统级别的内容。就像您所描述的那样,有很多事情可能导致短暂的中断/挂起。

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

关于java - glfw pollevents()真的,真的很慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32255136/

10-09 04:46