OpenXR™加载器-设计和操作
1.2.1概述
OpenXR是一个分层体系结构,由以下元素组成:
1)OpenXR应用程序
2)OpenXR加载程序
3)OpenXR API层
4)OpenXR运行时间
一般概念适用于Windows和Linux的系统的加载程序。
首先,让把OpenXR环境看作一个整体。OpenXR应用程序位于执行链的起点,并直接与OpenXR加载程序接口。加载程序反过来检测、加载任意数量的OpenXR运行时和API层,并与之交互。每个OpenXR运行时,都控制一个完整的VR/XR/MR系统,应用程序可以选择与之交互。加载器可以在应用程序和运行时之间,注入任意数量的可选API层,以增强行为。因此,任何OpenXR命令都可能涉及不同模块的执行代码,包括加载器、API层和运行时。
OpenXR加载程序的高级视图,如图1-16所示。
图1-16 OpenXR加载程序的高级视图
1.2.2. OpenXR调用链
当加载API层时,加载器将调用链链接在一起,该调用链包括该层选择的每个函数。在xrCreateInstance时,加载器初始化所有启用的API层,并为每个OpenXR命令创建调用链。结果调度表的每个条目,都指向该链的第一个元素。加载器为创建的XrInstance构建一个单独的调度表。
当应用程序调用OpenXR命令时,通常会先触发加载器中的跳转函数。这些跳转功能是小而简单的功能,可以跳到给定对象的相应调度表条目。有些函数还需要一个终结器的加载程序函数,在所有启用的API层后调用该函数,以便进入运行时前处理数据。
OpenXR调用链示例,如图1-17所示。
图1-17 OpenXR调用链示例
加载器仅允许单个未完成的XrInstance,并为所有OpenXR API接口的XrInstance生成的调度表使用。
当OpenXR应用程序选择使用从OpenXR加载器时,调用链就是以下模块之一(如果用户启用了两个API层),如图1-18所示。
图1-18 OpenXR两个API之间的调用链示例
特殊实例调用链用于多个地方,加载器必须在任何API层前后,但在调用启用的运行时前执行一些工作。此组的三个主要命令是xrCreateInstance、xrDestroyInstance和xrGetInstanceProcAddr。大多数命令不需要终止符,而是使用第二个调用链。