[Bf-blender-cvs] [d7083de46d8] xr-actions-D9124: Update controller data when setting controller pose action.

Peter Kim noreply at git.blender.org
Tue Oct 13 14:45:00 CEST 2020


Commit: d7083de46d8b3bf64bf11eb3cf86fe296ec46b67
Author: Peter Kim
Date:   Thu Oct 8 23:49:29 2020 +0900
Branches: xr-actions-D9124
https://developer.blender.org/rBd7083de46d8b3bf64bf11eb3cf86fe296ec46b67

Update controller data when setting controller pose action.

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

M	source/blender/windowmanager/xr/intern/wm_xr_actions.c
M	source/blender/windowmanager/xr/intern/wm_xr_session.c

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

diff --git a/source/blender/windowmanager/xr/intern/wm_xr_actions.c b/source/blender/windowmanager/xr/intern/wm_xr_actions.c
index d6c440f73bf..ecb3e61efb3 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_actions.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_actions.c
@@ -263,6 +263,10 @@ void WM_xr_actions_destroy(wmXrData *xr,
 
   if (!action_find(action_set, controller_pose_name)) {
     action_set->controller_pose_action = NULL;
+
+    /* Update controller data. */
+    wmXrSessionState *session_state = &xr->runtime->session_state;
+    memset(session_state->controllers, 0, sizeof(session_state->controllers));
   }
 }
 
@@ -329,6 +333,15 @@ bool WM_xr_controller_pose_action_set(wmXrData *xr,
   }
 
   action_set->controller_pose_action = action;
+
+  /* Update controller data. */
+  wmXrSessionState *session_state = &xr->runtime->session_state;
+  memset(session_state->controllers, 0, sizeof(session_state->controllers));
+  const unsigned int count = min((unsigned int)ARRAY_SIZE(session_state->controllers), action->count_subaction_paths);
+  for (unsigned int i = 0; i < count; ++i) {
+    strcpy(session_state->controllers[i].subaction_path, action->subaction_paths[i]);
+  }
+
   return true;
 }
 
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_session.c b/source/blender/windowmanager/xr/intern/wm_xr_session.c
index 22c49089d6f..bbef1e47790 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_session.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_session.c
@@ -487,7 +487,7 @@ static void wm_xr_session_controller_mats_update(const XrSessionSettings *settin
 static const GHOST_XrPose *wm_xr_session_controller_pose_find(const wmXrSessionState *state,
                                                               const char *subaction_path)
 {
-  for (unsigned int i = 0; i < 2; ++i) {
+  for (unsigned int i = 0; i < (unsigned int)ARRAY_SIZE(state->controllers); ++i) {
     if (STREQ(state->controllers[i].subaction_path, subaction_path)) {
       return &state->controllers[i].pose;
     }



More information about the Bf-blender-cvs mailing list