Come gestire OpenGL e Fullscreen su OS X


9

Faccio la maggior parte del mio sviluppo su OS X e per il mio attuale progetto di gioco questo è il mio ambiente di destinazione. Tuttavia, quando gioco, gioco su Windows. Come giocatore di Windows sono abituato a Alt + Tab passare dall'interno del gioco all'ultima applicazione aperta.

Su OS XI attualmente non riesco a trovare un gioco che supporti questo né posso trovare un modo per renderlo possibile. Il mio progetto attuale si basa su SDL 1.3 e posso vedere che cmd + tab è una sequenza che viene inviata direttamente alla mia applicazione e non intercettata dal sistema operativo.

Ora il mio primo tentativo è stato quello di nascondere la finestra di rendering su cmd + tab che sicuramente funziona, ma ha lo svantaggio che una finestra OpenGL nascosta in SDL non può essere ripristinata quando l'utente torna indietro all'applicazione. Prima di tutto, non esiste un evento attivato o non riesco a trovarlo, in secondo luogo il problema principale è che quando la finestra dell'applicazione è nascosta, il mio gioco rimane l'applicazione attiva, solo che la finestra è scomparsa.

È incredibilmente fastidioso.

Qualche idea su come approssimare il comportamento di windows / linux per alt + tab?

Risposte:


2

Il problema è che stai acquisendo il display, come descritto nella documentazione Apple qui: https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/QuartzDisplayServicesConceptual/Articles/DisplayCapture.html

Ciò significa che TUTTI i comandi da tastiera vengono intercettati dall'applicazione. Ci sono vantaggi in questo approccio, a seconda dell'applicazione.

I documenti di Apple dicono, in fondo:

Nota: non è necessario acquisire un display per eseguire il disegno a schermo intero. Un altro approccio è quello di creare e disegnare in una finestra senza bordi le dimensioni del display. Questo approccio consente di utilizzare tutte le funzionalità del sistema a finestre. Funziona bene anche con il resto del sistema operativo e riduce la complessità della gestione del display (ad esempio, non devi preoccuparti dei display con mirroring). Con questo approccio, è possibile ricevere avvisi di errore che potrebbero essere persi con un display acquisito. Puoi anche usare la scheda Comando per modificare le applicazioni con questo approccio. Sui sistemi con hardware grafico moderno, le prestazioni di disegno in una finestra a schermo intero sono quasi veloci come un contesto di disegno a schermo intero.

Quello che devi fare è rendere la tua visualizzazione openGL a schermo intero senza catturare il display. Ecco come cocos2d attualmente gestisce le applicazioni OS X a schermo intero. Puoi sfogliare il codice per cocos2d Mac qui: https://github.com/cocos2d/cocos2d-iphone/tree/master-v2/cocos2d/Platforms/Mac

Cerca in modo specifico in CCDirectorMac.m e CCGLView.m la loro implementazione.

Se si determina che si desidera limitare in modo selettivo alcune funzioni, come la commutazione di processo, senza limitare tutte le funzionalità del sistema a finestre, è possibile consultare la Nota tecnica sulla modalità Kiosk di Apple: http://developer.apple.com /library/mac/#technotes/KioskMode/Introduction/Introduction.html


1

La mia esperienza di questo sul Mac è che normalmente esiste un collegamento per uscire dalla modalità a schermo intero in modalità finestra (in genere CMD + M o CMD + Ritorno). Dopo essere passati alla modalità finestra, puoi accedere a tutte le tue applicazioni normalmente. La modalità a finestra consente inoltre all'utente di monitorare il proprio gioco tra tutte le altre app. Quindi immagino che potresti semplicemente implementare questo tipo di funzionalità nel tuo gioco.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.