Compartilhar via


Mapear recursos do DirectX 9 para APIs do DirectX 11

Entenda como os recursos que seu jogo Direct3D 9 usa serão convertidos para o Direct3D 11 e a Plataforma Universal do Windows (UWP).

Consulte também Planejar sua porta DirectX e Alterações importantes do Direct3D 9 para o Direct3D 11.

Mapeando APIs do Direct3D 9 para o DirectX 11

O Direct3D ainda é a base dos elementos gráficos do DirectX, mas a API mudou desde o DirectX 9:

  • O Microsoft DirectX Graphics Infrastructure (DXGI) é usado para configurar adaptadores gráficos. Use o DXGI para selecionar formatos de buffer, criar cadeias de troca, apresentar quadros e criar recursos compartilhados. Consulte Visão geral do DXGI.
  • Um contexto de dispositivo Direct3D é usado para definir o estado do pipeline e gerar comandos de renderização. A maioria de nossos exemplos usa um contexto imediato para renderizar diretamente no dispositivo; O Direct3D 11 também dá suporte à renderização multithread, caso em que contextos adiados são usados. Consulte Introdução a um dispositivo no Direct3D 11.
  • Alguns recursos foram preteridos, principalmente o pipeline de função fixa. Consulte Recursos preteridos.

Para obter uma lista completa dos recursos do Direct3D 11, consulte Recursos do Direct3D 11 e Recursos do Direct3D 11.

Movendo do Direct2D 9 para o Direct2D 11

O Direct2D (Windows) ainda é uma parte importante dos elementos gráficos do DirectX e do Windows. Você ainda pode usar o Direct2D para desenhar jogos 2D e desenhar HUDs (sobreposições) sobre o Direct3D.

Direct2D é executado sobre Direct3D; Os jogos 2D podem ser implementados usando qualquer API. Por exemplo, um jogo 2D implementado usando Direct3D pode usar projeção ortográfica, definir valores Z para controlar a ordem de desenho de primitivos e usar sombreadores de pixel para adicionar efeitos especiais.

Como o Direct2D é baseado no Direct3D, ele também usa DXGI e contextos de dispositivo. Consulte Visão geral da API Direct2D.

A API DirectWrite adiciona suporte para texto formatado usando Direct2D. Consulte Introdução ao DirectWrite.

Substituir bibliotecas auxiliares obsoletas

D3DX e DXUT foram preteridos e não podem ser usados por jogos UWP. Essas bibliotecas auxiliares forneciam recursos para tarefas como carregamento de textura e carregamento de malha.

Mover programas de sombreador de FX para HLSL

A biblioteca de utilitários D3DX (D3DX 9, D3DX 10 e D3DX 11), incluindo Efeitos, foi preterida para UWP. Todos os jogos DirectX para UWP conduzem o pipeline de gráficos usando HLSL sem Efeitos.

O Visual Studio ainda usa o FXC nos bastidores para compilar objetos de sombreador. Os sombreadores de jogo UWP são compilados com antecedência. O bytecode é carregado em runtime e, em seguida, cada recurso de sombreador é associado ao pipeline de gráficos durante a passagem de renderização apropriada. Os sombreadores devem ser movidos para seus próprios arquivos . Arquivos HLSL e técnicas de renderização devem ser implementados em seu código C++.

Para obter uma visão rápida do carregamento de recursos de sombreador, consulte Portabilidade simples do Direct3D 9 para a UWP.

O Direct3D 11 introduziu o Modelo de Sombreador 5, que requer o nível de recurso do Direct3D 11_0 (ou superior). Consulte Recursos do Modelo de Sombreador HLSL 5 para Direct3D 11.

Substitua XNAMath e D3DXMath

O código que usa XNAMath (ou D3DXMath) deve ser migrado para o DirectXMath. O DirectXMath inclui tipos que são portáteis em x86, x64 e Arm. Consulte Migração de código da Biblioteca de matemática XNA.

Observe que os tipos flutuantes DirectXMath são convenientes para uso com sombreadores. Por exemplo , XMFLOAT4 e XMFLOAT4X4 alinhar convenientemente os dados para buffers constantes.

Substitua o DirectSound pelo XAudio2 (e áudio em segundo plano)

Não há suporte para DirectSound para UWP:

  • Use o XAudio2 para adicionar efeitos sonoros ao seu jogo.

Substituir DirectInput por APIs XInput e Windows Runtime

