将 XAML 与全息 DirectX 应用配合使用

注意

本文与旧版 WinRT 原生 API 相关。 对于新的本机应用项目,建议使用 OpenXR API

本主题解释在 DirectX 应用中的 2D XAML 视图与沉浸式视图之间切换的影响,以及如何有效使用 XAML 视图和沉浸式视图。

XAML 视图切换概述

在 HoloLens 上,要显示 2D XAML 视图的沉浸式应用需要先初始化该 XAML 视图,然后立即从该视图切换到沉浸式视图。 XAML 将在应用可执行任何操作之前加载,这会略微增加启动时间。 XAML 将继续占用应用进程中的内存空间,同时仍保持在后台运行。 启动延迟和内存使用量取决于应用在切换到本机视图之前对 XAML 执行的操作。 如果一开始只是在 XAML 启动代码中启动沉浸式视图,而不执行其他任何操作,那么,影响是非常轻微的。 此外,由于全息渲染是直接对沉浸式视图执行的,因此可以避免这种渲染受到任何与 XAML 相关的限制。

CPU 和 GPU 的内存使用量非常重要。 Direct3D 11 可以交换虚拟显存,但它可能无法换出部分或所有 XAML GPU 资源,因此可能会对性能造成明显影响。 无论采用哪种方式,不加载任何你不需要的 XAML 功能都能为应用留出更多空间并提供更好的体验。

XAML 视图切换工作流

直接从 XAML 进入沉浸式模式的应用的工作流如下:

  • 应用在 2D XAML 视图中启动。
  • 应用的 XAML 启动序列检测当前系统是否支持全息渲染:
  • 如果支持,则应用会创建沉浸式视图并立即将其置于前台。 对于 Windows Mixed Reality 设备上不需要的任何内容,将跳过 XAML 加载,包括 XAML 视图中任何渲染类和资产的加载。 如果应用为键盘输入使用 XAML,则仍应创建该输入页面。
  • 否则,XAML 视图仍可照常用于业务。

有关跨两个视图渲染图形的提示

如果应用需要在 DirectX 中为 Windows Mixed Reality 中的 XAML 视图实现一定程度的渲染,则最好是创建一个可以处理这两种视图的渲染器。 该渲染器应是一个可以从两个视图访问的实例,并且应该在 2D 和全息渲染之间切换。 这样,GPU 资产只会加载一次,从而减少了加载时间、内存影响以及切换视图时交换的资源量。