[Bf-blender-cvs] [759be70] HMD_viewport: Couple of fixes and make stuff working

Julian Eisel noreply at git.blender.org
Wed Mar 16 16:10:54 CET 2016


Commit: 759be70ab477d4283a05039259fb7d9888570306
Author: Julian Eisel
Date:   Thu Mar 10 07:25:06 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB759be70ab477d4283a05039259fb7d9888570306

Couple of fixes and make stuff working

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

M	release/scripts/startup/bl_ui/properties_render_layer.py
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_ops.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesdna/DNA_screen_types.h
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index 0ae63cf..2b91855 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -225,9 +225,13 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
             row.label(text="Camera Suffix:")
             row.prop(rv, "camera_suffix", text="")
         else:
+            icon = 'PAUSE' if scene.hmd_running else 'PLAY'
             col = layout.column()
             col.prop(rd, "hmd_camlock")
-            col.operator("wm.hmd_view_open")
+            row = col.row(align=True)
+
+            row.operator("wm.hmd_view_open")
+            row.operator("view3d.hmd_run", text="", icon=icon)
 
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 74c9995..ede051e 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4809,7 +4809,7 @@ typedef struct HMDData {
 static int hmd_refresh_poll(bContext *C)
 {
 	Scene *scene = CTX_data_scene(C);
-	return (scene->r.scemode & R_HMD_USE_CAM) != 0;
+	return ((scene->r.scemode & R_HMD_IGNORE_ROT) == 0 && (scene->flag & SCE_HMD_RUNNING));
 }
 
 static int hmd_refresh_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
@@ -4845,6 +4845,109 @@ void VIEW3D_OT_hmd_refresh(wmOperatorType *ot)
 	ot->flag = OPTYPE_INTERNAL;
 }
 
+static int hmd_refresh_exec(bContext *C, wmOperator *op)
+{
+	wmWindowManager *wm = CTX_wm_manager(C);
+	wmWindow *win;
+	Scene *scene = CTX_data_scene(C);
+
+	for (win = wm->windows.first; win; win = win->next) {
+		if (win->screen->flag & SCREEN_FLAG_HMD_SCREEN) {
+			break;
+		}
+	}
+	/* Sanity */
+	if (!win)
+		return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+
+	wmWindow *winstore = CTX_wm_window(C);
+	ScrArea *sastore = CTX_wm_area(C);
+	ARegion *arstore = CTX_wm_region(C);
+	CTX_wm_window_set(C, win);
+	CTX_wm_area_set(C, win->screen->areabase.first);
+	CTX_wm_region_set(C, BKE_area_find_region_type(win->screen->areabase.first, RGN_TYPE_WINDOW));
+	WM_operator_name_call(C, "WM_OT_window_fullscreen_toggle", WM_OP_EXEC_DEFAULT, NULL);
+	View3D *v3d = CTX_wm_view3d(C);
+	RegionView3D *rv3d = CTX_wm_region_view3d(C);
+	const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
+	
+	if ((rv3d->viewlock & RV3D_LOCKED) == 0) {
+		if (rv3d->persp != RV3D_CAMOB) {
+			Object *ob = OBACT;
+
+			if (!rv3d->smooth_timer) {
+				/* store settings of current view before allowing overwriting with camera view
+				 * only if we're not currently in a view transition */
+				
+				ED_view3d_lastview_store(rv3d);
+			}
+
+#if 0
+			if (G.qual == LR_ALTKEY) {
+				if (oldcamera && is_an_active_object(oldcamera)) {
+					v3d->camera = oldcamera;
+				}
+				handle_view3d_lock();
+			}
+#endif
+			
+			/* first get the default camera for the view lock type */
+			if (v3d->scenelock) {
+				/* sets the camera view if available */
+				v3d->camera = scene->camera;
+			}
+			else {
+				/* use scene camera if one is not set (even though we're unlocked) */
+				if (v3d->camera == NULL) {
+					v3d->camera = scene->camera;
+				}
+			}
+			
+			/* if the camera isn't found, check a number of options */
+			if (v3d->camera == NULL && ob && ob->type == OB_CAMERA)
+				v3d->camera = ob;
+			
+			if (v3d->camera == NULL)
+				v3d->camera = BKE_scene_camera_find(scene);
+			
+			/* couldnt find any useful camera, bail out */
+			if (v3d->camera == NULL)
+				return OPERATOR_CANCELLED;
+			
+			/* important these don't get out of sync for locked scenes */
+			if (v3d->scenelock)
+				scene->camera = v3d->camera;
+			
+			/* finally do snazzy view zooming */
+			rv3d->persp = RV3D_CAMOB;
+			ED_view3d_smooth_view(
+			            C, v3d, CTX_wm_region(C), smooth_viewtx,
+			            &(const V3D_SmoothParams) {
+			                .camera = v3d->camera, .ofs = rv3d->ofs, .quat = rv3d->viewquat,
+			                .dist = &rv3d->dist, .lens = &v3d->lens});
+		}
+	}
+	CTX_wm_region_set(C, arstore);
+	CTX_wm_area_set(C, sastore);
+	CTX_wm_window_set(C, winstore);
+	scene->flag ^= SCE_HMD_RUNNING;
+	return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_hmd_run(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Run HMD Session";
+	ot->description = "Start/Stop a head mounted display (virtual reality) session";
+	ot->idname = "VIEW3D_OT_hmd_run";
+
+	/* api callbacks */
+	ot->exec = hmd_refresh_exec;
+
+	/* flags */
+	ot->flag = OPTYPE_INTERNAL;
+}
+
 /* ************************* below the line! *********************** */
 
 
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index f0a36ef..f00a111 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -103,6 +103,8 @@ void VIEW3D_OT_enable_manipulator(struct wmOperatorType *ot);
 void VIEW3D_OT_render_border(struct wmOperatorType *ot);
 void VIEW3D_OT_clear_render_border(struct wmOperatorType *ot);
 void VIEW3D_OT_zoom_border(struct wmOperatorType *ot);
+void VIEW3D_OT_hmd_refresh(struct wmOperatorType *ot);
+void VIEW3D_OT_hmd_run(struct wmOperatorType *ot);
 
 void view3d_boxview_copy(ScrArea *sa, ARegion *ar);
 
@@ -271,7 +273,6 @@ void VIEW3D_OT_snap_cursor_to_grid(struct wmOperatorType *ot);
 void VIEW3D_OT_snap_cursor_to_center(struct wmOperatorType *ot);
 void VIEW3D_OT_snap_cursor_to_selected(struct wmOperatorType *ot);
 void VIEW3D_OT_snap_cursor_to_active(struct wmOperatorType *ot);
-void VIEW3D_OT_hmd_refresh(struct wmOperatorType *ot);
 
 /* space_view3d.c */
 ARegion *view3d_has_buttons_region(ScrArea *sa);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index c7c5399..a5d9212 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -219,7 +219,8 @@ void view3d_operatortypes(void)
 	WM_operatortype_append(VIEW3D_OT_snap_cursor_to_selected);
 	WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active);
 	WM_operatortype_append(VIEW3D_OT_hmd_refresh);
