Compartir a través de


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.

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:

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.

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

IDirect3DDevice9

ID3D11Device2

ID3D11DeviceContext2

Las fases de canalización de gráficos se describen en Canalización de gráficos.

IDirect3D9

IDXGIFactory2

IDXGIAdapter2

IDXGIDevice3

IDirect3DDevice9::P resent

IDXGISwapChain1::P resent1

IDirect3DDevice9::TestCooperativeLevel

Llame a IDXGISwapChain1::P resent1 con la marca DXGI_PRESENT_TEST establecida.

IDirect3DBaseTexture9

IDirect3DTexture9

IDirect3DCubeTexture9

IDirect3DVolumeTexture9

IDirect3DIndexBuffer9

IDirect3DVertexBuffer9

ID3D11Buffer

ID3D11Texture1D

ID3D11Texture2D

ID3D11Texture3D

ID3D11ShaderResourceView

ID3D11RenderTargetView

ID3D11DepthStencilView

IDirect3DVertexShader9

IDirect3DPixelShader9

ID3D11VertexShader

ID3D11PixelShader

IDirect3DVertexDeclaration9

ID3D11InputLayout

IDirect3DDevice9::SetRenderState

IDirect3DDevice9::SetSamplerState

ID3D11BlendState1

ID3D11DepthStencilState

ID3D11RasterizerState1

ID3D11SamplerState

IDirect3DDevice9::D rawIndexedPrimitive

IDirect3DDevice9::D rawPrimitive

ID3D11DeviceContext::Draw

ID3D11DeviceContext::DrawIndexed

ID3D11DeviceContext::DrawIndexedInstanced

ID3D11DeviceContext::DrawInstanced

ID3D11DeviceContext::IASetPrimitiveTopology

ID3D11DeviceContext::DrawAuto

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene

IDirect3DDevice9::D rawPrimitiveUP

IDirect3DDevice9::D rawIndexedPrimitiveUP

Sin equivalente directo

IDirect3DDevice9::ShowCursor

IDirect3DDevice9::SetCursorPosition

IDirect3DDevice9::SetCursorProperties

Use las API de cursor estándar.

IDirect3DDevice9::Reset

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:DrawTriPatch

IDirect3DDevice9:LightEnable

IDirect3DDevice9:MultiplyTransform

IDirect3DDevice9:SetLight

IDirect3DDevice9:SetMaterial

IDirect3DDevice9:SetNPatchMode

IDirect3DDevice9:SetTransform

IDirect3DDevice9:SetFVF

IDirect3DDevice9:SetTextureStageState

La canalización de función fija está en desuso.

IDirect3DDevice9:CheckDepthStencilMatch

IDirect3DDevice9:CheckDeviceFormat

IDirect3DDevice9:GetDeviceCaps

IDirect3DDevice9:ValidateDevice

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

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.