diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d00e4f4a66..a8bab618a0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6611,6 +6611,8 @@ void Application::queryOctree(NodeType_t serverType, PacketType packetType) { bool Application::isHMDMode() const { + qDebug() << "the hmd is visible " << getActiveDisplayPlugin()->isDisplayVisible(); + qDebug() << "the hmd is active " << getActiveDisplayPlugin()->isHmd(); return getActiveDisplayPlugin()->isHmd(); } @@ -6690,6 +6692,7 @@ void Application::resetSensors(bool andReload) { } void Application::hmdVisibleChanged(bool visible) { + qDebug() << "hmd visible changed "; // TODO // calling start and stop will change audio input and ouput to default audio devices. // we need to add a pause/unpause functionality to AudioClient for this to work properly diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index 321bcc3fd2..115f3bcd3a 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -48,6 +48,10 @@ static const glm::mat4 IDENTITY_MATRIX; //#define LIVE_SHADER_RELOAD 1 extern glm::vec3 getPoint(float yaw, float pitch); +bool HmdDisplayPlugin::isHmd() const { + return true; +} + glm::uvec2 HmdDisplayPlugin::getRecommendedUiSize() const { return CompositorHelper::VIRTUAL_SCREEN_SIZE; } diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index a56daaad83..370d77b72e 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -25,7 +25,7 @@ class HmdDisplayPlugin : public OpenGLDisplayPlugin { using Parent = OpenGLDisplayPlugin; public: ~HmdDisplayPlugin(); - bool isHmd() const override final { return true; } + bool isHmd() const override final; float getIPD() const override final { return _ipd; } glm::mat4 getEyeToHeadTransform(Eye eye) const override final; glm::mat4 getEyeProjection(Eye eye, const glm::mat4& baseProjection) const override; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index b5b81a9a25..633cb13441 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -677,8 +677,8 @@ void OpenVrDisplayPlugin::postPreview() { break; case vr::EDeviceActivityLevel::k_EDeviceActivityLevel_Idle: qDebug() << "no activity 10 secs "; break; - case vr::EDeviceActivityLevel::k_EDeviceActivityLevel_UserInteraction: qDebug() << "activity "; - break; + //case vr::EDeviceActivityLevel::k_EDeviceActivityLevel_UserInteraction: qDebug() << "activity "; + // break; case vr::EDeviceActivityLevel::k_EDeviceActivityLevel_UserInteraction_Timeout: qDebug() << "idle for 0.5 secs "; break; case vr::EDeviceActivityLevel::k_EDeviceActivityLevel_Standby: qDebug() << "idle for 5 secs "; @@ -704,7 +704,8 @@ void OpenVrDisplayPlugin::postPreview() { } bool OpenVrDisplayPlugin::isHmdMounted() const { - return _hmdActivityLevel == vr::k_EDeviceActivityLevel_UserInteraction; + // return _hmdActivityLevel == vr::k_EDeviceActivityLevel_UserInteraction; + return isHeadInHeadset(); } void OpenVrDisplayPlugin::updatePresentPose() { diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.h b/plugins/openvr/src/OpenVrDisplayPlugin.h index 5585957031..1ec8716cb5 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.h +++ b/plugins/openvr/src/OpenVrDisplayPlugin.h @@ -37,6 +37,7 @@ class OpenVrDisplayPlugin : public HmdDisplayPlugin { public: bool isSupported() const override; const QString getName() const override; + bool getSupportsAutoSwitch() override final { return true; } glm::mat4 getEyeProjection(Eye eye, const glm::mat4& baseProjection) const override; glm::mat4 getCullingProjection(const glm::mat4& baseProjection) const override; diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index bffeb4f9ea..6ee78a6b45 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -37,6 +37,11 @@ static int refCount { 0 }; static Mutex mutex; static vr::IVRSystem* activeHmd { nullptr }; static bool _openVrQuitRequested { false }; +static bool _headInHeadset { false }; + +bool isHeadInHeadset() { + return _headInHeadset; +} bool openVrQuitRequested() { return _openVrQuitRequested; @@ -282,7 +287,24 @@ void handleOpenVrEvents() { break; } #if DEV_BUILD + if (event.data.controller.button == vr::k_EButton_ProximitySensor) { + qDebug() << "fired the proximity sensor!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! "; + vr::VRControllerState_t controllerState = vr::VRControllerState_t(); + if (activeHmd->GetControllerState(vr::k_unTrackedDeviceIndex_Hmd, &controllerState, sizeof(vr::VRControllerState_t))) { + ulong prox = controllerState.ulButtonPressed & (1UL << ((int)vr::k_EButton_ProximitySensor)); + qDebug() << "prox is -----------------------------> " << (int)prox; + if (prox) { + qDebug() << "headset is on"; + _headInHeadset = true; + } else { + qDebug() << "headset is off"; + _headInHeadset = false; + } + } + + } else { qDebug() << "OpenVR: Event " << activeHmd->GetEventTypeNameFromEnum((vr::EVREventType)event.eventType) << "(" << event.eventType << ")"; + } #endif } diff --git a/plugins/openvr/src/OpenVrHelpers.h b/plugins/openvr/src/OpenVrHelpers.h index 833e5ba65d..b0960a03eb 100644 --- a/plugins/openvr/src/OpenVrHelpers.h +++ b/plugins/openvr/src/OpenVrHelpers.h @@ -23,6 +23,7 @@ vr::IVRSystem* acquireOpenVrSystem(); void releaseOpenVrSystem(); void handleOpenVrEvents(); bool openVrQuitRequested(); +bool isHeadInHeadset(); void enableOpenVrKeyboard(PluginContainer* container); void disableOpenVrKeyboard(); bool isOpenVrKeyboardShown();