[Bf-blender-cvs] [5677c02954e] xr-controller-support: Pass context to wm_xr_session_actions_update()

Peter Kim noreply at git.blender.org
Tue May 18 15:07:10 CEST 2021


Commit: 5677c02954e1a32081a162d862c8d51470a27eae
Author: Peter Kim
Date:   Mon May 3 11:07:00 2021 +0900
Branches: xr-controller-support
https://developer.blender.org/rB5677c02954e1a32081a162d862c8d51470a27eae

Pass context to wm_xr_session_actions_update()

Restores motion capture object autokeying functionality.

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

M	source/blender/windowmanager/intern/wm_window.c
M	source/blender/windowmanager/xr/intern/wm_xr.c
M	source/blender/windowmanager/xr/intern/wm_xr_intern.h
M	source/blender/windowmanager/xr/intern/wm_xr_session.c
M	source/blender/windowmanager/xr/wm_xr.h

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

diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 2e9fd1b1b16..976c925c69d 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1560,7 +1560,7 @@ void wm_window_process_events(const bContext *C)
 #ifdef WITH_XR_OPENXR
   /* XR events don't use the regular window queues. So here we don't only trigger
    * processing/dispatching but also handling. */
-  hasevent |= wm_xr_events_handle(CTX_wm_manager(C));
+  hasevent |= wm_xr_events_handle(C);
 #endif
 
   /* no event, we sleep 5 milliseconds */
diff --git a/source/blender/windowmanager/xr/intern/wm_xr.c b/source/blender/windowmanager/xr/intern/wm_xr.c
index e2124890855..cf4580f4c19 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr.c
@@ -22,6 +22,7 @@
  * representation of the OpenXR runtime connection within the application.
  */
 
+#include "BKE_context.h"
 #include "BKE_global.h"
 #include "BKE_idprop.h"
 #include "BKE_report.h"
@@ -124,14 +125,16 @@ void wm_xr_exit(wmWindowManager *wm)
   }
 }
 
