Como usar o XAML com aplicativos DirectX holográficos

Observação

Este artigo está relacionado às APIs nativas herdadas do WinRT. Para novos projetos de aplicativo nativo, é recomendável usar a API OpenXR.

Este tópico explica o impacto da alternância entre exibições XAML 2D e exibições imersivas em seu aplicativo DirectX e como fazer uso eficiente de uma exibição XAML e exibição imersiva.

Visão geral da alternância de modo de exibição XAML

No HoloLens, um aplicativo imersivo que pode exibir posteriormente uma exibição XAML 2D precisa inicializar essa exibição XAML primeiro e mudar imediatamente para uma exibição imersiva a partir daí. O XAML será carregado antes que seu aplicativo possa fazer qualquer coisa, o que adiciona um pequeno aumento ao tempo de inicialização. O XAML continuará ocupando espaço de memória no processo do aplicativo enquanto ele permanece em segundo plano. A quantidade de atraso de inicialização e o uso de memória depende do que seu aplicativo faz com XAML antes de alternar para o modo de exibição nativo. Se você não fizer nada no código de inicialização XAML no início, exceto iniciar sua exibição imersiva, o impacto deverá ser menor. Além disso, como a renderização holográfica é feita diretamente na exibição imersiva, você evitará restrições relacionadas a XAML nessa renderização.

O uso de memória conta para CPU e GPU. O Direct3D 11 pode trocar a memória gráfica virtual, mas pode não ser capaz de trocar alguns ou todos os recursos de GPU XAML e pode haver um impacto perceptível no desempenho. De qualquer forma, não carregar nenhum recurso XAML que você não precisa deixará mais espaço para seu aplicativo e proporcionará uma experiência melhor.

Fluxo de trabalho de alternância de exibição XAML

O fluxo de trabalho para um aplicativo que vai diretamente do XAML para o modo imersivo é assim:

  • O aplicativo é iniciado na exibição XAML 2D.
  • A sequência de inicialização XAML do aplicativo detecta se o sistema atual dá suporte à renderização holográfica:
  • Nesse caso, o aplicativo cria a exibição imersiva e a coloca em primeiro plano imediatamente. O carregamento XAML é ignorado para qualquer coisa não necessária em dispositivos Windows Mixed Reality, incluindo quaisquer classes de renderização e carregamento de ativos na exibição XAML. Se o aplicativo estiver usando XAML para entrada de teclado, essa página de entrada ainda deverá ser criada.
  • Caso contrário, a exibição XAML pode continuar com os negócios como de costume.

Dica para renderizar gráficos em ambos os modos de exibição

Se seu aplicativo precisar implementar alguma quantidade de renderização no DirectX para o modo de exibição XAML em Windows Mixed Reality, sua melhor opção é criar um renderizador que possa funcionar com ambas as exibições. O renderizador deve ser uma instância que pode ser acessada de ambos os modos de exibição e deve alternar entre renderização 2D e holográfica. Dessa forma, os ativos de GPU são carregados apenas uma vez, o que reduz os tempos de carga, o impacto na memória e a quantidade de recursos trocados ao alternar as exibições.