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の動作を概算する方法はありますか?

回答:


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キオスクモードのテクニカルノートを参照してください。http//developer.apple.com /library/mac/#technotes/KioskMode/Introduction/Introduction.html


1

Macでの私の経験では、通常、フルスクリーンモードを終了してウィンドウモードに切り替えるショートカットがあります(通常はCMD + MまたはCMD + Return)。ウィンドウモードに切り替えたら、通常どおりすべてのアプリケーションにアクセスできます。ウィンドウモードでは、ユーザーが他のすべてのアプリの中でゲームを監視することもできます。したがって、この種の機能をゲームに実装するだけでよいのではないでしょうか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.