Skip to content

Commit 31ae397

Browse files
committed
fix(server_openvr): 🐛 Make SteamVR chaperone consistent with ALVR
1 parent 3881349 commit 31ae397

File tree

3 files changed

+19
-10
lines changed

3 files changed

+19
-10
lines changed

alvr/server_openvr/cpp/alvr_server/ChaperoneUpdater.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ void ShutdownOpenvrClient() {
5555

5656
bool IsOpenvrClientReady() { return isOpenvrInit; }
5757

58+
void ResetChaperoneToStage() {
59+
#ifndef __APPLE__
60+
vr::VRChaperone()->ResetZeroPose(vr::TrackingUniverseRawAndUncalibrated);
61+
#endif
62+
}
63+
5864
void _SetChaperoneArea(float areaWidth, float areaHeight) {
5965
Debug("SetChaperoneArea");
6066

@@ -96,6 +102,7 @@ void _SetChaperoneArea(float areaWidth, float areaHeight) {
96102
);
97103
}
98104

105+
ResetChaperoneToStage();
99106
#endif
100107
}
101108

alvr/server_openvr/cpp/alvr_server/alvr_server.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -212,24 +212,25 @@ class DriverProvider : public vr::IServerTrackedDeviceProvider {
212212
}
213213

214214
HapticsSend(id, haptics.fDurationSeconds, haptics.fFrequency, haptics.fAmplitude);
215-
}
215+
} else if (event.eventType == vr::VREvent_ChaperoneUniverseHasChanged
216+
|| event.eventType == vr::VREvent_ChaperoneRoomSetupFinished
217+
|| event.eventType == vr::VREvent_ChaperoneFlushCache
218+
|| event.eventType == vr::VREvent_ChaperoneSettingsHaveChanged
219+
|| event.eventType == vr::VREvent_SeatedZeroPoseReset
220+
|| event.eventType == vr::VREvent_StandingZeroPoseReset
221+
|| event.eventType == vr::VREvent_SceneApplicationChanged
222+
|| event.eventType == VendorEvent_ALVRDriverResync) {
223+
ResetChaperoneToStage();
224+
216225
#ifdef __linux__
217-
else if (event.eventType == vr::VREvent_ChaperoneUniverseHasChanged
218-
|| event.eventType == vr::VREvent_ChaperoneRoomSetupFinished
219-
|| event.eventType == vr::VREvent_ChaperoneFlushCache
220-
|| event.eventType == vr::VREvent_ChaperoneSettingsHaveChanged
221-
|| event.eventType == vr::VREvent_SeatedZeroPoseReset
222-
|| event.eventType == vr::VREvent_StandingZeroPoseReset
223-
|| event.eventType == vr::VREvent_SceneApplicationChanged
224-
|| event.eventType == VendorEvent_ALVRDriverResync) {
225226
if (hmd && hmd->m_poseHistory) {
226227
auto rawZeroPose = GetRawZeroPose();
227228
if (rawZeroPose != nullptr) {
228229
hmd->m_poseHistory->SetTransform(*rawZeroPose);
229230
}
230231
}
231-
}
232232
#endif
233+
}
233234
}
234235
if (vr::VRServerDriverHost()->IsExiting() && !shutdown_called) {
235236
Debug("DriverProvider: Received shutdown event");

alvr/server_openvr/cpp/alvr_server/bindings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ extern "C" void SetButton(unsigned long long buttonID, FfiButtonValue value);
159159

160160
extern "C" void InitOpenvrClient();
161161
extern "C" void ShutdownOpenvrClient();
162+
extern "C" void ResetChaperoneToStage();
162163
extern "C" void SetChaperoneArea(float areaWidth, float areaHeight);
163164

164165
extern "C" void CaptureFrame();

0 commit comments

Comments
 (0)