Planejar a portabilidade do DirectX
Resumo
- Planejar a portabilidade do DirectX
- Alterações importantes do Direct3D 9 para o Direct3D 11
- Mapeamento de recursos
Planeje seu projeto de portabilidade de jogos do DirectX 9 para o DirectX 11 e a Plataforma Universal do Windows (UWP): atualize seu código gráfico e coloque seu jogo no ambiente do Tempo de Execução do Windows.
Planejar a portabilidade do código gráfico
Antes de começar a portar seu jogo para UWP, é importante garantir que seu jogo não tenha nenhum resquício do Direct3D 8. Certifique-se de que seu jogo não tenha nenhum resquício do pipeline de função fixa. Para obter uma lista completa de recursos preteridos, incluindo a funcionalidade de pipeline fixa, consulte Recursos preteridos.
A atualização do Direct3D 9 para o Direct3D 11 é mais do que uma alteração de pesquisa e substituição. Você precisa saber a diferença entre o dispositivo Direct3D, o contexto do dispositivo e a infraestrutura gráfica e aprender sobre outras alterações importantes desde o Direct3D 9. Você pode iniciar esse processo lendo os outros tópicos desta seção.
Você deve substituir as bibliotecas auxiliares D3DX e DXUT por suas próprias bibliotecas auxiliares ou por ferramentas da comunidade. Consulte a seção Mapeamento de recursos para obter mais informações.
Observação Você pode usar o Kit de Ferramentas do DirectX ou o DirectXTex para substituir algumas funcionalidades que eram fornecidas anteriormente pelo D3DX e pelo DXUT.
Os sombreadores escritos em linguagem assembly devem ser atualizados para HLSL usando a funcionalidade de nível 9_1 ou 9_3 do modelo de sombreador 4, e os sombreadores escritos para a biblioteca de efeitos precisarão ser atualizados para uma versão mais recente da sintaxe HLSL. Consulte a seção Mapeamento de recursos para obter mais informações.
Familiarize-se com os diferentes níveis de recursos do Direct3D. Os níveis de recursos classificam uma ampla variedade 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.
Planejar a portabilidade do código da interface do usuário do Win32 para CoreWindow
Os aplicativos UWP são executados em uma janela criada para um contêiner de aplicativo, chamada CoreWindow. Seu jogo controla a janela herdando de IFrameworkView, que requer menos detalhes de implementação do que uma janela da área de trabalho. O loop principal do jogo estará no método IFrameworkView::Run .
O ciclo de vida de um aplicativo UWP é muito diferente de um aplicativo da área de trabalho. Você precisará salvar o jogo com frequência, pois quando ocorre um evento de suspensão, seu aplicativo tem apenas um tempo limitado para interromper a execução do código e você deseja garantir que o jogador possa voltar para onde estava imediatamente quando o aplicativo for retomado. Os jogos devem ser salvos com frequência suficiente para manter uma experiência de jogo contínua desde a retomada, mas não com tanta frequência que o jogo salve a taxa de quadros de impacto ou faça com que o jogo gagueje. Seu jogo potencialmente precisará carregar o estado do jogo quando o jogo for retomado de um estado encerrado.
O DirectXMath pode ser usado como um substituto para D3DXMath e XNAMath e pode ser útil se você precisar de uma biblioteca matemática. O DirectXMath tem tipos de dados rápidos e portáteis e tipos alinhados e empacotados para uso com sombreadores.
Bibliotecas nativas, como a API Interlocked, foram expandidas para oferecer suporte a intrínsecos do Arm. Se o jogo usar APIs interligadas, você poderá continuar usando-as no DirectX 11 e na UWP.
Nossos modelos e exemplos de código usam novos recursos do C++ com os quais você talvez ainda não esteja familiarizado. Por exemplo, métodos assíncronos são usados com expressões lambda para carregar recursos do Direct3D sem bloquear o thread da interface do usuário.
Há dois conceitos que você usará com frequência:
- Referências gerenciadas (operador ^) e classes gerenciadas (classes ref) são uma parte fundamental do Tempo de Execução do Windows. Você precisará usar classes ref gerenciadas para fazer interface com componentes do Tempo de Execução do Windows, por exemplo , IFrameworkView (mais sobre isso no passo a passo).
- Ao trabalhar com interfaces COM do Direct3D 11, use o tipo de modelo Microsoft::WRL::ComPtr para facilitar o uso dos ponteiros COM.