Як боротися з OpenGL та повноекранним екраном на OS X


9

Більшу частину моєї розробки я роблю на OS X, і для мого поточного ігрового проекту це моє цільове середовище. Однак, коли я граю в ігри, я граю в Windows. Як геймер Windows, я звик перемикати Alt + Tab зсередини гри на останню програму, яка була відкрита.

В OS XI в даний час не можна знайти ні гру, яка підтримує це, ні я не можу знайти спосіб зробити це можливим. Мій поточний проект базується на SDL 1.3, і я бачу, що вкладка cmd + - це послідовність, яка надсилається безпосередньо моїй програмі, а не перехоплюється операційною системою.

Тепер моєю першою спробою було сховати вікно візуалізації на вкладці cmd +, що, безумовно, працює, але є недоліком того, що приховане вікно OpenGL у SDL не може бути відновлено, коли користувач вкладеться назад до програми. По-перше, для цього не запускається подія або я не можу її знайти, по-друге, основна проблема полягає в тому, що коли це вікно програми приховано, моя гра все ще є активною програмою, тільки що вікно зникло.

Це неймовірно дратує.

Будь-які ідеї, як наблизити поведінку Windows / Linux для alt + tab?

Відповіді:


2

Проблема полягає в тому, що ви знімаєте дисплей, як описано в документації Apple тут: https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/QuartzDisplayServicesConceptual/Articles/DisplayCapture.html

Це означає, що ваша програма перехоплює ВСІ команди клавіатури. У цьому підході є переваги, залежно від вашої заявки.

Документи Apple говорять внизу:

Примітка: Не потрібно знімати дисплей, щоб робити повноекранний малюнок. Ще один підхід - створити і намалювати у вікні без полів розмір дисплея. Такий підхід дозволяє використовувати всі функції віконної системи. Він також добре грає з рештою операційної системи, і це зменшує складність обробки дисплея (наприклад, вам не доведеться турбуватися про дзеркальні дисплеї). При такому підході ви можете отримувати сповіщення про помилки, які можуть бути пропущені при захопленому дисплеї. Ви також можете використовувати Command-Tab для зміни програм із таким підходом. У системах із сучасним графічним обладнанням ефективність малювання у повноекранному вікні майже така ж швидка, як і в повноекранному контексті малювання.

Що вам потрібно зробити, це зробити ваш fullGL view fullGL без захоплення дисплея. Ось як cocos2d зараз обробляє повноекранні програми OS X. Ви можете переглянути код для cocos2d Mac тут: https://github.com/cocos2d/cocos2d-iphone/tree/master-v2/cocos2d/Platforms/Mac

Шукайте конкретно у CCDirectorMac.m та CCGLView.m для їх реалізації.

Якщо ви визначите, що хочете вибірково обмежити деякі функції, такі як перемикання процесів, не обмежуючи всі функції віконної системи, ви можете звернутися до Технічної примітки режиму Apple Kiosk: http://developer.apple.com /library/mac/#technotes/KioskMode/Introduction/Introduction.html


1

Мій досвід роботи з Mac полягає в тому, що зазвичай існує ярлик для виходу з режиму повноекранного режиму у віконний режим (як правило, CMD + M або CMD + Return). Після переходу у віконний режим ви отримаєте доступ до всіх своїх програм як звичайних. Віконний режим також чудово дозволяє користувачеві контролювати їх гру серед усіх інших додатків. Тож я думаю, що ви могли просто реалізувати подібну функціональність у своїй грі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.