В ОС X мои геймпады распознаются правильно в SDL_PollEvent()
при запуске приложения. Однако, когда я пытаюсь подключить новые геймпады или удалять старые геймпады, SDL_PollEvent()
не запускает ни SDL_CONTROLLERDEVICEADDED
, ни SDL_CONTROLLERDEVICEREMOVED
. Один и тот же код работает правильно в Windows, когда у меня есть горячие контроллеры игр.Глянцевый геймпад не работает
Более интересным является то, что если изменить размер окна приложения, то горячее подключение будет работать. После события изменения размера все события горячего подключения запускаются. Похоже, что события геймпада помещаются в какую-то очередь ожидания, которая очищается, когда происходит событие изменения размера. Мой код SDL_PollEvent()
довольно стандартный, как показано ниже.
case SDL_CONTROLLERDEVICEADDED:
if (SDL_IsGameController(e.cdevice.which))
{
SDL_GameController *pad = SDL_GameControllerOpen(e.cdevice.which);
if (pad)
{
SDL_Joystick *joy = SDL_GameControllerGetJoystick(pad);
int instanceID = SDL_JoystickInstanceID(joy);
if(m_gameControllers.count(instanceID) == 0)
{
m_gameControllers.insert(std::make_pair(instanceID, pad));
}
}
}
break;
case SDL_CONTROLLERDEVICEREMOVED:
{
auto it = m_gameControllers.find(e.cdevice.which);
if (it != m_gameControllers.end())
{
SDL_GameController* pad = m_gameControllers[e.cdevice.which];
SDL_GameControllerClose(pad);
m_gameControllers.erase(it);
}
}
break;
Неужели кто-нибудь еще испытал это?
Нитки являются корнем всего зла. – Zammalad