Skip to content

Commit

Permalink
Bug 1397397 - Detect vrdisplayconnect/vrdisplaydisconnect events with…
Browse files Browse the repository at this point in the history
… IsTrackedDeviceConnected() in OpenVR; r=kip

MozReview-Commit-ID: 1Q8zyCZhQuC

UltraBlame original commit: 728c1c579a4c6bc7e83f593618e4d16472207cf4
  • Loading branch information
marco-c committed Oct 1, 2019
1 parent 9483a93 commit 5f7b0c1
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
36 changes: 28 additions & 8 deletions gfx/vr/gfxVROpenVR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,15 @@ VRDisplayOpenVR::VRDisplayOpenVR(::vr::IVRSystem *aVRSystem,
MOZ_COUNT_CTOR_INHERITED(VRDisplayOpenVR, VRDisplayHost);

mDisplayInfo.mDisplayName.AssignLiteral("OpenVR HMD");
mDisplayInfo.mIsConnected = true;
mDisplayInfo.mIsConnected = mVRSystem->IsTrackedDeviceConnected(::vr::k_unTrackedDeviceIndex_Hmd);
mDisplayInfo.mIsMounted = false;
mDisplayInfo.mCapabilityFlags = VRDisplayCapabilityFlags::Cap_None |
VRDisplayCapabilityFlags::Cap_Orientation |
VRDisplayCapabilityFlags::Cap_Position |
VRDisplayCapabilityFlags::Cap_External |
VRDisplayCapabilityFlags::Cap_Present |
VRDisplayCapabilityFlags::Cap_StageParameters;
mIsHmdPresent = ::vr::VR_IsHmdPresent();

::vr::ETrackedPropertyError err;
bool bHasProximitySensor = mVRSystem->GetBoolTrackedDeviceProperty(::vr::k_unTrackedDeviceIndex_Hmd, ::vr::Prop_ContainsProximitySensor_Bool, &err);
Expand Down Expand Up @@ -174,24 +175,44 @@ VRDisplayOpenVR::ZeroSensor()
UpdateStageParameters();
}

bool
VRDisplayOpenVR::GetIsHmdPresent()
{
return mIsHmdPresent;
}

void
VRDisplayOpenVR::PollEvents()
{
::vr::VREvent_t event;
while (mVRSystem->PollNextEvent(&event, sizeof(event))) {
while (mVRSystem && mVRSystem->PollNextEvent(&event, sizeof(event))) {
switch (event.eventType) {
case ::vr::VREvent_TrackedDeviceUserInteractionStarted:
mDisplayInfo.mIsMounted = true;
if (event.trackedDeviceIndex == ::vr::k_unTrackedDeviceIndex_Hmd) {
mDisplayInfo.mIsMounted = true;
}
break;
case ::vr::VREvent_TrackedDeviceUserInteractionEnded:
mDisplayInfo.mIsMounted = false;
if (event.trackedDeviceIndex == ::vr::k_unTrackedDeviceIndex_Hmd) {
mDisplayInfo.mIsMounted = false;
}
break;
case ::vr::EVREventType::VREvent_TrackedDeviceActivated:
if (event.trackedDeviceIndex == ::vr::k_unTrackedDeviceIndex_Hmd) {
mDisplayInfo.mIsConnected = true;
}
break;
case ::vr::EVREventType::VREvent_TrackedDeviceDeactivated:
if (event.trackedDeviceIndex == ::vr::k_unTrackedDeviceIndex_Hmd) {
mDisplayInfo.mIsConnected = false;
}
break;
case ::vr::EVREventType::VREvent_DriverRequestedQuit:
case ::vr::EVREventType::VREvent_Quit:
case ::vr::EVREventType::VREvent_ProcessQuit:
case ::vr::EVREventType::VREvent_QuitAcknowledged:
case ::vr::EVREventType::VREvent_QuitAborted_UserPrompt:
mDisplayInfo.mIsConnected = false;
mIsHmdPresent = false;
break;
default:

Expand Down Expand Up @@ -379,8 +400,7 @@ void
VRDisplayOpenVR::NotifyVSync()
{

mDisplayInfo.mIsConnected = ::vr::VR_IsHmdPresent();

mIsHmdPresent = ::vr::VR_IsHmdPresent();

PollEvents();

Expand Down Expand Up @@ -591,7 +611,7 @@ bool
VRSystemManagerOpenVR::GetHMDs(nsTArray<RefPtr<VRDisplayHost>>& aHMDResult)
{
if (!::vr::VR_IsHmdPresent() ||
(mOpenVRHMD && !mOpenVRHMD->GetIsConnected())) {
(mOpenVRHMD && !mOpenVRHMD->GetIsHmdPresent())) {


mOpenVRHMD = nullptr;
Expand Down
2 changes: 2 additions & 0 deletions gfx/vr/gfxVROpenVR.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class VRDisplayOpenVR : public VRDisplayHost
public:
virtual void NotifyVSync() override;
void ZeroSensor() override;
bool GetIsHmdPresent();

protected:
virtual VRHMDSensorState GetSensorState() override;
Expand Down Expand Up @@ -64,6 +65,7 @@ class VRDisplayOpenVR : public VRDisplayHost

VRTelemetry mTelemetry;
bool mIsPresenting;
bool mIsHmdPresent;

void UpdateStageParameters();
void PollEvents();
Expand Down

0 comments on commit 5f7b0c1

Please sign in to comment.