EchoCipher & SpeedySpawn
SpeedySpawn SpeedySpawn
Привет, Эхо. Я тут как раз возился с последним прогоном, пытаюсь выцепить этот самый момент, до секунды. Есть у тебя какие-нибудь данные о том, как изменение размера буфера влияет на задержку ввода в этой игре? Ищу что-то с обоснованием, основанное на цифрах.
EchoCipher EchoCipher
Конечно. Представь конвейер ввода как очередь. Каждый кадр добавляет 0.1 секунды задержки, создавая буфер на один кадр. Если увеличить размер буфера на ΔB кадров, задержка ввода увеличится примерно на ΔB, умноженное на время кадра. Для игры с частотой 60 Гц это примерно 16.7 миллисекунд на кадр. Таким образом, буфер из 3 кадра добавляет около 50 миллисекунд. Чтобы задержка не превышала 100 миллисекунд, размер буфера должен быть не более шести кадров. Математика проста: B, умноженное на (1000/Гц). Настраивай B, пока не достигнешь нужной задержки.
SpeedySpawn SpeedySpawn
Отличный разбор, спасибо! Получается, чтобы уложиться в 100 миллисекунд, мне нужно ограничить буфер до шести кадров или меньше. Начну с четырёх, чтобы оставался запас, а потом буду подстраивать. Есть какие-нибудь хитрости, как выжать ещё миллисекунду из конвейера обработки? И, кстати, когда я попадаю в "идеальный" кадр, клянусь, курсор мыши у меня начинает танцевать — наверное, слишком восторжен!
EchoCipher EchoCipher
Да, четыре кадра дают неплохой запас. Чтобы срезать миллисекунду, посмотри на сам цикл обработки ввода – убедись, что ты читаешь необработанный HID-буфер напрямую, обходя любые ограничения на уровне ОС. Используй поток с высоким приоритетом, синхронизируй основной цикл с частотой обновления экрана и избегай лишних точек синхронизации. И держи размер буфера ввода игры как можно меньше – чем меньше внутренняя очередь, тем меньше тебе придётся пересинхронизировать. А насчёт "танца" курсора, это просто твоя система пытается догнать; отключение ускорения указателя или использование кастомного драйвера может с этим покончить. Продолжай итерации, и задержка уменьшится.
SpeedySpawn SpeedySpawn
Круто, голый HID – без задержек ОС, чистый отклик. Сейчас запущу этот поток высокого приоритета и синхронизирую с частотой 60 Гц. Если курсор продолжит танцевать, попробую отключить ускорение и посмотрю, перестанет ли мышь дергаться. Спасибо за совет, может даже смогу срезать еще 0.3 мс, если подкручу интервал опроса. Готов побить рекорд, но если выстрелит пик в 100 мс – сверну все на кота, который на клавиатуру залез.
EchoCipher EchoCipher
Звучит неплохо. Только интервал опроса делай минимальным — каждая миллисекунда важна. Если выстрелит пик в 100 миллисекунд, следи, чтобы кадры не терялись в очереди; даже один пропущенный кадр может всё испортить. А если кот всё ещё печатает, вот почему у тебя джиттер — просто отслеживай его нажатия и отфильтруй. Удачи найти идеальную настройку.