diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 69fb40d7e1..d0363d4dcc 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -38,7 +38,7 @@ static mat4 _sensorResetMat; static std::array VR_EYES { { vr::Eye_Left, vr::Eye_Right } }; bool OpenVrDisplayPlugin::isSupported() const { - return vr::VR_IsHmdPresent(); + return !isOculusPresent() && vr::VR_IsHmdPresent(); } void OpenVrDisplayPlugin::internalActivate() { diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index b29c430b76..d2c3649933 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -14,6 +14,7 @@ #include #include +#include Q_DECLARE_LOGGING_CATEGORY(displayplugins) Q_LOGGING_CATEGORY(displayplugins, "hifi.plugins.display") @@ -27,6 +28,22 @@ static vr::IVRSystem* activeHmd { nullptr }; static const uint32_t RELEASE_OPENVR_HMD_DELAY_MS = 5000; +bool isOculusPresent() { + bool result = false; +#if defined(Q_OS_WIN32) + HANDLE oculusServiceEvent = ::OpenEventW(SYNCHRONIZE, FALSE, L"OculusHMDConnected"); + // The existence of the service indicates a running Oculus runtime + if (oculusServiceEvent) { + // A signaled event indicates a connected HMD + if (WAIT_OBJECT_0 == ::WaitForSingleObject(oculusServiceEvent, 0)) { + result = true; + } + ::CloseHandle(oculusServiceEvent); + } +#endif + return result; +} + vr::IVRSystem* acquireOpenVrSystem() { bool hmdPresent = vr::VR_IsHmdPresent(); if (hmdPresent) { diff --git a/plugins/openvr/src/OpenVrHelpers.h b/plugins/openvr/src/OpenVrHelpers.h index 26179fb757..81896a2ce5 100644 --- a/plugins/openvr/src/OpenVrHelpers.h +++ b/plugins/openvr/src/OpenVrHelpers.h @@ -12,6 +12,7 @@ #include #include +bool isOculusPresent(); vr::IVRSystem* acquireOpenVrSystem(); void releaseOpenVrSystem(); diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 9358f3c77b..2e2c0face0 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -50,7 +50,7 @@ static const QString RENDER_CONTROLLERS = "Render Hand Controllers"; const QString ViveControllerManager::NAME = "OpenVR"; bool ViveControllerManager::isSupported() const { - return vr::VR_IsHmdPresent(); + return !isOculusPresent() && vr::VR_IsHmdPresent(); } void ViveControllerManager::activate() {