3.API初始化

在使用OpenXR运行时之前,一个应用必须创建一个 XrInstance 对象来初始化它。
下面的函数对收集有关API layers和在系统上安装的扩展都非常的有用

创造实例的函数
  • xrEnumerateApiLayerProperties
  • xrEnumerateInstanceExtensionProperties
  • xrCreateInstance

xrEnumerateApiLayerProperties和xrEnumerateInstanceExtensionProperties 可在xrCreateInstance调用之前调用

3.1 导出函数

一个动态链接库(.dll 或者 .so)继承这个API装载器必须导出所有的OpenXR API 核心函数,然而,这个应用可以获取入口到扩展函数通过获取这些通过使用xrGetInstanceProcAddr收集指针

3.2 函数指针

所有的OpenXR函数指针可以被xrGetInstanceProcAddr函数收集到

XrResult xrGetInstanceProcAddr(
    XrInstance                                  instance,
    const char*                                 name,
    PFN_xrVoidFunction*                         function);
参数描述
  • instance是函数指针将与之兼容的实例,对于不依赖于任何实例的函数,instance为NULL。
  • name是要获取的函数的名称。
  • function是要获取的函数指针的地址。

xrGetInstanceProcAddr本身是以特定于平台和加载器的方式获得的.典型的是,加载程序库将此函数导出为函数符号,所以应用程序可以链接到加载程序库,或者动态加载它并使用特定于平台的api查找符号。Loaders必须为所有核心OpenXR函数导出函数符号.正因如此,只使用核心OpenXR函数的应用程序不需要使用xrGetInstanceProcAddr。

因为应用程序可以在创建实例之前调用XTargetInstanceProcadr,当实例参数为XR NULL HANDLE且name参数为以下字符串之一时,xrGetInstanceProcAddr返回有效的函数指针:

非必要实例
  • xrEnumerateInstanceExtensionProperties
  • xrEnumerateApiLayerProperties
  • xrCreateInstance

如果name不是上述字符串之一,并且instance是XR NULL HANDLE,那么xrGetInstanceProcAddr必须返回XR ERROR HANDLE INVALID。如果name不是上述字符串之一,并且instance无效但不是XR NULL HANDLE,那么xrGetInstanceProcAddr可能返回XR ERROR HANDLE INVALID。

如果实例是有效实例,并且名称中指定的字符串不是OpenXR核心或启用的扩展函数的名称,则xrGetInstanceProcAddr必须返回XR ERROR FUNCTION UNSUPPORTED。

如果name是扩展函数的名称,那么xrGetInstanceProcAddr返回的结果将取决于实例的创建方式。如果创建实例时相关扩展名出现在XrInstanceCreateInfo::enabledExtensionNames数组中,那么xrGetInstanceProcAddr将返回一个有效的函数指针。如果在创建实例的过程中,相关扩展名的名称没有出现在XrInstanceCreateInfo::enabledExtensionNames数组中,那么xrGetInstanceProcAddr将返回XR ERROR FUNCTION UNSUPPORTED。因此,使用一个XRINSTANCEPROCADDR返回的函数指针在与其他XrInstance相关的对象一起使用时可能无效。

返回的函数指针的类型为PFN xrVoidFunction,必须转换为所查询函数的类型。

下表定义了xrGetInstanceProcAddr的各种用例,并为每种情况定义了返回值(“fp”是“函数指针”)。

表3。xrGetInstanceProcAddr行为
|instance 参数|name参数|返回值|
|-------|-------|-------|
||NULL|undefined|
|invalid instance|
|undefined|
|NULL|xrEnumerateInstanceExtensionProperties|fp|
|NULL|xrEnumerateApiLayerProperties|fp|
|NULL|xrCreateInstance|fp|
|NULL|* (any name not covered above)|NULL|
|instance|core OpenXR function|fp1|
|instance|enabled extension function for instance|fp1|
|instance|* (any name not covered above)|NULL|

  1. 返回的函数指针只能用作为实例或实例子级的句柄(第一个参数)调用。
有效用法(隐式)
  • 如果实例不是XR NULL HANDLE,则实例必须是有效的XrInstance句柄
  • name必须是以null结尾的UTF-8字符串
  • function必须是指向PFN xrVoidFunction值的指针
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_VALIDATION_FAILURE
typedef void (XRAPI_PTR *PFN_xrVoidFunction)(void);
参数描述
  • Parameter Descriptions

PFN xrvoidfunction是由查询返回的泛型函数指针类型,特别是那些到xrGetInstanceProcAddr的查询。

4.实例

XR_DEFINE_HANDLE(XrInstance)

OpenXR实例是允许OpenXR应用程序与OpenXR运行时通信的对象。应用程序通过调用xrCreateInstance并接收结果XrInstance对象的句柄来完成此通信。

Xrinsity对象存储和跟踪OpenXR相关的应用程序状态,而不将任何此类状态存储在应用程序的全局地址空间中。这允许应用程序创建多个实例,并安全地封装应用程序的OpenXR状态,因为该对象对应用程序不透明。OpenXR运行时可能限制可能创建和使用的同时Xrinsity对象的数量,但它们必须支持每个进程至少创建和使用一个XrinsInstance对象。

在物理上,此状态可能存储在任何OpenXR加载程序、OpenXR API层或OpenXR运行时组件中。此保存状态的确切存储和分发取决于实现,除非本规范另有说明。

跟踪实例中的OpenXR状态可以简化API,从OpenXR函数的目标对象的最高上升点推断出预期的实例。例如:

myResult = xrEndFrame(mySession, &myEndFrameDescription);

XrSession对象是从XrInstance对象创建的。OpenXR加载程序通常会跟踪本例中XrSession对象的父对象XrInstance,并将函数定向到与该实例关联的运行时。这种对OpenXR对象的跟踪消除了在每个OpenXR函数中指定XrInstance的需要。

4.1. API Layers and Extensions

API层或扩展可以提供额外的功能。API层不能添加或修改OpenXR函数的定义,而扩展可以这样做。

要启用的API层集是在创建实例时指定的,这些API层能够截获分派给该实例或其任何子对象的任何函数。

示例API层可以包括(但不限于):

  • 用于转储openxrapi调用的API层
  • 执行OpenXR验证的API层

为了确定可用的API层集,OpenXR提供了xrEnumerateApiLayerProperties函数:

XrResult xrEnumerateApiLayerProperties(
    uint32_t                                    propertyCapacityInput,
    uint32_t*                                   propertyCountOutput,
    XrApiLayerProperties*                       properties);
参数描述
  • propertyCapacityInput是属性数组的容量,0表示检索所需容量的请求。
  • propertyCountOutput是指向已写入属性计数的指针,或者在propertyCapacityInput为0的情况下是指向所需容量的指针。
  • properties是指向XrApiLayerProperties结构数组的指针,但如果propertyCapacityInput为0,则可以为NULL。
  • 有关检索所需属性大小的详细说明,请参见“缓冲区大小参数”部分。

由于OpenXR运行时之外的操作,可用层列表可能随时发生更改,因此对具有相同参数的xrEnumerateApiLayerProperties的两个调用可能返回不同的结果,或检索不同的propertyCountOutput值或属性内容。

创建实例后,为该实例启用的层将在该实例的生存期内继续启用并有效,即使其中一些层对将来的实例不可用。

有效用法(隐式)
  • propertyCountOutput必须是指向uint32 值的指针
  • 如果propertyCapacityInput不是0,则属性必须是指向propertyCapacityInput XrApiLayerProperties结构数组的指针
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT

XrApiLayerProperties结构定义为:

typedef struct XrApiLayerProperties {
    XrStructureType    type;
    void*              next;
    char               layerName[XR_MAX_API_LAYER_NAME_SIZE];
    XrVersion          specVersion;
    uint32_t           layerVersion;
    char               description[XR_MAX_API_LAYER_DESCRIPTION_SIZE];
} XrApiLayerProperties;
成员描述
  • 类型是此结构的XrStructureType。
  • next是NULL或指向结构链中下一个结构的指针。在核心OpenXR中没有定义这样的结构。
  • layerName是一个字符串,指定API层的名称。在XrInstanceCreateInfo::enabledApiLayerNames数组中使用此名称可为实例启用此API层。
  • specVersion是API层被写入的API版本,编码如API版本号和语义部分所述。
  • layerVersion是此API层的版本。它是一个整数,随着向后兼容的更改而增加。
  • description是一个字符串,提供应用程序可以用来标识API层的其他详细信息。
有效用法(隐式)
  • 类型必须是XR type API LAYER PROPERTIES
  • next必须为NULL或指向结构链中下一个结构的有效指针

要启用层,在创建XRINSTANCEATEINFO时,应该将层的名称添加到XRINSTANCEATEINFO的enabledApiLayerNames成员中。

Loader实现可以提供此API之外的机制来启用特定API层。通过这种机制启用的API层是隐式启用的,而通过在XrInstanceCreateInfo::enabledApiLayerNames中包含API层名称启用的API层是显式启用的。除非另有规定,隐式启用和显式启用的API层仅在启用方式上有所不同。显式启用隐式启用的API层没有额外的效果。

实例扩展能够影响实例及其任何子对象的操作。如前所述,扩展可以扩展openxrapi并提供新函数或增强行为。

扩展的示例可以是(但不限于):

扩展示例
  • 包含OpenXR函数的扩展,用于使用新的图形API
  • 通过回调公开调试信息的扩展

应用程序可以通过调用xrEnumerateInstanceExtensionProperties来确定可用的实例扩展:

XrResult xrEnumerateInstanceExtensionProperties(
    const char*                                 layerName,
    uint32_t                                    propertyCapacityInput,
    uint32_t*                                   propertyCountOutput,
    XrExtensionProperties*                      properties);
参数描述
  • layerName为NULL或指向一个字符串的指针,该字符串命名要从中检索扩展的API层,由xrEnumerateApiLayerProperties返回。
  • propertyCapacityInput是属性数组的容量,0表示检索所需容量的请求。
  • propertyCountOutput是指向已写入属性计数的指针,或者在propertyCapacityInput为0的情况下是指向所需容量的指针。
  • properties是指向XrExtensionProperties结构数组的指针,但如果propertyCapacityInput为0,则可以为NULL。
  • 有关检索所需属性大小的详细说明,请参见“缓冲区大小参数”部分。

如果properties为NULL,则在propertyCountOutput中返回可用的扩展属性数。否则,propertyCountInput必须指向用户设置的变量,以指定properties数组中的元素数。如果propertyCountInput少于可用的扩展属性数,则属性的内容将是未定义的。如果propertyCountInput小于可用扩展的数量,则运行时必须返回失败代码XR ERROR SIZE infecture,并且属性的内容未定义。

因为在调用xrEnumerateInstanceExtensionProperties之间,可用层的列表可能会在外部发生变化,如果一个层名称在一个调用中可用,而在另一个调用中不可用,则两个调用可能检索不同的结果。层支持的扩展也可能在两个调用之间发生变化,例如,如果层实现在这些调用之间被不同的版本所替换。

有效用法(隐式)
  • 如果layerName不是NULL,则layerName必须是以NULL结尾的UTF-8字符串
  • propertyCountOutput必须是指向uint32值的指针
  • 如果propertyCapacityInput不是0,则属性必须是指向propertyCapacityInput XrExtensionProperties结构数组的指针
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_API_LAYER_NOT_PRESENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT

XrExtensionProperties结构定义为:

typedef struct XrExtensionProperties {
    XrStructureType    type;
    void*              next;
    char               extensionName[XR_MAX_EXTENSION_NAME_SIZE];
    uint32_t           extensionVersion;
} XrExtensionProperties;
成员解释
  • type是此结构的XrStructureType。
  • next是NULL或指向结构链中下一个结构的指针。在核心OpenXR中没有定义这样的结构。
  • extensionName是以NULL结尾的字符串,指定扩展名。
  • extensionVersion是此扩展的版本。它是一个整数,随着向后兼容的更改而递增。
有效用法(隐式)
  • type必须是XR type EXTENSION PROPERTIES
  • next必须为NULL或指向结构链中下一个结构的有效指针
实例生命周期

xrCreateInstance函数定义为:

XrResult xrCreateInstance(
    const XrInstanceCreateInfo*                 createInfo,
    XrInstance*                                 instance);
参数描述
  • createInfo指向控制实例创建的XrInstanceCreateInfo实例。
  • 实例指向一个Xrinsity句柄,在该句柄中返回结果实例。

xrCreateInstance创建Xrinsity,然后启用和初始化应用程序请求的全局API层和扩展。如果API层提供扩展,则必须在xrCreateInstance时间指定API层和扩展。如果找不到指定的API层,则不会创建Xrinsity,函数将返回XR ERROR API layer_NOT PRESENT。同样,如果找不到指定的扩展名,则调用必须返回XR_uerror extension_unot_PRESENT,并且不会创建xrinsity。此外,某些运行时可能会限制可能正在使用的并发实例的数量。如果应用程序试图创建多于运行时同时支持的实例,xrCreateInstance可能返回XR ERROR LIMIT。

如果xraplicationinfo::applicationName是空字符串,则运行时必须返回XR ERROR NAME INVALID。

如果XrInstanceCreateInfo结构包含目标平台以外的平台的特定于平台的扩展,则可能会返回XR ERROR INITIALIZATION FAILED。如果为目标平台定义了强制的特定于平台的扩展,但在XrInstanceCreateInfo中没有提供匹配的扩展结构,则运行时必须返回XR ERROR INITIALIZATION FAILED。

有效用法(隐式)
  • createInfo必须是指向有效XrInstanceCreateInfo结构的指针
  • instance必须是指向XrInstance句柄的指针
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INITIALIZATION_FAILED
  • XR_ERROR_API_VERSION_UNSUPPORTED
  • XR_ERROR_API_LAYER_NOT_PRESENT
  • XR_ERROR_EXTENSION_NOT_PRESENT
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_NAME_INVALID

XrInstanceCreateInfo结构定义为:

typedef struct XrInstanceCreateInfo {
    XrStructureType          type;
    const void*              next;
    XrInstanceCreateFlags    createFlags;
    XrApplicationInfo        applicationInfo;
    uint32_t                 enabledApiLayerCount;
    const char* const*       enabledApiLayerNames;
    uint32_t                 enabledExtensionCount;
    const char* const*       enabledExtensionNames;
} XrInstanceCreateInfo;
成员描述
  • type是此结构的XrStructureType。
  • next是NULL或指向结构链中下一个结构的指针。在核心OpenXR中没有定义这样的结构。
  • createFlags是XrInstanceCreateFlags的位掩码,用于标识应用于创建的选项。
  • applicationInfo是xraplicationinfo的一个实例。这些信息有助于运行时识别应用程序类固有的行为。xraplicationinfo的详细定义如下。
  • enabledApiLayerCount是要启用的全局API层数。
  • enabledApiLayerNames是指向enabledApiLayerCount字符串数组的指针,其中包含要为所创建实例启用的API层的名称。有关更多详细信息,请参阅API层和扩展部分。
  • enabledExtensionCount是要启用的全局扩展数。
  • enabledExtensionNames是指向包含要启用的扩展名的enabledExtensionCount字符串数组的指针。
有效用法(隐式)
  • type必须是XR type INSTANCE CREATE INFO
  • next必须为NULL或指向结构链中下一个结构的有效指针。另请参见:XrDebugUtilsMessengerCreateInfoEXT、XrInstanceCreateInfoAndroidKHR
  • createFlags必须为0
  • applicationInfo必须是有效的XrApplicationInfo结构
  • 如果enabledApiLayerCount不是0,那么enabledApiLayerNames必须是指向enabledApiLayerCount以null结尾的UTF-8字符串数组的指针
  • 如果enabledExtensionCount不是0,则enabledExtensionNames必须是指向enabledExtensionCount以null结尾的UTF-8字符串数组的指针

XrInstanceCreateFlags包括:

// Flag bits for XrInstanceCreateFlags

当前没有实例创建标志。这是为将来使用而保留的。

xraplicationinfo结构定义为:

typedef struct XrApplicationInfo {
    char         applicationName[XR_MAX_APPLICATION_NAME_SIZE];
    uint32_t     applicationVersion;
    char         engineName[XR_MAX_ENGINE_NAME_SIZE];
    uint32_t     engineVersion;
    XrVersion    apiVersion;
} XrApplicationInfo;
成员描述
  • applicationName是包含应用程序名称的非空字符串。
  • applicationVersion是一个无符号整数变量,包含开发人员提供的应用程序版本号。
  • engineName是一个字符串,包含用于创建应用程序的引擎(如果有)的名称。它可能为空,表示没有指定的发动机。
  • engineVersion是一个无符号整数变量,包含开发人员提供的用于创建应用程序的引擎版本号。可能为零表示没有指定的发动机。
  • apiVersion是应用程序将运行的API的版本,编码如API版本号和语义部分所述。如果运行时不支持请求的apiVersion,则必须返回XR ERROR API VERSION UNSUPPORTED。
