[Bf-blender-cvs] [5389ca18596] blender2.8: Merge branch 'master' into blender2.8

Sergey Sharybin noreply at git.blender.org
Wed Dec 6 10:38:55 CET 2017


Commit: 5389ca18596aee628c9c05044ce8bbd6188a3f45
Author: Sergey Sharybin
Date:   Wed Dec 6 10:38:34 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB5389ca18596aee628c9c05044ce8bbd6188a3f45

Merge branch 'master' into blender2.8

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



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

diff --cc source/blender/depsgraph/CMakeLists.txt
index 89ba6e27aed,9478ca306e9..9495321a0ff
--- a/source/blender/depsgraph/CMakeLists.txt
+++ b/source/blender/depsgraph/CMakeLists.txt
@@@ -80,9 -75,9 +80,10 @@@ set(SR
  	intern/builder/deg_builder_nodes.h
  	intern/builder/deg_builder_pchanmap.h
  	intern/builder/deg_builder_relations.h
+ 	intern/builder/deg_builder_relations_impl.h
  	intern/builder/deg_builder_transitive.h
  	intern/eval/deg_eval.h
 +	intern/eval/deg_eval_copy_on_write.h
  	intern/eval/deg_eval_flush.h
  	intern/nodes/deg_node.h
  	intern/nodes/deg_node_component.h
diff --cc source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
index dfe97d02ec6,3ef1eb547b5..f6f2dcce467
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
@@@ -331,39 -267,37 +331,48 @@@ void DepsgraphNodeBuilder::build_proxy_
  	if (object->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) {
  		BKE_pose_update_constraint_flags(object->pose);
  	}
 -
  	op_node = add_operation_node(&object->id,
  	                             DEG_NODE_TYPE_EVAL_POSE,
 -	                             function_bind(BKE_pose_eval_proxy_copy, _1, object),
 +	                             function_bind(BKE_pose_eval_proxy_copy,
 +	                                           _1,
 +	                                           object_cow),
  	                             DEG_OPCODE_POSE_INIT);
  	op_node->set_as_entry();
 -
  	LINKLIST_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
 -		op_node = add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
 -		                             NULL, DEG_OPCODE_BONE_LOCAL);
 +		/* Local bone transform. */
 +		op_node = add_operation_node(&object->id,
 +		                             DEG_NODE_TYPE_BONE,
 +		                             pchan->name,
 +		                             NULL,
 +		                             DEG_OPCODE_BONE_LOCAL);
  		op_node->set_as_entry();
 -
 -		add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
 -		                   NULL, DEG_OPCODE_BONE_READY);
 -
 -		op_node = add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
 -		                             NULL, DEG_OPCODE_BONE_DONE);
 +		/* Bone is ready for solvers. */
 +		add_operation_node(&object->id,
 +		                   DEG_NODE_TYPE_BONE,
 +		                   pchan->name,
 +		                   NULL,
 +		                   DEG_OPCODE_BONE_READY);
 +		/* Bone is fully evaluated. */
 +		op_node = add_operation_node(&object->id,
 +		                             DEG_NODE_TYPE_BONE,
 +		                             pchan->name,
 +		                             NULL,
 +		                             DEG_OPCODE_BONE_DONE);
  		op_node->set_as_exit();
+ 
+ 		/* Custom properties. */
+ 		if (pchan->prop != NULL) {
+ 			add_operation_node(&object->id,
+ 			                   DEG_NODE_TYPE_PARAMETERS,
+ 			                   NULL,
+ 			                   DEG_OPCODE_PARAMETERS_EVAL,
+ 			                   pchan->name);
+ 		}
  	}
 -
 -	op_node = add_operation_node(&object->id, DEG_NODE_TYPE_EVAL_POSE,
 -	                             NULL, DEG_OPCODE_POSE_DONE);
 +	op_node = add_operation_node(&object->id,
 +	                             DEG_NODE_TYPE_EVAL_POSE,
 +	                             NULL,
 +	                             DEG_OPCODE_POSE_DONE);
  	op_node->set_as_exit();
  }
  
