Мод Ixeris улучшает производительность клиента Minecraft за счёт оптимизации обработки событий ввода.
Обзор
При повороте камеры заметно падение FPS, частично из-за дополнительных вычислений, например, видимости чанков. Однако часть ресурсов ЦП, которые могли бы использоваться для рендеринга, тратится неэффективно на опрос событий ввода, особенно на Windows с высокой частотой опроса мыши.
Ixeris решает эту проблему двумя основными способами:
- Многопоточный опрос событий: опрос событий выполняется в основном потоке, а рендеринг переносится в отдельный поток рендера.
- Буферизованный необработанный ввод (только для Windows): заменяет неэффективный метод
GetRawInputDataнаGetRawInputBuffer, позволяющий считывать несколько событий за один вызов, снижая накладные расходы, включая вызовы JNI.
Тест 1: В игре (мышь захвачена, курсор невидим)
Проводился в мире superflat без сущностей, на Windows с разными частотами опроса мыши.
| Частота опроса | Без Ixeris | Ixeris без буфера | Ixeris с буфером |
|---|---|---|---|
| 8000 Гц | 12 FPS | 83 FPS (в 6.9 раза быстрее) | 121 FPS (в 10.1 раза быстрее) |
| 2000 Гц | 76 FPS | 114 FPS (в 1.5 раза быстрее) | 135 FPS (в 1.78 раза быстрее) |
| 500 Гц | 134 FPS | 145 FPS (в 1.08 раза быстрее) | 151 FPS (в 1.13 раза быстрее) |
Тест 2: В меню (мышь не захвачена, курсор видим)
Сравнение производительности при частоте опроса 1000 Гц, когда нужно знать фактическое положение курсора, а не относительное движение. Тесты проводились на Windows и Linux (X11 и Wayland).
| Платформа | FPS на паузе (статично) | Без Ixeris (при движении) | С Ixeris (при движении) |
|---|---|---|---|
| Windows | 233 FPS | 133 FPS | 165 FPS (на 24% выше) |
| Linux (X11) | 358 FPS | 320 FPS | 355 FPS (на 11% выше) |
| Linux (Wayland) | 364 FPS | 289 FPS | 298 FPS (на 3% выше) |
Безопасность потоков
- Обработчики GLFW, зарегистрированные через
glfwSet*Callback, вызываются в потоке рендера. - Вызовы функций GLFW, требующих выполнения в основном потоке, при вызове из других потоков перенаправляются в основной поток. Такие вызовы могут выполняться с задержкой или блокировать вызывающий поток до завершения.
- Версия 3.1.0 строго соблюдает требования безопасности потоков, описанные в документации GLFW.
Кэширование состояния GLFW
Для предотвращения снижения производительности из-за межпоточного взаимодействия Ixeris кэширует часто используемые состояния GLFW, что позволяет безопасно и быстро получать их из любого потока без перенаправления в основной поток.
Улучшенный лимитер FPS
Стандартный лимитер FPS в Minecraft (до версии 26.1) использует glfwWaitEventsTimeout, который нельзя вызывать из потока рендера, что снижает эффективность с Ixeris.
Ixeris реализует гибридный лимитер FPS: точное ожидание с переходом на активное ожидание (spin wait) при очень коротких интервалах сна.
Термины
- Основной поток — поток, в котором запускается игра, где происходит опрос событий и вызовы большинства функций GLFW.
- Поток рендера — отдельный поток, где выполняется отрисовка игры без опроса событий.





