Как собрать входные данные из внешнего окна с помощью SDL?

В настоящее время я пытаюсь переписать связующее между Ogre и SDL в моем игровом движке. Первоначально я использовал метод, описанный здесь. Недавно я обновил свою версию SDL до версии 1.3 и заметил вызов функции "SDL_CreateWindowFrom()" и повторно реализовал мой механизм связывания, чтобы позволить Ogre построить окно, а затем получить HWND из Ogre для передачи в SDL.

Создано только одно окно, и я вижу, что все отображается правильно, однако никакой информации не собирается. Понятия не имею почему. Вот код, с которым я сейчас работаю (в Windows):

OgreWindow = Ogre::Root::getSingleton().createRenderWindow(WindowCaption, Settings.RenderWidth, Settings.RenderHeight, Settings.Fullscreen, &Opts);
size_t Data = 0;
OgreWindow->getCustomAttribute("WINDOW",&Data);
SDLWindow = SDL_CreateWindowFrom(&Data);
SDL_SetWindowGrab(SDLWindow,SDL_TRUE);

Я попытался осмотреться, и есть ряд людей, которые сделали это с той или иной степенью успеха (например, здесь или здесь). Но никто не комментирует обработку ввода после реализации этого.

Первоначально я думал, что, возможно, поскольку SDL не владеет окном, оно не будет собирать входные данные по умолчанию, что является разумным. Поэтому я искал SDL API и обнаружил только одну функцию "SDL_SetWindowGrab()", которая, по-видимому, связана с захватом ввода. Но звонить это не имеет никакого эффекта.

Как я могу получить SDL для сбора информации из моего окна, сделанного в Ogre?

1 ответ

Решение

Это было какое-то время, но я подумал, что могу ответить на этот вопрос для других, кому это может понадобиться. Это оказалось ошибкой / неполной функцией в SDL 1.3. Метод "CreateWindowFrom" изначально не предназначался для использования исключительно в качестве обработчика ввода. На момент написания этой статьи я и я, и другой в моей команде писали исправления для Windows и Linux, которые позволяли использовать это использование, и отправляли эти исправления в SDL.

Другие вопросы по тегам