3.API 初始化
3.1 Exported Functions
实现API loader的动态链接库(so/dll)必须export all core OpenXR API functions。然而application可以通过使用xrGetInstanceProcAddr()来获取指向extension函数的指针。
3.2 Function Pointers
OpenXR所有函数的指针都可以通过函数xrGetInstanceProcAddr()得到。
XrResult xrGetInstanceProcAddr(
XrInstance instance,
const char* name,
PFN_xrVoidFunction* function);
- instance: XrInstance类型,可以是NULL,也可以是任何有效的instance;
- name:待获取fp的函数名称;
- function:返回的函数指针fp。
Loader必须导出所有OpenXR核心函数的函数符号,这样application就可以不用使用xrGetInsanceProcAddr()来使用OpenXR core functions。
xrGetInstanceProcAddr的参数instance和name不同,返回的值也是不同,参考下表。
instance parameter | name parameter | return value |
---|---|---|
* |
| undefined |
invalid instance | * | undefined |
| fp | |
| fp | |
| fp | |
| * (any |
|
instance | core OpenXR function | fp1 |
instance | enabled extension function for | fp1 |
instance | * (any |
|
- 当参数instance是NULL时,但是name是xrEnumerateInstanceExtensionProperties/ xrEnumerateApiLayerProperties/ xrCreateInstance中任意一个,则返回对应name的函数fp。
- 当instance是有效的对象时,如果name是core OpenXR function或者使能的扩展层extension的function,则会返回对应name的函数fp。
- 如果name是不存在的函数名称,无论instance是否有效,都会返回NULL。
3.3 Runtime interface Negotiation
待完成