[Bf-blender-cvs] [24f4c98] HMD_viewport: Move interocular distance settings out of camera data

Julian Eisel noreply at git.blender.org
Sun Oct 9 03:11:35 CEST 2016


Commit: 24f4c98cc2faf269b05e9ecae6507467da4a4751
Author: Julian Eisel
Date:   Sun Oct 9 03:08:03 2016 +0200
Branches: HMD_viewport
https://developer.blender.org/rB24f4c98cc2faf269b05e9ecae6507467da4a4751

Move interocular distance settings out of camera data

These aren't just for the camera, but for entire HMD session.

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

M	release/scripts/startup/bl_ui/properties_data_camera.py
M	release/scripts/startup/bl_ui/properties_render_layer.py
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_camera.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py
index 7283ed5..bee4286 100644
--- a/release/scripts/startup/bl_ui/properties_data_camera.py
+++ b/release/scripts/startup/bl_ui/properties_data_camera.py
@@ -156,12 +156,6 @@ class DATA_PT_camera_stereoscopy(CameraButtonsPanel, Panel):
         is_spherical_stereo = cam.type != 'ORTHO' and render.use_spherical_stereo
         use_spherical_stereo = is_spherical_stereo and st.use_spherical_stereo
 
-        col.prop(st, "use_device_ipd")
-        subcol = col.column()
-        subcol.active = not st.use_device_ipd
-        # TODO needs own property for HMD IPD
-        # subcol.prop(st, "interocular_distance")
-
         col.row().prop(st, "convergence_mode", expand=True)
 
         sub = col.column()
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index 66a0255..316a439 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -201,7 +201,7 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
         rv = rd.views.active
         wm = context.window_manager
 
-        layout.active = rd.use_multiview
+        layout.enabled = rd.use_multiview
         basic_stereo = rd.views_format == 'STEREO_3D'
 
         row = layout.row()
@@ -240,9 +240,16 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
         row.operator("wm.hmd_view_toggle", text=text_win)
         row.operator("wm.hmd_session_run", text=text_run, icon=icon)
 
