[Bf-blender-cvs] [d3b80c4734d] blender2.8: T55014: Optionally: objects not cast shadows in workbench

Jeroen Bakker noreply at git.blender.org
Wed May 9 15:16:49 CEST 2018


Commit: d3b80c4734d1cc5ece8d3eca5f95068eaec85e81
Author: Jeroen Bakker
Date:   Wed May 9 15:13:12 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd3b80c4734d1cc5ece8d3eca5f95068eaec85e81

T55014: Optionally: objects not cast shadows in workbench

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

M	release/scripts/startup/bl_ui/properties_object.py
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/draw/engines/workbench/workbench_materials.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_object.c

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

diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index 2d2ab4623e0..95193b68945 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -253,6 +253,8 @@ class OBJECT_PT_display(ObjectButtonsPanel, Panel):
 
         if is_geometry:
             col.prop(obj, "show_texture_space", text="Texture Space")
+            col.prop(obj.display, "show_shadows")
+
         col.prop(obj, "show_x_ray", text="X-Ray")
         if obj_type == 'MESH' or is_empty_image:
             col.prop(obj, "show_transparent", text="Transparency")
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index db550df2909..fc6a42e5cf8 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -707,6 +707,8 @@ void BKE_object_init(Object *ob)
 	
 	/* Animation Visualization defaults */
 	animviz_settings_init(&ob->avs);
+
+	ob->display.flag = OB_SHOW_SHADOW;
 }
 
 /* more general add: creates minimum required data, but without vertices etc. */
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 103cf819db1..a4c14d31b2c 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -1086,5 +1086,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
 				copy_v3_v3(scene->display.light_direction, default_light_direction);
 			}
 		}
+
+		if (!DNA_struct_elem_find(fd->filesdna, "Object", "ObjectDisplay", "display")) {
+			/* Initialize new object.ObjectDisplay */
+			for (Object *ob = main->object.first; ob; ob = ob->id.next) {
+				ob->display.flag = OB_SHOW_SHADOW;
+			}
+		}
 	}
 }
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index d334a971eef..7f6fa0d62a6 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -557,7 +557,7 @@ void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob
 			}
 		}
 
-		if (SHADOW_ENABLED(wpd)) {
+		if (SHADOW_ENABLED(wpd) && (ob->display.flag & OB_SHOW_SHADOW) > 0) {
 			struct Gwn_Batch *geom_shadow = DRW_cache_object_surface_get(ob);
 			if (geom_shadow) {
 				DRW_shgroup_call_object_add(wpd->shadow_shgrp, geom_shadow, ob);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 406d522cc37..4014874a5b9 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -1090,6 +1090,7 @@ static void view3d_main_region_message_subscribe(
 #endif
 
 	WM_msg_subscribe_rna_anon_type(mbus, SceneDisplay, &msg_sub_value_region_tag_redraw);
+	WM_msg_subscribe_rna_anon_type(mbus, ObjectDisplay, &msg_sub_value_region_tag_redraw);
 
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	Object *obact = OBACT(view_layer);
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index c5218f85f6a..5139e54b577 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -139,6 +139,10 @@ typedef struct LodLevel {
 	int obhysteresis;
 } LodLevel;
 
+typedef struct ObjectDisplay {
+	int flag;
+} ObjectDisplay;
+
 typedef struct Object {
 	ID id;
 	struct AnimData *adt;		/* animation data (must be immediately after id for utilities to use it) */ 
@@ -299,6 +303,10 @@ typedef struct Object {
 	 * It has all modifiers applied.
 	 */
 	struct Mesh *mesh_evaluated;
+
+	/* Object Display */
+	struct ObjectDisplay display;
+	int pad9;
 } Object;
 
 /* Warning, this is not used anymore because hooks are now modifiers */
@@ -366,6 +374,11 @@ enum {
 	OB_ARMATURE   = 25,
 };
 
+/* ObjectDisplay.flag */
+enum {
+	OB_SHOW_SHADOW = (1 << 0),
+};
+
 /* check if the object type supports materials */
 #define OB_TYPE_SUPPORT_MATERIAL(_type) \
 	((_type) >= OB_MESH && (_type) <= OB_MBALL)
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 5c81761be64..ce0565f1664 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -442,6 +442,7 @@ extern StructRNA RNA_NoiseTexture;
 extern StructRNA RNA_NorController;
 extern StructRNA RNA_Object;
 extern StructRNA RNA_ObjectBase;
+extern StructRNA RNA_ObjectDisplay;
 extern StructRNA RNA_ObstacleFluidSettings;
 extern StructRNA RNA_OceanModifier;
 extern StructRNA RNA_OceanTexData;
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index f2b71e20ab9..234f754b331 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -1817,6 +1817,22 @@ static void rna_def_object_face_maps(BlenderRNA *brna, PropertyRNA *cprop)
 	RNA_def_function_ui_description(func, "Delete all vertex groups from object");
 }
 
+static void rna_def_object_display(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna = RNA_def_struct(brna, "ObjectDisplay", NULL);
+	RNA_def_struct_ui_text(srna, "Object Display", "Object display settings for 3d viewport");
+	RNA_def_struct_sdna(srna, "ObjectDisplay");
+
+	prop = RNA_def_property(srna, "show_shadows", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_SHOW_SHADOW);
+	RNA_def_property_boolean_default(prop, true);
+	RNA_def_property_ui_text(prop, "Shadow", "Object cast shadows in the 3d viewport");
+	RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
+}
+
 static void rna_def_object(BlenderRNA *brna)
 {
 	StructRNA *srna;
@@ -2488,6 +2504,12 @@ static void rna_def_object(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Base from Set", "Object comes from a background set");
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 
+	/* Object Display */
+	prop = RNA_def_property(srna, "display", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "display");
+	RNA_def_property_struct_type(prop, "ObjectDisplay");
+	RNA_def_property_ui_text(prop, "Object Display", "Object display settings for 3d viewport");
+
 	RNA_api_object(srna);
 }
 
@@ -2558,6 +2580,7 @@ void RNA_def_object(BlenderRNA *brna)
 	rna_def_face_map(brna);
 	rna_def_material_slot(brna);
 	rna_def_dupli_object(brna);
+	rna_def_object_display(brna);
 	RNA_define_animate_sdna(true);
 }



More information about the Bf-blender-cvs mailing list