Cara menangani OpenGL dan Layar Penuh pada OS X

9

Saya melakukan sebagian besar pengembangan saya pada OS X dan untuk proyek game saya saat ini, ini adalah lingkungan target saya. Namun ketika saya bermain game saya bermain di Windows. Sebagai seorang gamer windows saya terbiasa dengan Alt + Tab beralih dari dalam game ke aplikasi terakhir yang terbuka.

Pada OS XI saat ini tidak dapat menemukan game yang mendukungnya dan saya juga tidak dapat menemukan cara untuk mewujudkannya. Proyek saya saat ini didasarkan pada SDL 1.3 dan saya dapat melihat bahwa tab cmd + adalah urutan yang dikirim langsung ke aplikasi saya dan tidak dicegat oleh sistem operasi.

Sekarang upaya pertama saya adalah menyembunyikan jendela rendering pada cmd + tab yang pasti berfungsi, tetapi memiliki kelemahan bahwa jendela OpenGL tersembunyi di SDL tidak dapat dipulihkan ketika pengguna kembali ke aplikasi. Pertama-tama, tidak ada acara yang dipecat untuk itu atau saya tidak dapat menemukannya, kedua masalah intinya adalah ketika jendela aplikasi itu disembunyikan, permainan saya masih merupakan aplikasi yang aktif, hanya saja jendela itu menghilang.

Itu sangat menjengkelkan.

Adakah ide cara memperkirakan perilaku windows / linux untuk alt + tab?

Armin Ronacher
sumber

Jawaban:

2

Masalahnya adalah Anda menangkap tampilan, seperti yang dijelaskan dalam dokumentasi Apple di sini: https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/QuartzDisplayServicesConceptual/Articles/DisplayCapture.html

Ini berarti bahwa SEMUA perintah keyboard dicegat oleh aplikasi Anda. Ada keuntungan dari pendekatan ini, tergantung pada aplikasi Anda.

Dokumen Apple mengatakan, di bagian bawah:

Catatan: Tidak perlu mengambil tampilan untuk melakukan gambar layar penuh. Pendekatan lain adalah dengan membuat dan menggambar ke jendela tanpa batas ukuran layar. Pendekatan ini memungkinkan Anda untuk menggunakan semua fitur sistem windowing. Ini juga bekerja dengan baik dengan sistem operasi lainnya, dan mengurangi kompleksitas penanganan tampilan (misalnya, Anda tidak perlu khawatir tentang tampilan cermin). Dengan pendekatan ini, Anda dapat menerima peringatan kesalahan yang mungkin terlewatkan dengan tampilan yang diambil. Anda juga dapat menggunakan Command-Tab untuk mengubah aplikasi dengan pendekatan ini. Pada sistem dengan perangkat keras grafis modern, kinerja menggambar dalam jendela layar penuh hampir secepat konteks menggambar layar penuh.

Yang perlu Anda lakukan adalah membuat tampilan openGL Anda layar penuh tanpa menangkap tampilan. Ini adalah bagaimana cocos2d saat ini menangani aplikasi OS X layar penuh. Anda dapat menelusuri kode untuk cocos2d Mac di sini: https://github.com/cocos2d/cocos2d-iphone/tree/master-v2/cocos2d/Platforms/Mac

Lihat secara khusus di CCDirectorMac.m dan CCGLView.m untuk implementasinya.

Jika Anda menentukan bahwa Anda ingin membatasi beberapa fungsi secara selektif, seperti pengalihan proses, tanpa membatasi semua fitur sistem windowing, Anda dapat melihat pada Apple Kiosk Mode Technical Note: http://developer.apple.com /library/mac/#technotes/KioskMode/Introduction/Introduction.html

Tanah liat
sumber
1

Pengalaman saya tentang ini di Mac adalah bahwa biasanya ada jalan pintas untuk keluar dari mode layar penuh ke mode berjendela (biasanya CMD + M atau CMD + Kembali). Setelah Anda beralih ke mode windowed maka Anda dapat mengakses semua aplikasi Anda seperti biasa. Mode Windowed juga memungkinkan pengguna untuk memonitor game mereka di antara semua aplikasi mereka yang lain. Jadi saya kira Anda bisa menerapkan fungsi semacam ini ke game Anda.

James Bedford
sumber