高通 OpenXR SDK 使用指南(2)
- 1.5 OpenXR 生命周期
1.5 OpenXR 生命周期
下图是 OpenXR 框架生命周期的流转过程。
此图中描述了以下过程:
- 应用程序首先使用 xrEnumerateApiLayerProperties 查询 API 层和扩展属性。 API层可以是以下类型:
- Validation – OpenXR API validation
- Debug – Debug facility present
- Tracing
- Profiling layer
- 应用程序选择所需的 API 层并向 xrCreateInstance 提供详细信息(API 层计数和 API 层的名称)。
- 应用程序使用 xrEnumerateExtensionProperties 查询/枚举支持的扩展及其属性。
- 在获得计数和扩展名称后,应用程序决定使用哪个扩展并将这些详细信息传递给 xrCreateInstance。
下图显示了 API 层和扩展枚举。
-
接下来,应用程序决定使用哪个 API 和哪个扩展。 一旦应用程序决定了扩展,它就会使用 xrCreateInstance 来创建 XrInstance。
-
然后应用程序启用并初始化应用程序请求的全局 API 层和扩展。 XrInstance 是应用程序对 OpenXR 运行时的表示。 如果运行时支持,它可以创建多个 XrInstance。 xrCreateInstance 指定应用程序信息、API 层和扩展。
注意:必须在 xrCreateInstance 期间创建 SVR 服务客户端才能查询系统和查看属性。
下图显示了运行时的实例创建。
-
基于默认的运行时设置,适当的运行时由加载器加载。下图展示了应用层如何调用xrCreateInstance,xrCreateInstance又调用runtime的XrInstance,通过xrGetInstanceProperties查询实例的所有属性。
-
接下来,运行时实例应用程序查询设备属性。 OpenXR 将物理设备分组为与逻辑系统相关的设备。 XrSystem(在运行时,xrGetSystem 的应用程序表示)表示应用程序选择使用的一组设备(例如,HMD 和控制器)。 XrSystem 可能有显示、输入、跟踪等。
-
xrGetSystem 返回要使用的外形规格类型。 QVR 服务客户端通过 QVRServiceClient_GetVRMode 函数提供所有详细信息。 下图显示了获取系统属性的流程。
目前定义了两种类型的外形规格 (XrFormFactors):
- XR_FORM_FACTOR_HANDHELD_DISPLAY
- XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY
还有两种类型的视图配置(XrViewConfigurations):
- XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO
- XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO
以下是外形规格和视图配置的示例组合。
获取系统详细信息后,以下 API 用于确定支持哪些视图配置:
- xrEnumerateViewConfigurations()
- xrGetViewConfigurationProperties()
- xrEnumerateViewconfigurationViews()-返回视图的推荐和最大高度和宽度
- xrEnumerateEnvironmentalBledModes()
-
接下来,设备创建合成器会话。 它使用 xrCreateSession 初始化并提交左右镜头的畸变网格,并进入 Idle 状态。
-
一旦状态更改为 XR_SESSION_STATE_READY,就可以使用 xrBeginSession() 调用会话。
-
创建会话后,下一步是等待帧暂停或恢复合成。 在调用结束会话之前,会话一直处于活动状态。 要结束会话(注销图层图像并结束会话),应用程序需要调用 xrEndSession()。
在一个会话中,姿势的获取、交换链的分配和释放、变形和显示更新在一个循环中发生,如下图所示。