[Bf-blender-cvs] [4f65ba19c13] blender2.8-workbench: Merge branch 'blender2.8' into blender2.8-workbench

Jeroen Bakker noreply at git.blender.org
Wed May 2 15:13:39 CEST 2018


Commit: 4f65ba19c1361a02727ba6674e7ca95b65238c23
Author: Jeroen Bakker
Date:   Wed May 2 12:11:24 2018 +0200
Branches: blender2.8-workbench
https://developer.blender.org/rB4f65ba19c1361a02727ba6674e7ca95b65238c23

Merge branch 'blender2.8' into blender2.8-workbench

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



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

diff --cc release/scripts/startup/bl_ui/space_view3d.py
index 81815ed3f91,2fa4061faaf..fbf72a32eb4
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@@ -3540,9 -3549,8 +3549,9 @@@ class VIEW3D_PT_shading(Panel)
              col.row().prop(shading, "light", expand=True)
  
              col.separator()
-             col.prop(shading, "show_random_object_colors")
+             col.row().prop(shading, "single_color_mode", expand=True)
              col.prop(shading, "show_object_overlap")
 +            col.prop(shading, "show_shadows")
  
              if shading.light == 'STUDIO':
                  # TODO: don't store these settings in the scene
diff --cc source/blender/draw/engines/workbench/workbench_materials.c
index 4df5f31390e,6ea65855f0b..0187f3d1581
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@@ -307,44 -287,28 +317,44 @@@ void workbench_materials_cache_init(WOR
  		copy_v3_v3(wd->diffuse_light_y_neg, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_y_neg"));
  		copy_v3_v3(wd->diffuse_light_z_pos, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_z_pos"));
  		copy_v3_v3(wd->diffuse_light_z_neg, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_z_neg"));
 -
 -		psl->composite_pass = DRW_pass_create("Composite", DRW_STATE_WRITE_COLOR);
 -		grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_pass);
 -		DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
 -		DRW_shgroup_uniform_texture_ref(grp, "colorBuffer", &e_data.color_buffer_tx);
 -		if (OBJECT_ID_PASS_ENABLED(wpd)) {
 -			DRW_shgroup_uniform_texture_ref(grp, "objectId", &e_data.object_id_tx);
 -		}
 -		if (NORMAL_VIEWPORT_PASS_ENABLED(wpd)) {
 -			DRW_shgroup_uniform_texture_ref(grp, "normalBuffer", &e_data.normal_buffer_tx);
 -		}
  		wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), NULL);
 -		DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo);
  		DRW_uniformbuffer_update(wpd->world_ubo, &wpd->world_data);
 -		DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
  
 -		DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
 -	}
 +		copy_v3_v3(e_data.light_direction, BKE_collection_engine_property_value_get_float_array(props, "light_direction"));
 +		negate_v3(e_data.light_direction);
  
 +		psl->composite_pass = DRW_pass_create("Composite", DRW_STATE_WRITE_COLOR | DRW_STATE_STENCIL_EQUAL);
 +		grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_pass);
 +		workbench_composite_uniforms(wpd, grp);
 +		DRW_shgroup_stencil_mask(grp, 0x00);
 +		DRW_shgroup_uniform_float(grp, "lightMultiplier", &e_data.light_multiplier, 1);
 +		DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
  
 +		if (SHADOW_ENABLED(wpd)) {
 +#ifdef SHOW_SHADOW_VOLUME
 +			psl->shadow_pass = DRW_pass_create("Shadow", DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_COLOR );
 +			grp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
 +			DRW_shgroup_uniform_vec3(grp, "lightDirection", e_data.light_direction, 1);
 +			DRW_shgroup_stencil_mask(grp, 0xFF);
 +			wpd->shadow_shgrp = grp;
 +#else
 +			psl->shadow_pass = DRW_pass_create("Shadow", DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_STENCIL | DRW_STATE_STENCIL_INCR_DECR_WRAP);
 +			grp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
 +			DRW_shgroup_uniform_vec3(grp, "lightDirection", e_data.light_direction, 1);
 +			DRW_shgroup_stencil_mask(grp, 0xFF);
 +			wpd->shadow_shgrp = grp;
 +
 +			psl->composite_shadow_pass = DRW_pass_create("Composite Shadow", DRW_STATE_WRITE_COLOR | DRW_STATE_STENCIL_NEQUAL);
 +			grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_shadow_pass);
 +			DRW_shgroup_stencil_mask(grp, 0x00);
 +			workbench_composite_uniforms(wpd, grp);
 +			DRW_shgroup_uniform_float(grp, "lightMultiplier", &e_data.shadow_multiplier, 1);
 +			DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
 +#endif
 +		}
 +	}
  }
