2011-09-28 2 views
2

현재 게임 엔진에서 Ogre와 SDL 사이에 바인더를 다시 쓰려고합니다. 원래 오우거 위키에 설명 된 방법을 사용했습니다. here. 최근에 내 버전의 SDL을 1.3으로 업데이트하고 "SDL_CreateWindowFrom()"함수 호출을 인식하고 바인더를 다시 구현하여 오우거가 창을 작성한 다음 HWND를 가져올 수있게했습니다. 오우거는 SDL로 전달됩니다.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); 

나는 주변을 두리번 시도하고 하나 개의 성공의 정도 또는 다른 (예 : here 또는 here에 이런 짓을 한 사람들의 숫자가있다). 그러나 이것을 구현 한 후 입력을 처리하는 것에 대해서는 아무도 언급하지 않는 것으로 보입니다.

원래 SDL이 기본적으로 입력을 수집하지 않는 창을 소유하지 않았기 때문에 원래 생각했던 것처럼 합리적입니다. 그래서 나는 SDL API를 검색하여 오직 하나의 함수 "SDL_SetWindowGrab()"이 입력 캡처와 관련이있는 것으로 나타났습니다. 하지만 부르면 효과가 없습니다.

Ogre-made 창에서 입력을 수집하도록 SDL을 가져올 수 있습니까?

답변

3

오랜 시간이 걸렸지 만, 필요할 수도있는 다른 사람들에게 답을 줄 것이라고 생각했습니다. SDL 1.3에서 버그/불완전한 기능으로 밝혀졌습니다. "CreateWindowFrom"메서드는 원래 독점적으로 입력 처리기로 사용하기위한 것이 아닙니다. 이 글을 쓰는 시점에서 저 자신과 제 팀의 다른 사람들이 Windows 및 Linux 용 패치를 작성하여이 사용을 허용하고 SDL에 패치를 제출했음을 알고 있습니다.

관련 문제