SXR

news/2024/10/29 23:25:59/

sxrApi.h

  • svrApiCore
  • QvrServiceClient

svrApiCore

  1. qvrClientStatusCallback:
    client状态回调(kEventSensorError),在sxrInitialize()的时候通过调用QVRServiceClient_SetClientStatusCallback()方法传入

  2. qvrClientThermalNotificationCallback
    温度通知回调(kEventThermal),在sxrBeginVr中设置QVRServiceClient_RegisterForNotification()

  3. svrNotifyFailedQvrService
    不支持VRmode的时候,通过调用SxrApi.java层的方法NotifyNoVr弹出dialog通知用户
    sxrInitialize()中调用

  4. svrGetAndroidOSVersion
    c层读取系统属性

  5. sxrSetPerformanceLevelsInternal
    设置cpu、gpu level
    QVRServiceClient_SetOperatingLevel()
    QVRServiceClient_SetThreadAttributesByType()

  6. L_SetThreadPriority
    设置线程策略和优先级
    QVRServiceClient_SetThreadPriority

  7. sxrInitialize
    主要以填充SvrAppContext成员变量为主线逻辑
    looper、 javaVm、 javaEnv、 javaActivityObject
    初始化GL扩展相关(Initialize render extensions)
    加载SvrApi.java,通过NativeActivity的ClassLoading来加载SvrApi.java类
    动态注册JNI
    缓存startVsync,stopVsync的methodid
    填充sxrDeviceInfo(刷新率,display的宽高,显示orientation,osversion)
    创建qvrHelper(QVRServiceClient_Create)
    创建svrServiceClient并绑定svrService服务,设置qvrClientStatusCallback
    Tracking mode
    Load SVR configuration options
    VR Casting(调用java层的 presentation show方法)
    VsyncCallback or LinePtr
    Set other device info
    Frustum(left, right)
    Foveation Parameters
    Tracking Camera
    Warp mesh type
    打印一些有用log

  8. sxrShutdown
    gAppContext->svrServiceClient
    gAppContext->qvrHelper
    gAppContext

  9. svrCreatePresentationContextFromNativeWindow
    EGL创建流程

  10. sxrDestroyPresentationContextFromNativeWindow
    EGL销毁流程

  11. sxrPresentationThreadMain
    sxr 投屏的主流程入口
    开启独立的一个线程来处理投屏
    获取tid,设置线程属性,fifo,affinity等
    开启循环,等待有提交的投屏帧,如果新帧小于等于处理过的帧,wait等待,拿到新帧后
    调用SxrPresentationProcessFrame()去处理新帧

  12. SxrPresentationProcessFrame

  13. 处理投屏帧, FBO
    
  14. glBlitFramebuffer-》glBindFramebuffer-》eglSwapBuffers
    
  15. sxrBeginPresentation

  16. 开启svr投屏线程,创建线程、设置线程相关属性,开启线程。
    
  17. sxrBeginXr
    判断Motion Vector
    初始化HeuristicPredict相关属性
    getVRmode来确保当前是在stopped状态
    设置tracking mode(app resume的时候每次要设置)
    创建ModeContext并初始化成员(tid、colorspace、vsync相关、surface,frameparam等)
    Start Vsync monitoring(QVRServiceClient_SetDisplayInterruptConfig vsync,lineptr、Choreographer)
    通知QvrService开启VRMode:QVRServiceClient_StartVRMode
    检查VRmode,检查TrackingMode
    获取Ring Buffer Descriptor
    获取Param(QVRSERVICE_TRACKER_ANDROID_OFFSET_NS、QVRSERVICE_SERVICE_VERSION、QVRSERVICE_CLIENT_VERSION)
    注册过热通知:Enable thermal notifications
    设置线程属性:QVRServiceClient_SetThreadAttributesByType
    设置cpu/gpu 性能:sxrSetPerformanceLevels
    QVRServiceClient_SetDisplayInterruptCapture
    开启timewarp:svrBeginTimeWarp
    开启投屏:sxrBeginPresentation
    开启debugserver:svrStartDebugServer
    Controller Manager
    Queue提交event:kEventVrModeStarted && kEventThermal

  18. sxrEndXr

  1. sxrGetEyePose. 获取眼动追踪姿态 QVRServiceClient_GetEyeTrackingData

