Planear la migración de DirectXPlan your DirectX port

ResumenSummary

Planea un proyecto para migrar un juego de DirectX 9 a DirectX 11 y a la Plataforma universal de Windows (UWP): actualiza el código de gráficos y coloca el juego en el entorno de 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.

Planear la migración del código de gráficosPlan to port graphics code

Antes de empezar la migración de tu juego a UWP, es importante asegurarse de que no tenga retenciones de 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. Asegúrate de que tu juego no tenga ningún remanente de la canalización de función fija.Ensure that your game doesn't have any remnants of the fixed function pipeline. Para obtener una lista completa de características en desuso, incluida la funcionalidad de canalización fija, consulta Características desusadas.For a complete list of deprecated features, including fixed pipeline functionality, see Deprecated Features.

Actualizar de Direct3D 9 a Direct3D 11 es más que un cambio de buscar y reemplazar.Upgrading from Direct3D 9 to Direct3D 11 is more than a search-and-replace change. Necesitas conocer la diferencia entre el dispositivo Direct3D, el contexto de dispositivo y la infraestructura de gráficos, y aprender sobre otros cambios importantes a partir de 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. Puedes empezar este proceso leyendo otros temas de esta sección.You can start this process by reading the other topics in this section.

Debes reemplazar las bibliotecas auxiliares de D3DX y DXUT con tus propias bibliotecas auxiliares o con herramientas de la comunidad.You must replace the D3DX and DXUT helper libraries with your own helper libraries, or with community tools. Consulta la sección Asignación de características para obtener más información.See the Feature mapping section for more info.

Nota:    Puede usar el Kit de herramientas de DirectX o DirectXTex para reemplazar alguna funcionalidad que anteriormente proporcionó D3DX y DXUT.Note   You can use the DirectX Tool Kit or DirectXTex to replace some functionality that was formerly provided by D3DX and DXUT.

 

Los sombreadores escritos en lenguaje de ensamblado deben actualizarse a HLSL mediante la funcionalidad de nivel 9 _ 1 o 9 3 del modelo de sombreador _ , y los sombreadores escritos para la biblioteca de efectos deberán actualizarse a una versión más reciente de la sintaxis de 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. Consulta la sección Asignación de características para obtener más información.See the Feature mapping section for more info.

Conoce los distintos Niveles de característica de Direct3D.Get familiar with the different Direct3D feature levels. Los niveles de característica clasifican una amplia gama de hardware de vídeo al definir conjuntos de funciones conocidas.Feature levels classify a wide range of video hardware by defining sets of known functionality. Cada conjunto corresponde, a grandes rasgos, a versiones de Direct3D, de 9.1 a 11.2.Each set roughly corresponds to versions of Direct3D, from 9.1 through 11.2. Todas los niveles de característica usan la API de DirectX 11.All feature levels use the DirectX 11 API.

Planear para migrar código de interfaz de usuario de Win32 a CoreWindowPlan to port Win32 UI code to CoreWindow

Las aplicaciones para UWP se ejecutan en una ventana creada para un contenedor de la aplicación, denominado CoreWindow.UWP apps run in a window created for an app container, called a CoreWindow. El juego controlará la ventana al heredar de la interfaz IFrameworkView, lo que requiere menos detalles de implementación que una ventana de escritorio.Your game controls the window by inheriting from IFrameworkView, which requires less implementation details than a desktop window. El bucle principal del juego estará en el método IFrameworkView::Run.Your game's main loop will be in the IFrameworkView::Run method.

El ciclo de vida de una aplicación para UWP es muy distinto al de una aplicación de escritorio.The lifecycle of a UWP app is very different from a desktop app. Necesitarás guardar el juego con más frecuencia porque, cuando se produce un evento de suspensión, la aplicación solo tiene una cantidad limitada de tiempo para dejar de ejecutar el código y, lo que quieres, es asegurarte de que el jugador pueda retomar el juego en donde lo dejó tan pronto como se reanude la aplicación.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. Los juegos se deben guardar con la suficiente frecuencia como para mantener una experiencia de juego continua con la reanudación, pero no con demasiada frecuencia para evitar que el juego reduzca el impacto de la velocidad de fotogramas o parpadee.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. El juego necesitará potencialmente cargar el estado del juego cuando se reanude después de pasar por un estado terminado.Your game will potentially need to load game state when the game resumes from a terminated state.

DirectXMath se puede usar como reemplazo de D3DXMath y XNAMath, y puede ser útil si necesitas una biblioteca matemática.DirectXMath can be used as a replacement for D3DXMath and XNAMath, and it can come in handy if you need a math library. DirectXMath tiene tipos de datos portátiles rápidos y tipos que se alinean y empaquetan para usar con sombreadores.DirectXMath has fast, portable data types, and types that are aligned and packed for use with shaders.

Las bibliotecas nativas, como las API entrelazadas, se han expandido para admitir intrínsecos de ARM.Native libraries such as the Interlocked API have been expanded to support ARM intrinsics. Si tu juego usa API entrelazadas, puedes seguir usándolas en DirectX 11 y UWP.If your game uses interlocked APIs, you can keep using them in DirectX 11 and UWP.

Nuestras muestras de código y plantillas usan nuevas características de C++ que podrían resultarte desconocidas.Our templates and code samples use new C++ features that you might not be familiar with yet. Por ejemplo, los métodos asincrónicos se usan con expresiones lambda para así poder cargar recursos de Direct 3D sin bloquear el subproceso de la interfaz de usuario.For example, asynchronous methods are used with lambda expressions to load Direct3D resources without blocking the UI thread.

Hay dos conceptos que usarás con frecuencia:There are two concepts you'll use often:

  • Las referencias administradas (operador ^) y las clases administradas (clases ref) son una parte fundamental de Windows Runtime.Managed references (^ operator) and managed classes (ref classes) are a fundamental part of the Windows Runtime. Necesitarás usar clases ref administradas para una interfaz con componentes de Windows Runtime, por ejemplo IFrameworkView (puedes encontrar más información sobre esto en el tutorial).You will need to use managed ref classes to interface with Windows Runtime components, for example IFrameworkView (more on that in the walkthrough).
  • Cuando trabajes con interfaces COM en Direct3D 11, usa el tipo de plantilla Microsoft::WRL::ComPtr para que los punteros COM sean más fáciles de usar.When working with Direct3D 11 COM interfaces, use the Microsoft::WRL::ComPtr template type to make COM pointers easier to use.