-		
+	WM_operatortype_append(VIEW3D_OT_hmd_run);
+
 	transform_operatortypes();
 }
 
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 305b4a3..273d69d 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -416,6 +416,7 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), const w
 		WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
 	}
 	else {
+		WM_event_add_mousemove(C);
 		ED_region_tag_redraw(CTX_wm_region(C));
 	}
 	
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index ce64c56..3d5a7ae 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1558,10 +1558,11 @@ typedef struct Scene {
 
 /* flag */
 	/* use preview range */
-#define SCER_PRV_RANGE	(1<<0)
-#define SCER_LOCK_FRAME_SELECTION	(1<<1)
+#define SCER_PRV_RANGE            (1 << 0)
+#define SCER_LOCK_FRAME_SELECTION (1 << 1)
 	/* timeline/keyframe jumping - only selected items (on by default) */
-#define SCE_KEYS_NO_SELONLY	(1<<2)
+#define SCE_KEYS_NO_SELONLY       (1 << 2)
+#define SCE_HMD_RUNNING           (1 << 3)
 
 /* mode (int now) */
 #define R_OSA			0x0001
@@ -1657,7 +1658,7 @@ typedef struct Scene {
 #define R_VIEWPORT_PREVIEW	0x80000
 #define R_EXR_CACHE_FILE	0x100000
 #define R_MULTIVIEW			0x200000
-#define R_HMD_USE_CAM		0x400000
+#define R_HMD_IGNORE_ROT	0x400000
 
 /* r->stamp */
 #define R_STAMP_TIME 	0x0001
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 1c11350..548e80a 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -69,7 +69,8 @@ typedef struct bScreen {
 	char swap;							/* indicator to survive swap-exchange systems */
 	char skip_handling;					/* set to delay screen handling after switching back from maximized area */
 	char scrubbing;						/* set when scrubbing to avoid some costly updates */
-	char pad[6];
+	short flag;
+	char pad[4];
 	
 	short mainwin;						/* screensize subwindow, for screenedges and global menus */
 	short subwinactive;					/* active subwindow */
@@ -78,6 +79,10 @@ typedef struct bScreen {
 	void *context;						/* context callback */
 } bScreen;
 
+enum eScreenFlag {
+	SCREEN_FLAG_HMD_SCREEN = (1 << 0),
+};
+
 typedef struct ScrVert {
 	struct ScrVert *next, *prev, *newv;
 	vec2s vec;
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 92fe4a8..c3b666b 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -5924,7 +5924,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Render Views", "");
 
 	prop = RNA_def_property(srna, "hmd_camlock", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_HMD_USE_CAM);
+	RNA_def_property_boolean_negative_sdna(prop, NULL, "scemode", R_HMD_IGNORE_ROT);
 	RNA_def_property_ui_text(prop, "HMD Rotation", "Use the rotation of a head mounted display if available");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_RenderSettings_hmd_camlock_update");
 
@@ -6698,6 +6698,12 @@ void RNA_def_scene(BlenderRNA *brna)
 	RNA_def_property_struct_type(prop, "Depsgraph");
 	RNA_def_property_ui_text(prop, "Dependency Graph", "Dependencies in the scene data");
 
+	prop = RNA_def_property(srna, "hmd_running", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_HMD_RUNNING);
+	RNA_def_property_ui_text(prop, "HMD Running", "");
+	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
 	/* Nestled Data  */
 	/* *** Non-Animated *** */
 	RNA_define_anim

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list