diff --cc source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index aeb9f9ab937,5b7b4d4b533..5c984535cb8
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@@ -304,13 -305,25 +306,22 @@@ void DepsgraphRelationBuilder::add_oper
  	}
  }
  
- void DepsgraphRelationBuilder::add_collision_relations(const OperationKey &key, Scene *scene, Object *object, Group *group, bool dupli, const char *name)
+ void DepsgraphRelationBuilder::add_collision_relations(
+         const OperationKey &key,
+         Scene *scene,
+         Object *object,
+         Group *group,
 -        int layer,
+         bool dupli,
+         const char *name)
  {
  	unsigned int numcollobj;
- 	Object **collobjs = get_collisionobjects_ext(scene, object, group, &numcollobj, eModifierType_Collision, dupli);
- 
- 	for (unsigned int i = 0; i < numcollobj; i++)
- 	{
 -	Object **collobjs = get_collisionobjects_ext(
 -	        scene,
 -	        object,
 -	        group,
 -	        layer,
 -	        &numcollobj,
 -	        eModifierType_Collision,
 -	        dupli);
++	Object **collobjs = get_collisionobjects_ext(scene,
++	                                             object,
++	                                             group,
++	                                             &numcollobj,
++	                                             eModifierType_Collision,
++	                                             dupli);
+ 	for (unsigned int i = 0; i < numcollobj; i++) {
  		Object *ob1 = collobjs[i];
  
  		ComponentKey trf_key(&ob1->id, DEG_NODE_TYPE_TRANSFORM);
@@@ -319,17 -332,23 +330,23 @@@
  		ComponentKey coll_key(&ob1->id, DEG_NODE_TYPE_GEOMETRY);
  		add_relation(coll_key, key, name);
  	}
- 
- 	if (collobjs)
+ 	if (collobjs != NULL) {
  		MEM_freeN(collobjs);
+ 	}
  }
  
- void DepsgraphRelationBuilder::add_forcefield_relations(const OperationKey &key, Scene *scene, Object *object, ParticleSystem *psys, EffectorWeights *eff, bool add_absorption, const char *name)
+ void DepsgraphRelationBuilder::add_forcefield_relations(
+         const OperationKey &key,
+         Scene *scene,
+         Object *object,
+         ParticleSystem *psys,
+         EffectorWeights *eff,
+         bool add_absorption,
+         const char *name)
  {
 -	ListBase *effectors = pdInitEffectors(scene, object, psys, eff, false);
 +	ListBase *effectors = pdInitEffectors(NULL, scene, object, psys, eff, false);
- 
- 	if (effectors) {
- 		for (EffectorCache *eff = (EffectorCache *)effectors->first; eff; eff = eff->next) {
+ 	if (effectors != NULL) {
+ 		LINKLIST_FOREACH(EffectorCache *, eff, effectors) {
  			if (eff->ob != object) {
  				ComponentKey eff_key(&eff->ob->id, DEG_NODE_TYPE_TRANSFORM);
  				add_relation(eff_key, key, name);
@@@ -349,17 -372,23 +370,22 @@@
  					add_relation(eff_key, key, name);
  				}
  			}
- 
  			if (eff->pd->forcefield == PFIELD_SMOKEFLOW && eff->pd->f_source) {
- 				ComponentKey trf_key(&eff->pd->f_source->id, DEG_NODE_TYPE_TRANSFORM);
+ 				ComponentKey trf_key(&eff->pd->f_source->id,
+ 				                     DEG_NODE_TYPE_TRANSFORM);
  				add_relation(trf_key, key, "Smoke Force Domain");
  
- 				ComponentKey eff_key(&eff->pd->f_source->id, DEG_NODE_TYPE_GEOMETRY);
+ 				ComponentKey eff_key(&eff->pd->f_source->id,
+ 				                     DEG_NODE_TYPE_GEOMETRY);
  				add_relation(eff_key, key, "Smoke Force Domain");
  			}
- 
  			if (add_absorption && (eff->pd->flag & PFIELD_VISIBILITY)) {
- 				add_collision_relations(key, scene, object, NULL, true, "Force Absorption");
+ 				add_collision_relations(key,
+ 				                        scene,
+ 				                        object,
+ 				                        NULL,
 -				                        eff->ob->lay,
+ 				                        true,
+ 				                        "Force Absorption");
  			}
  		}
  	}
@@@ -1556,25 -1474,14 +1561,24 @@@ void DepsgraphRelationBuilder::build_ob
  	/* link components to each other */
  	add_relation(obdata_geom_key, geom_key, "Object Geometry Base Data");
  
 +	OperationKey obdata_ubereval_key(&object->id,
 +	                                 DEG_NODE_TYPE_GEOMETRY,
 +	                                 DEG_OPCODE_GEOMETRY_UBEREVAL);
 +
 +	/* Special case: modifiers and DerivedMesh creation queries scene for various
 +	 * things like data mask to be used. We add relation here to ensure object is
 +	 * never evaluated prior to Scene's CoW is ready.
 +	 */
 +	OperationKey scene_key(&scene_->id,
 +	                       DEG_NODE_TYPE_PARAMETERS,
 +	                       DEG_OPCODE_PLACEHOLDER,
 +	                       "Scene Eval");
 +	add_relation(scene_key, obdata_ubereval_key, "CoW Relation");
 +
  	/* Modifiers */
  	if (object->modifiers.first != NULL) {
 -		OperationKey obdata_ubereval_key(&object->id,
 -		                                 DEG_NODE_TYPE_GEOMETRY,
 -		                                 DEG_OPCODE_GEOMETRY_UBEREVAL);
 -
  		LINKLIST_FOREACH (ModifierData *, md, &object->modifiers) {
  			const ModifierTypeInfo *mti = modifierType_getInfo((ModifierType)md->type);
- 
  			if (mti->updateDepsgraph) {
  				DepsNodeHandle handle = create_node_handle(obdata_ubereval_key);
  				mti->updateDepsgraph(
@@@ -1755,22 -1631,11 +1736,17 @@@ void DepsgraphRelationBuilder::build_ca
  		return;
  	}
  	camera_id->tag |= LIB_TAG_DOIT;
 +
 +	ComponentKey object_parameters_key(&object->id, DEG_NODE_TYPE_PARAMETERS);
 +	ComponentKey camera_parameters_key(camera_id, DEG_NODE_TYPE_PARAMETERS);
 +
 +	add_relation(camera_parameters_key, object_parameters_key,
 +	             "Camera -> Object");
 +
- 	if (needs_animdata_node(camera_id)) {
- 		ComponentKey animation_key(camera_id, DEG_NODE_TYPE_ANIMATION);
- 		add_relation(animation_key, camera_parameters_key, "Camera Parameters");
- 	}
- 
  	/* DOF */
 -	if (cam->dof_ob) {
 -		ComponentKey ob_param_key(&object->id, DEG_NODE_TYPE_PARAMETERS);
 +	if (cam->dof_ob != NULL) {
  		ComponentKey dof_ob_key(&cam->dof_ob->id, DEG_NODE_TYPE_TRANSFORM);
 -		add_relation(dof_ob_key, ob_param_key, "Camera DOF");
 +		add_relation(dof_ob_key, object_parameters_key, "Camera DOF");
  	}
  }
  
@@@ -1783,40 -1648,15 +1759,34 @@@ void DepsgraphRelationBuilder::build_la
  		return;
  	}
  	lamp_id->tag |= LIB_TAG_DOIT;
 +
 +	ComponentKey object_parameters_key(&object->id, DEG_NODE_TYPE_PARAMETERS);
 +	ComponentKey lamp_parameters_key(lamp_id, DEG_NODE_TYPE_PARAMETERS);
 +
 +	add_relation(lamp_parameters_key, object_parameters_key,
 +	             "Lamp -> Object");
 +
- 	if (needs_animdata_node(lamp_id)) {
- 		ComponentKey animation_key(lamp_id, DEG_NODE_TYPE_ANIMATION);
- 		add_relation(animation_key, lamp_parameters_key, "Lamp Parameters");
- 	}
- 
  	/*

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list