Asignar características de DirectX 9 a las API de DirectX 11
Aprende a trasladar las características de tu juego Direct3D 9 a Direct3D 11 y a la Plataforma universal de Windows (UWP).
Consulte También Planear el puerto de DirectX y Cambios importantes de Direct3D 9 a Direct3D 11.
Asignar Direct3D 9 a las API de DirectX 11
Direct3D sigue siendo la base de los elementos gráficos DirectX, pero la API cambió a partir de DirectX 9:
- La Infraestructura de gráficos de Microsoft DirectX (DXGI) se usa para configurar adaptadores de gráficos. Usa DXGI para seleccionar formatos de búfer, crear cadenas de intercambio, presentar marcos y crear recursos compartidos. Consulta Introducción a DXGI.
- El contexto de dispositivo de Direct3D se usa para establecer el estado de canalización y generar comandos de representación. La mayoría de nuestras muestras usan un contexto inmediato para representar directamente en el dispositivo. Direct3D 11 también admite la representación multithreading, en cuyo caso se usan contextos diferidos. Consulta Introducción a un dispositivo en Direct3D 11.
- Algunas características ya no se usan, particularmente la canalización de función fija. Consulta Características desusadas.
Para obtener una lista completa de las características de Direct3D 11, consulta Características de Direct3D 11 y Características de Direct3D 11.
Pasar de Direct2D 9 a Direct2D 11
Direct2D (Windows) sigue siendo parte importante de los gráficos DirectX y Windows. Todavía puedes usar Direct2D para dibujar juegos 2D y dibujar superposiciones (HUD) sobre Direct3D.
Direct2D se ejecuta encima de Direct3D. Los juegos 2D pueden implementarse en cualquiera de sus API. Por ejemplo, un juego 2D implementado con Direct3D puede usar la proyección ortográfica, establecer valores Z para controlar el orden de dibujo de primitivos y usar sombreadores de píxeles para agregar efectos especiales.
Dado que Direct2D se basa en Direct3D, también usa DXGI y contextos de dispositivo. Consulta Introducción a la API de Direct2D.
La API DirectWrite agrega compatibilidad para texto con formato otorgado mediante Direct2D. Consulta Introducción a DirectWrite.
Reemplazar bibliotecas de aplicaciones auxiliares desusadas
D3DX y DXUT están en desuso y no pueden usarse para juegos de UWP. Estas bibliotecas auxiliares proporcionaban recursos para tareas, como la carga de texturas y mallas.
- El tutorial Migración simple de Direct3D 9 a UWP te muestra cómo configurar una ventana, inicializar Direct3D y hacer una representación básica en 3D.
- El tutorial Crear un juego para UWP sencillo con DirectX te muestra tareas comunes de programación de juegos, entre ellas los elementos gráficos, la carga de archivos, la interfaz de usuario, los controles y el sonido.
- El proyecto DirectX Tool Kit (Kit de herramientas de DirectX) de la comunidad, te ofrece clases auxiliares que puedes usar con aplicaciones de Direct3D 11 y UWP.
Trasladar programas sombreadores de FX a HLSL
La biblioteca de utilidades de D3DX (D3DX 9, D3DX 10 y D3DX 11), incluidos los efectos, está en desuso para UWP. Todos los juegos de DirectX para UWP controlan la canalización de gráficos con HLSL sin efectos.
Visual Studio todavía usa FXC como opción avanzada para compilar objetos de sombreador. Los sombreadores de los juegos de la UWP se compilan con anticipación. El código de bytes se carga en tiempo de ejecución y, a continuación, cada recurso de sombreador se enlaza a la canalización de elementos gráficos durante el pase de representación apropiado. Los sombreadores deben moverse a sus propios archivos .HLSL independientes y las técnicas de representación deben implementarse en el código C++.
Para ver rápidamente la carga de recursos de sombreador, consulta Migración simple de Direct3D 9 a UWP.
Direct3D 11 introdujo el modelo de sombreador 5, que requiere el nivel de característica de Direct3D 11_0 (o superior). Consulta HLSL Shader Model 5 Features for Direct3D 11 (Características del modelo de sombreador 5 de HLSL para Direct3D 11).
Reemplazar XNAMath y D3DXMath
El código que usa XNAMath (o D3DXMath) debe migrarse a DirectXMath. DirectXMath incluye tipos que son portátiles en x86, x64 y Arm. Consulta Migración de código de la biblioteca de matemáticas XNA.
Ten en cuenta que con los sombreadores conviene usar tipos flotantes de DirectXMath. Por ejemplo las estructuras XMFLOAT4 y XMFLOAT4X4 alinean los datos de manera conveniente para los búferes de constantes.
Reemplazar DirectSound con XAudio2 (y audio de fondo)
DirectSound no es compatible con la UWP:
- Usa XAudio2 para agregar efectos de sonido a tu juego.
Reemplazar DirectInput por XInput y Windows Runtime API
DirectInput no es compatible con la UWP:
- Usa la clase para las devoluciones de llamada de eventos de entrada CoreWindow para la entrada táctil, de mouse y de teclado.
- Usa XInput 1.4 para la compatibilidad con el dispositivo de juego y los auriculares con micrófono. Si estás usando una base de código compartido para escritorio y UWP, consulta XInput Versions (Versiones de XInput) para obtener información sobre la compatibilidad con versiones anteriores.
- Regístrate para usar los eventos de la clase EdgeGesture si tu juego necesita usar la barra de aplicaciones.
Usar Microsoft Media Foundation en lugar de DirectShow
DirectShow ya no forma parte de la API de DirectX ni de la API de Windows. Microsoft Media Foundation proporciona contenido de vídeo para Direct3D mediante superficies compartidas. Consulta Las API de vídeo en Direct3D 11.
Reemplazar DirectPlay con código de red
Microsoft DirectPlay está en desuso. Si tu juego usa servicios de red, debes proporcionar un código de red que cumpla con los requisitos de UWP. Usa estas API:
- Win32 y COM para aplicaciones para UWP (redes) (Windows)
- Espacio de nombres Windows.Networking (Windows)
- Espacio de nombres Windows.Networking.Sockets (Windows)
- Espacio de nombres Windows.Networking.Connectivity (Windows)
- Espacio de nombres Windows.ApplicationModel.Background (Windows)
Estos artículos te ayudarán a agregar características de red y a declarar la compatibilidad de las redes en el manifiesto del paquete de la aplicación.
- Conexión con sockets (aplicaciones para UWP con C#/VB/C++ y XAML) (Windows)
- Conexión con WebSockets (aplicaciones para UWP con C#/VB/C++ y XAML) (Windows)
- Conexión a servicios web (aplicaciones para UWP con C#/VB/C++ y XAML) (Windows)
- Conceptos básicos de redes
Ten en cuenta que todas las aplicaciones para UWP (incluidos los juegos) usan tipos específicos de tareas en segundo plano para mantener la conectividad mientras la aplicación está suspendida. Si tu juego necesita mantener el estado de conexión durante la suspensión, consulta Conceptos básicos de redes.
Asignación de funciones
Usa esta tabla cuando tengas que convertir código de Direct3D 9 a Direct3D 11. También te puede resultar útil para distinguir entre el dispositivo y el contexto del dispositivo.
Direct3D9 | Equivalente en Direct3D 11 |
---|---|
Las fases de la canalización de gráficos se describen en Canalización de gráficos. |
|
Llame a IDXGISwapChain1::P resent1 con la marca DXGI_PRESENT_TEST establecida. |
|
ID3D11DeviceContext::D rawIndexed ID3D11DeviceContext::D rawIndexedInstanced ID3D11DeviceContext::D rawInstanced |
|
No hay equivalente directo. |
|
Usa API de cursor estándar. |
|
El dispositivo LOST y POOL_MANAGED ya no existen. IDXGISwapChain1::P resent1 puede producir un error con un valor devuelto DXGI_ERROR_DEVICE_REMOVED . |
|
IDirect3DDevice9:DrawRectPatch IDirect3DDevice9:MultiplyTransform |
La canalización de función fija está en desuso. |
IDirect3DDevice9:CheckDepthStencilMatch IDirect3DDevice9:CheckDeviceFormat |
Los bits de funcionalidad se reemplazan por niveles de característica. Solo unos pocos casos de uso de características y formato son opcionales para un nivel de características determinado. Se pueden comprobar con ID3D11Device::CheckFeatureSupport y ID3D11Device::CheckFormatSupport. |
Asignación de formatos de superficie
Usa esta tabla para convertir formatos de Direct3D 9 a formatos de DXGI.
Formato de Direct3D 9 | Formato de Direct3D 11 |
---|---|
D3DFMT_UNKNOWN |
DXGI_FORMAT_UNKNOWN |
D3DFMT_R8G8B8 |
No disponible |
D3DFMT_A8R8G8B8 |
DXGI_FORMAT_B8G8R8A8_UNORM DXGI_FORMAT_B8G8R8A8_UNORM_SRGB |
D3DFMT_X8R8G8B8 |
DXGI_FORMAT_B8G8R8X8_UNORM DXGI_FORMAT_B8G8R8X8_UNORM_SRGB |
D3DFMT_R5G6B5 |
DXGI_FORMAT_B5G6R5_UNORM |
D3DFMT_X1R5G5B5 |
No disponible |
D3DFMT_A1R5G5B5 |
DXGI_FORMAT_B5G5R5A1_UNORM |
D3DFMT_A4R4G4B4 |
DXGI_FORMAT_B4G4R4A4_UNORM |
D3DFMT_R3G3B2 |
No disponible |
D3DFMT_A8 |
DXGI_FORMAT_A8_UNORM |
D3DFMT_A8R3G3B2 |
No disponible |
D3DFMT_X4R4G4B4 |
No disponible |
D3DFMT_A2B10G10R10 |
DXGI_FORMAT_R10G10B10A2 |
D3DFMT_A8B8G8R8 |
DXGI_FORMAT_R8G8B8A8_UNORM DXGI_FORMAT_R8G8B8A8_UNORM_SRGB |
D3DFMT_X8B8G8R8 |
No disponible |
D3DFMT_G16R16 |
DXGI_FORMAT_R16G16_UNORM |
D3DFMT_A2R10G10B10 |
No disponible |
D3DFMT_A16B16G16R16 |
DXGI_FORMAT_R16G16B16A16_UNORM |
D3DFMT_A8P8 |
No disponible |
D3DFMT_P8 |
No disponible |
D3DFMT_L8 |
DXGI_FORMAT_R8_UNORM
Nota Use .r swizzle en el sombreador para duplicar el rojo en otros componentes para obtener el comportamiento de Direct3D 9.
|
D3DFMT_A8L8 |
DXGI_FORMAT_R8G8_UNORM
Nota Use swizzle .rrrg en el sombreador para duplicar el rojo y mover verde a los componentes alfa para obtener el comportamiento de Direct3D 9.
|
D3DFMT_A4L4 |
No disponible |
D3DFMT_V8U8 |
DXGI_FORMAT_R8G8_SNORM |
D3DFMT_L6V5U5 |
No disponible |
D3DFMT_X8L8V8U8 |
No disponible |
D3DFMT_Q8W8V8U8 |
DXGI_FORMAT_R8G8B8A8_SNORM |
D3DFMT_V16U16 |
DXGI_FORMAT_R16G16_SNORM |
D3DFMT_W11V11U10 |
No disponible |
D3DFMT_A2W10V10U10 |
No disponible |
D3DFMT_UYVY |
No disponible |
D3DFMT_R8G8_B8G8 |
DXGI_FORMAT_G8R8_G8B8_UNORM
Nota En Direct3D 9, los datos se escalaron verticalmente en 255.0f, pero esto se puede controlar en el sombreador.
|
D3DFMT_YUY2 |
No disponible |
D3DFMT_G8R8_G8B8 |
DXGI_FORMAT_R8G8_B8G8_UNORM
Nota En Direct3D 9, los datos se escalaron verticalmente en 255.0f, pero esto se puede controlar en el sombreador.
|
D3DFMT_DXT1 |
DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB |
D3DFMT_DXT2 |
DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB
Nota DXT1 y DXT2 son los mismos desde una perspectiva de API/hardware. La única diferencia está en el uso de un componente alfa multiplicado previamente, lo que permite a una aplicación realizar su seguimiento sin necesidad de usar otro formato.
|
D3DFMT_DXT3 |
DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB |
D3DFMT_DXT4 |
DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB
Nota DXT3 y DXT4 son los mismos desde una perspectiva de API/hardware. La única diferencia está en el uso de un componente alfa multiplicado previamente, lo que permite a una aplicación realizar su seguimiento sin necesidad de usar otro formato.
|
D3DFMT_DXT5 |
DXGI_FORMAT_BC3_UNORM & DXGI_FORMAT_BC3_UNORM_SRGB |
D3DFMT_D16 & D3DFMT_D16_LOCKABLE |
DXGI_FORMAT_D16_UNORM |
D3DFMT_D32 |
No disponible |
D3DFMT_D15S1 |
No disponible |
D3DFMT_D24S8 |
No disponible |
D3DFMT_D24X8 |
No disponible |
D3DFMT_D24X4S4 |
No disponible |
D3DFMT_D16 |
DXGI_FORMAT_D16_UNORM |
D3DFMT_D32F_LOCKABLE |
DXGI_FORMAT_D32_FLOAT |
D3DFMT_D24FS8 |
No disponible |
D3DFMT_S1D15 |
No disponible |
D3DFMT_S8D24 |
DXGI_FORMAT_D24_UNORM_S8_UINT |
D3DFMT_X8D24 |
No disponible |
D3DFMT_X4S4D24 |
No disponible |
D3DFMT_L16 |
DXGI_FORMAT_R16_UNORM
Nota Use .r swizzle en el sombreador para duplicar el rojo en otros componentes para obtener el comportamiento D3D9.
|
D3DFMT_INDEX16 |
DXGI_FORMAT_R16_UINT |
D3DFMT_INDEX32 |
DXGI_FORMAT_R32_UINT |
D3DFMT_Q16W16V16U16 |
DXGI_FORMAT_R16G16B16A16_SNORM |
D3DFMT_MULTI2_ARGB8 |
No disponible |
D3DFMT_R16F |
DXGI_FORMAT_R16_FLOAT |
D3DFMT_G16R16F |
DXGI_FORMAT_R16G16_FLOAT |
D3DFMT_A16B16G16R16F |
DXGI_FORMAT_R16G16B16A16_FLOAT |
D3DFMT_R32F |
DXGI_FORMAT_R32_FLOAT |
D3DFMT_G32R32F |
DXGI_FORMAT_R32G32_FLOAT |
D3DFMT_A32B32G32R32F |
DXGI_FORMAT_R32G32B32A32_FLOAT |
D3DFMT_CxV8U8 |
No disponible |
D3DDECLTYPE_FLOAT1 |
DXGI_FORMAT_R32_FLOAT |
D3DDECLTYPE_FLOAT2 |
DXGI_FORMAT_R32G32_FLOAT |
D3DDECLTYPE_FLOAT3 |
DXGI_FORMAT_R32G32B32_FLOAT |
D3DDECLTYPE_FLOAT4 |
DXGI_FORMAT_R32G32B32A32_FLOAT |
D3DDECLTYPED3DCOLOR |
No disponible |
D3DDECLTYPE_UBYTE4 |
DXGI_FORMAT_R8G8B8A8_UINT
Nota El sombreador obtiene valores UINT, pero si se necesitan floats enteros de estilo direct3D 9 (0,0f, 1,0f... 255.f), UINT se puede convertir a float32 en el sombreador.
|
D3DDECLTYPE_SHORT2 |
DXGI_FORMAT_R16G16_SINT
Nota El sombreador obtiene valores SINT, pero si se necesitan floats enteros de estilo Direct3D 9, SINT solo se puede convertir a float32 en el sombreador.
|
D3DDECLTYPE_SHORT4 |
DXGI_FORMAT_R16G16B16A16_SINT
Nota El sombreador obtiene valores SINT, pero si se necesitan floats enteros de estilo Direct3D 9, SINT solo se puede convertir a float32 en el sombreador.
|
D3DDECLTYPE_UBYTE4N |
DXGI_FORMAT_R8G8B8A8_UNORM |
D3DDECLTYPE_SHORT2N |
DXGI_FORMAT_R16G16_SNORM |
D3DDECLTYPE_SHORT4N |
DXGI_FORMAT_R16G16B16A16_SNORM |
D3DDECLTYPE_USHORT2N |
DXGI_FORMAT_R16G16_UNORM |
D3DDECLTYPE_USHORT4N |
DXGI_FORMAT_R16G16B16A16_UNORM |
D3DDECLTYPE_UDEC3 |
No disponible |
D3DDECLTYPE_DEC3N |
No disponible |
D3DDECLTYPE_FLOAT16_2 |
DXGI_FORMAT_R16G16_FLOAT |
D3DDECLTYPE_FLOAT16_4 |
DXGI_FORMAT_R16G16B16A16_FLOAT |
FourCC 'ATI1' |
DXGI_FORMAT_BC4_UNORM
Nota Requiere el nivel de característica 10.0 o posterior
|
FourCC 'ATI2' |
DXGI_FORMAT_BC5_UNORM
Nota Requiere el nivel de característica 10.0 o posterior
|
Información de asignación adicional
- IDirect3DDevice9::SetCursorPosition se reemplaza por SetCursorPos.
- IDirect3DDevice9::SetCursorProperties se reemplaza por SetCursor.
- IDirect3DDevice9::SetIndices se reemplaza por ID3D11DeviceContext::IASetIndexBuffer.
- IDirect3DDevice9::SetRenderTarget se reemplaza por ID3D11DeviceContext::OMSetRenderTargets.
- IDirect3DDevice9::SetScisorRect se reemplaza por ID3D11DeviceContext::RSSetScissorRects.
- IDirect3DDevice9::SetStreamSource se reemplaza por ID3D11DeviceContext::IASetVertexBuffers.
- IDirect3DDevice9::SetVertexDeclaration se reemplaza por ID3D11DeviceContext::IASetInputLayout.
- IDirect3DDevice9::SetViewport se reemplaza por ID3D11DeviceContext::RSSetViewports.
- IDirect3DDevice9::ShowCursor se reemplaza por ShowCursor.
El control de la rampa gamma de hardware de la tarjeta de vídeo a través de IDirect3DDevice9::SetGammaRamp se reemplaza por IDXGIOutput::SetGammaControl. Consulte Uso de la corrección gamma.
IDirect3DDevice9::P rocessVertices se reemplaza por la funcionalidad de Stream-Output de sombreadores de geometría. Consulte Introducción a la fase de Stream-Output.
El método IDirect3DDevice9::SetClipPlane para establecer planos clip de usuario se reemplazó por la semántica de salida del sombreador de vértices HLSL SV_ClipDistance ( consulte Semántica), disponible en VS_4_0 y arriba, o el nuevo atributo de función clipplanes HLSL (consulte Planos de clip de usuario en hardware de nivel de característica 9).
IDirect3DDevice9::SetPaletteEntries e IDirect3DDevice9::SetCurrentTexturePalette están en desuso. Reemplace estos por un sombreador de píxeles que busque colores en una textura R8G8B8A8 R8B8A8 de 256x1 en su lugar.
Las funciones de teselación de función fija como DrawRectPatch, DrawTriPatch, SetNPatchMode y DeletePatch están en desuso. Reemplace estos por sombreadores de teselación SM5.0 programable-pipeline (si el hardware admite sombreadores de teselación).
Los códigos IDirect3DDevice9::SetFVF y FVF ya no se admiten. Debe migrar desde códigos FVF D3D8/D3D9 a declaraciones de vértices D3D9 antes de migrar a diseños de entrada D3D11.
Todos los tipos D3DDECLTYPE que no se admiten directamente se pueden emular de forma bastante eficaz con un pequeño número de operaciones bit a bit al principio de un sombreador de vértices en VS_4_0 y hacia arriba.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de