MCPcopy Create free account
hub / github.com/LibreVR/Revive / ovr_GetSessionStatus

Function ovr_GetSessionStatus

ReviveXR/REV_CAPI.cpp:242–350  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

240}
241
242OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetSessionStatus(ovrSession session, ovrSessionStatus* sessionStatus)
243{
244 REV_TRACE(ovr_GetSessionStatus);
245
246 if (!session)
247 return ovrError_InvalidSession;
248
249 if (!sessionStatus)
250 return ovrError_InvalidParameter;
251
252 assert(session->SessionStatus.is_lock_free());
253 SessionStatusBits status = session->SessionStatus;
254 XrEventDataBuffer event = XR_TYPE(EVENT_DATA_BUFFER);
255 while (XR_UNQUALIFIED_SUCCESS(xrPollEvent(session->Instance, &event)))
256 {
257 switch (event.type)
258 {
259 case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED:
260 {
261 const XrEventDataSessionStateChanged& stateChanged =
262 reinterpret_cast<XrEventDataSessionStateChanged&>(event);
263 if (stateChanged.session == session->Session)
264 {
265 switch (stateChanged.state)
266 {
267 case XR_SESSION_STATE_IDLE:
268 status.HmdPresent = true;
269 break;
270 case XR_SESSION_STATE_READY:
271 // Oculus apps won't synchronize before they're visible,
272 // so we have to set the IsVisible flag immediately.
273 status.IsVisible = true;
274 status.HmdMounted = true;
275 break;
276 case XR_SESSION_STATE_SYNCHRONIZED:
277 break;
278 case XR_SESSION_STATE_VISIBLE:
279 status.HasInputFocus = false;
280 break;
281 case XR_SESSION_STATE_FOCUSED:
282 status.HasInputFocus = true;
283 break;
284 case XR_SESSION_STATE_STOPPING:
285 status.IsVisible = false;
286 status.HmdMounted = false;
287 break;
288 case XR_SESSION_STATE_LOSS_PENDING:
289 status.DisplayLost = true;
290 break;
291 case XR_SESSION_STATE_EXITING:
292 status.ShouldQuit = true;
293 break;
294 }
295 session->SessionStatus = status;
296
297 if (stateChanged.state == XR_SESSION_STATE_READY)
298 session->BeginSession();
299 if (stateChanged.state == XR_SESSION_STATE_STOPPING)

Callers

nothing calls this directly

Calls 3

BeginSessionMethod · 0.80
EndSessionMethod · 0.80
UpdateStencilMethod · 0.80

Tested by

no test coverage detected