[Bf-blender-cvs] [f8cfffe] HMD_viewport: Use center as pivot for rotating views, avoid passing around arg

Julian Eisel noreply at git.blender.org
Wed Oct 12 13:27:54 CEST 2016


Commit: f8cfffec4f4c1f87fc9a958284dddeb6bd45229d
Author: Julian Eisel
Date:   Tue Oct 11 22:44:14 2016 +0200
Branches: HMD_viewport
https://developer.blender.org/rBf8cfffec4f4c1f87fc9a958284dddeb6bd45229d

Use center as pivot for rotating views, avoid passing around arg

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

M	source/blender/editors/space_view3d/view3d_draw.c

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

diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 0ba48cc..c9c5fde 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3775,15 +3775,17 @@ static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar, const
 #else
 	if (is_hmd_view) {
 		Camera *data = v3d->camera->data;
-		short view_format = scene->r.views_format;
-		short convergence_mode = data->stereo.convergence_mode;
-		float ipd_override = (U.hmd_device != -1 && (scene->hmd_settings.flag & HMDVIEW_USE_DEVICE_IPD)) ?
-		                         WM_device_HMD_IPD_get() : scene->hmd_settings.interocular_distance;
+		const short view_format = scene->r.views_format;
+		const short convergence_mode = data->stereo.convergence_mode;
+		const short pivot = data->stereo.pivot;
+		const float ipd_override = (U.hmd_device != -1 && (scene->hmd_settings.flag & HMDVIEW_USE_DEVICE_IPD)) ?
+		                               WM_device_HMD_IPD_get() : scene->hmd_settings.interocular_distance;
 		float viewmat[4][4];
 		float projmat[4][4];
 
 		BLI_lock_thread(LOCK_VIEW3D);
 		data->stereo.convergence_mode = CAM_S3D_PARALLEL;
+		data->stereo.pivot = CAM_S3D_PIVOT_CENTER;
 		scene->r.views_format = SCE_VIEWS_FORMAT_STEREO_3D;
 
 		BKE_camera_multiview_view_matrix(&scene->r, v3d->camera, is_left, ipd_override, viewmat);
@@ -3792,6 +3794,7 @@ static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar, const
 		view3d_main_region_setup_view(scene, v3d, ar, viewmat, projmat);
 
 		data->stereo.convergence_mode = convergence_mode;
+		data->stereo.pivot = pivot;
 		scene->r.views_format = view_format;
 		BLI_unlock_thread(LOCK_VIEW3D);
 	}
@@ -3865,10 +3868,19 @@ static void update_lods(Scene *scene, float camera_pos[3])
 }
 #endif
 
+static bool view3d_stereo3d_is_hmd_view(wmWindowManager *wm, wmWindow *win, Scene *scene)
+{
+#ifdef WITH_INPUT_HMD
+	return (wm->win_hmd == win && (scene->hmd_settings.flag & HMDVIEW_SESSION_RUNNING));
+#else
+	UNUSED_VARS(wm, win, scene);
+	return false;
+#endif
+}
+
 static void view3d_main_region_draw_objects(
         const bContext *C, Scene *scene, View3D *v3d,
-        ARegion *ar, const char **grid_unit,
-        const bool is_hmd_view)
+        ARegion *ar, const char **grid_unit)
 {
 	wmWindow *win = CTX_wm_window(C);
 	RegionView3D *rv3d = ar->regiondata;
@@ -3889,6 +3901,7 @@ static void view3d_main_region_draw_objects(
 
 	/* setup the view matrix */
 	if (view3d_stereo3d_active(C, scene, v3d, rv3d)) {
+		const bool is_hmd_view = view3d_stereo3d_is_hmd_view(CTX_wm_manager(C), win, scene);
 		view3d_stereo3d_setup(scene, v3d, ar, is_hmd_view);
 	}
 	else {
@@ -4074,13 +4087,6 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
 	const char *grid_unit = NULL;
 	rcti border_rect;
 	bool render_border, clip_border;
-	const bool is_hmd_view =
-#ifdef WITH_INPUT_HMD
-	        ((CTX_wm_manager(C)->win_hmd == CTX_wm_window(C)) &&
-	         (scene->hmd_settings.flag & HMDVIEW_SESSION_RUNNING));
-#else
-	        false;
-#endif
 
 	/* if we only redraw render border area, skip opengl draw and also
 	 * don't do scissor because it's already set */
@@ -4089,7 +4095,7 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
 
 	/* draw viewport using opengl */
 	if (v3d->drawtype != OB_RENDER || !view3d_main_region_do_render_draw(scene) || clip_border) {
-		view3d_main_region_draw_objects(C, scene, v3d, ar, &grid_unit, is_hmd_view);
+		view3d_main_region_draw_objects(C, scene, v3d, ar, &grid_unit);
 		
 #ifdef DEBUG_DRAW
 		bl_debug_draw();
@@ -4099,7 +4105,7 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
 		
 		ED_region_pixelspace(ar);
 
-		if (is_hmd_view) {
+		if (view3d_stereo3d_is_hmd_view(CTX_wm_manager(C), CTX_wm_window(C), scene)) {
 			return;
 		}
 	}




More information about the Bf-blender-cvs mailing list