[Bf-blender-cvs] [262b1efd158] vr_scene_inspection: Avoid queries on inaccessible session state
Julian Eisel
noreply at git.blender.org
Mon Mar 9 14:59:51 CET 2020
Commit: 262b1efd15883e83b277837fd228c24d13ceddcb
Author: Julian Eisel
Date: Mon Mar 9 14:57:43 2020 +0100
Branches: vr_scene_inspection
https://developer.blender.org/rB262b1efd15883e83b277837fd228c24d13ceddcb
Avoid queries on inaccessible session state
On the Blender side we now use a more narrow definition of when a
session is considered running than the OpenXR specification does.
Also does related cleanup.
===================================================================
M source/blender/editors/space_view3d/view3d_draw.c
M source/blender/makesrna/intern/rna_xr.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_operators.c
M source/blender/windowmanager/intern/wm_xr.c
===================================================================
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index ca333b572db..d0df54f046c 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -322,10 +322,8 @@ static bool view3d_xr_mirror_active(const wmWindowManager *wm,
return (v3d->flag & V3D_XR_SESSION_MIRROR) &&
/* The free region (e.g. the camera region in quad-view) is always the last in the list
base. We don't want any other to be affected. */
- !region->next &&
- /* NULL'ed when sending session end request. */
- wm->xr.session_state && //
- WM_xr_is_session_running(&wm->xr);
+ !region->next && //
+ WM_xr_session_is_running(&wm->xr);
}
static void view3d_xr_mirror_setup(const wmWindowManager *wm,
diff --git a/source/blender/makesrna/intern/rna_xr.c b/source/blender/makesrna/intern/rna_xr.c
index 42ce1c10b16..1bf54baa787 100644
--- a/source/blender/makesrna/intern/rna_xr.c
+++ b/source/blender/makesrna/intern/rna_xr.c
@@ -36,7 +36,7 @@ static bool rna_XrSessionState_is_running(bContext *C)
{
# ifdef WITH_XR_OPENXR
const wmWindowManager *wm = CTX_wm_manager(C);
- return WM_xr_is_session_running(&wm->xr);
+ return WM_xr_session_is_running(&wm->xr);
# else
UNUSED_VARS(C);
return false;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index bf3c622c3f9..10bc505fbc1 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -873,7 +873,7 @@ void WM_generic_user_data_free(struct wmGenericUserData *user_data);
#ifdef WITH_XR_OPENXR
/* wm_xr.c */
-bool WM_xr_is_session_running(const wmXrData *xr);
+bool WM_xr_session_is_running(const wmXrData *xr);
void WM_xr_session_state_viewer_location_get(const wmXrData *xr, float location[3]);
void WM_xr_session_state_viewer_rotation_get(const wmXrData *xr, float rotation[4]);
void WM_xr_session_state_viewer_matrix_info_get(const wmXrData *xr,
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index d3d2ae2c910..50985174dee 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -3681,7 +3681,7 @@ static int wm_xr_session_toggle_exec(bContext *C, wmOperator *UNUSED(op))
wm_xr_session_toggle(C, wm->xr.context);
- if (!WM_xr_is_session_running(&wm->xr) || !wm->xr.session_state) {
+ if (!WM_xr_session_is_running(&wm->xr)) {
wm_xr_session_disable_mirror_views(CTX_data_main(C));
}
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index 2fb6929bfbe..bdb53d01fad 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -303,7 +303,7 @@ static void wm_xr_runtime_session_state_info_update(bXrRuntimeSessionState *stat
void WM_xr_session_state_viewer_location_get(const wmXrData *xr, float location[3])
{
- if (!WM_xr_is_session_running(xr) || !xr->session_state->last_known.is_initialized) {
+ if (!WM_xr_session_is_running(xr) || !xr->session_state->last_known.is_initialized) {
return;
}
@@ -312,7 +312,7 @@ void WM_xr_session_state_viewer_location_get(const wmXrData *xr, float location[
void WM_xr_session_state_viewer_rotation_get(const wmXrData *xr, float rotation[4])
{
- if (!WM_xr_is_session_running(xr) || !xr->session_state->last_known.is_initialized) {
+ if (!WM_xr_session_is_running(xr) || !xr->session_state->last_known.is_initialized) {
return;
}
@@ -323,7 +323,7 @@ void WM_xr_session_state_viewer_matrix_info_get(const wmXrData *xr,
float r_viewmat[4][4],
float *r_focal_len)
{
- if (!WM_xr_is_session_running(xr) || !xr->session_state->last_known.is_initialized) {
+ if (!WM_xr_session_is_running(xr) || !xr->session_state->last_known.is_initialized) {
return;
}
@@ -376,7 +376,7 @@ void wm_xr_session_toggle(bContext *C, void *xr_context_ptr)
GHOST_XrContextHandle xr_context = xr_context_ptr;
wmWindowManager *wm = CTX_wm_manager(C);
- if (WM_xr_is_session_running(&wm->xr)) {
+ if (WM_xr_session_is_running(&wm->xr)) {
GHOST_XrSessionEnd(xr_context);
wm_xr_runtime_session_state_free(&wm->xr.session_state);
}
@@ -390,11 +390,21 @@ void wm_xr_session_toggle(bContext *C, void *xr_context_ptr)
}
}
-bool WM_xr_is_session_running(const wmXrData *xr)
+/**
+ * The definition used here to define a session as running differs slightly from the OpenXR
+ * sepecification one: Here we already consider a session as stopped when session-end request was
+ * issued. Ghost-XR may still have to handle session logic then, but Blender specific handling
+ * should be stopped then.
+ * This check should be used from external calls to WM_xr. Internally, GHOST_XrSessionIsRunning()
+ * may have to be called instead. It checks for the running state according to the OpenXR
+ * specification.
+ */
+bool WM_xr_session_is_running(const wmXrData *xr)
{
- /* wmXrData.session_state will be NULL if session end was requested. In that case, pretend like
- * it's already */
- return xr->context && GHOST_XrSessionIsRunning(xr->context);
+ /* wmXrData.session_state will be NULL if session end was requested. That's what we use here to
+ * define if the session was already stopped (even if according to OpenXR, it's still considered
+ * running). */
+ return xr->context && xr->session_state && GHOST_XrSessionIsRunning(xr->context);
}
/** \} */ /* XR-Session */
More information about the Bf-blender-cvs
mailing list