From d3b80c4734d1cc5ece8d3eca5f95068eaec85e81 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Wed, 9 May 2018 15:13:12 +0200 Subject: T55014: Optionally: objects not cast shadows in workbench --- source/blender/blenkernel/intern/object.c | 2 ++ source/blender/blenloader/intern/versioning_280.c | 7 +++++++ .../draw/engines/workbench/workbench_materials.c | 2 +- source/blender/editors/space_view3d/space_view3d.c | 1 + source/blender/makesdna/DNA_object_types.h | 13 ++++++++++++ source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_object.c | 23 ++++++++++++++++++++++ 7 files changed, 48 insertions(+), 1 deletion(-) (limited to 'source/blender') 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); } -- cgit v1.2.3