Domanda

Quando si scrivono applicazioni DirectX, ovviamente, è auspicabile sostenere l'utente che sospende l'applicazione tramite Alt - Tab in un modo che è veloce e privo di errori . Qual è il miglior insieme di pratiche per garantire questo? Le cose che devono essere affrontate includono:

  1. I migliori metodi di rilevare quando l'applicazione è stata alt-a schede fuori e quando è stato restituito al.
  2. Quali risorse DirectX sono persi quando l'utente alt-tab, e il modo migliore per far fronte a questo.
  3. le cose più importanti da fare e cose da evitare in architettura applicativa per scopi di sostegno alt-tab.
  4. Le eventuali differenze significative tra le versioni principali di DirectX come si applicano a quanto sopra.

trucchi interessanti e trucchi sono anche bello sentire circa.

È stato utile?

Soluzione

I assumerà che si sta utilizzando C ++ ai fini delle mie risposte, ma se si può permettersi di utilizzare C #, XNA ( http://creators.xna.com/ ) è una piattaforma eccellente gioco che gestisce tutti questi problemi per voi.

1]

Questo articolo è utile per finestre eventi nella window procedure per rilevare quando una finestra perde o guadagna fuoco, si poteva gestire questo sul tuo finestra principale: http://www.functionx.com/win32/Lesson05.htm . Inoltre, controllare il messaggio WM_ACTIVATEAPP qui: http: // msdn .microsoft.com / en-us / library / ms632614 (VS.85) aspx

2]

3]

vorrei fare in modo di non disabilitare l'Alt-Tab. Probabilmente si desidera carico minimo della CPU mentre l'applicazione non è attiva perché l'utente probabilmente Alt-a schede perché vogliono fare qualcosa di diverso, quindi si può mettere in pausa completamente l'applicazione, oppure ridurre i fotogrammi resi al secondo. Se l'applicazione è minimzed, è, naturalmente, non c'è bisogno di rendere nulla. Dopo averci pensato un gioco di rete, la mia soluzione migliore è che si dovrebbe comunque ridurre i fotogrammi resi al secondo, così come la quantità di pacchetti di rete gestita, forse anche buttare via molti dei pacchetti che arrivano fino a quando il gioco è riattivato.

4]

Onestamente vorrei solo bastone per DirectX 9.0c (o DirectX 10 se si desidera limitare il sistema operativo di destinazione a Vista e successivi), se possibile:)

Infine, l'SDK DirectX ha numerosi tutorial e campioni: http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

Altri suggerimenti

abbiamo risolto non usando un dispositivo DirectX fullscreen a tutti - invece abbiamo usato una finestra a schermo intero con il più in alto la bandiera per rendere più nascondere la barra delle applicazioni. Se Alt-Tab di che, si può rimuovere il flag e ridurre al minimo la finestra. Le risorse trama sono tenuti in vita dalla finestra.

Tuttavia, questo approccio non gestisce l'evento perso dispositivo accadendo a causa di 'blocco dello schermo', Ctrl + Alt + Canc, connessioni desktop remote, cambio utente o simili. Ma quelli non hanno bisogno di essere gestita in modo efficiente o estremamente veloce (almeno questo era il caso nella nostra applicazione)

Tutte le applicazioni D3D gravi dovrebbero essere in grado di gestire dispositivi persi in quanto questo è qualcosa che può accadere per una serie di motivi.

In DX10 sotto Vista c'è una nuova funzione "Timeout Detection and Recovery" che lo rende comune nella mia esperienza per dispositivi grafici da ripristinare che causerebbe un dispositivo smarrito per la tua app. Questo sembra migliorare come driver maturo, ma è necessario gestire lo stesso.

In DX8 e 9 (e 10?), Se si creano le risorse (vertex e indice di buffer e texture principalmente) utilizzando D3DPOOL_MANAGED essi persisteranno attraverso dispositivi smarriti e non avranno bisogno di ricaricare. Questo è perché sono memorizzati nella memoria di sistema e le copie DX runtime per memoria video automaticamente. Tuttavia v'è un costo prestazioni a causa della copiatura e questo non è raccomandato per dati che cambiano rapidamente vertici. Naturalmente si dovrebbe profilo prima di determinare se v'è un problema di velocità: -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top