Planejar a portabilidade do DirectX

Resumo

Planeje o seu projeto de portabilidade para jogos do DirectX 9 para o DirectX 11 e Plataforma Universal do Windows (UWP): atualize o código dos elementos gráficos e coloque o seu jogo no ambiente do Windows Runtime.

Planejar para a compatibilização do código de elementos gráficos

Antes de você começar a compatibilizar o seu jogo com a UWP, é importante certificar que ele não tenha nenhum remanescente do Direct3D 8. Verifique se o jogo não tem resquícios do pipeline de funções fixas. Veja uma lista completa de recursos preteridos, incluindo funcionalidade de pipeline fixo, em Recursos preteridos.

A atualização do Direct3D 9 para o Direct3D 11 é mais do que uma alteração do tipo "localizar e substituir". Você deve saber a diferença entre o dispositivo Direct3D, o contexto de dispositivo e a infraestrutura gráfica. Além disso, deve aprender sobre outras mudanças importantes desde o Direct3D 9. Você pode iniciar esse processo lendo os outros tópicos desta seção.

Você deve substituir as livrarias auxiliares D3DX e DXUT pelas suas ou por ferramentas da comunidade. Veja a seção Mapeamento de recursos para saber mais.

Nota Você pode usar o DirectX Tool Kit ou DirectXTex para substituir algumas funcionalidades que anteriormente eram fornecidas por D3DX e DXUT.

 

Os sombreadores escritos em linguagem de assembly devem ser atualizados para o HLSL usando a funcionalidade 9_1 ou 9_3 do modelo de sombreador 4, e os sombreadores gravados para a biblioteca Efeitos precisarão ser atualizados para uma versão mais recente da sintaxe HLSL. Veja a seção Mapeamento de recursos para saber mais.

Conheça os diferentes níveis de recursos do Direct3D. Os níveis de recursos classificam uma ampla gama de hardware de vídeo, definindo conjuntos de funcionalidades conhecidas. Cada conjunto corresponde aproximadamente às versões do Direct3D, de 9.1 a 11.2. Todos os níveis de recursos usam a API do DirectX 11.

Planeje a portabilidade do código da interface do usuário Win32 para CoreWindow

Aplicativos UWP são executados em uma janela criada por um contêiner de aplicativo, chamada CoreWindow. Seu jogo controle a janela herdando de IFrameworkView, que exige menos detalhes de implementação do que uma janela de área de trabalho. O loop principal do seu jogo estará no método IFrameworkView::Run.

O ciclo de vida de um aplicativo UWP é muito diferente de um aplicativo de área de trabalho. Será necessário salvar o jogo frequentemente, porque quando o evento suspenso ocorre, seu aplicativo tem apenas um tempo limitado para parar de executar o código e você precisa garantir que o jogador possa voltar para onde estava assim que o aplicativo for retomado. Os jogos devem ser salvos com frequência suficiente para manter uma experiência de jogabilidade contínua a partir da retomada, mas não com tanta frequência a ponto de o processo influenciar na taxa de quadros ou fazer com que o jogo trave. Seu jogo precisará carregar potencialmente o estado de jogo quando for retomado a partir de um estado encerrado.

DirectXMath pode ser usado como substituto de D3DXMath e XNAMath, e pode ser útil se você precisar de uma biblioteca matemática. DirectXMath possui tipos de dados rápidos e portáteis, além dos tipos alinhados e empacotados com sombreadores.

Bibliotecas nativas, como a API intertravada , foram expandidas para dar suporte a intrínsecos do Arm. Se o seu jogo usa APIs entrelaçadas, você pode continuar usando no DirectX 11 e na UWP.

Nossos modelos e exemplos de códigos usam recursos C++ com os quais você pode não estar familiarizado ainda. Por exemplo, métodos assíncronos são usados com expressões lambda para carregar recursos do Direct3D sem bloquear o thread de interface do usuário.

Há dois conceitos que você usará com frequência:

  • Referências gerenciadas (^ operator) and managed classes (ref classes) são partes fundamentais do Windows Runtime. Você precisará usar classes de referência para interagir com componentes do Tempo de Execução do Windows, por exemplo IFrameworkView (você verá mais sobre isso no passo a passo).
  • Ao trabalhar com interfaces do Direct3D 11 COM, use o tipo de modelo Microsoft::WRL::ComPtr para deixar ponteiros COM mais fáceis de usar.