Jak radzić sobie z OpenGL i Fullscreen na OS X


9

Większość rozwoju zajmuję się na OS X, a moim obecnym projektem gry jest to moje środowisko docelowe. Jednak gdy gram w gry, gram w systemie Windows. Jako gracz systemu Windows jestem przyzwyczajony do przełączania Alt + Tab z poziomu gry do ostatnio otwartej aplikacji.

W systemie OS XI nie mogę obecnie znaleźć gry, która to obsługuje, ani nie mogę znaleźć sposobu, aby to umożliwić. Mój obecny projekt opiera się na SDL 1.3 i widzę, że tab cmd + to sekwencja wysyłana bezpośrednio do mojej aplikacji i nie przechwytywana przez system operacyjny.

Teraz moją pierwszą próbą było ukrycie okna renderowania na karcie cmd +, co z pewnością działa, ale ma tę wadę, że ukrytego okna OpenGL w SDL nie można przywrócić, gdy użytkownik wróci do aplikacji. Po pierwsze, nie jest uruchamiane żadne zdarzenie lub nie mogę go znaleźć, po drugie podstawowy problem polega na tym, że kiedy to okno aplikacji jest ukryte, moja gra jest nadal aktywną aplikacją, po prostu okno zniknęło.

To niesamowicie denerwujące.

Jakieś pomysły na przybliżenie zachowania systemu Windows / Linux dla Alt + Tab?

Odpowiedzi:


2

Problem polega na tym, że przechwytujesz ekran, jak opisano w dokumentacji Apple tutaj: https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/QuartzDisplayServicesConceptual/Articles/DisplayCapture.html

Oznacza to, że wszystkie polecenia klawiatury są przechwytywane przez aplikację. Takie podejście ma zalety w zależności od zastosowania.

Dokumenty Apple mówią na dole:

Uwaga: Nie jest konieczne przechwytywanie ekranu, aby wykonać rysunek pełnoekranowy. Innym podejściem jest utworzenie i narysowanie w oknie bez obramowania rozmiaru wyświetlacza. Takie podejście pozwala korzystać ze wszystkich funkcji systemu okienkowego. Działa również dobrze z resztą systemu operacyjnego i zmniejsza złożoność obsługi wyświetlaczy (na przykład nie musisz się martwić o wyświetlacze dublowane). Dzięki takiemu podejściu możesz otrzymywać ostrzeżenia o błędach, które mogą zostać pominięte przy przechwyconym wyświetlaczu. Możesz także użyć Command-Tab do zmiany aplikacji przy użyciu tego podejścia. W systemach z nowoczesnym sprzętem graficznym wydajność rysowania w oknie pełnoekranowym jest prawie tak szybka, jak kontekst rysowania na pełnym ekranie.

To, co musisz zrobić, to sprawić, aby Twój openGL wyświetlał pełny ekran bez przechwytywania wyświetlacza. W ten sposób cocos2d obsługuje obecnie pełnoekranowe aplikacje OS X. Możesz przejrzeć kod Cocos2d Mac tutaj: https://github.com/cocos2d/cocos2d-iphone/tree/master-v2/cocos2d/Platforms/Mac

Poszukaj ich w szczególności w CCDirectorMac.m i CCGLView.m.

Jeśli stwierdzisz, że chcesz selektywnie ograniczyć niektóre funkcje, takie jak przełączanie procesów, bez ograniczania wszystkich funkcji systemu okienkowego, możesz zapoznać się z uwagą techniczną trybu Apple Kiosk: http://developer.apple.com /library/mac/#technotes/KioskMode/Introduction/Introduction.html


1

Doświadczam tego na komputerach Mac, ponieważ zwykle istnieje skrót do wyjścia z trybu pełnoekranowego do trybu okienkowego (zwykle CMD + M lub CMD + Return). Po przejściu do trybu okien możesz normalnie uzyskać dostęp do wszystkich aplikacji. Tryb okien pozwala także na monitorowanie gry wśród wszystkich innych aplikacji. Myślę, że możesz po prostu zaimplementować tego rodzaju funkcjonalność w swojej grze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.