[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