- static WORKBENCH_MaterialData *get_or_create_material_data(WORKBENCH_Data *vedata, IDProperty *props, Object *ob)
+ static WORKBENCH_MaterialData *get_or_create_material_data(WORKBENCH_Data *vedata, IDProperty *props, Object *ob, Material *mat)
  {
  	WORKBENCH_StorageList *stl = vedata->stl;
  	WORKBENCH_PassList *psl = vedata->psl;
@@@ -420,29 -380,42 +430,49 @@@ void workbench_materials_solid_cache_po
  	if (ob->type == OB_MESH) {
  		workbench_cache_populate_particles(vedata, props, ob);
  	}
- 
- 	struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
- 
+ 	
  	WORKBENCH_MaterialData *material;
- 	if (geom) {
+ 	if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
  		const DRWContextState *draw_ctx = DRW_context_state_get();
  		const bool is_active = (ob == draw_ctx->obact);
- 
- 		material = get_or_create_material_data(vedata, props, ob);
  		const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
- 		if (is_sculpt_mode) {
- 			DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat);
- 		}
- 		else {
- 			DRW_shgroup_call_object_add(material->shgrp, geom, ob);
+ 
+ 		if ((vedata->stl->g_data->drawtype_options & V3D_DRAWOPTION_SOLID_COLOR_MASK) != 0 || is_sculpt_mode) {
+ 			/* No material split needed */
+ 			struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
+ 			if (geom) {
+ 				material = get_or_create_material_data(vedata, props, ob, NULL);
+ 				if (is_sculpt_mode) {
+ 					DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat);
+ 				}
+ 				else {
+ 					DRW_shgroup_call_object_add(material->shgrp, geom, ob);
+ 				}
+ 			}
+ 		} 
+ 		else { /* MATERIAL colors */
+ 			const int materials_len = MAX2(1, (is_sculpt_mode ? 1 : ob->totcol));
+ 			struct GPUMaterial **gpumat_array = BLI_array_alloca(gpumat_array, materials_len);
+ 			for (int i = 0; i < materials_len; i ++) {
+ 				gpumat_array[i] = NULL;
+ 			}
+ 
+ 			struct Gwn_Batch **mat_geom = DRW_cache_object_surface_material_get(ob, gpumat_array, materials_len);
+ 			if (mat_geom) {
+ 				for (int i = 0; i < materials_len; ++i) {
+ 					Material *mat = give_current_material(ob, i + 1);
+ 					material = get_or_create_material_data(vedata, props, ob, mat);
+ 					DRW_shgroup_call_object_add(material->shgrp, mat_geom[i], ob);
+ 				}
+ 			}
  		}
 +
 +		if (SHADOW_ENABLED(wpd)) {
 +			struct Gwn_Batch *geom_shadow = DRW_cache_mesh_wire_outline_get(ob);
 +			if (geom_shadow) {
 +				DRW_shgroup_call_object_add(wpd->shadow_shgrp, geom_shadow, ob);
 +			}
 +		}	
  	}
  }
  
diff --cc source/blender/makesdna/DNA_view3d_types.h
index a0f0e42a9e8,0644837727e..95f36497dc7
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@@ -80,11 -80,18 +80,19 @@@ enum 
  	V3D_LIGHTING_SCENE  = 2
  };
  
+ /* 
+  * V3D_DRAWOPTION_OBJECT_COLOR, V3D_DRAWOPTION_OBJECT_OVERLAP, 
+  * V3D_DRAWOPTION_SINGLE_COLOR, V3D_DRAWOPTION_MATERIAL_COLOR are mutual exclusive
+ */
  enum {
+ 	V3D_DRAWOPTION_MATERIAL_COLOR = (0 << 0),
  	V3D_DRAWOPTION_RANDOMIZE      = (1 << 0),
  	V3D_DRAWOPTION_OBJECT_OVERLAP = (1 << 1),
- 	V3D_DRAWOPTION_SHADOW         = (1 << 2),
+ 	V3D_DRAWOPTION_SINGLE_COLOR   = (1 << 2),
+ 	V3D_DRAWOPTION_OBJECT_COLOR   = (1 << 4),
++	V3D_DRAWOPTION_SHADOW         = (1 << 5),
  };
+ #define V3D_DRAWOPTION_SOLID_COLOR_MASK (V3D_DRAWOPTION_SINGLE_COLOR | V3D_DRAWOPTION_RANDOMIZE | V3D_DRAWOPTION_OBJECT_COLOR | V3D_DRAWOPTION_MATERIAL_COLOR)
  
  enum {
  	V3D_OVERLAY_FACE_ORIENTATION = (1 << 0),
diff --cc source/blender/makesrna/intern/rna_space.c
index 0c26cac8b6f,30c00b93867..e063b99909d
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@@ -2210,17 -2228,13 +2228,19 @@@ static void rna_def_space_view3d_shadin
  	RNA_def_property_ui_text(prop, "Object Overlap", "Show Object Overlap");
  	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
  
- 	prop = RNA_def_property(srna, "show_random_object_colors", PROP_BOOLEAN, PROP_NONE);
- 	RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_RANDOMIZE);
- 	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- 	RNA_def_property_ui_text(prop, "Random Colors", "Show random object colors");
+ 	prop = RNA_def_property(srna, "single_color_mode", PROP_ENUM, PROP_NONE);
+ 	RNA_def_property_enum_items(prop, single_color_mode_items);
+ 	RNA_def_property_enum_funcs(prop, "rna_View3DShading_single_color_mode_get",
+ 	                                  "rna_View3DShading_single_color_mode_set",
+ 	                                  NULL);
+ 	RNA_def_property_ui_text(prop, "Color", "Single Color Mode");
  	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
 +
 +	prop = RNA_def_property(srna, "show_shadows", PROP_BOOLEAN, PROP_NONE);
 +	RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_SHADOW);
 +	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
 +	RNA_def_property_ui_text(prop, "Shadow", "Show Shadow");
 +	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
  }
  
  static void rna_def_space_view3d_overlay(BlenderRNA *brna)



More information about the Bf-blender-cvs mailing list