[Bf-blender-cvs] [0d1a22f74fc] soc-2019-openxr: Barebones for managing session changes

Julian Eisel noreply at git.blender.org
Wed Jun 5 10:23:09 CEST 2019


Commit: 0d1a22f74fc076a6a21cb006b075c87d48c58898
Author: Julian Eisel
Date:   Wed Jun 5 10:20:51 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB0d1a22f74fc076a6a21cb006b075c87d48c58898

Barebones for managing session changes

Adds initial OpenXR event querying so that session state change events
can be handled. Doesn't do any handling yet.

===================================================================

M	source/blender/windowmanager/intern/wm_window.c
M	source/blender/windowmanager/intern/wm_xr.c
M	source/blender/windowmanager/wm.h

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 9ec7ec8e40f..6ab7466ac48 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1595,6 +1595,7 @@ void wm_window_process_events(const bContext *C)
     GHOST_DispatchEvents(g_system);
   }
   hasevent |= wm_window_timer(C);
+  hasevent |= wm_xr_events_handle(CTX_wm_xr_context(C));
 
   /* no event, we sleep 5 milliseconds */
   if (hasevent == 0) {
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index 6bd939d6cff..8e7b48b6154 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -180,7 +180,6 @@ ATTR_NONNULL()
 static bool openxr_instance_setup(wmXRContext *context)
 {
   XrInstanceCreateInfo create_info = {.type = XR_TYPE_INSTANCE_CREATE_INFO};
-  const char *enable_extensions = NULL;
 
 #ifdef USE_EXT_LAYER_PRINTS
   puts("Available OpenXR layers/extensions:");
@@ -273,3 +272,43 @@ void wm_xr_session_end(wmXRContext *xr_context)
   xrEndSession(xr_context->oxr.session);
   xrDestroySession(xr_context->oxr.session);
 }
+
+static void wm_xr_session_state_change(wmXRContext *xr_context,
+                                       const XrEventDataSessionStateChanged *lifecycle)
+{
+  switch (lifecycle->type) {
+    case XR_SESSION_STATE_READY: {
+      break;
+    }
+  }
+}
+
+static bool wm_xr_event_poll_next(wmXRContext *xr_context, XrEventDataBuffer *r_event_data)
+{
+  /* (Re-)initialize as required by specification */
+  r_event_data->type = XR_TYPE_EVENT_DATA_BUFFER;
+  r_event_data->next = NULL;
+
+  return (xrPollEvent(xr_context->oxr.instance, r_event_data) == XR_SUCCESS);
+}
+
+bool wm_xr_events_handle(wmXRContext *xr_context)
+{
+  XrEventDataBuffer event_buffer; /* structure big enought to hold all possible events */
+
+  while (wm_xr_event_poll_next(xr_context, &event_buffer)) {
+    XrEventDataBaseHeader *event = (XrEventDataBaseHeader *)&event_buffer; /* base event struct */
+
+    switch (event->type) {
+      case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED:
+        wm_xr_session_state_change(xr_context, (XrEventDataSessionStateChanged *)&event);
+        return true;
+
+      default:
+        printf("Unhandled event: %i\n", event->type);
+        return false;
+    }
+  }
+
+  return false;
+}
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index e29da9ef1ef..1195dfda405 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -105,6 +105,9 @@ void wm_xr_context_destroy(struct wmXRContext *xr_context);
 bool wm_xr_session_is_running(const struct wmXRContext *xr_context) ATTR_WARN_UNUSED_RESULT;
 void wm_xr_session_start(struct wmXRContext *xr_context) ATTR_NONNULL();
 void wm_xr_session_end(struct wmXRContext *xr_context) ATTR_NONNULL();
+
+/* events */
+bool wm_xr_events_handle(struct wmXRContext *xr_context) ATTR_NONNULL();
 #endif
 
 #endif /* __WM_H__ */



More information about the Bf-blender-cvs mailing list