QvrServiceClient

  • Client APIs to communicate with QVRService. Typical call flow is as follows:
    1. Create QVRServiceClient object
    1. Call GetVRMode() to verify VR mode is supported and in the STOPPED state
    1. Call RegisterForNotification() to get notified of events
    1. Call GetTrackingMode()/SetTrackinMode() to configure tracking
    1. Call SetDisplayInterruptConfig() to handle display interrupts
    1. Call StartVRMode() to start VR mode
  •   - Handle display interrupt events
    
  •   - Call GetHeadTrackingData() to read latest tracking data
    
    1. Call StopVRMode() when to end VR mode
    1. Delete QVRServiceClient object

http://www.ppmy.cn/news/155026.html

相关文章

秒懂百科 | 什么是点云?

以下文章来源于天宝Trimble Geospatial 点云是一个数据集,数据集中的每个点代表一组X、Y、Z几何坐标和一个强度值,这个强度值根据物体表面反射率记录返回信号的强度。当这些点组合在一起时,就会形成一个点云,即空间中代表3D形状或…

Quasar中q-select中的事件触发

前提&#xff1a;项目是quasar结合vue3.0进行开发。 要实现q-select中改变下拉框选项触发函数&#xff0c;查看Quasar v2文档可以发现,使用 update:model-value“”即可. 项目中代码&效果如下&#xff1a; <q-selectstyle"width:180px"class"my-sele…

联想微型计算机怎么拆开图解,Lenovo(Ideapad)笔记本如何拆卸及安装电池

目前采用外置电池设计的机型多见于联想扬天、昭阳等商用笔记本及部分非超薄设计的电脑上&#xff0c;如下图为扬天B41-35笔记本背面电池锁扣示意图&#xff1a; 外置电池拆装方法&#xff1a; 1、辨识手动锁扣与弹簧式锁扣 目前销售的Lenovo笔记本电脑若为外置电池&#xff0c;…

永磁同步电机d-q轴电压方程中耦合项的正负号问题

永磁同步电机d-q轴电压方程中耦合项的正负号问题 永磁同步电机的电压方程&#xff1a; 我们来讨论下&#xff0c;在d-q轴电压方程中&#xff0c;为什么在d轴上&#xff0c;q轴的耦合项是负的&#xff0c;而在q轴上&#xff0c;d轴的耦合项是正的&#xff1f; 首先说明一个问…

强化学习实战-使用Q-learning算法解决迷宫问题

Q-learning简介 Q-learning也是采用Q表格的方式存储Q值&#xff08;状态动作价值&#xff09;&#xff0c;决策部分与Sarsa是一样的&#xff0c;采用ε-greedy方式增加探索。Q-learning跟Sarsa不一样的地方是更新Q表格的方式。Sarsa是on-policy的更新方式&#xff0c;先做出动…

用C语言画一个Q版奥特曼

有一天原本平静的村庄突然受到不明寄生生命体的袭击&#xff01;“快逃&#xff01;”“可是……” 快找出怪兽玛格尼亚的弱点&#xff0c;欢迎收看迪迦奥特曼的下集大雾来了。 今天分享一个用C语言画Q版奥特曼的源码~ 用到的是easyx图形库绘图功能&#xff0c;所以需要下载安…

基于q_learning的flappy bird AI

基于q_learning的flappy bird AI 思路来自于这篇文章&#xff1a;机器学习玩转Flappy Bird全书&#xff1a;六大“流派”从原理到代码 有两种思路&#xff0c;一种是单步更新q values&#xff0c;一种是全局更新q values。单步更新就是最基础的q learning算法&#xff0c;在a…

华为HCIP RS题库221 171-180题

Q171 OSPF 划分区域的边界在路由器上。 A.TRUE B.FALSE Answer:A Q172 在 IS-IS 的广播网络中&#xff0c;Level-2 路由器使用哪个组播 MAC 地址作为发送 IIH 的目的地址&#xff1f; A.0180-c200-0014 B.0180-c200-0016 C.0180-C200-0015 D.0100-5E00-0002 Answer: C 解析&a…