Approcci architetturali alla creazione di un menu di gioco / overlay shell su PC / Linux?


8

Sto lavorando a una raccolta di giochi per un'installazione da tavolo digitale personalizzata (simile alle tabelle di Microsoft Surface). Ogni gioco sarà un singolo eseguibile a schermo intero. Inoltre, è necessario eseguire contemporaneamente un programma di sovrapposizione menu / shell. Il menu / shell consentirà agli utenti di mettere in pausa i giochi, passare ad altri giochi, controllare la cronologia dei giochi, ecc.

Alcuni requisiti chiave della shell:

  • intercetta tutti gli input dell'utente (principalmente multitouch) prima di trasmetterli al gioco attualmente in esecuzione (in modo che, ad esempio, possa sapere di apparire a un comando di "pausa");

  • può rivelarsi su porzioni arbitrarie dello schermo, con il gioco attualmente in esecuzione (ma presumibilmente in pausa) ancora visibile sotto, idealmente con la sua forma / dimensione dinamica, per consentire la creazione di un effetto animato in / out sul gioco.

Attualmente sto esaminando diversi approcci architettonici a questo problema, inclusi gli overlay Fraps e DirectX, ma sono sicuro che mi mancano alcuni modi per pensarci. Quali sono gli approcci principali che dovrei prendere in considerazione?

(Nota che la tabella è attualmente gestita da PC Windows, ma potrebbe essere potenzialmente una scatola Linux. Con questo non intendo che ho bisogno di una soluzione indipendente dal sistema operativo. Sarei felice con una soluzione specifica per Windows. Ma Sarei disposto a prendere in considerazione il passaggio a Linux e l'utilizzo di una soluzione specifica per Linux se è molto più facile ottenerlo in Linux.)

Risposte:


3

Non credo ci sia molto da valutare, davvero. Prestazioni / reattività vengono prima di tutto, soprattutto su un'installazione di questo tipo. È possibile utilizzare il rendering posticipato DirectX o OpenGL / render-to-texture (RTT).

Per fare ciò, esegui il rendering dello shell underlay nel frame buffer predefinito (il buffer frontale / su schermo), rendi il tuo overlay di gioco attivo su un quadratino di dimensioni dello schermo, sposta questo quad nella posizione appropriata nello spazio mondiale secondo lo stato corrente di "drawer "transizione, quindi renderizza anche il frame buffer predefinito. Ora dovresti avere il gioco attivo sopra la shell, ed è un'operazione molto rapida e quindi si presta a transizioni fluide (data una buona matematica di interpolazione).

Per quanto riguarda le interazioni, puoi persino rendere perfetto il pixel di rilevamento dei colpi under / overlay se rileggi i dati RTT sul lato CPU, per frame. In tal caso, è necessario restituire almeno il buffer di overlay come RTT maschera a 1 bit economico.

MODIFICA Un altro modo è quello di passare completamente al browser, in quanto è possibile eseguire la modalità a schermo intero. È possibile caricare i giochi come moduli anziché avere "programmi" separati. Il problema con il browser è che non otterrai le stesse prestazioni. Potresti comunque usare WebGL (dal momento che avresti il ​​controllo su quale browser utilizzeresti) per la stratificazione e la grafica veloce, ma i giochi dovrebbero essere semplici. A parte le prestazioni, potrebbe essere un po 'più semplice da sviluppare in questo modo, e comunque indipendente dal sistema operativo.


Fammi sapere se hai qualche domanda;)
Ingegnere,

Grazie! E solo per verificare, questo approccio funzionerà con la shell e il singolo gioco in esecuzione come programmi separati?
Ghopper21,

No. In un modo o nell'altro, uno e un solo processo saranno in grado di accedere al contesto del dispositivo GPU. L'unico modo in cui posso vederti fare questo altrimenti è rinunciare all'accelerazione 3D insieme, cosa che non consiglierei. L'altra cosa è questa: se non sei ancora sicuro che andrai su Win o Lin, con questo approccio va bene. Considerando che se dovessi scegliere un approccio specifico del sistema operativo, quindi passare a un altro sistema operativo in un secondo momento, ciò potrebbe rendere il primo approccio obsoleto e forse non replicabile sul sistema operativo appena scelto. Suggerisco di attendere ulteriori risposte / idee.
Ingegnere,

@ Ghopper21 Vedi la mia modifica per una virata diversa.
Ingegnere

Grazie Nick per la soluzione browser. Penso che voglio evitarlo a causa delle prestazioni e di altri problemi. Ma dalla tua nota mi rendo conto di non essere chiaro sulla parte Windows contro Linux. Chiarirò in una modifica alla domanda.
Ghopper21,
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.