Usando XAML com aplicativos Holographic DirectXUsing XAML with holographic DirectX apps

Este tópico explica o impacto de alternar entre exibições do XAML 2D e exibições de imersão em seu aplicativo DirectX e como fazer uso eficiente de uma exibição XAML e exibição imersiva.This topic explains the impact of switching between 2D XAML views and immersive views in your DirectX app, and how to make efficient use of both a XAML view and immersive view.

Visão geral de alternância de exibição XAMLXAML view switching overview

No HoloLens, um aplicativo geralmente envolvente que pode exibir posteriormente uma exibição XAML 2D deve inicializar essa exibição XAML primeiro e imediatamente alternar para uma exibição de imersão a partir daí.On HoloLens, a generally immersive app that may later display a 2D XAML view must initialize that XAML view first and immediately switch to an immersive view from there. Isso significa que o XAML será carregado antes que seu aplicativo possa fazer qualquer coisa.This means XAML will load before your app can do anything. Como resultado, haverá um pequeno aumento no tempo de inicialização, e o XAML continuará ocupando espaço de memória no processo do aplicativo enquanto ele reside em segundo plano; a quantidade de atraso de inicialização e uso de memória depende do que seu aplicativo faz com XAML antes de alternar para a exibição nativa.As a result, there will be a small increase in your startup time, and XAML will continue to occupy memory space in your app process while it resides in the background; the amount of startup delay and memory usage depends on what your app does with XAML before switching to the native view. Se você não fizer nada em seu código de inicialização de XAML a princípio, exceto iniciar a exibição de imersão, o impacto deverá ser menor.If you do nothing in your XAML start up code at first except start your immersive view, the impact should be minor. Além disso, como a renderização Holographic é feita diretamente na exibição imersiva, você evitará restrições relacionadas a XAML nessa renderização.Also, because your holographic rendering is done directly to the immersive view, you will avoid any XAML-related restrictions on that rendering.

Observe que o uso de memória conta tanto para CPU quanto para GPU.Note that the memory usage counts for both CPU and GPU. O Direct3D 11 é capaz de 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.Direct3D 11 is able to swap virtual graphics memory, but it might not be able to swap out some or all of the XAML GPU resources, and there might be a noticeable performance hit. De qualquer forma, não carregar nenhum recurso XAML de que você não precisa deixará mais espaço para seu aplicativo e fornecerá uma experiência melhor.Either way, not loading any XAML features you don't need will leave more room for your app and provide a better experience.

Fluxo de trabalho de alternância de exibição XAMLXAML view switching workflow

O fluxo de trabalho para um aplicativo que vai diretamente do XAML para o modo de imersão é assim:The workflow for an app that goes directly from XAML to immersive mode is like so:

  • O aplicativo é iniciado na exibição 2D XAML.The app starts up in the 2D XAML view.
  • A sequência de inicialização XAML do aplicativo detecta se o sistema atual dá suporte à renderização Holographic:The app’s XAML startup sequence detects if the current system supports holographic rendering:
  • Em caso afirmativo, o aplicativo cria a exibição imersiva e a coloca em primeiro plano imediatamente.If so, the app creates the immersive view and brings it to the foreground right away. O carregamento XAML é ignorado por 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.XAML loading is skipped for anything not necessary on Windows Mixed Reality devices, including any rendering classes and asset loading in the XAML view. Se o aplicativo estiver usando XAML para entrada de teclado, essa página de entrada ainda deverá ser criada.If the app is using XAML for keyboard input, that input page should still be created.
  • Caso contrário, o modo de exibição XAML pode prosseguir com os negócios como de costume.If not, the XAML view can proceed with business as usual.

Dica para renderizar elementos gráficos em ambas as exibiçõesTip for rendering graphics across both views

Se seu aplicativo precisar implementar alguma quantidade de renderização no DirectX para o modo de exibição XAML no Windows Mixed Reality, sua melhor aposta é criar um renderizador que possa funcionar com ambos os modos de exibição.If your app needs to implement some amount of rendering in DirectX for the XAML view in Windows Mixed Reality, your best bet is to create one renderer that can work with both views. O renderizador deve ser uma instância que possa ser acessada de ambos os modos de exibição e deve ser capaz de alternar entre a renderização 2D e Holographic.The renderer should be one instance that can be accessed from both views, and it should be able to switch between 2D and holographic rendering. Dessa forma, os ativos de GPU são carregados apenas uma vez – isso reduz os tempos de carregamento, o impacto de memória e a quantidade de recursos a serem trocados ao alternar as exibições.That way GPU assets are only loaded once - this reduces load times, memory impact, and the amount of resources to be swapped when switching views.