Pianificare la porta DirectX
Riepilogo
- Pianificare la porta DirectX
- Modifiche importanti da Direct3D 9 a Direct3D 11
- Mapping delle funzionalità
Pianificare il progetto di conversione del gioco da DirectX 9 a DirectX 11 e UWP (Universal Windows Platform): aggiornare il codice grafico e inserire il gioco nell'ambiente Windows Runtime.
Pianificare la conversione del codice grafico
Prima di iniziare a convertire il gioco in UWP, è importante assicurarsi che il gioco non abbia alcun controllo da Direct3D 8. Assicurarsi che il gioco non abbia resti della pipeline a funzione fissa. Per un elenco completo delle funzionalità deprecate, inclusa la funzionalità della pipeline fissa, vedere Funzionalità deprecate.
L'aggiornamento da Direct3D 9 a Direct3D 11 è più di una modifica di ricerca e sostituzione. È necessario conoscere la differenza tra il dispositivo Direct3D, il contesto di dispositivo e l'infrastruttura grafica e conoscere altre importanti modifiche rispetto a Direct3D 9. È possibile avviare questo processo leggendo gli altri argomenti in questa sezione.
È necessario sostituire le librerie helper D3DX e DXUT con le proprie librerie helper o con gli strumenti della community. Vedere la sezione Mappatura delle caratteristiche per altre informazioni.
Nota Puoi usare DirectX Tool Kit o DirectXTex per sostituire alcune funzionalità fornite in precedenza da D3DX e DXUT.
Gli shader scritti nel linguaggio assembly devono essere aggiornati a HLSL usando la funzionalità del modello di shader 4 livello 9_1 o 9_3 e gli shader scritti per la libreria Effects dovranno essere aggiornati a una versione più recente della sintassi HLSL. Vedere la sezione Mappatura delle caratteristiche per altre informazioni.
Acquisire familiarità con i diversi livelli di funzionalità Direct3D. I livelli di funzionalità classificano un'ampia gamma di hardware video definendo set di funzionalità note. Ogni set corrisponde approssimativamente alle versioni di Direct3D, da 9.1 a 11.2. Tutti i livelli di funzionalità usano l'API DirectX 11.
Pianificare la conversione del codice dell'interfaccia utente Win32 in CoreWindow
Le app UWP vengono eseguite in una finestra creata per un contenitore di app, denominata CoreWindow. Il gioco controlla la finestra ereditando da IFrameworkView, che richiede meno dettagli di implementazione rispetto a una finestra desktop. Il ciclo principale del gioco sarà nel metodo IFrameworkView::Run .
Il ciclo di vita di un'app UWP è molto diverso da un'app desktop. Dovrai salvare il gioco spesso, perché quando si verifica un evento di sospensione la tua app ha solo un periodo di tempo limitato per interrompere l'esecuzione del codice e vuoi assicurarti che il giocatore possa tornare a dove si trovavano subito quando l'app riprende. I giochi dovrebbero risparmiare abbastanza spesso per mantenere un'esperienza di gioco continua dal curriculum, ma non così spesso che il gioco salva il framerate di impatto o fa sì che il gioco si incastra. Il gioco dovrà potenzialmente caricare lo stato del gioco quando il gioco riprende da uno stato terminato.
DirectXMath può essere usato come sostituzione per D3DXMath e XNAMath e può essere utile se è necessaria una libreria matematica. DirectXMath include tipi di dati veloci e portabili e tipi allineati e compressi per l'uso con shader.
Le librerie native, ad esempio l'API interlocked, sono state espanse per supportare le funzioni intrinseche arm. Se il gioco usa API interlocked, puoi continuare a usarle in DirectX 11 e nella piattaforma UWP.
I modelli e gli esempi di codice usano nuove funzionalità C++ che potrebbero non essere ancora note. Ad esempio, i metodi asincroni vengono usati con espressioni lambda per caricare le risorse Direct3D senza bloccare il thread dell'interfaccia utente.
Esistono due concetti che verranno usati spesso:
- I riferimenti gestiti (operatore^) e le classi gestite (classi di riferimento) sono una parte fondamentale di Windows Runtime. È necessario usare le classi di riferimento gestite per interfacciarsi con i componenti Windows Runtime, ad esempio IFrameworkView (più avanti nella procedura dettagliata).
- Quando si usano le interfacce COM Direct3D 11, usare il tipo di modello Microsoft::WRL::ComPtr per semplificare l'uso dei puntatori COM.