Mi è stato affidato il compito di costruire una demo "a schermo intero" in tempo reale per l'esecuzione su un array 5x2 di TV LED da 60+ pollici: o, in altre parole, un display da 20 megapixel.
Abbiamo una macchina costruita in grado di eseguire un singolo desktop Win7 distribuito sui display alla massima risoluzione e alcune schede video abbastanza decenti.
La mia domanda è: a parte la ridicola quantità di lavoro che i miei pixel shader stanno per fare, ci sono altre limitazioni di DX10. * Che entrerebbero in gioco qui che non sarebbero su un viewport più sano? Non avrò accesso all'hardware fino alla prossima settimana, ma mi piacerebbe avere qualcosa scritto da allora che posso usare per confrontare il sistema.
Aggiornare
Mentre Imanaged per farlo funzionare su una singola macchina con un mazzo di schede AMD EyeFinity (6 output) - per far funzionare le cose senza intoppi, il modo "più semplice" si è rivelato essere quello di creare una finestra DX per display con schermi a finestre ha causato alcuni problemi di prestazioni: ho anche funzionato abbastanza bene distribuendo l'attività su un gruppo di macchine, ognuna delle quali guida due schermi.
È stato sorprendentemente facile. Per la mia app XNA di prova, ho aggiunto un GameComponent che acquisisce uno stato del gioco (posizione / orientamento della telecamera, ecc.) E lo invia tramite UDP alla rete locale per frame.
Quel componente ha un Mode
interruttore (invia o ricevi). Se è in Receive
modalità, rileva i datagrammi UDP e aggiorna lo stato del gioco con le informazioni del mittente. Send
mode invia semplicemente pacchetti di stato e, tramite un servizio / demone, provoca l'avvio o l'arresto dei client da parte dei nodi. Qualsiasi client può fungere da "master" e la commutazione in Send
modalità client richiede la commutazione di tutti gli altri nodi Receive
. È abbastanza divertente vedere cosa succede quando le persone combattono per il controllo.
Un altro vantaggio evidente: ho creato un'app console che elabora una serie di definizioni di stato dei fotogrammi chiave (posizione, ora, ecc.) Interpola secondo necessità e li invia utilizzando lo stesso codice utilizzato nel motore di gioco. Ciò mi consente di spostare facilmente gli script, inviare trasformazioni da un browser Web, ecc.
Tutto sommato, sono state necessarie circa 50 righe di codice per sincronizzare più copie dell'app. Qualche ulteriore complessità derivava dall'impostare la posizione della telecamera per ogni macchina e correggere alcuni fastidi di prospettiva / proiezione, ma la maggior parte di ciò si riduceva a un file di configurazione per nodo.