Получение устройства ввода (мышь, клавиатура ...) на LINUX - PullRequest
4 голосов
/ 30 января 2012

Я создаю кроссплатформенный игровой движок, и теперь я сосредоточен на системе ввода.

Я написал абстрактную систему ввода, которая передает сообщения и питается зависимыми от платформы модулями, работающими в отдельном потоке.

В окнах я создал окно «Только для сообщений», которое передает ввод система с сообщениями (переведенными на независимую от платформы) из RAWINPUT.

Теперь у меня проблемы с выяснением того, как сделать подобное в Unix-системах. Есть ли какой-нибудь удобный способ получить ввод (keyup, keydown, mousemove ...) из ядра? Или любым другим способом без необходимости показывать какие-либо окна?

EDIT

Я не хочу, чтобы моя система ввода зависела от моего рендерера. Renderer должен просто уведомить ввод при изменении фокуса приложения ... Итак, я хочу, чтобы система ввода работала в другом потоке, чем рендер.

Ответы [ 3 ]

5 голосов
/ 30 января 2012

Обычно кросс-платформенный ввод достигается с помощью библиотеки-обертки - SDL очень хорош в этом, и текущая версия даже лицензирована BSD.

Преимуществаиспользования оболочки настолько велики, что даже игры для Windows, использующие свое собственное решение в Windows, обычно используют SDL в качестве оболочки при работе в Linux (это было первоначальной причиной создания SDL).

Так что вв худшем случае вы можете хранить свои библиотеки в Windows и использовать SDL для реализации специально на * nix системах.

3 голосов
/ 31 января 2012

Если вы используете X11:

У Питера Хаттерера есть серия статей XInput2 .Поддерживает необработанные события очевидно.

ManyMouse утверждает, что использует XInput2 без окна :

  • В системах Unix мы пытаемсяиспользовать расширение XInput2, если это возможно.ManyMouse попытается использовать другие подходы, если X-сервер недоступен или X-сервер не поддерживает XInput2.Если вы хотите использовать цель XInput2, убедитесь, что вы связываетесь с «-ldl», так как мы используем dlopen () для поиска библиотек X11 / XInput2.Вам не нужно напрямую связываться с Xlib, и ManyMouse изменится изящно (сообщив об отсутствии мышей в драйвере ManyMouse XInput2), если библиотеки не существуют в системе конечного пользователя.Естественно, вам понадобятся заголовки X11 в вашей системе (в Ubuntu вам понадобится apt-get install libxi-dev).Вы можете построить с SUPPORT_XINPUT2, заданным равным нулю, чтобы полностью отключить поддержку XInput2. Обратите внимание, что цели XInput2 не требуется, чтобы ваше приложение предоставляло окно X11. Приложение test_manymouse_stdio работает с этой целью, пока работает X-сервер.Обратите внимание, что расширение X11 DGA конфликтует с XInput2 (в частности: SDL может использовать его).Это хороший способ справиться с этим в SDL 1.2:

Возможно, стоит посмотреть источник.

0 голосов
/ 30 января 2012

В системе X Window существует концепция окон только для ввода, которая более или менее параллельна концепции окна только для сообщений в Windows.

...