Uso de XAML con aplicaciones de DirectX holográficasUsing XAML with holographic DirectX apps

Nota

Este artículo está relacionado con las API nativas de WinRT heredadas.This article relates to the legacy WinRT native APIs. En el caso de los nuevos proyectos de aplicaciones nativas, se recomienda usar la API de OpenXR.For new native app projects, we recommend using the OpenXR API.

En este tema se explica el impacto del cambio entre las vistas XAML 2D y las vistas de envolvente en la aplicación DirectX y cómo hacer un uso eficaz de una vista XAML y una vista envolvente.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.

Información general sobre el cambio de vista XAMLXAML view switching overview

En HoloLens, una aplicación envolvente que puede mostrar más adelante una vista XAML 2D debe inicializar esa vista XAML primero y cambiar inmediatamente a una vista envolvente desde allí.On HoloLens, an immersive app that may later display a 2D XAML view needs to initialize that XAML view first and immediately switch to an immersive view from there. XAML se cargará antes de que la aplicación pueda hacer nada, lo que agrega un pequeño aumento en el tiempo de inicio.XAML will load before your app can do anything, which adds a small increase to your startup time. XAML seguirá ocupando espacio en la memoria en el proceso de la aplicación mientras se mantiene en segundo plano.XAML will continue to occupy memory space in your app process while it stays in the background. La cantidad de retraso de inicio y el uso de memoria depende de lo que hace la aplicación con XAML antes de cambiar a la vista nativa.The amount of startup delay and memory usage depends on what your app does with XAML before switching to the native view. Si no hace nada en el código de inicio XAML en primer lugar, excepto iniciar la vista envolvente, el impacto debe ser menor.If you do nothing in your XAML startup code at first except start your immersive view, the impact should be minor. Además, dado que la representación holográfica se realiza directamente en la vista envolvente, evitará las restricciones relacionadas con XAML en esa representación.Also, because your holographic rendering is done directly to the immersive view, you'll avoid any XAML-related restrictions on that rendering.

Los recuentos de uso de memoria para CPU y GPU.The memory usage counts for both CPU and GPU. Direct3D 11 puede intercambiar la memoria de los gráficos virtuales, pero es posible que no pueda intercambiar algunos o todos los recursos de GPU de XAML, y puede haber un descenso significativo en el rendimiento.Direct3D 11 can 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. En cualquier caso, si no se cargan las características de XAML que no necesite, dejará más espacio para la aplicación y proporcionará una mejor experiencia.Either way, not loading any XAML features you don't need will leave more room for your app and provide a better experience.

Flujo de trabajo de cambio de vista XAMLXAML view switching workflow

El flujo de trabajo de una aplicación que va directamente desde XAML al modo inmersivo es como el siguiente:The workflow for an app that goes directly from XAML to immersive mode is like so:

  • La aplicación se inicia en la vista XAML 2D.The app starts up in the 2D XAML view.
  • La secuencia de inicio de XAML de la aplicación detecta si el sistema actual admite la representación holográfica:The app’s XAML startup sequence detects if the current system supports holographic rendering:
  • Si es así, la aplicación crea la vista envolvente y la pone en primer plano de forma inmediata.If so, the app creates the immersive view and brings it to the foreground right away. La carga de XAML se omite para cualquier elemento que no sea necesario en dispositivos de Windows Mixed Reality, incluidas las clases de representación y la carga de recursos en la vista 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. Si la aplicación usa XAML para la entrada de teclado, la página de entrada se debe crear.If the app is using XAML for keyboard input, that input page should still be created.
  • Si no es así, la vista XAML puede continuar con la empresa como de costumbre.If not, the XAML view can continue with business as usual.

Sugerencia para representar gráficos en ambas vistasTip for rendering graphics across both views

Si la aplicación necesita implementar una cantidad de representación en DirectX para la vista XAML en Windows Mixed Reality, la mejor opción es crear un representador que pueda funcionar con ambas vistas.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. El representador debe ser una instancia a la que se pueda tener acceso desde ambas vistas y debe cambiar entre la representación 2D y holográfica.The renderer should be one instance that can be accessed from both views, and it should switch between 2D and holographic rendering. De esta forma, los recursos de GPU solo se cargan una vez, lo que reduce los tiempos de carga, el impacto en la memoria y la cantidad de recursos intercambiados al cambiar de vista.This way GPU assets only load once, which reduces load times, memory impact, and the amount of swapped resources when switching views.