Asignación de características de DirectX 9 a las API de DirectX 11
Entienda cómo las características que usa tu juego direct3D 9 se traducirán a Direct3D 11 y la Plataforma universal de Windows (UWP).
Consulte También Planear el puerto de DirectX y Cambios importantes de Direct3D 9 a Direct3D 11.
Asignación de Direct3D 9 a las API de DirectX 11
Direct3D sigue siendo la base de los gráficos de DirectX, pero la API ha cambiado desde DirectX 9:
- La infraestructura de gráficos de Microsoft DirectX (DXGI) se usa para configurar adaptadores de gráficos. Use DXGI para seleccionar formatos de búfer, crear cadenas de intercambio, presentar fotogramas y crear recursos compartidos. Consulte Información general de DXGI.
- Un contexto de dispositivo Direct3D se usa para establecer el estado de canalización y generar comandos de representación. La mayoría de nuestros ejemplos usan un contexto inmediato para representarse directamente en el dispositivo; Direct3D 11 también admite la representación multiproceso, en cuyo caso se usan contextos diferidos. Consulta Introducción a un dispositivo en Direct3D 11.
- Algunas características han quedado en desuso, especialmente la canalización de funciones fijas. Consulte Características en desuso.
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 una parte importante de los gráficos DirectX y Windows. Todavía puedes usar Direct2D para dibujar juegos 2D y dibujar superposiciones (HUD) encima de Direct3D.
Direct2D se ejecuta sobre Direct3D; Los juegos 2D se pueden implementar mediante cualquiera de las API. Por ejemplo, un juego 2D implementado mediante Direct3D puede usar 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. Consulte Introducción a la API de Direct2D.
La API de DirectWrite agrega compatibilidad con texto con formato mediante Direct2D. Consulte Introducción a DirectWrite.
Reemplazar bibliotecas auxiliares en desuso
D3DX y DXUT están en desuso y no se pueden usar en juegos para UWP. Estas bibliotecas auxiliares proporcionan recursos para tareas como la carga de texturas y la carga de malla.
- El tutorial puerto simple de Direct3D 9 a UWP muestra cómo configurar una ventana, inicializar Direct3D y realizar una representación 3D básica.
- El sencillo juego para UWP con DirectX muestra tareas comunes de programación de juegos, como gráficos, carga de archivos, interfaz de usuario, controles y sonido.
- El proyecto de la comunidad kit de herramientas de DirectX ofrece clases auxiliares para su uso con aplicaciones de Direct3D 11 y UWP.
Mover programas de sombreador de FX a HLSL
La biblioteca de utilidades D3DX (D3DX 9, D3DX 10 y D3DX 11), incluidos Effects, está en desuso para UWP. Todos los juegos directX para UWP impulsan la canalización de gráficos mediante HLSL sin efectos.
Visual Studio sigue usando FXC en segundo plano para compilar objetos de sombreador. Los sombreadores de juegos para UWP se compilan con antelació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 gráficos durante el paso de representación adecuado. Los sombreadores deben moverse a su propio separado. Los archivos HLSL y las técnicas de representación deben implementarse en el código de C++.
Para ver un vistazo rápido a la carga de recursos del sombreador, consulta Puerto simple de Direct3D 9 a UWP.
Direct3D 11 introdujo el modelo de sombreador 5, que requiere el nivel de característica 11_0 de Direct3D (o superior). Consulte Características del modelo 5 del sombreador 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 entre x86, x64 y Arm. Consulte Migración de código desde la biblioteca matemática XNA.
Tenga en cuenta que los tipos float de DirectXMath son cómodos para su uso con sombreadores. Por ejemplo , XMFLOAT4 y XMFLOAT4X4 alinear convenientemente los datos para los búferes de constantes.
Reemplazar DirectSound por XAudio2 (y audio de fondo)
DirectSound no es compatible con UWP:
- Usa XAudio2 para agregar efectos de sonido a tu juego.
Reemplazar DirectInput por las API de XInput y Windows Runtime
DirectInput no se admite para UWP:
- Use devoluciones de llamada de eventos de entrada CoreWindow para la entrada táctil, el teclado y el mouse.
- Usa XInput 1.4 para la compatibilidad con controladores de juego (y compatibilidad con auriculares de controlador de juego). Si usas una base de código compartido para escritorio y UWP, consulta Versiones de XInput para obtener información sobre la compatibilidad con versiones anteriores.
- Regístrate para eventos de 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 (o la API de Windows). Microsoft Media Foundation proporciona contenido de vídeo a Direct3D mediante superficies compartidas. Consulte Direct3D 11 Video APIs(API de vídeo de Direct3D 11).
Reemplazar DirectPlay por código de red
Microsoft DirectPlay ha quedado en desuso. Si tu juego usa servicios de red, debes proporcionar código de red que cumpla los requisitos de UWP. Use las SIGUIENTES 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)
Los artículos siguientes le ayudarán a agregar características de red y declarar la compatibilidad con 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 mientras se suspende consulta Conceptos básicos de redes.
Asignación de funciones
Use la tabla siguiente para ayudar a convertir código de Direct3D 9 a Direct3D 11. Esto también puede ayudar a distinguir entre el dispositivo y el contexto del dispositivo.
Direct3D9 | Direct3D 11 Equivalente |
---|---|
Las fases de 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::DrawIndexed ID3D11DeviceContext::DrawIndexedInstanced ID3D11DeviceContext::DrawInstanced |
|
Sin equivalente directo |
|
Use las API de cursor estándar. |
|
El dispositivo PERDIDO 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 capacidad se reemplazan por niveles de características. Solo algunos casos de uso de características y formato son opcionales para cualquier nivel de característica determinado. Se pueden comprobar con ID3D11Device::CheckFeatureSupport y ID3D11Device::CheckFormatSupport. |
Asignación de formato de Superficie
Use la tabla siguiente para convertir los formatos direct3D 9 en formatos DXGI.
Formato direct3D 9 | Formato 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 rojo a 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 el color 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 y DXGI_FORMAT_BC1_UNORM_SRGB |
D3DFMT_DXT2 |
DXGI_FORMAT_BC1_UNORM y DXGI_FORMAT_BC1_UNORM_SRGB
Nota DXT1 y DXT2 son los mismos desde una perspectiva de API/hardware. La única diferencia es si se usa alfa premultipado, que una aplicación puede realizar el seguimiento y no necesita un formato independiente.
|
D3DFMT_DXT3 |
DXGI_FORMAT_BC2_UNORM y DXGI_FORMAT_BC2_UNORM_SRGB |
D3DFMT_DXT4 |
DXGI_FORMAT_BC2_UNORM y DXGI_FORMAT_BC2_UNORM_SRGB
Nota DXT3 y DXT4 son los mismos desde una perspectiva de API/hardware. La única diferencia es si se usa alfa premultipado, que una aplicación puede realizar el seguimiento y no necesita un formato independiente.
|
D3DFMT_DXT5 |
DXGI_FORMAT_BC3_UNORM y DXGI_FORMAT_BC3_UNORM_SRGB |
D3DFMT_D16 y 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 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 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 Stream-Output de sombreadores de geometría. Consulte Introducción a la fase de salida de flujo.
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 (vea Semántica), disponible en VS_4_0 y arriba, o bien el nuevo atributo de función clipplanes HLSL (vea 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 de 256x1 R8G8B8A8 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 de 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.