Não há suporte para DirectInput para UWP:

  • Use retornos de chamada de evento de entrada CoreWindow para entrada de mouse, teclado e toque.
  • Use o XInput 1.4 para suporte ao controlador de jogo (e suporte ao fone de ouvido do controlador de jogo). Se você estiver usando uma base de código compartilhada para área de trabalho e UWP, consulte Versões XInput para obter informações sobre compatibilidade com versões anteriores.
  • Registre-se para eventos EdgeGesture se o jogo precisar usar a barra de aplicativos.

Usar o Microsoft Media Foundation em vez do DirectShow

O DirectShow não faz mais parte da API do DirectX (ou da API do Windows). O Microsoft Media Foundation fornece conteúdo de vídeo para o Direct3D usando superfícies compartilhadas. Consulte APIs de vídeo do Direct3D 11.

Substitua o DirectPlay pelo código de rede

O Microsoft DirectPlay foi preterido. Se o jogo usar serviços de rede, você precisará fornecer um código de rede que esteja em conformidade com os requisitos da UWP. Use as seguintes APIs:

Os artigos a seguir ajudam você a adicionar recursos de rede e declarar suporte para rede no manifesto do pacote do aplicativo.

Observe que todos os aplicativos UWP (incluindo jogos) usam tipos específicos de tarefas em segundo plano para manter a conectividade enquanto o aplicativo está suspenso. Se o jogo precisar manter o estado de conexão enquanto estiver suspenso, consulte Noções básicas de rede.

Mapeamento de função

Use a tabela a seguir para ajudar a converter o código do Direct3D 9 para o Direct3D 11. Isso também pode ajudar a distinguir entre o dispositivo e o contexto do dispositivo.

Direct3D9 Direct3D 11 equivalente

IDirect3DDevice9

ID3D11Dispositivo2

ID3D11DeviceContext2

Os estágios do pipeline de gráficos são descritos em Pipeline de Gráficos.

IDirect3D9

IDXGIFactory2

IDXGIAdapter2

IDXGIDevice3

IDirect3DDevice9::P resent

IDXGISwapChain1::P resent1

IDirect3DDevice9::TestCooperativeLevel

Chame IDXGISwapChain1::P resent1 com o sinalizador DXGI_PRESENT_TEST definido.

IDirect3DBaseTexture9

IDirect3DTexture9

IDirect3DCubeTexture9

IDirect3DVolumeTexture9

IDirect3DIndexBuffer9

IDirect3DVertexBuffer9

ID3D11Buffer

ID3D11Textura1D

ID3D11Textura2D

ID3D11Textura3D

ID3D11ShaderResourceView

ID3D11RenderTargetView

ID3D11DepthStencilView

IDirect3DVertexShader9

IDirect3DPixelShader9

ID3D11VertexShader

ID3D11PixelShader

IDirect3DVertexDeclaration9

ID3D11InputLayout

IDirect3DDevice9::SetRenderState

IDirect3DDevice9::SetSamplerState

ID3D11BlendState1 (em inglês)

ID3D11DepthStencilState

ID3D11RasterizerState1

ID3D11SamplerState

IDirect3DDevice9::D rawIndexedPrimitive

IDirect3DDevice9::D rawPrimitive

ID3D11DeviceContext::Draw

ID3D11DeviceContext::DrawIndexed

ID3D11DeviceContext::DrawIndexedInstanced

ID3D11DeviceContext::DrawInstanced

ID3D11DeviceContext::IASetPrimitiveTopology

ID3D11DeviceContext::DrawAuto

IDirect3DDevice9::BeginScene

IDirect3DDevice9::Cena Final

IDirect3DDevice9::D rawPrimitiveUP

IDirect3DDevice9::D rawIndexedPrimitiveUP

Sem equivalente direto

IDirect3DDevice9::ShowCursor

IDirect3DDevice9::SetCursorPosition

IDirect3DDevice9::SetCursorProperties

Use APIs de cursor padrão.

IDirect3DDevice9::Redefinir

LOST e POOL_MANAGED não existem mais. IDXGISwapChain1::P resent1 pode falhar com um DXGI_ERROR_DEVICE_REMOVED valor retornado.

IDirect3DDevice9:DrawRectPatch

IDirect3DDevice9:DrawTriPatch

IDirect3DDevice9:LightEnable

IDirect3DDevice9:MultiplyTransform

IDirect3DDevice9:SetLight

IDirect3DDevice9:SetMaterial

