Bug 1396326 - Restore the previous HMD pose when loosing tracking in OpenVR; r?kip draft
authorDaosheng Mu <daoshengmu@gmail.com>
Wed, 27 Sep 2017 11:57:54 +0800
changeset 670898 a77cb72872415b4dd30ce4fe00c09467b53d7486
parent 670875 70158e4e215d784d1391db5e517b18727f4b3683
child 733356 4f1219c6a5233f55b27df25055ec2b5724900967
push id81760
push userbmo:dmu@mozilla.com
push dateWed, 27 Sep 2017 04:15:22 +0000
reviewerskip
bugs1396326
milestone58.0a1
Bug 1396326 - Restore the previous HMD pose when loosing tracking in OpenVR; r?kip MozReview-Commit-ID: HCdQT0XxiCr
gfx/vr/gfxVROpenVR.cpp
gfx/vr/gfxVROpenVR.h
--- a/gfx/vr/gfxVROpenVR.cpp
+++ b/gfx/vr/gfxVROpenVR.cpp
@@ -271,19 +271,23 @@ VRDisplayOpenVR::GetSensorState()
 
     result.flags |= VRDisplayCapabilityFlags::Cap_Position;
     result.position[0] = m._41;
     result.position[1] = m._42;
     result.position[2] = m._43;
     result.linearVelocity[0] = pose.vVelocity.v[0];
     result.linearVelocity[1] = pose.vVelocity.v[1];
     result.linearVelocity[2] = pose.vVelocity.v[2];
+    result.inputFrameID = mDisplayInfo.mFrameId;
+    mPreviousPose = result;
+  } else {
+    result = mPreviousPose;
+    result.inputFrameID = mDisplayInfo.mFrameId;
   }
 
-  result.inputFrameID = mDisplayInfo.mFrameId;
   return result;
 }
 
 void
 VRDisplayOpenVR::StartPresentation()
 {
   if (mIsPresenting) {
     return;
--- a/gfx/vr/gfxVROpenVR.h
+++ b/gfx/vr/gfxVROpenVR.h
@@ -58,16 +58,17 @@ protected:
   virtual ~VRDisplayOpenVR();
   void Destroy();
 
   // not owned by us; global from OpenVR
   ::vr::IVRSystem *mVRSystem;
   ::vr::IVRChaperone *mVRChaperone;
   ::vr::IVRCompositor *mVRCompositor;
 
+  VRHMDSensorState mPreviousPose;
   VRTelemetry mTelemetry;
   bool mIsPresenting;
   bool mIsHmdPresent;
 
   void UpdateStageParameters();
   void PollEvents();
   bool SubmitFrame(void* aTextureHandle,
                    ::vr::ETextureType aTextureType,