[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