我一直在对我的游戏引擎做一些基准测试,发现了一个犯规罪魁祸首:
glfwPollevents();
我已经对此进行了彻底的计时,其中95%的时间表现得如预期的那样,但有时它会占用我更新间隔的5-200%(即1/60秒)。我真的不知道造成这种情况的原因。在这些巨大的民意调查期间,没有调用我定义的回调。一切都很安静。这完全是不可预测的。
我有一些理论: 1.调度程序在函数内的某处中断。这是不太可能的,我会在我的循环的其他部分看到相同的行为,我不这样做。
有一些邪恶的回调,我不知道有什么地方叫做和吃饭的时间。
lwjgl问题。 LWJGL是glfw的一个包装器,所以我可以在Java中使用它。
司机,但是哪个?
答案 0 :(得分:1)
glfwPollEvents();是特定于操作系统的系统调用的包装器,使您可以检查应用于窗口的任何事件。有许多事情被视为事件,包括用户级别的东西,如选择或调整窗口大小,还包括GLFW无法访问的系统级内容。有许多事情可能导致你正在描述的短暂中断/挂起。
一般来说,最好的建议是在不同的线程上处理呈现,并使用消息队列来指示主线程执行“主线程关键任务”(比如打开一个新窗口或其他类似的重要任务)。 / p>