如何在OS X上处理OpenGL和全屏


9

我在OS X上进行大部分开发,对于我当前的游戏项目,这是我的目标环境。但是,当我玩游戏时,我会在Windows上玩。作为Windows游戏玩家,我习惯于Alt + Tab从游戏内切换到最后打开的应用程序。

在OS XI上,目前找不到支持该功能的游戏,也找不到能使之成为现实的方法。我当前的项目基于SDL 1.3,我可以看到cmd + tab是直接发送到我的应用程序且未被操作系统拦截的序列。

现在,我的第一个尝试是在cmd + tab上隐藏渲染窗口,该渲染窗口当然可以工作,但是其缺点是,当用户跳回到应用程序时,无法恢复SDL中的隐藏OpenGL窗口。首先,没有为此触发的事件,或者我找不到它,其次,核心问题是当该应用程序窗口隐藏时,我的游戏仍然是活动的应用程序,只是该窗口消失了。

那真是令人讨厌。

任何想法如何近似alt + tab的Windows / Linux行为?

Answers:


2

问题是您正在捕获显示,如此处的Apple文档所述:https : //developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/QuartzDisplayServicesConceptual/Articles/DisplayCapture.html

这意味着您的应用程序将拦截所有键盘命令。根据您的应用程序,此方法有很多优点。

苹果文档在底部说:

注意:不必捕获显示器即可进行全屏绘制。另一种方法是创建显示尺寸并将其绘制到无边界窗口中。这种方法使您可以使用窗口系统的所有功能。它在操作系统的其余部分也能很好地发挥作用,并降低了显示处理的复杂性(例如,您不必担心镜像显示)。使用这种方法,您可以接收到捕获的显示器可能遗漏的错误警报。您也可以使用Command-Tab通过这种方法更改应用程序。在具有现代图形硬件的系统上,全屏窗口中的绘图性能几乎与全屏绘图上下文一样快。

您需要做的是使openGL视图全屏显示而不捕获显示。这就是cocos2d当前处理全屏OS X应用程序的方式。您可以在此处浏览cocos2d Mac的代码:https : //github.com/cocos2d/cocos2d-iphone/tree/master-v2/cocos2d/Platforms/Mac

具体看CCDirectorMac.m和CCGLView.m中的实现。

如果确定要有选择地限制某些功能(例如过程切换)而不限制窗口系统的所有功能,则可以查看Apple Kiosk Mode技术说明:http : //developer.apple.com /library/mac/#technotes/KioskMode/Introduction/Introduction.html


1

我在Mac上的经验是,通常有一种快捷方式可以将全屏模式退出到窗口模式(通常为CMD + M或CMD + Return)。切换到窗口模式后,即可正常访问所有应用程序。窗口模式还可以使用户很好地监视所有其他应用程序中的游戏。因此,我想您可以在游戏中实现这种功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.