将opengl窗口转换为std::size_t并再次返回在Linux中有效,但在OS X中无效
convert opengl Window to std::size_t and back again works in Linux, but not OS X
我已经成功地将OpenGL窗口转换为std::size_t变量,然后在Linux中将其转换回OpenGL窗口。然而,当我尝试在Mac OS X中做同样的事情时,它不起作用。我在做什么:
/* our window instance(This is an X Window System Window!) */
Window window_;
.
.
.
.
std::size_t OSXGLWindow::getWindowHandle() {
return window_;
}
.
.
调用"getWindowHandle()"只会将Window返回为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"在Linux的LinuxInputManager对象中成功,但在OS X的OSXInputManager中不成功。
另一个重要信息是Window在两个静态库之间传递,这就是为什么它首先被转换为std::size_t(以便在库之间轻松传递)。
有人知道为什么会这样吗?有没有更好的方法在库之间传递句柄?"无效*"会是更好的选择吗?
为什么你希望其他一些不相关的类型Window
可以转换为std::size_t
并返回而不会有任何损失?我想,看到unsigned char
不担任这个角色,你不会感到惊讶,是吗?如果是这样的话,为什么您会惊讶地看到size_t
失败?
size_t
只是一些无符号整数类型,具有一定的大小和范围。如果您将某个不相关的类型转换为size_t
,则转换结果可能适合size_t
,也可能不适合,具体取决于平台、源类型的属性等。显然,这正是您的情况。
void*将是一个不错的选项。我想您是在试图对代码的其余部分隐藏OpenGL定义吗?
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 枚举进程模块在有效句柄上返回无效句柄
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 为什么我在函数中使用引用并通过引用返回它仍然有效?
- 返回一个引用C++中另一个类对象的对象的有效方法
- 访问包含P的有效索引时返回空格的C++字符串
- 仅当返回表达式有效时才启用模板
- Eigen::Quaternion FromTwoVectors() 不返回有效的四元数
- 设计返回有效字符串的方法或函数
- 有效地分配堆栈对象(由函数的值返回)到堆?
- 代码是否有效.如果我想显示第一个元素?如果不是,那么 s.begin() 会返回什么?
- 在C 中返回参考有效期参考是否有效
- 计算 <Classtype*> 向量中所有项的布尔值的最有效方法,如果全部为真则返回 true
- boost::asio http 服务器无法向 Postman 返回有效响应
- 为什么在三元运算符的分支之间返回 lambda 对某些 lambda 有效?
- 如何在函数中初始化矩阵并在C++中有效地返回它
- libxml2的cmake find_package不返回有效的标头目录
- 哪个更有效:返回值与按引用传递