Как собрать входные данные из внешнего окна с помощью SDL? - PullRequest
2 голосов
/ 28 сентября 2011

В настоящее время я пытаюсь переписать связующее между Ogre и SDL в моем игровом движке. Первоначально я использовал метод, описанный в Ogre Wiki здесь. Я недавно обновил свою версию SDL до версии 1.3 и заметил вызов функции "SDL_CreateWindowFrom ()" и повторно реализовал мой механизм связывания, чтобы Ogre мог построить окно , а затем получить HWND из Огре для передачи в 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 Ответ

3 голосов
/ 13 мая 2013

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

...