diff --git a/android/app/src/main/cpp/code/vr/vr_renderer.c b/android/app/src/main/cpp/code/vr/vr_renderer.c index 379f3539..f2759568 100644 --- a/android/app/src/main/cpp/code/vr/vr_renderer.c +++ b/android/app/src/main/cpp/code/vr/vr_renderer.c @@ -323,7 +323,9 @@ void VR_DrawFrame( engine_t* engine ) { } GLboolean stageBoundsDirty = GL_TRUE; - ovrApp_HandleXrEvents(&engine->appState); + if (ovrApp_HandleXrEvents(&engine->appState)) { + vr.menuYaw = vr.hmdorientation[YAW]; + } if (engine->appState.SessionActive == GL_FALSE) { return; } @@ -501,7 +503,7 @@ void VR_DrawFrame( engine_t* engine ) { XrCompositionLayerCylinderKHR cylinder_layer = {}; cylinder_layer.type = XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR; cylinder_layer.layerFlags = XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT; - cylinder_layer.space = engine->appState.LocalSpace; + cylinder_layer.space = engine->appState.CurrentSpace; cylinder_layer.eyeVisibility = XR_EYE_VISIBILITY_BOTH; memset(&cylinder_layer.subImage, 0, sizeof(XrSwapchainSubImage)); cylinder_layer.subImage.swapchain = engine->appState.Renderer.FrameBuffer.ColorSwapChain.Handle; diff --git a/android/app/src/main/cpp/code/vr/vr_types.c b/android/app/src/main/cpp/code/vr/vr_types.c index eaac6ce6..ba77abf6 100644 --- a/android/app/src/main/cpp/code/vr/vr_types.c +++ b/android/app/src/main/cpp/code/vr/vr_types.c @@ -314,8 +314,9 @@ void ovrApp_HandleSessionStateChanges(ovrApp* app, XrSessionState state) { } } -void ovrApp_HandleXrEvents(ovrApp* app) { +GLboolean ovrApp_HandleXrEvents(ovrApp* app) { XrEventDataBuffer eventDataBuffer = {}; + GLboolean recenter = GL_FALSE; // Poll for events for (;;) { @@ -368,6 +369,7 @@ void ovrApp_HandleXrEvents(ovrApp* app) { ref_space_change_event->referenceSpaceType, (void*)ref_space_change_event->session, FromXrTime(ref_space_change_event->changeTime)); + recenter = GL_TRUE; } break; case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: { const XrEventDataSessionStateChanged* session_state_changed_event = @@ -398,6 +400,7 @@ void ovrApp_HandleXrEvents(ovrApp* app) { break; } } + return recenter; } /* diff --git a/android/app/src/main/cpp/code/vr/vr_types.h b/android/app/src/main/cpp/code/vr/vr_types.h index 3f62c69c..ee155858 100644 --- a/android/app/src/main/cpp/code/vr/vr_types.h +++ b/android/app/src/main/cpp/code/vr/vr_types.h @@ -159,7 +159,7 @@ typedef enum { void ovrApp_Clear(ovrApp* app); void ovrApp_Destroy(ovrApp* app); -void ovrApp_HandleXrEvents(ovrApp* app); +GLboolean ovrApp_HandleXrEvents(ovrApp* app); void ovrFramebuffer_Acquire(ovrFramebuffer* frameBuffer); void ovrFramebuffer_Resolve(ovrFramebuffer* frameBuffer);