如何从全屏OpenGL窗口获取关键事件?

3

我正在使用Mac OS X中的CGL函数编写一个简单的C语言应用程序。CGL可以创建一个全屏的OpenGL上下文,这正是我想要的。然而,它会从终端窗口中抢占焦点,导致我无法捕获键盘事件。由于我没有使用Cocoa,因此在应用程序进入全屏模式后,我该如何获取键盘事件呢?我希望尽可能地使应用程序具备可移植性,所以想尽量避免使用Cocoa。

1个回答

2

如果我不使用Cocoa,如何在应用程序全屏后获取键盘事件?我想尽可能避免使用Cocoa,因为我需要应用程序尽可能地可移植。

那么请使用跨平台框架,例如GLFW或SDL。


谢谢。有没有办法从全屏CGL应用程序中捕获按键输入?我尝试创建了一个相同应用程序的Cocoa版本,但只要终端窗口打开,我仍然无法捕获按键输入。除了启动NSWindow之外,还有其他解决方法吗? - Synthetix
1
@Synthetix:嗯,无论如何你都必须使用一些依赖于操作系统的调用。OpenGL不处理用户输入,它只是绘制东西。 - datenwolf
1
没错,我最终使用了CGEventSourceKeyState。据我所知,这是唯一一种在不必诉诸Cocoa并在单独的线程中运行OpenGL循环的情况下嗅探键盘输入的方法。 - Synthetix
这只是对GLFW建议的回应:我尝试使用GLFW,但仍然在键事件处理方面遇到问题,似乎无法直接使用。我发现问题在于需要将可执行二进制文件打包到应用程序包中(即.app目录结构)才能正确地与之交互。这些信息已经在GLFW FAQ中说明,但Google没有像Stackoverflow那样很好地索引GLFW FAQ。 - pnkfelix
@Synthetix 你也可以使用IOHIDManager来轮询键盘,不过我不确定这会如何影响你的线程决策。 - user755921

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接