現在、ゲームエンジンでOgreとSDLの間のバインダーを書き直そうとしています。もともと私はここのOgreWikiで概説されている方法を使用しました。 最近、SDLのバージョンを1.3に更新し、「SDL_CreateWindowFrom()」関数呼び出しに気づき、Ogreがウィンドウを構築できるようにバインダーを再実装し、OgreからHWNDを取得してSDLに渡しました。
ウィンドウが1つだけ作成され、すべてが正しくレンダリングされていることがわかりますが、入力は収集されません。理由はわかりません。これが私が現在(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()」が1つだけ見つかりました。しかし、それを呼び出しても効果はありません。
SDLにOgre製のウィンドウから入力を収集させるにはどうすればよいですか?