С выпуском Valve игр для Linux я немного поиграл в Left 4 Dead 2 и Portal 2 и заметил небольшое, но все же заметное отставание мыши (задержка), когда я не включаю опцию ввода мыши Raw . Еще одна игра, в которую я играл в Linux, Starbound, также имеет похожую задержку мыши только в Linux. Я искал информацию о необработанном вводе, но я все еще немного озадачен.

Из того, что я собрал (например, здесь), распространенный способ получения необработанного аппаратного ввода - чтение файлов */dev/input/event **. Суть в том, что в моей системе (Fedora 20) эти файлы доступны только для чтения корневой группе, и я не создал правило udev, как упомянуто в связанном посте.

Итак, мой вопрос:
Как игра читает необработанный ввод с мыши? Есть ли другой способ, чем /dev/input?
Есть ли кросс-платформенный способ сделать это?

Бонусные вопросы (я все равно собираюсь их поискать =)):
Какой механизм ОС обеспечивает "стандартный" ввод? Например, на что полагается SDL или другая библиотека для сбора информации от оборудования?

ps: опция ввода мыши в Portal 2 в бета-версии на самом деле пока не работает, поэтому я начал обдумывать этот вопрос. Это работает в L4D2, хотя.

1 ответ1

1

В Linux "Все это файл", но это не значит, что это настоящий "файл" на вашем жестком диске, для которого требуются IOP для чтения с диска.

В Linux существует несколько способов получения ввода от мыши, наиболее распространенными из которых являются envdev и mousedev. Вы также можете использовать систему взаимодействия X Window для считывания ввода мышью. Для других устройств, таких как клавиатура, вы получили keydev для USB-устройства и т.д.

Rawinput означает, что игра / приложение считывают необработанные входные данные с устройства, а не получают данные после того, как они были обработаны операционной системой. При использовании "обработанного ввода" специальные настройки мыши, такие как ускорение, скорость курсора и другие, которые могут повлиять на воспринимаемое поведение устройства, будут влиять на поведение указателя в игре.

Вы также можете заметить это в играх / приложениях для Windows: некоторые игры могут использовать интерфейс ввода по умолчанию в ОС, некоторые могут использовать DirectX(который был (и предназначен) для объединения звука, графики и ввода в рамках единого API), некоторые могут получить доступ к мышкой напрямую и сами выполняйте все расчеты.

В общем, все зависит от того, сколько работы вы хотите сделать, и какой контроль вы хотите или нуждаетесь над вводом. При работе с необработанным вводом данных все вычисления в отношении положения, ускорения и других факторов должны выполняться внутри вашего приложения. Если вы не хотите иметь дело с этим, вы можете позволить используемому вами OS/API сделать это и просто сказать вам, относительное изменение положения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .