高通 OpenXR SDK 使用指南(3)

281 篇文章 30 订阅

高通 OpenXR SDK 使用指南(3)

2 SXR SDK 与 OpenXR 比较

2.1 SXR SDK 到 OpenXR API 映射

General

SVR SDKOpenXRNotes OpenXR
sxrGetVersion()xrEnumerateApiLayerProperties() xrGetInstanceProperties()应用程序可以通过调用 xrEnumerateApiLayerProperties 函数获取可用 API 层列表来确定它们可用的 API 层。 然后,应用程序可以从此列表中选择所需的 API 层,并在创建实例时将它们提供给 xrCreateInstance 函数。
svrGetVrServiceVersion()不适用
svrGetVrClientVersion()不适用
svrInitialize()xrCreateInstance()xrCreateInstance 创建 XrInstance,然后启用并初始化应用程序请求的全局 API 层和扩展。 必须在 xrCreateInstance() 期间创建 SVR 服务客户端才能查询系统和视图属性。
sxrShutdown()xrDestroyInstance()销毁 XrInstance 并取消初始化对象
svrGetDeviceInfo()不适用
不适用xrGetSystem()系统代表运行时中相关设备的集合,通常由多个单独的硬件组件组成,这些组件协同工作以实现 XR 体验。 XrSystemId 由 xrGetSystem 返回,表示运行时将用于支持给定外形规格的设备系统。 每个系统可能包括 VR/AR 显示器、各种形式的输入(游戏板、触摸板、运动控制器)和其他可跟踪对象。
不适用xrGetSystemProperties()应用程序可以调用 xrGetSystemProperties 来检索有关系统的信息,例如供应商 ID、系统名称以及图形和跟踪属性。
svrBeginVr()不适用
svrEndVr()不适用

loader

SVR SDKOpenXRNotes OpenXR
不适用xrEnumerateApiLayerProperties()提供XrApiLayerProperties结构体,描述API层的详细信息,如描述、版本号等。
xrEnumerateInstanceExtensionProperties()提供扩展详细信息,例如扩展名称和规范
xrGetInstanceProcAddr()调用以获取加载程序函数的 OpenXR 函数指针

Predicted Display Times

SVR SDKOpenXRNotes OpenXR
svrGetPredictedDisplayTime()xrWaitFrame()PredictedDisplayTime 是下一个应用程序生成的帧的预期显示 XrTime。 它在 OpenXR 的 xrWaitFrame() 函数中处理。
svrGetPredictedDisplayTimePipelined()xrWaitFrame()PredictedDisplayTime 是下一个应用程序生成的帧的预期显示 XrTime。
PredictedDisplayPeriod 是下一个应用程序生成的帧的显示周期的 XrDuration,用于预测超出下一个帧的显示时间。 它在 OpenXR 的 xrWaitFrame() 函数中处理。

Head tracking

SVR SDKOpenXRNotes OpenXR
svrGetPredictedHeadPose()xrLocateSpace()OpenXR 定义了一组众所周知的参考空间,应用程序使用这些空间来引导其空间推理。 这些参考空间是 VIEW、LOCAL 和 STAGE。 xrLocateSpace 在指定时间提供空间在基础空间中的物理位置(如果运行时当前已知)。一些设备在使用时会提高他们对世界的理解。 xrLocateSpace 在后面的帧中返回的位置可能会随着时间而改变,即使对于跟踪静态对象的空间也是如此,因为目标空间或基础空间会调整其原点。应用程序使用 xrLocateSpace 函数在给定的历史或预测时间找到基本 XrSpace 中 XrSpace 原点的姿态。 如果应用程序想知道空间原点的速度,它可以在调用 xrLocateSpace 函数时将 XrSpaceVelocity 结构链接到 XrSpaceLocation 结构的下一个指针。 应用程序应检查输出 XrSpaceLocationFlagBits 和 XrSpaceVelocityFlagBits 以确定位置组件的有效性和跟踪状态。
svrGetHistoricHeadPose()xrLocateSpace()应用调用此函数获取头部姿势
svrRecenterPose()OpenXR 调用者可以更新 XrSpace 发布到阶段转换
svrRecenterPosition()OpenXR 调用者可以更新 XrSpace 发布到阶段转换
svrRecenterOrientation()OpenXR 调用者可以更新 XrSpace 发布到阶段转换
svrGetSupportedTrackingModes()xrGetSystemProperties()函数调用 XrSystemTrackingProperties 以获取跟踪属性详细信息
svrSetTrackingMode()不适用

Asynchronous event processing

SVR SDKOpenXRNotes OpenXR
svrPollEvent()xrPollEvent()这些事件放在队列中,应用程序必须定期从队列中读取。 通过 xrPollEvent 一次一个地从队列中读取事件。 每个事件都由一个单独的结构标识,每个结构都以 XrEventDataBaseHeader 开头

Rendering

SVR SDKOpenXRNotes OpenXR
svrBeginEye()不适用
svrEndEye()不适用
xrWaitFrame()如果提交给 xrEndFrame 的帧在其目标显示时间之前被合成器使用,则对 xrWaitFrame 的后续调用必须阻止调用方,直到在运行时确定的帧目标显示时间之后的下一个渲染间隔开始。运行时最早从 xrWaitFrame 返回是在它确定应用程序应该开始绘制下一帧时。xrWaitFrame 必须可从任何线程调用,包括调用 xrBeginFrame/xrEndFrame 的不同线程。 调用 xrWaitFrame 必须由应用程序进行外部同步。 并发调用可能会导致未定义的行为。如果应用程序应正常渲染其图层并将其提交给 xrEndFrame,则 shouldRender 为 XR_TRUE。 当此值为 XR_FALSE 时,应用程序应尽可能避免繁重的 GPU 工作,例如跳过层渲染,然后在调用 xrEndFrame 时忽略这些层。对于 shouldRender 为 XR_FALSE 的任何帧,应用程序应避免为该帧进行繁重的 GPU 工作,例如不渲染其层。 这通常发生在应用程序进入或退出正在运行的会话时,或者当某些系统 UI 目前完全覆盖应用程序时。 只要会话在运行,应用程序就应该继续运行帧循环以保持帧与运行时同步,即使这需要调用 xrEndFrame 并省略所有层。
xrBeginFrame()应用程序应该在为给定帧执行任何图形设备工作之前立即调用 xrBeginFrame,而不是在之后调用它。 运行时必须只组合其 xrBeginFrame 和 xrEndFrame 都返回成功代码的帧。 虽然不需要在同一线程上调用 xrBeginFrame 和 xrEndFrame,但如果在不同的线程上调用它们,应用程序必须处理同步。
svrSubmitFrame()xrEndFrame()应用程序可以调用 xrEndFrame 而无需调用 xrReleaseSwapchainImage 自上次调用 xrEndFrame 以获取传递给 xrEndFrame 的任何交换链。
svrSetWarpMesh()不适用
svrGetOcclusionMesh()不适用
xrEnumerateViewConfigurations()VR 服务需要枚举和配置 XR 查看器。 因此,VR 服务必须正在运行才能将此信息返回给 OpenXR 运行时。
xrCreateSwapchainAndroidSurfaceKHR()xrCreateSwapchainAndroidSurfaceKHR 创建一个在 swapchain 中返回的 XrSwapchain 对象和一个在 surface 中返回的 Android Surface jobject。 jobject 必须有效才能使用 JNI 传回 Java 代码,并且必须有效才能与普通 Android API 一起使用以将图像提交到表面。
xrEnumerateSwapchainImages()交换链图像按索引获取、等待和释放,但交换链中图像的数量是实现定义的。此外,渲染图像需要访问正在使用的图形 API 的底层图像原语。 应用程序可以在交换链创建后随时查询和缓存图像。
xrLocateViews()应用程序使用 xrLocateViews 来检索呈现 xrEnumerateViewConfigurationViews 返回的每个合成视图所需的查看器姿势和投影参数。当一个或两个空间都在跟踪动态对象时,将更新的时间传递给 xrLocateSpace 每帧将导致更新的相对姿势。

