Planear la portabilidad de DirectX
Resumen
- Planear la portabilidad de DirectX
- Cambios importantes de Direct3D 9 a Direct3D 11
- Asignación de características
Planee el proyecto de portabilidad de juegos de DirectX 9 a DirectX 11 y Plataforma universal de Windows (UWP): actualice el código gráfico y coloque el juego en el entorno de Windows Runtime.
Planear el puerto del código gráfico
Antes de empezar a migrar tu juego a UWP, es importante asegurarte de que tu juego no tenga ninguna suspensión de Direct3D 8. Asegúrate de que tu juego no tenga restos de la canalización de función fija. Para obtener una lista completa de las características en desuso, incluida la funcionalidad de canalización fija, consulte Características en desuso.
La actualización de Direct3D 9 a Direct3D 11 es más que un cambio de búsqueda y reemplazo. Debe saber la diferencia entre el dispositivo Direct3D, el contexto del dispositivo y la infraestructura de gráficos, y obtener información sobre otros cambios importantes desde Direct3D 9. Puede iniciar este proceso leyendo los otros temas de esta sección.
Debe reemplazar las bibliotecas auxiliares D3DX y DXUT por sus propias bibliotecas auxiliares o por herramientas de la comunidad. Consulte la sección Asignación de características para obtener más información.
Nota Puede usar el Kit de herramientas de DirectX o DirectXTex para reemplazar algunas funciones que anteriormente proporcionaba D3DX y DXUT.
Los sombreadores escritos en el lenguaje de ensamblado deben actualizarse a HLSL mediante la funcionalidad del modelo de sombreador 4 de nivel 9_1 o 9_3, y los sombreadores escritos para la biblioteca efectos deberán actualizarse a una versión más reciente de la sintaxis HLSL. Consulte la sección Asignación de características para obtener más información.
Familiarícese con los diferentes niveles de características de Direct3D. Los niveles de características clasifican una amplia gama de hardware de vídeo mediante la definición de conjuntos de funcionalidades conocidas. Cada conjunto se corresponde aproximadamente con versiones de Direct3D, de 9.1 a 11.2. Todos los niveles de características usan la API de DirectX 11.
Planear el puerto del código de la interfaz de usuario de Win32 a CoreWindow
Las aplicaciones para UWP se ejecutan en una ventana creada para un contenedor de aplicaciones, denominada CoreWindow. El juego controla la ventana heredando de IFrameworkView, lo que requiere menos detalles de implementación que una ventana de escritorio. El bucle principal del juego estará en el método IFrameworkView::Run .
El ciclo de vida de una aplicación para UWP es muy diferente de una aplicación de escritorio. Tendrás que guardar el juego a menudo, ya que cuando se produce un evento de suspensión, la aplicación solo tiene una cantidad limitada de tiempo para dejar de ejecutar código y quieres asegurarte de que el jugador puede volver a donde estaban inmediatamente cuando se reanuda la aplicación. Los juegos deben ahorrar con frecuencia suficiente para mantener una experiencia continua de juego desde la reanudación, pero no tan a menudo que el juego ahorra velocidad de fotogramas de impacto o hace que el juego se desenrede. Tu juego tendrá que cargar el estado del juego cuando el juego se reanude desde un estado terminado.
DirectXMath se puede usar como reemplazo de D3DXMath y XNAMath, y puede resultar útil si necesita una biblioteca matemática. DirectXMath tiene tipos de datos rápidos, portátiles y tipos que están alineados y empaquetados para su uso con sombreadores.
Las bibliotecas nativas, como la API interbloqueada, se han ampliado para admitir intrínsecos de Arm. Si tu juego usa API interbloqueadas, puedes seguir usándolas en DirectX 11 y UWP.
Nuestras plantillas y ejemplos de código usan nuevas características de C++ con las que es posible que aún no esté familiarizado. Por ejemplo, los métodos asincrónicos se usan con expresiones lambda para cargar recursos de Direct3D sin bloquear el subproceso de la interfaz de usuario.
Hay dos conceptos que usará a menudo:
- Las referencias administradas (operador^) y las clases administradas (clases ref) son una parte fundamental de Windows Runtime. Tendrás que usar clases ref administradas para interactuar con componentes de Windows Runtime, por ejemplo IFrameworkView (más información en el tutorial).
- Al trabajar con interfaces COM de Direct3D 11, use el tipo de plantilla Microsoft::WRL::ComPtr para facilitar el uso de punteros COM.