IDirect3DDevice9:SetNPatchMode

IDirect3DDevice9:SetTransform

IDirect3DDevice9:SetFVF

IDirect3DDevice9:SetTextureStageState

O pipeline de função fixa foi preterido.

IDirect3DDevice9:CheckDepthStencilMatch

IDirect3DDevice9:CheckDeviceFormat

IDirect3DDevice9:GetDeviceCaps

IDirect3DDevice9:ValidateDevice

Os bits de capacidade são substituídos por níveis de recursos. Apenas alguns casos de uso de formato e recurso são opcionais para qualquer nível de recurso. Eles podem ser verificados com ID3D11Device::CheckFeatureSupport e ID3D11Device::CheckFormatSupport.

Mapeamento de formato de superfície

Use a tabela a seguir para converter formatos Direct3D 9 em formatos DXGI.

Formato Direct3D 9 Formato do Direct3D 11

D3DFMT_UNKNOWN

DXGI_FORMAT_UNKNOWN

D3DFMT_R8G8B8

Não disponível

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

Não disponível

D3DFMT_A1R5G5B5

DXGI_FORMAT_B5G5R5A1_UNORM

D3DFMT_A4R4G4B4

DXGI_FORMAT_B4G4R4A4_UNORM

D3DFMT_R3G3B2

Não disponível

D3DFMT_A8

DXGI_FORMAT_A8_UNORM

D3DFMT_A8R3G3B2

Não disponível

D3DFMT_X4R4G4B4

Não disponível

D3DFMT_A2B10G10R10

DXGI_FORMAT_R10G10B10A2

D3DFMT_A8B8G8R8

DXGI_FORMAT_R8G8B8A8_UNORM

DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

D3DFMT_X8B8G8R8

Não disponível

D3DFMT_G16R16

DXGI_FORMAT_R16G16_UNORM

D3DFMT_A2R10G10B10

Não disponível

D3DFMT_A16B16G16R16

DXGI_FORMAT_R16G16B16A16_UNORM

D3DFMT_A8P8

Não disponível

D3DFMT_P8

Não disponível

D3DFMT_L8

DXGI_FORMAT_R8_UNORM

Observação Use .r swizzle no sombreador para duplicar o vermelho para outros componentes para obter o comportamento do Direct3D 9.
 

D3DFMT_A8L8

DXGI_FORMAT_R8G8_UNORM

Observação Use swizzle .rrrg no sombreador para duplicar o vermelho e mover o verde para os componentes alfa para obter o comportamento do Direct3D 9.
 

D3DFMT_A4L4

Não disponível

D3DFMT_V8U8

DXGI_FORMAT_R8G8_SNORM

D3DFMT_L6V5U5

Não disponível

D3DFMT_X8L8V8U8

Não disponível

D3DFMT_Q8W8V8U8

DXGI_FORMAT_R8G8B8A8_SNORM

D3DFMT_V16U16

DXGI_FORMAT_R16G16_SNORM

D3DFMT_W11V11U10

Não disponível

D3DFMT_A2W10V10U10

Não disponível

D3DFMT_UYVY

Não disponível

D3DFMT_R8G8_B8G8

DXGI_FORMAT_G8R8_G8B8_UNORM

Observação No Direct3D 9, os dados foram dimensionados em 255.0f, mas isso pode ser tratado no sombreador.
 

D3DFMT_YUY2

Não disponível

D3DFMT_G8R8_G8B8

DXGI_FORMAT_R8G8_B8G8_UNORM

Observação No Direct3D 9, os dados foram dimensionados em 255.0f, mas isso pode ser tratado no sombreador.
 

D3DFMT_DXT1

DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB

D3DFMT_DXT2

DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB

Observação DXT1 e DXT2 são os mesmos de uma perspectiva de API/hardware. A única diferença é se o alfa pré-multiplicado é usado, que pode ser rastreado por um aplicativo e não precisa de um formato separado.
 

D3DFMT_DXT3

DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB

D3DFMT_DXT4

DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB

Observação DXT3 e DXT4 são os mesmos do ponto de vista da API/hardware. A única diferença é se o alfa pré-multiplicado é usado, que pode ser rastreado por um aplicativo e não precisa de um formato separado.
 

D3DFMT_DXT5

DXGI_FORMAT_BC3_UNORM & DXGI_FORMAT_BC3_UNORM_SRGB

D3DFMT_D16 & D3DFMT_D16_LOCKABLE

