From 31ae397c0e2680660a55f57fdc4e8526786f50d0 Mon Sep 17 00:00:00 2001 From: Riccardo Zaglia Date: Tue, 5 Nov 2024 01:37:43 +0100 Subject: [PATCH] fix(server_openvr): :bug: Make SteamVR chaperone consistent with ALVR --- .../cpp/alvr_server/ChaperoneUpdater.cpp | 7 +++++++ .../cpp/alvr_server/alvr_server.cpp | 21 ++++++++++--------- alvr/server_openvr/cpp/alvr_server/bindings.h | 1 + 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/alvr/server_openvr/cpp/alvr_server/ChaperoneUpdater.cpp b/alvr/server_openvr/cpp/alvr_server/ChaperoneUpdater.cpp index 3d43fd81ff..c2030cc909 100644 --- a/alvr/server_openvr/cpp/alvr_server/ChaperoneUpdater.cpp +++ b/alvr/server_openvr/cpp/alvr_server/ChaperoneUpdater.cpp @@ -55,6 +55,12 @@ void ShutdownOpenvrClient() { bool IsOpenvrClientReady() { return isOpenvrInit; } +void ResetChaperoneToStage() { +#ifndef __APPLE__ + vr::VRChaperone()->ResetZeroPose(vr::TrackingUniverseRawAndUncalibrated); +#endif +} + void _SetChaperoneArea(float areaWidth, float areaHeight) { Debug("SetChaperoneArea"); @@ -96,6 +102,7 @@ void _SetChaperoneArea(float areaWidth, float areaHeight) { ); } + ResetChaperoneToStage(); #endif } diff --git a/alvr/server_openvr/cpp/alvr_server/alvr_server.cpp b/alvr/server_openvr/cpp/alvr_server/alvr_server.cpp index 86bdbf1453..e7211b9c00 100644 --- a/alvr/server_openvr/cpp/alvr_server/alvr_server.cpp +++ b/alvr/server_openvr/cpp/alvr_server/alvr_server.cpp @@ -212,24 +212,25 @@ class DriverProvider : public vr::IServerTrackedDeviceProvider { } HapticsSend(id, haptics.fDurationSeconds, haptics.fFrequency, haptics.fAmplitude); - } + } else if (event.eventType == vr::VREvent_ChaperoneUniverseHasChanged + || event.eventType == vr::VREvent_ChaperoneRoomSetupFinished + || event.eventType == vr::VREvent_ChaperoneFlushCache + || event.eventType == vr::VREvent_ChaperoneSettingsHaveChanged + || event.eventType == vr::VREvent_SeatedZeroPoseReset + || event.eventType == vr::VREvent_StandingZeroPoseReset + || event.eventType == vr::VREvent_SceneApplicationChanged + || event.eventType == VendorEvent_ALVRDriverResync) { + ResetChaperoneToStage(); + #ifdef __linux__ - else if (event.eventType == vr::VREvent_ChaperoneUniverseHasChanged - || event.eventType == vr::VREvent_ChaperoneRoomSetupFinished - || event.eventType == vr::VREvent_ChaperoneFlushCache - || event.eventType == vr::VREvent_ChaperoneSettingsHaveChanged - || event.eventType == vr::VREvent_SeatedZeroPoseReset - || event.eventType == vr::VREvent_StandingZeroPoseReset - || event.eventType == vr::VREvent_SceneApplicationChanged - || event.eventType == VendorEvent_ALVRDriverResync) { if (hmd && hmd->m_poseHistory) { auto rawZeroPose = GetRawZeroPose(); if (rawZeroPose != nullptr) { hmd->m_poseHistory->SetTransform(*rawZeroPose); } } - } #endif + } } if (vr::VRServerDriverHost()->IsExiting() && !shutdown_called) { Debug("DriverProvider: Received shutdown event"); diff --git a/alvr/server_openvr/cpp/alvr_server/bindings.h b/alvr/server_openvr/cpp/alvr_server/bindings.h index 0f507011ac..919d0157e2 100644 --- a/alvr/server_openvr/cpp/alvr_server/bindings.h +++ b/alvr/server_openvr/cpp/alvr_server/bindings.h @@ -159,6 +159,7 @@ extern "C" void SetButton(unsigned long long buttonID, FfiButtonValue value); extern "C" void InitOpenvrClient(); extern "C" void ShutdownOpenvrClient(); +extern "C" void ResetChaperoneToStage(); extern "C" void SetChaperoneArea(float areaWidth, float areaHeight); extern "C" void CaptureFrame();