将 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 资产只加载一次,从而减少了加载时间、内存影响,以及切换视图时交换的资源量。