[Bf-blender-cvs] [247267dee4c] xr-actions-D9124: XR: Use common functions for modal_3d operators
Peter Kim
noreply at git.blender.org
Mon Feb 8 16:45:13 CET 2021
Commit: 247267dee4c4b33a41c95805ea41393135482766
Author: Peter Kim
Date: Tue Feb 9 00:11:49 2021 +0900
Branches: xr-actions-D9124
https://developer.blender.org/rB247267dee4c4b33a41c95805ea41393135482766
XR: Use common functions for modal_3d operators
Reduces the amount of similar code for XR invoke_3d/modal_3d
operators that manipulate view3d params.
===================================================================
M source/blender/editors/include/ED_view3d.h
M source/blender/editors/space_view3d/view3d_select.c
M source/blender/editors/space_view3d/view3d_view.c
M source/blender/editors/transform/transform_ops.c
M source/blender/windowmanager/intern/wm_gesture_ops.c
===================================================================
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index fd4c6385b5d..90b90e6463e 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -725,6 +725,21 @@ void ED_view3d_buttons_region_layout_ex(const struct bContext *C,
bool ED_view3d_local_collections_set(struct Main *bmain, struct View3D *v3d);
void ED_view3d_local_collections_reset(struct bContext *C, const bool reset_all);
+void ED_view3d_view_params_get(const struct View3D *v3d,
+ const struct RegionView3D *rv3d,
+ float *r_lens,
+ float *r_clip_start,
+ float *r_clip_end,
+ float r_viewmat[4][4]);
+void ED_view3d_view_params_set(struct Depsgraph *depsgraph,
+ struct Scene *scene,
+ struct View3D *v3d,
+ struct ARegion *region,
+ const float lens,
+ const float clip_start,
+ const float clip_end,
+ const float viewmat[4][4]);
+
#ifdef WITH_XR_OPENXR
void ED_view3d_xr_mirror_update(const struct ScrArea *area,
const struct View3D *v3d,
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 8745846d74b..f32e51e266e 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -2532,16 +2532,15 @@ static int view3d_select_invoke_3d(bContext *C, wmOperator *op, const wmEvent *e
/* Since this function is called in a window context, we need to replace the
* window view parameters with the XR surface counterparts to get a correct
* result for GPU select. */
- lens_prev = v3d->lens;
- clip_start_prev = v3d->clip_start;
- clip_end_prev = v3d->clip_end;
- copy_m4_m4(viewmat_prev, rv3d->viewmat);
-
- v3d->lens = actiondata->eye_lens;
- v3d->clip_start = xr->session_settings.clip_start;
- v3d->clip_end = xr->session_settings.clip_end;
- ED_view3d_update_viewmat(
- depsgraph, scene, v3d, region, actiondata->eye_viewmat, NULL, NULL, false);
+ ED_view3d_view_params_get(v3d, rv3d, &lens_prev, &clip_start_prev, &clip_end_prev, viewmat_prev);
+ ED_view3d_view_params_set(depsgraph,
+ scene,
+ v3d,
+ region,
+ actiondata->eye_lens,
+ xr->session_settings.clip_start,
+ xr->session_settings.clip_end,
+ actiondata->eye_viewmat);
map_to_pixel(mval,
actiondata->controller_loc,
@@ -2555,10 +2554,8 @@ static int view3d_select_invoke_3d(bContext *C, wmOperator *op, const wmEvent *e
retval = view3d_select_exec(C, op);
/* Restore window view. */
- v3d->lens = lens_prev;
- v3d->clip_start = clip_start_prev;
- v3d->clip_end = clip_end_prev;
- ED_view3d_update_viewmat(depsgraph, scene, v3d, region, viewmat_prev, NULL, NULL, false);
+ ED_view3d_view_params_set(
+ depsgraph, scene, v3d, region, lens_prev, clip_start_prev, clip_end_prev, viewmat_prev);
return retval;
}
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 9d947384bf0..4405fd9abc3 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1693,6 +1693,44 @@ void ED_view3d_local_collections_reset(struct bContext *C, const bool reset_all)
/** \name XR Functionality
* \{ */
+/* Used for invoke_3d/modal_3d (XR) operators. */
+void ED_view3d_view_params_get(const struct View3D *v3d,
+ const struct RegionView3D *rv3d,
+ float *r_lens,
+ float *r_clip_start,
+ float *r_clip_end,
+ float r_viewmat[4][4])
+{
+ *r_lens = v3d->lens;
+ *r_clip_start = v3d->clip_start;
+ *r_clip_end = v3d->clip_end;
+
+ if (r_viewmat) {
+ copy_m4_m4(r_viewmat, rv3d->viewmat);
+ }
+}
+
+void ED_view3d_view_params_set(struct Depsgraph *depsgraph,
+ struct Scene *scene,
+ struct View3D *v3d,
+ struct ARegion *region,
+ const float lens,
+ const float clip_start,
+ const float clip_end,
+ const float viewmat[4][4])
+{
+ v3d->lens = lens;
+ v3d->clip_start = clip_start;
+ v3d->clip_end = clip_end;
+
+ if (viewmat) {
+ ED_view3d_update_viewmat(depsgraph, scene, v3d, region, viewmat, NULL, NULL, false);
+ }
+ else {
+ view3d_winmatrix_set(depsgraph, region, v3d, NULL);
+ }
+}
+
#ifdef WITH_XR_OPENXR
static void view3d_xr_mirror_begin(RegionView3D *rv3d)
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 50fc2553962..e4bc48508c4 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -496,15 +496,16 @@ static int transform_modal_3d(bContext *C, wmOperator *op, const wmEvent *event)
memcpy(&event_mut, event, sizeof(wmEvent));
/* Replace window view parameters with XR surface counterparts. */
- lens_prev = v3d->lens;
- clip_start_prev = v3d->clip_start;
- clip_end_prev = v3d->clip_end;
- copy_m4_m4(viewmat_prev, rv3d->viewmat);
-
- v3d->lens = actiondata->eye_lens;
- v3d->clip_start = xr->session_settings.clip_start;
- v3d->clip_end = xr->session_settings.clip_end;
- ED_view3d_update_viewmat(depsgraph, scene, v3d, region, t->viewmat, NULL, NULL, false);
+ ED_view3d_view_params_get(v3d, rv3d, &lens_prev, &clip_start_prev, &clip_end_prev, viewmat_prev);
+ ED_view3d_view_params_set(
+ depsgraph,
+ scene,
+ v3d,
+ region,
+ actiondata->eye_lens,
+ xr->session_settings.clip_start,
+ xr->session_settings.clip_end,
+ t->viewmat); /* Use viewmat from when transform was invoked instead of latest XR viewmat. */
map_to_pixel(event_mut.mval,
actiondata->controller_loc,
@@ -527,10 +528,8 @@ static int transform_modal_3d(bContext *C, wmOperator *op, const wmEvent *event)
retval = transform_modal(C, op, &event_mut);
/* Restore window view. */
- v3d->lens = lens_prev;
- v3d->clip_start = clip_start_prev;
- v3d->clip_end = clip_end_prev;
- ED_view3d_update_viewmat(depsgraph, scene, v3d, region, viewmat_prev, NULL, NULL, false);
+ ED_view3d_view_params_set(
+ depsgraph, scene, v3d, region, lens_prev, clip_start_prev, clip_end_prev, viewmat_prev);
return retval;
}
@@ -618,16 +617,15 @@ static int transform_invoke_3d(bContext *C, wmOperator *op, const wmEvent *event
event_mut.type = LEFTMOUSE;
/* Replace window view parameters with XR surface counterparts. */
- lens_prev = v3d->lens;
- clip_start_prev = v3d->clip_start;
- clip_end_prev = v3d->clip_end;
- copy_m4_m4(viewmat_prev, rv3d->viewmat);
-
- v3d->lens = actiondata->eye_lens;
- v3d->clip_start = xr->session_settings.clip_start;
- v3d->clip_end = xr->session_settings.clip_end;
- ED_view3d_update_viewmat(
- depsgraph, scene, v3d, region, actiondata->eye_viewmat, NULL, NULL, false);
+ ED_view3d_view_params_get(v3d, rv3d, &lens_prev, &clip_start_prev, &clip_end_prev, viewmat_prev);
+ ED_view3d_view_params_set(depsgraph,
+ scene,
+ v3d,
+ region,
+ actiondata->eye_lens,
+ xr->session_settings.clip_start,
+ xr->session_settings.clip_end,
+ actiondata->eye_viewmat);
map_to_pixel(event_mut.mval,
actiondata->controller_loc,
@@ -639,10 +637,8 @@ static int transform_invoke_3d(bContext *C, wmOperator *op, const wmEvent *event
retval = transform_invoke(C, op, &event_mut);
/* Restore window view. */
- v3d->lens = lens_prev;
- v3d->clip_start = clip_start_prev;
- v3d->clip_end = clip_end_prev;
- ED_view3d_update_viewmat(depsgraph, scene, v3d, region, viewmat_prev, NULL, NULL, false);
+ ED_view3d_view_params_set(
+ depsgraph, scene, v3d, region, lens_prev, clip_start_prev, clip_end_prev, viewmat_prev);
return retval;
}
diff --git a/source/blender/windowmanager/intern/wm_gesture_ops.c b/source/blender/windowmanager/intern/wm_gesture_ops.c
index a0a923ffa54..112512b3649 100644
--- a/source/blender/windowmanager/intern/wm_gesture_ops.c
+++ b/source/blender/windowmanager/intern/wm_gesture_ops.c
@@ -214,6 +214,7 @@ int WM_gesture_box_invoke_3d(bContext *C, wmOperator *op, const wmEvent *event)
const wmXrActionData *actiondata = event->customdata;
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
+ Scene *scene = CTX_data_scene(C);
View3D *v3d = CTX_wm_view3d(C);
ARegion *region = CTX_wm_region(C);
RegionView3D *rv3d = region->regiondata;
@@ -228,14 +229,15 @@ int WM_gesture_box_invoke_3d(bContext *C, wmOperator *op, const wmEvent *event)
memcpy(&event_mut, event, sizeof(wmEvent));
/* Replace window view parameters with XR surface counterparts. */
- lens_prev = v3d->lens;
- clip_start_prev = v3d->clip_start;
- clip_end_prev = v3d->clip_end;
-
- v3d->lens = actiondata->eye_lens;
- v3d->clip_start = xr->session_settings.clip_start;
- v3d->clip_end = xr->session_settings.clip_end;
- view3d_winmatrix_set(depsgraph, region, v3d, NULL);
+ ED_view3d_view_params_get(v3d, rv3d, &lens_prev, &clip_start_prev, &clip_end_prev, NULL);
+ ED_view3d_view_params_set(depsgraph,
+ scene,
+ v3d,
+ region,
+ actiondata->eye_lens,
+ xr->session_settings.
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list