有效用法(隐式)
  • applicationName必须是以null结尾的UTF-8字符串,其长度小于或等于XR MAX APPLICATION NAME SIZE
  • engineName必须是以null结尾的UTF-8字符串,其长度小于或等于XR_umax ENGINE NAME SIZE

注意

当使用OpenXRAPI实现将被许多应用程序使用的可重用引擎时,engineName应设置为标识引擎的唯一字符串,engineVersion应对引擎版本的表示进行编码。这样,共享此引擎版本的所有应用程序都将向运行时提供相同的engineName和engineVersion。然后,引擎应该允许单个应用程序选择其特定的应用程序名称和应用程序版本,从而使一个应用程序能够与另一个应用程序区分开来。

使用OpenXRAPI实现单个应用程序而不使用共享引擎时,输入engineName应保持为空,engineVersion应设置为0。然后,应用程序名称应填充一个唯一的字符串,该字符串标识应用程序,而applicationVersion应对应用程序版本的表示进行编码。

xrDestroyInstance函数定义为:

XrResult xrDestroyInstance(
    XrInstance                                  instance);

xrDestroyInstance函数用于销毁XrInstance。

参数描述
  • instance是要销毁的实例的句柄。

使用xrDestroyInstance销毁XrInstance句柄。当一个XrInstance被销毁时,作为该XrInstance子级的所有句柄也被销毁。

有效用法(隐式)
  • instance必须是有效的XrInstance句柄
线程安全性
  • 对实例和任何子句柄的访问必须在外部同步
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_HANDLE_INVALID
实例信息

xrGetInstanceProperties函数提供有关实例和关联运行时的信息。

XrResult xrGetInstanceProperties(
    XrInstance                                  instance,
    XrInstanceProperties*                       instanceProperties);
参数描述
  • instance是以前使用xrCreateInstance创建的XrInstance的句柄。
  • instanceProperties指向描述实例的XrInstanceProperties。

instanceProperties参数必须由运行时填写,以响应此调用,其中包含XrInstanceProperties中定义的信息。

有效用法(隐式)
  • instance必须是有效的XrInstance句柄
  • instanceProperties必须是指向XrInstanceProperties结构的指针
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_VALIDATION_FAILURE

XRINStanceProperty结构定义为:

typedef struct XrInstanceProperties {
    XrStructureType    type;
    void*              next;
    XrVersion          runtimeVersion;
    char               runtimeName[XR_MAX_RUNTIME_NAME_SIZE];
} XrInstanceProperties;
成员描述
  • type是此结构的XrStructureType。
  • next是NULL或指向结构链中下一个结构的指针。在核心OpenXR中没有定义这样的结构。
  • runtimeVersion是运行时的版本(不一定与OpenXR API版本相关),以XR MAKE version的格式表示。
  • runtimeName是运行时的名称。
有效用法(隐式)
  • type必须是XR type INSTANCE PROPERTIES
  • next必须为NULL或指向结构链中下一个结构的有效指针
创建平台特定实例

实例创建所需的一些数据是通过扩展中定义的链式结构公开的。在特定平台上创建实例时,这些结构可能是可选的,甚至是必需的,但在其他平台上则不是。将特定于平台的功能分离到扩展结构中,可以防止主XrInstanceCreateInfo结构因不必要的信息而变得过于臃肿。

有关可用扩展及其相关结构的列表,请参见附录中的扩展列表。这些结构使用XrInstanceCreateInfo::next成员展开XrInstanceCreateInfo父结构。可用于扩展XrInstanceCreateInfo::next的结构的特定列表可以在紧跟在结构定义之后的“Valid Usage(Implicit)”块中找到。

实例丢失错误