-bool wm_xr_events_handle(wmWindowManager *wm)
+bool wm_xr_events_handle(const bContext *C)
 {
+  wmWindowManager *wm = CTX_wm_manager(C);
+
   if (wm->xr.runtime && wm->xr.runtime->context) {
     GHOST_XrEventsHandle(wm->xr.runtime->context);
 
     /* Process OpenXR action events and dispatch to XR surface / window queues. */
     if (WM_xr_session_is_ready(&wm->xr)) {
-      wm_xr_session_actions_update(&wm->xr);
+      wm_xr_session_actions_update(C);
     }
 
     /* wm_window_process_events() uses the return value to determine if it can put the main thread
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_intern.h b/source/blender/windowmanager/xr/intern/wm_xr_intern.h
index 2987f05be3e..4ef8fe1c317 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_intern.h
+++ b/source/blender/windowmanager/xr/intern/wm_xr_intern.h
@@ -179,7 +179,7 @@ void *wm_xr_session_gpu_binding_context_create(void);
 void wm_xr_session_gpu_binding_context_destroy(GHOST_ContextHandle context);
 
 void wm_xr_session_actions_init(wmXrData *xr);
-void wm_xr_session_actions_update(wmXrData *xr);
+void wm_xr_session_actions_update(const struct bContext *C);
 void wm_xr_session_controller_data_populate(const wmXrAction *controller_pose_action,
                                             wmXrData *xr);
 void wm_xr_session_controller_data_clear(wmXrSessionState *state);
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_session.c b/source/blender/windowmanager/xr/intern/wm_xr_session.c
index bc1f3615097..19daee45023 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_session.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_session.c
@@ -572,7 +572,8 @@ void wm_xr_session_actions_init(wmXrData *xr)
   GHOST_XrAttachActionSets(xr->runtime->context);
 }
 
-static void wm_xr_session_controller_mats_update(const XrSessionSettings *settings,
+static void wm_xr_session_controller_mats_update(const bContext *C,
+                                                 const XrSessionSettings *settings,
                                                  const wmXrAction *controller_pose_action,
                                                  wmXrSessionState *state,
                                                  wmWindow *win)
@@ -580,11 +581,10 @@ static void wm_xr_session_controller_mats_update(const XrSessionSettings *settin
   const unsigned int count = (unsigned int)min_ii(
       (int)controller_pose_action->count_subaction_paths, (int)ARRAY_SIZE(state->controllers));
 
-  /* TODO_XR */
-  // Scene *scene = CTX_data_scene(C);
-  // ViewLayer *view_layer = CTX_data_view_layer(C);
-  // wmWindowManager *wm = CTX_wm_manager(C);
-  // bScreen *screen_anim = ED_screen_animation_playing(wm);
+  Scene *scene = CTX_data_scene(C);
+  ViewLayer *view_layer = CTX_data_view_layer(C);
+  wmWindowManager *wm = CTX_wm_manager(C);
+  bScreen *screen_anim = ED_screen_animation_playing(wm);
   Object *ob_constraint = NULL;
   char ob_flag;
   float view_ofs[3];
@@ -636,12 +636,11 @@ static void wm_xr_session_controller_mats_update(const XrSessionSettings *settin
     if (ob_constraint && ((ob_flag & XR_OBJECT_ENABLE) != 0)) {
       wm_xr_session_object_pose_set(&controller->pose, ob_constraint);
 
-      /* TODO_XR */
-      // if (((ob_flag & XR_OBJECT_AUTOKEY) != 0) && screen_anim &&
-      //    autokeyframe_cfra_can_key(scene, &ob_constraint->id)) {
-      //  wm_xr_session_object_autokey(
-      //      C, scene, view_layer, win, ob_constraint, (i == 0) ? true : false);
-      //}
+      if (((ob_flag & XR_OBJECT_AUTOKEY) != 0) && screen_anim &&
+          autokeyframe_cfra_can_key(scene, &ob_constraint->id)) {
+        wm_xr_session_object_autokey(
+            (bContext *)C, scene, view_layer, win, ob_constraint, (i == 0) ? true : false);
+      }
     }
   }
 }
@@ -816,15 +815,15 @@ static void wm_xr_session_events_dispatch(const XrSessionSettings *settings,
   MEM_freeN(actions);
 }
 
-void wm_xr_session_actions_update(wmXrData *xr)
+void wm_xr_session_actions_update(const bContext *C)
 {
+  wmWindowManager *wm = CTX_wm_manager(C);
+  wmXrData *xr = &wm->xr;
   if (!xr->runtime) {
     return;
   }
 
   const XrSessionSettings *settings = &xr->session_settings;
-  Main *bmain = G_MAIN;
-  wmWindowManager *wm = bmain->wm.first;
   wmWindow *win = wm_xr_session_root_window_or_fallback_get(wm, xr->runtime);
   GHOST_XrContextHandle xr_context = xr->runtime->context;
   wmXrSessionState *state = &xr->runtime->session_state;
@@ -840,12 +839,11 @@ void wm_xr_session_actions_update(wmXrData *xr)
     if ((ob_flag & XR_OBJECT_AUTOKEY) != 0) {
       bScreen *screen_anim = ED_screen_animation_playing(wm);
       if (screen_anim) {
-        /* TODO_XR */
-        // Scene *scene = CTX_data_scene(C);
-        // if (autokeyframe_cfra_can_key(scene, &ob_constraint->id)) {
-        //  ViewLayer *view_layer = CTX_data_view_layer(C);
-        //  wm_xr_session_object_autokey(C, scene, view_layer, win, ob_constraint, true);
-        //}
+        Scene *scene = CTX_data_scene(C);
+        if (autokeyframe_cfra_can_key(scene, &ob_constraint->id)) {
+          ViewLayer *view_layer = CTX_data_view_layer(C);
+          wm_xr_session_object_autokey((bContext *)C, scene, view_layer, win, ob_constraint, true);
+        }
       }
     }
   }
@@ -861,7 +859,7 @@ void wm_xr_session_actions_update(wmXrData *xr)
   if (active_action_set) {
     if (active_action_set->controller_pose_action) {
       wm_xr_session_controller_mats_update(
-          &xr->session_settings, active_action_set->controller_pose_action, state, win);
+          C, &xr->session_settings, active_action_set->controller_pose_action, state, win);
     }
 
     if (surface && win) {
diff --git a/source/blender/windowmanager/xr/wm_xr.h b/source/blender/windowmanager/xr/wm_xr.h
index caba6038c56..cfe20177d87 100644
--- a/source/blender/windowmanager/xr/wm_xr.h
+++ b/source/blender/windowmanager/xr/wm_xr.h
@@ -22,6 +22,7 @@
 
 struct wmWindowManager;
 struct wmXrData;
+struct bContext;
 
 typedef void (*wmXrSessionExitFn)(const wmXrData *xr_data);
 
@@ -29,7 +30,7 @@ typedef void (*wmXrSessionExitFn)(const wmXrData *xr_data);
 bool wm_xr_init(wmWindowManager *wm);
 void wm_xr_exit(wmWindowManager *wm);
 void wm_xr_session_toggle(wmWindowManager *wm, wmWindow *win, wmXrSessionExitFn session_exit_fn);
-bool wm_xr_events_handle(wmWindowManager *wm);
+bool wm_xr_events_handle(const struct bContext *C);
 
 /* wm_xr_operators.c */
 void wm_xr_operatortypes_register(void);



More information about the Bf-blender-cvs mailing list