Bug 1396326 - Restore the previous HMD pose when loosing tracking in OpenVR; r?kip
MozReview-Commit-ID: HCdQT0XxiCr
--- 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,