如何使用SDL从外部窗口收集输入?

时间:2011-09-28 01:19:08

标签: c++ sdl ogre3d

我正在尝试在游戏引擎中重新编写Ogre和SDL之间的活页夹。最初我使用了Ogre Wiki here.中概述的方法我最近将我的SDL版本更新为1.3并注意到“SDL_CreateWindowFrom()”函数调用并重新实现了我的绑定器以允许Ogre构建窗口,然后从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);

我已经尝试过四处寻找并且有很多人已经取得了一定程度的成功或其他(例如herehere)。但是在执行此操作后似乎没有人评论处理输入。

我原本以为可能由于SDL不拥有窗口,默认情况下它不会从中收集输入,这是合理的。所以我搜索了SDL API,发现只有一个函数“SDL_SetWindowGrab()”似乎与输入捕获有关。但是调用它没有效果。

如何让SDL从我的Ogre制造的窗口收集输入?

1 个答案:

答案 0 :(得分:3)

已经有一段时间了,但我想我会为可能需要它的其他人提供答案。结果是SDL 1.3中的错误/不完整功能。 “CreateWindowFrom”方法最初并不打算专门用作输入处理程序。在撰写本文时,我知道自己和我的团队中的另一个人为Windows和Linux编写了补丁,允许这种使用工作并将这些补丁提交给SDL。