DXGI_FORMAT_D16_UNORM

D3DFMT_D32

Não disponível

D3DFMT_D15S1

Não disponível

D3DFMT_D24S8

Não disponível

D3DFMT_D24X8

Não disponível

D3DFMT_D24X4S4

Não disponível

D3DFMT_D16

DXGI_FORMAT_D16_UNORM

D3DFMT_D32F_LOCKABLE

DXGI_FORMAT_D32_FLOAT

D3DFMT_D24FS8

Não disponível

D3DFMT_S1D15

Não disponível

D3DFMT_S8D24

DXGI_FORMAT_D24_UNORM_S8_UINT

D3DFMT_X8D24

Não disponível

D3DFMT_X4S4D24

Não disponível

D3DFMT_L16

DXGI_FORMAT_R16_UNORM

Observação Use .r swizzle no sombreador para duplicar o vermelho para outros componentes para obter o comportamento D3D9.
 

D3DFMT_INDEX16

DXGI_FORMAT_R16_UINT

D3DFMT_INDEX32

DXGI_FORMAT_R32_UINT

D3DFMT_Q16W16V16U16

DXGI_FORMAT_R16G16B16A16_SNORM

D3DFMT_MULTI2_ARGB8

Não disponível

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

Não disponível

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

Não disponível

D3DDECLTYPE_UBYTE4

DXGI_FORMAT_R8G8B8A8_UINT

Observação O sombreador obtém valores UINT, mas se forem necessários floats integrais de estilo Direct3D 9 (0.0f, 1.0f... 255.f), UINT pode ser convertido em float32 no sombreador.
 

D3DDECLTYPE_SHORT2

DXGI_FORMAT_R16G16_SINT

Observação O sombreador obtém valores SINT, mas se floats integrais de estilo Direct3D 9 forem necessários, SINT poderá ser convertido em float32 no sombreador.
 

D3DDECLTYPE_SHORT4

DXGI_FORMAT_R16G16B16A16_SINT

Observação O sombreador obtém valores SINT, mas se floats integrais de estilo Direct3D 9 forem necessários, SINT poderá ser convertido em float32 no 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

Não disponível

D3DDECLTYPE_DEC3N

Não disponível

D3DDECLTYPE_FLOAT16_2

DXGI_FORMAT_R16G16_FLOAT

D3DDECLTYPE_FLOAT16_4

DXGI_FORMAT_R16G16B16A16_FLOAT

FourCC 'ATI1'

DXGI_FORMAT_BC4_UNORM

Observação Requer o nível de recurso 10.0 ou posterior
 

FourCC 'ATI2'

DXGI_FORMAT_BC5_UNORM

Observação Requer o nível de recurso 10.0 ou posterior
 

Informações adicionais de mapeamento

O controle da rampa gama de hardware da placa de vídeo por meio de IDirect3DDevice9::SetGammaRamp é substituído por IDXGIOutput::SetGammaControl. Consulte Uso da correção de gama.

IDirect3DDevice9::P rocessVertices é substituído pela funcionalidade Stream-Output de Geometry Shaders. Consulte Introdução ao estágio de saída de fluxo.

O método IDirect3DDevice9::SetClipPlane para definir planos de clipe do usuário foi substituído pela semântica de saída do sombreador de vértice HLSL SV_ClipDistance (consulte Semântica), disponível em VS_4_0 e superior, ou pelo novo atributo de função clipplanes HLSL (consulte Planos de clipe do usuário no hardware de nível de recurso 9).

IDirect3DDevice9::SetPaletteEntries e IDirect3DDevice9::SetCurrentTexturePalette foram preteridos. Substitua-os por um sombreador de pixel que procure cores em uma textura de R8G8B8A8 de 256x1.

Funções de mosaico de função fixa, como DrawRectPatch, DrawTriPatch, SetNPatchMode e DeletePatch , foram preteridas. Substitua-os por sombreadores de mosaico SM5.0 de pipeline programável (se o hardware der suporte a sombreadores de mosaico).

Não há mais suporte para códigos IDirect3DDevice9::SetFVF e FVF. Você deve portar de códigos FVF D3D8/D3D9 para declarações de vértice D3D9 antes de portar para layouts de entrada D3D11.

Todos os tipos de D3DDECLTYPE que não têm suporte direto podem ser emulados de forma bastante eficiente com um pequeno número de operações bit a bit no início de um sombreador de vértice em VS_4_0 e superior.