XR ERROR INSTANCE LOST ERROR表示XrInstance已不可用。如果关键运行时进程中止,与运行时的连接不再可用,或者运行时在任何函数执行过程中遇到错误,使其无法支持进一步的函数执行,则可能发生这种情况。一旦XR ERROR INSTANCE LOST第一次返回,此后必须由所有涉及XrInstance或子句柄类型的非销毁函数返回,直到实例被销毁。应用程序必须销毁XrInstance。然后,应用程序可以尝试通过重新创建所有相关的OpenXR对象来继续,从一个新的XrInstance开始。当检测到实例丢失时,运行时可能会生成XrEventDataInstanceLossPending事件。

XrEventDataInstanceLossPending
typedef struct XrEventDataInstanceLossPending {
    XrStructureType    type;
    const void*        next;
    XrTime             lossTime;
} XrEventDataInstanceLossPending;

接收到XrEventDataInstanceLossPending事件结构表示应用程序将在将来的指定lossTime丢失指定的XrInstance。应用程序应该调用xrDestroyInstance并放弃任何实例特定的资源。这通常是为了给底层运行时的替换让路,比如通过软件更新。

在应用程序销毁其所有实例及其子实例并等待超过指定时间后,它可以在循环中重新尝试xrCreateInstance,等待运行时执行的任何维护完成。只要运行时无法创建实例,它就会从xrCreateInstance返回XR ERROR INSTANCE LOST。一旦运行时返回并能够继续,如果传入了有效数据,则必须从xrCreateInstance恢复返回XR琰SUCCESS。

成员描述
  • type是此结构的XrStructureType。
  • next是NULL或指向结构链中下一个结构的指针。在核心OpenXR中没有定义这样的结构。
  • lossTime是指定实例将被视为丢失和不可用的绝对时间。
有效用法(隐式)
  • type必须为XR_type EVENT DATA INSTANCE LOSS PENDING
  • next必须为NULL或指向结构链中下一个结构的有效指针
实例枚举类型字符串函数

应用程序通常希望将运行时中的某些枚举值转换为字符串,以便在日志消息中使用、在UI中本地化或出于各种其他原因。OpenXR提供了将常见枚举类型转换为UTF-8字符串以在应用程序中使用的函数。

XrResult xrResultToString(
    XrInstance                                  instance,
    XrResult                                    value,
    char                                        buffer[XR_MAX_RESULT_STRING_SIZE]);
参数描述
  • instance是请求字符串的实例的句柄。
  • value是要转换为字符串的XrResult值。
  • buffer是用于返回中的字符串的缓冲区。

以UTF-8字符串形式返回所提供XrResult值的文本版本。
在所有情况下,返回的字符串都必须是以下之一:

结果字符串返回值
  • 为核心规范或扩展中的提供数值定义的文本字符串。(例如,值0导致字符串XR SUCCESS)
  • XR UNKNOWN SUCCESS 与以十进制数表示的正结果数串联。
  • XR UNKNOWN FAILURE 与以十进制数表示的负结果数串联。
有效使用(隐式)
  • instance必须是有效的XrInstance句柄
  • value必须是有效的XrResult值
  • buffer必须是长度为XR MAX RESULT STRING SIZE的字符数组
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_VALIDATION_FAILURE

xrStructureTypeToString函数定义为:

XrResult xrStructureTypeToString(
    XrInstance                                  instance,
    XrStructureType                             value,
    char                                        buffer[XR_MAX_STRUCTURE_NAME_SIZE]);
参数描述
  • instance是请求字符串的实例的句柄。
  • value是要转换为字符串的XrStructureType值。
  • buffer是用于返回中的字符串的缓冲区。

以UTF-8字符串形式返回所提供XrStructureType值的文本版本。
在所有情况下,返回的字符串都必须是以下之一:

结构类型字符串返回值
  • 为核心规范或扩展中的提供数值定义的文本字符串。(例如,XR TYPE INSTANCE CREATE INFO的值会导致字符串XR TYPE INSTANCE CREATE INFO)
  • XR UNKNOWN STRUCTURE TYPE与表示为十进制数的结构类型编号串联。
有效用法(隐式)
  • instance必须是有效的XrInstance句柄
  • value必须是有效的XrStructureType值
  • buffer必须是长度为XR MAX STRUCTURE NAME SIZE的字符数组
返回码

成功

  • XR_SUCCESS
    失败
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_VALIDATION_FAILURE
打赏
支付宝 微信
上一篇 下一篇