Controllers

SVR SDKOpenXRNotes OpenXR
svrControllerStartTracking()xrCreateAction(), xrCreateActionSpace()所有控制器工作对于 OpenXR 都是新的。 将尽可能利用 VR SDK。
svrControllerStopTracking()xrDestroySpace(), xrDestroyAction()
xrSyncActions()xrSyncActions 更新输入操作的当前状态。 后续同步调用之间的重复输入操作状态查询必须返回相同的值。
svrControllerGetState()xrLocateSpace(), xrGetActionStatePose(),xrGetActionStateBoolean,Vector1f,Vector2f()
svrControllerSendMessage()不适用
svrControllerQuery()不适用
xrCreateActionSpace()根据选定的姿势动作创建 XrSpace 句柄。 应用程序可以提供一个 XrPose 来定义新空间原点在动作空间的自然参考框架内的位置和方向。
xrDestroySpace()
xrCreateAction()在检索动作数据、创建动作空间或发送触觉事件时,动作句柄用于指代单个动作。
xrCreateActionSet()它返回动作集实例。 动作集是应用程序定义的动作集合。 它们通过 xrAttachSessionActionSets 调用附加到给定的 XrSession。 它们由应用程序根据当前应用程序上下文通过 xrSyncActions 启用或禁用。 例如,游戏可能有一组动作用于控制角色,另一组动作用于导航菜单系统。 当这些操作被分组到两个 XrActionSet 句柄中时,可以使用单个函数调用有选择地启用和禁用它们。
xrDestroyAction()
xrDestroyActionSet()
xrApplyHapticFeedback()使用 xrApplyHapticFeedback 函数将触觉反馈发送到设备。 hapticEvent 指向支持的事件结构。 所有事件结构的共同点是第一个元素是 XrHapticBaseHeader,可用于确定触觉事件的类型。
xrStopHapticFeedback()使用 xrStopHapticFeedback 函数可以立即停止触觉反馈。
xrSuggestInteractionProfileBindings()xrSuggestInteractionProfileBindings 设置应用程序可以为其提供默认绑定的交互配置文件。 应用程序可以针对它支持的每个交互配置文件调用一次 xrSuggestInteractionProfileBindings。

Boundary System

SVR SDKOpenXRNotes OpenXR
svrIsBoundarySystemEnabled不适用
svrEnableBoundarySystem()不适用
svrForceDisplayBoundarySystem()不适用
svrSetBoundaryParameters()不适用
svrGetBoundaryParameters()不适用

Coordinate Systems

SVR SDKOpenXRNotes OpenXR
xrCreateReferenceSpace()SXR OpenXR 实现将使用 6DoF 跟踪模式(如果可用)。 客户可以选择使用姿势中的方向和/或平移值
xrDestroySpace()
svrGetPredictedDisplayTime()xrLocateSpace()xrLocateSpace 返回当前、过去和未来的预测姿势。
xrEnumerateReferenceSpaces()可用的引用空间类型由 xrEnumerateReferenceSpaces 指示。 请注意,也可以创建其他空间,例如由 xrCreateActionSpace 创建的姿势动作空间,该 API 未枚举这些空间。
xrGetReferenceSpaceBoundsRect()调用时,xrGetReferenceSpaceBoundsRect 应返回没有障碍物的矩形范围,直至地面,允许用户在保持跟踪的同时自由移动(如果该参考空间可用)。 并非所有系统或空间都支持边界。 如果运行时无法为给定空间提供边界,XR_SPACE_BOUNDS_UNAVAILABLE 将被返回并且边界的所有字段将被设置为 0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值