Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在LINUX上获取设备输入(鼠标、键盘…)_C++_Linux_Raw Input - Fatal编程技术网

C++ 在LINUX上获取设备输入(鼠标、键盘…)

C++ 在LINUX上获取设备输入(鼠标、键盘…),c++,linux,raw-input,C++,Linux,Raw Input,我正在构建跨平台游戏引擎,现在我专注于输入系统 我已经写了一个抽象的输入系统,它将消息传递给用户 并且由平台相关的模块提供,在单独的线程中运行 在windows中,我创建了“仅消息”窗口,该窗口提供输入 具有来自RAW输入的消息(转换为独立于平台)的系统 现在我很难弄清楚如何在基于unix的系统上做类似的事情。 是否有任何方便的方法从内核获取输入(keyup、keydown、mousemove…)? 或者其他不需要显示任何窗口的方式 编辑 我不希望输入系统依赖于渲染器。渲染器只需通知 应用程序焦

我正在构建跨平台游戏引擎,现在我专注于输入系统

我已经写了一个抽象的输入系统,它将消息传递给用户 并且由平台相关的模块提供,在单独的线程中运行

在windows中,我创建了“仅消息”窗口,该窗口提供输入 具有来自RAW输入的消息(转换为独立于平台)的系统

现在我很难弄清楚如何在基于unix的系统上做类似的事情。 是否有任何方便的方法从内核获取输入(keyup、keydown、mousemove…)? 或者其他不需要显示任何窗口的方式

编辑


我不希望输入系统依赖于渲染器。渲染器只需通知
应用程序焦点更改时输入。。。所以我希望输入系统运行在不同于渲染器的线程上。

通常跨平台输入是通过使用包装器库实现的——这是一个非常好的方法,当前版本甚至是BSD许可的

使用包装器的好处是如此之大,以至于在Windows上使用自己解决方案的Windows游戏在Linux上运行时也倾向于使用SDL作为包装器(这就是创建SDL的最初原因)


因此,在最坏的情况下,您可以将库保留在Windows上,并使用SDL专门在*nix系统上实现。

在X Window系统下,有一个仅输入窗口的概念,它或多或少与Windows下的仅消息窗口的概念平行

假设您使用的是X11:

彼得·赫特勒有一个朋友。显然支持

许多用途:

  • 在Unix系统上,如果可能的话,我们尝试使用XInput2扩展。 如果没有X服务器,ManyMouse将尝试回退到其他方法 可用或X服务器不支持XInput2。如果你想使用 XInput2目标,请确保使用“-ldl”链接,因为我们使用dlopen()来 查找X11/XInput2库。您不必链接到Xlib 直接,许多老鼠将优雅地失败(报告中没有老鼠) 如果最终用户的计算机上不存在库,则使用XInput2驱动程序 系统。当然,你需要在你的系统上安装X11头文件(在Ubuntu上, 您可能需要安装libxi(dev)。你可以用 SUPPORT_XINPUT2定义为零,以完全禁用XINPUT2支持。 请注意,XInput2目标不需要您的应用程序来提供X11 窗口。只要 X服务器正在运行。请注意,X11 DGA扩展与 XInput2(特别是:SDL可能会使用它)。这是一个处理问题的好方法 在SDL 1.2中:

可能值得查看源代码。

我不希望输入系统依赖于渲染器。当应用程序焦点更改时,渲染器应该只通知输入。。。所以我希望输入系统在不同的线程上运行,而不是在渲染器上运行。不幸的是,SDL需要它们都在同一个线程中。我不知道SDL下有这样的限制。你认为它为什么存在?试着在谷歌上搜索“sdl多线程”,有大量的示例程序可以实现您声称不可能实现的功能。