Ixeris 是一个通过优化事件轮询来提升客户端性能的模组。
你可能已经注意到,当你移动鼠标时,FPS 会明显下降。FPS 下降的一部分原因在于,当你转动视角时,游戏确实需要执行额外的工作,例如计算区块的可见性。然而,由于用于轮询事件的原生代码效率低下,以及 JNI 向上调用的开销,一部分原本可以用于渲染的 CPU 时间被不必要地浪费在事件轮询上。这个问题在 Windows 上最为明显,尤其是在你的鼠标具有较高轮询率时。
Ixeris 主要通过以下两种措施来解决这一问题:
GetRawInputData(每个输入事件调用一次)切换为 GetRawInputBuffer,后者允许按批次读取原始输入消息(一次调用读取所有事件)。此外,由于这部分工作改在 Java 代码中执行,我们还消除了 JNI 向上调用的开销。这些测试是在世界完全加载并且帧率稳定后进行的。鼠标轮询率为 1000Hz。按下 ``F3+Esc`` 以确保在移动鼠标时产生的帧率变化是由事件轮询导致的,而不是其他计算造成的。
“Idle FPS” 列表示不移动鼠标时的 FPS。接下来的两列分别表示在游戏窗口上快速移动鼠标时,不安装 Ixeris 和安装 Ixeris 时的 FPS。最后一列则比较了安装与未安装 Ixeris 时的 FPS 差异。
| Idle FPS | Without Ixeris | With Ixeris | Improvement | |
|---|---|---|---|---|
| Windows | 233 FPS | 133 FPS | 165 FPS | 1.24x |
| Linux (X11) | 358 FPS | 320 FPS | 355 FPS | 1.11x |
| Linux (Wayland) | 364 FPS | 289 FPS | 298 FPS | 1.03x |
就目前状态而言,Ixeris 不会破坏线程安全。通过 ``glfwSet*Callback`` 注册的回调会在渲染线程上执行。对于那些要求必须在主线程上调用的 GLFW 函数,如果它们是在其他线程上被调用的,则会被分发到主线程执行。如果这些调用可以被安全延后,则可能会立即返回;否则,调用方可能会被阻塞,直到调用完成。
从 3.1.0 版本开始,GLFW 文档中关于线程安全的要求已被严格遵守。
大多数 GLFW 函数都要求在主线程上调用。然而,许多模组可能会在渲染线程上调用它们。为了避免线程通信带来的性能下降,Ixeris 会缓存常用的 GLFW 状态,以便任何线程都能快速访问,而无需将调用转发到主线程。这些缓存是安全的,并且不会引入额外延迟。
原版的 FPS 限制器(26.1 之前)存在缺陷,它使用 glfwWaitEventsTimeout 来休眠。然而,该函数不能在渲染线程中调用,因此无法与 Ixeris 良好配合。
Ixeris 以一种混合方式重写了 FPS 限制器:先进行精确休眠,并在等待时间非常短时开始自旋等待。
在原版 Minecraft 中,这两个术语指的是同一个线程。
友情链接: 网易我的世界 | 泰拉瑞亚 | ocent云计算 | 米饭Minecraft插件文档 | 友链合作
历史访问人数:211,653 | 历史访问人次:320,056
今日访问人数:18,551 | 今日访问人次:21,807
昨日访问人数:30,537 | 昨日访问人次:36,142
Copyright © 2019-2026 我的世界服务器列表站. All rights reserved.
❤ Powered by GermMC 京ICP备17023959号-6