Migrando para o Direct3D 11
Esta seção fornece informações para migrar para o Direct3D 11 de uma versão anterior do Direct3D.
- Direct3D 9 para Direct3D 11
- Direct3D 10 para Direct3D 11
- Direct3D 10.1 para Direct3D 11
- Novos recursos para Direct3D 11
- Novos recursos para DirectX 11.1
- Novos recursos para DirectX 11.2
- Tópicos relacionados
Direct3D 9 para Direct3D 11
A API do Direct3D 11 baseia-se nos aprimoramentos de infraestrutura feitos no Direct3D 10 e 10.1. A portabilidade do Direct3D 9 para o Direct3D 11 é semelhante à mudança do Direct3D 9 para o Direct3D 10. A seguir estão os principais desafios desse esforço.
- Remoção de todo o uso de pipeline de função fixa em favor de sombreadores programáveis criados exclusivamente em HLSL (compilados via D3DCompiler em vez de D3DX9).
- Gerenciamento de estado baseado em objetos imutáveis em vez de alternâncias de estado individuais.
- Atualização para cumprir os rigorosos requisitos de vinculação de layouts de entrada de buffer de vértice e assinaturas de sombreador.
- Associando exibições de recursos de sombreador a todos os recursos de textura.
- Mapeando todo o conteúdo da imagem para um DXGI_FORMAT, incluindo a remoção de todos os formatos de cores de 24 bits (8/8/8) e a ordenação estrita de cores RGB para a maioria dos cenários.
- Dividir o uso de estado constante global em vários buffers constantes pequenos e atualizados com mais eficiência.
Para obter mais informações sobre como migrar do Direct3D 9 para o Direct3D 10, consulte Considerações sobre Direct3D 9 para Direct3D 10.
Direct3D 10 para Direct3D 11
A conversão de programas escritos para usar a API do Direct3D 10 ou 10.1 é um processo simples, pois o Direct3D 11 é uma extensão da API existente. Com apenas uma pequena exceção (observada abaixo - filtragem de texto monocromática), todos os métodos e funcionalidades no Direct3D 10/10.1 estão disponíveis no Direct3D 11. A estrutura de tópicos abaixo descreve as diferenças entre as duas APIs para ajudar na atualização do código existente. As principais diferenças aqui incluem:
- As operações de renderização (Desenhar, estado, etc.) não fazem mais parte da interface do Dispositivo, mas fazem parte da nova interface do DeviceContext, juntamente com os métodos de Mapeamento/Desmapeamento de recursos e consulta de dispositivo.
- O Direct3D 11 inclui todos os aprimoramentos e alterações feitas entre o Direct3D 10.0 e o 10.1
Enumerações e definições
Direct3D 10 | Direct3D 11 |
---|---|
DXGI_FORMAT | DXGI_FORMAT Vários novos formatos DXGI foram definidos. |
D3D10_CREATE_DEVICE_SWITCH_TO_REF | D3D11_CREATE_DEVICE_SWITCH_TO_REF A funcionalidade switch-to-ref não é suportada pelo Direct3D 11. |
D3D10_DRIVER_TYPE | D3D_DRIVER_TYPE Observe que os identificadores de enumeração em D3D_DRIVER_TYPE foram redefinidos a partir dos identificadores em D3D10_DRIVER_TYPE. Portanto, você deve ter certeza de usar os identificadores de enumeração em vez de números literais. D3D_DRIVER_TYPE é definido em D3Dcommon.h. |
D3D10_RESOURCE_MISC_FLAG | D3D11_RESOURCE_MISC_FLAG Observe que muitos desses sinalizadores foram redefinidos, portanto, certifique-se de usar identificadores de enumeração em vez de números literais. |
D3D10_FILTER | D3D11_FILTER Observe que a filtragem de texto D3D10_FILTER_TEXT_1BIT foi removida do Direct3D 11. Consulte DirectWrite. |
D3D10_COUNTER | D3D11_COUNTER Observe que os contadores neutros de fornecedor foram removidos para o Direct3D 11, pois raramente eram suportados. |
D3D10_x | D3D11_x Muitas enumerações e definições são iguais, têm limites maiores ou têm valores adicionais. |
Estruturas
Interfaces
Direct3D 10 | Direct3D 11 |
---|---|
ID3D10Dispositivo | ID3D11Device e ID3D11DeviceContext A interface do dispositivo foi dividida nessas duas partes. Para portabilidade rápida, você pode usar ID3D11Device::GetImmediateContext. Os métodos "ID3D10Device::GetTextFilterSize" e "SetTextFilerSize" não existem mais. Consulte DirectWrite. Create*Shader usa um parâmetro opcional adicional para ID3D11ClassLinkage. *SetShader e *GetShader usam parâmetros opcionais adicionais para ID3D11ClassInstance(s). CreateGeometryShaderWithStreamOutput usa uma matriz e conta para várias passadas de fluxo de saída. O limite para o parâmetro NumEntries de CreateGeometryShaderWithStreamOutput aumentou para D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT no Direct3D 11. |
ID3D10Buffer | ID3D11Buffer |
ID3D10SwitchToRef | ID3D11SwitchToRefA funcionalidade Switch-to-ref não é suportada no Direct3D 11. |
ID3D10Textura1D | ID3D11Textura1D |
ID3D10Textura2D | ID3D11Textura2D |
ID3D10Textura3D | ID3D11Texture3D Os métodos Map e Unmap foram movidos para ID3D11DeviceContext, e todos os métodos Map usam D3D11_MAPPED_SUBRESOURCE em vez de um void**. |
ID3D10Assíncrono | ID3D11Asynchronous Begin, End e GetData foram movidos para ID3D11DeviceContext. |
ID3D10x | ID3D11x Muitas interfaces são idênticas entre as duas APIs. |
Outras Tecnologias Relacionadas
Solução 10/10.1 | 11 Solução |
---|---|
Complier HLSL (D3D10Compile*, D3DX10Compile*) e APIs de reflexão de sombreador | D3DCompiler (consulte D3DCompiler.h) Observação: para aplicativos da Windows Store, as APIs do D3DCompiler têm suporte apenas para desenvolvimento, não para implantação. |
Efeitos 10 | O Effects 11 está disponível como fonte compartilhada online. Observação: essa solução não é adequada para aplicativos da Windows Store porque requer as APIs do D3DCompiler em tempo de execução (implantação). |
D3DX9/D3DX10 Matemática | DirectXMath |
D3DX10 | D3DX11 no SDK do DirectX herdado DirectXTex, DirectXTK e DirectXMesh oferecem alternativas para muitas tecnologias nas bibliotecas D3DX10 e D3DX11 herdadas. O Direct2D e o DirectWrite oferecem suporte de alta qualidade para renderização de linhas e fontes estilizadas. |
Para obter informações sobre o SDK do DirectX herdado, consulte Onde está o SDK do DirectX?.
Direct3D 10.1 para Direct3D 11
O Direct3D 10.1 é uma extensão da interface do Direct3D 10 e todos os recursos do Direct3D 10.1 estão disponíveis no Direct3D 11. A maior parte da portabilidade de 10.1 para 11 já foi abordada acima, passando de 10 para 11.
Enumerações e definições
Estruturas
Direct3D 10.1 | Direct3D 11 |
---|---|
D3D10_BLEND_DESC1 | D3D11_BLEND_DESC A versão 11 é idêntica à 10.1. |
D3D10_SHADER_RESOURCE_VIEW_DESC1 | D3D11_SHADER_RESOURCE_VIEW_DESC A versão 11 é idêntica à 10.1. |
Interfaces
Direct3D 10.1 | Direct3D 11 |
---|---|
ID3D10Device1 | ID3D11Device e ID3D11DeviceContext A interface do dispositivo foi dividida nessas duas partes. Para portabilidade rápida, você pode usar ID3D11Device::GetImmediateContext. Os métodos " ID3D10Device::GetTextFilterSize" e "SetTextFilerSize" não existem mais. Consulte DirectWrite. Create*Shader usa um parâmetro opcional adicional para ID3D11ClassLinkage. *SetShader e *GetShader usam parâmetros opcionais adicionais para ID3D11ClassInstance(s). CreateGeometryShaderWithStreamOutput usa uma matriz e conta para várias passadas de fluxo de saída. O limite para o parâmetro NumEntries de CreateGeometryShaderWithStreamOutput aumentou para D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT no Direct3D 11. |
ID3D10BlendState1 | ID3D11BlendState |
ID3D10ShaderResourceView1 | ID3D11ShaderResourceView |
Novos recursos para Direct3D 11
Depois que seu código é atualizado para usar a API do Direct3D 11, há vários novos recursos a serem considerados.
- Renderização multithreaded por meio de listas de comandos e vários contextos
- Implementando algoritmos avançados usando Compute Shader (usando perfis de sombreador 4.0, 4.1 ou 5.0)
- Novos recursos de hardware de 11 classes:
- Sombreador HLSL Modelo 5.0
- Ligação dinâmica do sombreador
- Tessellation através de sombreadores de casco e domínio
- Novos formatos de compressão de blocos: BC6H para imagens HDR, BC7 para imagens padrão de maior fidelidade
- Utilizando a tecnologia 10level9 para renderização em muitos dispositivos Shader Model 2.0 e Shader Model 3.0 por meio da API DIrect3D 11 para suporte de hardware de vídeo de baixo custo no Windows Vista e Windows 7.
- Aproveitando o dispositivo de renderização de software WARP.
Novos recursos para DirectX 11.1
O Windows 8 inclui outros aprimoramentos de elementos gráficos DirectX a serem considerados ao implementar seu código gráfico DirectX, que incluem Direct3D 11.1, DXGI 1.2, WDDM (Windows Display Driver Model) 1.2, hardware de nível de recurso 11.1, contextos de dispositivo Direct2D e outros aprimoramentos.
O suporte parcial para Direct3D 11.1 também está disponível no Windows 7 por meio da Atualização de plataforma para o Windows 7, que está disponível por meio da Atualização de plataforma para o Windows 7.
Novos recursos para DirectX 11.2
O Windows 8.1 inclui Direct3D 11.2, DXGI 1.3 e outras melhorias.