Skip to content

Commit

Permalink
fix(server_openvr): 🐛 Make SteamVR chaperone consistent with ALVR
Browse files Browse the repository at this point in the history
  • Loading branch information
zmerp committed Nov 5, 2024
1 parent 3881349 commit d6fca67
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 10 deletions.
7 changes: 7 additions & 0 deletions alvr/server_openvr/cpp/alvr_server/ChaperoneUpdater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down Expand Up @@ -96,6 +102,7 @@ void _SetChaperoneArea(float areaWidth, float areaHeight) {
);
}

ResetChaperoneToStage();
#endif
}

Expand Down
21 changes: 11 additions & 10 deletions alvr/server_openvr/cpp/alvr_server/alvr_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
1 change: 1 addition & 0 deletions alvr/server_openvr/cpp/alvr_server/bindings.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ extern "C" void SetButton(unsigned long long buttonID, FfiButtonValue value);

extern "C" void InitOpenvrClient();
extern "C" void ShutdownOpenvrClient();
extern "C" bool ResetChaperoneToStage();
extern "C" void SetChaperoneArea(float areaWidth, float areaHeight);

extern "C" void CaptureFrame();
Expand Down

0 comments on commit d6fca67

Please sign in to comment.