Pianificare la conversione a DirectXPlan your DirectX port

SummarySummary

Pianifica il progetto di conversione del tuo gioco da DirectX 9 a DirectX 11 e alla piattaforma UWP (Universal Windows Platform): aggiorna il codice grafico e trasferisci il gioco in ambiente Windows Runtime.Plan your game porting project from DirectX 9 to DirectX 11 and Universal Windows Platform (UWP): upgrade your graphics code, and put your game in the Windows Runtime environment.

Pianificare la conversione del codice graficoPlan to port graphics code

Prima di iniziare con la conversione del gioco per la piattaforma UWP, è importante che ti assicuri che non includa rimanenze da Direct3D 8.Before you begin porting your game to UWP, it's important to ensure that your game does not have any holdovers from Direct3D 8. Verifica che il gioco non contenga tracce della pipeline a funzione fissa.Ensure that your game doesn't have any remnants of the fixed function pipeline. Per un elenco completo delle funzionalità non più disponibili, inclusa la pipeline fissa, vedi l’articolo dedicato alle funzionalità deprecate.For a complete list of deprecated features, including fixed pipeline functionality, see Deprecated Features.

L'aggiornamento da Direct3D 9 a Direct3D 11 è molto di più di un'operazione di ricerca e sostituzione.Upgrading from Direct3D 9 to Direct3D 11 is more than a search-and-replace change. Devi conoscere le differenze tra dispositivo Direct3D, contesto di dispositivo e infrastruttura grafica, oltre a raccogliere informazioni su altre modifiche importanti introdotte dopo Direct3D 9.You need to know the difference between the Direct3D device, device context, and graphics infrastructure, and learn about other important changes since Direct3D 9. Puoi avviare questo processo con la lettura degli altri argomenti in questa sezione.You can start this process by reading the other topics in this section.

Devi sostituire le librerie helper D3DX e DXUT con librerie helper personalizzate o con strumenti della community.You must replace the D3DX and DXUT helper libraries with your own helper libraries, or with community tools. Per altre info, vedi la sezione relativa al mapping delle funzionalità.See the Feature mapping section for more info.

Nota    È possibile utilizzare DirectX Tool Kit o DirectXTex per sostituire alcune funzionalità precedentemente fornite da D3DX e DXUT.Note   You can use the DirectX Tool Kit or DirectXTex to replace some functionality that was formerly provided by D3DX and DXUT.

 

Gli shader scritti in linguaggio assembly devono essere aggiornati a HLSL usando la funzionalità Shader Model 4 Level 9 _ 1 o 9 _ 3 e gli shader scritti per la libreria degli effetti dovranno essere aggiornati a una versione più recente della sintassi HLSL.Shaders written in assembly language should be upgraded to HLSL using shader model 4 level 9_1 or 9_3 functionality, and shaders written for the Effects library will need to be updated to a more recent version of HLSL syntax. Per altre info, vedi la sezione relativa al mapping delle funzionalità.See the Feature mapping section for more info.

Impara a conoscere i diversi livelli di funzionalità Direct3D.Get familiar with the different Direct3D feature levels. I livelli di funzionalità classificano un'ampia gamma di hardware video tramite la definizione di set di funzionalità note.Feature levels classify a wide range of video hardware by defining sets of known functionality. Ogni set corrisponde a grandi linee a versioni specifiche di Direct3D, dalla 9.1 alla 11.2.Each set roughly corresponds to versions of Direct3D, from 9.1 through 11.2. Tutti i livelli di funzionalità usano l'API DirectX 11.All feature levels use the DirectX 11 API.

Pianificare la conversione di codice dell'interfaccia utente Win32 a CoreWindowPlan to port Win32 UI code to CoreWindow

Le app UWP vengono eseguite in una finestra creata per un contenitore di app, denominato CoreWindow.UWP apps run in a window created for an app container, called a CoreWindow. Il gioco controlla la finestra ereditando da IFrameworkView, che richiede meno dettagli di implementazione rispetto a una finestra desktop.Your game controls the window by inheriting from IFrameworkView, which requires less implementation details than a desktop window. Il ciclo principale del gioco sarà nel metodo IFrameworkView::Run.Your game's main loop will be in the IFrameworkView::Run method.

Il ciclo di vita di un'app UWP è molto diverso da quello di un'app desktop.The lifecycle of a UWP app is very different from a desktop app. Dovrai salvare spesso il gioco, perché quando si verifica un evento di sospensione la tua app può contare solo su un periodo di tempo limitato per interrompere l'esecuzione del codice e devi assicurarti che alla ripresa i giocatori possano tornare subito dove si trovavano al momento della sospensione.You'll need to save the game often, because when a suspend event happens your app only has a limited amount of time to stop running code, and you want to make sure the player can get back to where they were right away when your app resumes. I giochi dovrebbero essere salvati solo con la frequenza sufficiente per mantenere la continuità dell'esperienza di gioco dopo la ripresa, ma non così spesso da influire sulla frequenza dei fotogrammi o sulla qualità di riproduzione.Games should save just often enough to maintain a continuous gameplay experience from resume, but not so often that the game saves impact framerate or cause the game to stutter. Il gioco dovrà potenzialmente caricare lo stato di gioco al momento della ripresa da uno stato di terminazione.Your game will potentially need to load game state when the game resumes from a terminated state.

Puoi usare DirectXMath al posto di D3DXMath e XNAMath, una scelta utile se hai bisogno di una libreria di funzioni matematiche.DirectXMath can be used as a replacement for D3DXMath and XNAMath, and it can come in handy if you need a math library. DirectXMath include tipi di dati veloci e portatili, oltre ai tipi allineati e compressi per l'uso con gli shader.DirectXMath has fast, portable data types, and types that are aligned and packed for use with shaders.

Le librerie native, come l’API interlocked, sono state espanse per il supporto dei valori intrinseci ARM.Native libraries such as the Interlocked API have been expanded to support ARM intrinsics. Se il tuo gioco usa API interlocked, puoi continuare a usarle in DirectX 11 e nella piattaforma UWP.If your game uses interlocked APIs, you can keep using them in DirectX 11 and UWP.

I nostri modelli ed esempi di codice usano nuove funzionalità di C++ che potresti ancora non conoscere.Our templates and code samples use new C++ features that you might not be familiar with yet. Ad esempio, i metodi asincroni vengono utilizzati con le espressioni lambda per caricare le risorse Direct3D senza bloccare il thread dell'interfaccia utente.For example, asynchronous methods are used with lambda expressions to load Direct3D resources without blocking the UI thread.

Ci sono due concetti che implementerai spesso:There are two concepts you'll use often:

  • I riferimenti gestiti (operatore ^) e le classi gestite (classi di riferimento) sono componenti fondamentali di Windows Runtime.Managed references (^ operator) and managed classes (ref classes) are a fundamental part of the Windows Runtime. È necessario usare le classi di riferimento gestite per interfacciarsi con componenti di Windows Runtime, ad esempio IFrameworkView (altre informazioni nella procedura dettagliata).You will need to use managed ref classes to interface with Windows Runtime components, for example IFrameworkView (more on that in the walkthrough).
  • Quando si utilizzano le interfacce COM Direct3D 11, utilizzare il tipo di modello Microsoft:: WRL:: ComPtr per semplificare l'utilizzo dei puntatori com.When working with Direct3D 11 COM interfaces, use the Microsoft::WRL::ComPtr template type to make COM pointers easier to use.