-        col.prop(scene, "hmd_camlock")
-        col.prop(scene, "use_hmd_view_lensdist", text="Lens Distortion")
-        col.prop(scene, "hmd_view_shade", text="Shading")
+        row = col.row()
+        row.prop(scene, "hmd_camlock")
+        row.prop(scene, "use_hmd_view_lensdist", text="Lens Distortion")
+
+        layout.prop(scene, "hmd_view_shade", text="Shading")
+        layout.prop(scene, "use_hmd_device_ipd")
+
+        col = layout.column()
+        col.active = not scene.use_hmd_device_ipd
+        col.prop(scene, "hmd_interocular_distance")
 
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 8ecb3d5..d9f9b40 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1569,12 +1569,12 @@ typedef struct DisplaySafeAreas {
 /* HMD View Settings */
 
 /**
- * Settings that will be applied to the already opened HMD view or when opening one.
+ * Settings that will be applied to the already opened HMD view or when opening it.
  */
 struct HMDViewSettings {
 	char view_shade; /* rna_enum_viewport_shade_items */
-	char flag;
-	char pad[2];
+	char flag, pad[2];
+	float interocular_distance;
 };
 
 /* HMDViewSettings.flag */
@@ -1582,6 +1582,7 @@ enum {
 	HMDVIEW_SESSION_RUNNING = (1 << 0),
 	HMDVIEW_IGNORE_ROT      = (1 << 1),
 	HMDVIEW_USE_LENSDIST_FX = (1 << 2),
+	HMDVIEW_USE_DEVICE_IPD  = (1 << 3),
 };
 
 /* *************************************************************** */
@@ -1677,7 +1678,6 @@ typedef struct Scene {
 	struct PreviewImage *preview;
 
 	struct HMDViewSettings hmd_settings;
-	int pad2;
 } Scene;
 
 /* **************** RENDERDATA ********************* */
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index 367b20d..8470668 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -44,25 +44,6 @@
 
 #include "WM_api.h"
 
-static int rna_camera_stereo_use_device_ipd_editeable(PointerRNA *ptr, const char **r_info)
-{
-#ifdef WITH_INPUT_HMD
-	if (U.hmd_device == -1 || WM_device_HMD_IPD_get() == -1) {
-		Camera *cam = ptr->id.data;
-
-		*r_info = (U.hmd_device == -1) ?
-		              "No valid HMD device selected (see User Preferences)" :
-		              "Active HMD device doesn't return valid interocular distance";
-
-		cam->stereo.flag |= CAM_S3D_CUSTOM_IPD;
-		return false;
-	}
-#else
-	UNUSED_VARS(ptr);
-#endif
-	return PROP_EDITABLE;
-}
-
 static float rna_Camera_angle_get(PointerRNA *ptr)
 {
 	Camera *cam = ptr->id.data;
@@ -151,13 +132,6 @@ static void rna_def_camera_stereo_data(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Pivot", "");
 	RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
 
-	prop = RNA_def_property(srna, "use_device_ipd", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CAM_S3D_CUSTOM_IPD);
-	RNA_def_property_ui_text(prop, "Interocular Distance from HMD",
-	                         "Request the interocular distance (distance between eyes) from the HMD driver");
-	RNA_def_property_editable_func(prop, "rna_camera_stereo_use_device_ipd_editeable");
-	RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
-
 	prop = RNA_def_property(srna, "interocular_distance", PROP_FLOAT, PROP_DISTANCE);
 	RNA_def_property_range(prop, 0.0f, FLT_MAX);
 	RNA_def_property_ui_range(prop, 0.0f, 1e4f, 1, 3);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index e8a9588..1ea9e1b 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -743,7 +743,7 @@ static void rna_Scene_hmd_camlock_update(
 
 static void rna_Scene_hmd_view_shade_set(PointerRNA *ptr, int value)
 {
-	Scene *scene = (Scene *)ptr->data;
+	Scene *scene = ptr->data;
 	wmWindowManager *wm = G.main->wm.first;
 	wmWindow *win = wm->win_hmd;
 
@@ -763,7 +763,7 @@ static void rna_Scene_hmd_view_shade_set(PointerRNA *ptr, int value)
 
 static void rna_Scene_hmd_view_lensdist_set(PointerRNA *ptr, int value)
 {
-	Scene *scene = (Scene *)ptr->data;
+	Scene *scene = ptr->data;
 	wmWindowManager *wm = G.main->wm.first;
 	wmWindow *win = wm->win_hmd;
 
@@ -790,6 +790,23 @@ static void rna_Scene_hmd_view_lensdist_set(PointerRNA *ptr, int value)
 		}
 	}
 }
+
+static int rna_Scene_use_hmd_device_ipd_editeable(PointerRNA *ptr, const char **r_info)
+{
+
+	if (U.hmd_device == -1 || WM_device_HMD_IPD_get() == -1) {
+		Scene *scene = ptr->data;
+
+		*r_info = (U.hmd_device == -1) ?
+		              "No valid HMD device selected (see User Preferences)" :
+		              "Active HMD device doesn't return valid interocular distance";
+
+		scene->hmd_settings.flag |= HMDVIEW_USE_DEVICE_IPD;
+		return false;
+	}
+
+	return PROP_EDITABLE;
+}
 #endif /* WITH_INPUT_HMD */
 
 static void rna_Scene_framelen_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
@@ -7358,6 +7375,21 @@ void RNA_def_scene(BlenderRNA *brna)
 	RNA_def_property_boolean_sdna(prop, NULL, "hmd_settings.flag", HMDVIEW_USE_LENSDIST_FX);
 	RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_hmd_view_lensdist_set");
 	RNA_def_property_ui_text(prop, "HMD View Lens Distortion", "Draw the HMD viewport using a distorted lens");
+
+	prop = RNA_def_property(srna, "use_hmd_device_ipd", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_negative_sdna(prop, NULL, "hmd_settings.flag", HMDVIEW_USE_DEVICE_IPD);
+	RNA_def_property_ui_text(prop, "Interocular Distance from HMD",
+	                         "Request the interocular distance (distance between eyes) from the HMD driver");
+	RNA_def_property_editable_func(prop, "rna_Scene_use_hmd_device_ipd_editeable");
+	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+	prop = RNA_def_property(srna, "hmd_interocular_distance", PROP_FLOAT, PROP_DISTANCE);
+	RNA_def_property_float_sdna(prop, NULL, "hmd_settings.interocular_distance");
+	RNA_def_property_range(prop, 0.0f, FLT_MAX);
+	RNA_def_property_ui_range(prop, 0.0f, 1e4f, 1, 3);
+	RNA_def_property_ui_text(prop, "Interocular Distance",
+	                         "Set the distance between the eyes - the stereo plane distance / 30 should be fine");
+	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
 #endif
 
 	/* Nestled Data  */




More information about the Bf-blender-cvs mailing list