Я успешно преобразовал окно OpenGL в переменную std :: size_t, а затем преобразовал его обратно в окно OpenGL в Linux.Однако, когда я пытаюсь сделать то же самое в Mac OS X, это не работает.Вот что я делаю:
/* our window instance(This is an X Window System Window!) */
Window window_;
.
.
.
.
std::size_t OSXGLWindow::getWindowHandle() {
return window_;
}
.
.
Вызов getWindowHandle () просто возвращает окно как std :: size_t.
Я передаю этот дескриптор окна size_t в следующую функцию:
IInputManager* InputFactory::getInputMgr(std::size_t winHandle) {
IInputManager* retObj = 0;
#ifdef _WIN32
// todo: windows input implementation
#endif
#ifdef linux
Window win = winHandle;
retObj = new lwis::linuxos::LinuxInputManager(win);
#endif
#ifdef __APPLE__
Window win = winHandle;
retObj = new lwis::osx::OSXInputManager(win);
#endif
return retObj;
}
LinuxInputManager и OSXInputManager вызывают следующий бит кода:
XSelectInput(display_, theWindow,
KeyPressMask | KeyReleaseMask | KeymapStateMask) == BadWindow)
где 'theWindow«Окно, которое было отправлено в конструктор соответствующих объектов» из функции «InputFactory :: getInputMgr (..)».
«XSelectInput» успешно выполняется в объекте LinuxInputManager для Linux, но не вOSXInputManager для OS X.
Еще одна важная информация - это то, что окно передается между двумя статическими библиотеками, поэтому оно в первую очередь преобразуется в std :: size_t (чтобы упроститьпройти между библиотеками).
Кто-нибудь знает, почему это так?Есть ли лучший способ передать дескриптор между библиотеками?Будет ли 'void *' лучшим вариантом?