2

現在、ゲームエンジンで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製のウィンドウから入力を収集させるにはどうすればよいですか?

4

1 に答える 1

3

久しぶりですが、必要になるかもしれない人のために答えを出すと思いました。SDL1.3のバグ/不完全な機能であることが判明しました。「CreateWindowFrom」メソッドは、元々、入力ハンドラーとしてのみ使用することを目的としていませんでした。この記事を書いている時点で、私は自分自身と私のチームの別の人がWindowsとLinuxのパッチを作成し、この使用を許可してそれらのパッチをSDLに送信したことを知っています。

于 2013-05-13T18:21:03.323 に答える