[Bf-blender-cvs] [14e013758d6] master: Depsgraph: Standardize parameters nodes

Sergey Sharybin noreply at git.blender.org
Tue Mar 26 11:09:02 CET 2019


Commit: 14e013758d69f6d69683f6631b822b9f9a4a7643
Author: Sergey Sharybin
Date:   Tue Mar 26 10:47:41 2019 +0100
Branches: master
https://developer.blender.org/rB14e013758d69f6d69683f6631b822b9f9a4a7643

Depsgraph: Standardize parameters nodes

Makes it possible to handle them the same from drivers
relations builder.

Solves missing operations errors printed when opening
autumn character.

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

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index f0d0656f254..0cc1c2aa211 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -1027,6 +1027,7 @@ void DepsgraphNodeBuilder::build_world(World *world)
 	                   function_bind(BKE_world_eval, _1, world_cow));
 	/* Animation. */
 	build_animdata(&world->id);
+	build_parameters(&world->id);
 	/* World's nodetree. */
 	build_nodetree(world->nodetree);
 }
@@ -1196,6 +1197,7 @@ void DepsgraphNodeBuilder::build_particle_settings(
 	        get_cow_datablock(particle_settings);
 	/* Animation data. */
 	build_animdata(&particle_settings->id);
+	build_parameters(&particle_settings->id);
 	/* Parameters change. */
 	OperationNode *op_node;
 	op_node = add_operation_node(&particle_settings->id,
@@ -1229,6 +1231,7 @@ void DepsgraphNodeBuilder::build_shapekeys(Key *key)
 		return;
 	}
 	build_animdata(&key->id);
+	build_parameters(&key->id);
 	/* This is an exit operation for the entire key datablock, is what is used
 	 * as dependency for modifiers evaluation. */
 	add_operation_node(
@@ -1394,8 +1397,7 @@ void DepsgraphNodeBuilder::build_object_data_geometry_datablock(
 	        obdata, NodeType::GEOMETRY, OperationCode::GEOMETRY_EVAL_DONE);
 	op_node->set_as_exit();
 	/* Parameters for driver sources. */
-	add_operation_node(
-	        obdata, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL);
+	build_parameters(obdata);
 	/* Batch cache. */
 	add_operation_node(obdata,
 	                   NodeType::BATCH_CACHE,
@@ -1411,6 +1413,7 @@ void DepsgraphNodeBuilder::build_armature(bArmature *armature)
 		return;
 	}
 	build_animdata(&armature->id);
+	build_parameters(&armature->id);
 	/* Make sure pose is up-to-date with armature updates. */
 	add_operation_node(
 	        &armature->id, NodeType::PARAMETERS, OperationCode::ARMATURE_EVAL);
@@ -1421,11 +1424,8 @@ void DepsgraphNodeBuilder::build_camera(Camera *camera)
 	if (built_map_.checkIsBuiltAndTag(camera)) {
 		return;
 	}
-	OperationNode *op_node;
 	build_animdata(&camera->id);
-	op_node = add_operation_node(
-	        &camera->id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL);
-	op_node->set_as_exit();
+	build_parameters(&camera->id);
 }
 
 void DepsgraphNodeBuilder::build_light(Light *lamp)
@@ -1433,16 +1433,8 @@ void DepsgraphNodeBuilder::build_light(Light *lamp)
 	if (built_map_.checkIsBuiltAndTag(lamp)) {
 		return;
 	}
-	OperationNode *op_node;
 	build_animdata(&lamp->id);
-	op_node = add_operation_node(
-	        &lamp->id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL);
-	/* NOTE: We mark this node as both entry and exit. This way we have a
-	 * node to link all dependencies for shading (which includes relation to the
-	 * light object, and incldues relation from node tree) without adding a
-	 * dedicated component type. */
-	op_node->set_as_entry();
-	op_node->set_as_exit();
+	build_parameters(&lamp->id);
 	/* light's nodetree */
 	build_nodetree(lamp->nodetree);
 }
@@ -1459,10 +1451,7 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
 	add_id_node(&ntree->id);
 	bNodeTree *ntree_cow = get_cow_datablock(ntree);
 	/* General parameters. */
-	OperationNode *op_node;
-	op_node = add_operation_node(
-	        &ntree->id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL);
-	op_node->set_as_exit();
+	build_parameters(&ntree->id);
 	/* Animation, */
 	build_animdata(&ntree->id);
 	/* Shading update. */
@@ -1540,6 +1529,7 @@ void DepsgraphNodeBuilder::build_material(Material *material)
 	                                 material_cow));
 	/* Material animation. */
 	build_animdata(&material->id);
+	build_parameters(&material->id);
 	/* Material's nodetree. */
 	build_nodetree(material->nodetree);
 }
@@ -1552,6 +1542,7 @@ void DepsgraphNodeBuilder::build_texture(Tex *texture)
 	}
 	/* Texture itself. */
 	build_animdata(&texture->id);
+	build_parameters(&texture->id);
 	/* Texture's nodetree. */
 	build_nodetree(texture->nodetree);
 	/* Special cases for different IDs which texture uses. */
@@ -1569,6 +1560,7 @@ void DepsgraphNodeBuilder::build_image(Image *image) {
 	if (built_map_.checkIsBuiltAndTag(image)) {
 		return;
 	}
+	build_parameters(&image->id);
 	add_operation_node(&image->id,
 	                   NodeType::GENERIC_DATABLOCK,
 	                   OperationCode::GENERIC_DATABLOCK_UPDATE);
@@ -1600,6 +1592,7 @@ void DepsgraphNodeBuilder::build_gpencil(bGPdata *gpd)
 	/* The main reason Grease Pencil is included here is because the animation
 	 * (and drivers) need to be hosted somewhere. */
 	build_animdata(gpd_id);
+	build_parameters(gpd_id);
 }
 
 void DepsgraphNodeBuilder::build_cachefile(CacheFile *cache_file)
@@ -1610,6 +1603,7 @@ void DepsgraphNodeBuilder::build_cachefile(CacheFile *cache_file)
 	ID *cache_file_id = &cache_file->id;
 	/* Animation, */
 	build_animdata(cache_file_id);
+	build_parameters(cache_file_id);
 	/* Cache evaluation itself. */
 	add_operation_node(
 	        cache_file_id, NodeType::CACHE, OperationCode::FILE_CACHE_UPDATE);
@@ -1624,6 +1618,7 @@ void DepsgraphNodeBuilder::build_mask(Mask *mask)
 	Mask *mask_cow = get_cow_datablock(mask);
 	/* F-Curve based animation. */
 	build_animdata(mask_id);
+	build_parameters(mask_id);
 	/* Animation based on mask's shapes. */
 	add_operation_node(mask_id,
 	                   NodeType::ANIMATION,
@@ -1645,6 +1640,7 @@ void DepsgraphNodeBuilder::build_movieclip(MovieClip *clip)
 	MovieClip *clip_cow = (MovieClip *)ensure_cow_id(clip_id);
 	/* Animation. */
 	build_animdata(clip_id);
+	build_parameters(clip_id);
 	/* Movie clip evaluation. */
 	add_operation_node(clip_id,
 	                   NodeType::PARAMETERS,
@@ -1666,6 +1662,7 @@ void DepsgraphNodeBuilder::build_lightprobe(LightProbe *probe)
 	add_operation_node(
 	        &probe->id, NodeType::PARAMETERS, OperationCode::LIGHT_PROBE_EVAL);
 	build_animdata(&probe->id);
+	build_parameters(&probe->id);
 }
 
 void DepsgraphNodeBuilder::build_speaker(Speaker *speaker)
@@ -1677,6 +1674,7 @@ void DepsgraphNodeBuilder::build_speaker(Speaker *speaker)
 	add_operation_node(
 	        &speaker->id, NodeType::PARAMETERS, OperationCode::SPEAKER_EVAL);
 	build_animdata(&speaker->id);
+	build_parameters(&speaker->id);
 }
 
 /* **** ID traversal callbacks functions **** */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 49f1f93ed6c..444502b9538 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -492,6 +492,9 @@ void DepsgraphRelationBuilder::build_id(ID *id)
 		case ID_TE:
 			build_texture((Tex *)id);
 			break;
+		case ID_IM:
+			build_image((Image *)id);
+			break;
 		case ID_WO:
 			build_world((World *)id);
 			break;
@@ -1686,6 +1689,7 @@ void DepsgraphRelationBuilder::build_world(World *world)
 	}
 	/* animation */
 	build_animdata(&world->id);
+	build_parameters(&world->id);
 	/* world's nodetree */
 	if (world->nodetree != NULL) {
 		build_nodetree(world->nodetree);
@@ -1959,6 +1963,7 @@ void DepsgraphRelationBuilder::build_particle_settings(ParticleSettings *part)
 	}
 	/* Animation data relations. */
 	build_animdata(&part->id);
+	build_parameters(&part->id);
 	OperationKey particle_settings_init_key(&part->id,
 	                                        NodeType::PARTICLE_SETTINGS,
 	                                        OperationCode::PARTICLE_SETTINGS_INIT);
@@ -2035,14 +2040,19 @@ void DepsgraphRelationBuilder::build_shapekeys(Key *key)
 	}
 	/* Attach animdata to geometry. */
 	build_animdata(&key->id);
+	build_parameters(&key->id);
 	/* Connect all blocks properties to the final result evaluation. */
 	ComponentKey geometry_key(&key->id, NodeType::GEOMETRY);
+	OperationKey parameters_eval_key(&key->id,
+	                                 NodeType::PARAMETERS,
+	                                 OperationCode::PARAMETERS_EVAL);
 	LISTBASE_FOREACH (KeyBlock *, key_block, &key->block) {
 		OperationKey key_block_key(&key->id,
 		                           NodeType::PARAMETERS,
 		                           OperationCode::PARAMETERS_EVAL,
 		                           key_block->name);
 		add_relation(key_block_key, geometry_key, "Key Block Properties");
+		add_relation(key_block_key, parameters_eval_key, "Key Block Properties");
 	}
 }
 
@@ -2243,6 +2253,7 @@ void DepsgraphRelationBuilder::build_object_data_geometry_datablock(ID *obdata)
 	}
 	/* Animation. */
 	build_animdata(obdata);
+	build_parameters(obdata);
 	/* ShapeKeys. */
 	Key *key = BKE_key_from_id(obdata);
 	if (key != NULL) {
@@ -2347,6 +2358,7 @@ void DepsgraphRelationBuilder::build_armature(bArmature *armature)
 		return;
 	}
 	build_animdata(&armature->id);
+	build_parameters(&armature->id);
 }
 
 void DepsgraphRelationBuilder::build_camera(Camera *camera)
@@ -2354,6 +2366,7 @@ void DepsgraphRelationBuilder::build_camera(Camera *camera)
 	if (built_map_.checkIsBuiltAndTag(camera)) {
 		return;
 	}
+	build_parameters(&camera->id);
 	if (camera->dof_ob != NULL) {
 		ComponentKey camera_parameters_key(&camera->id, NodeType::PARAMETERS);
 		ComponentKey dof_ob_key(&camera->dof_ob->id, NodeType::TRANSFORM);
@@ -2367,6 +2380,7 @@ void DepsgraphRelationBuilder::build_light(Light *lamp)
 	if (built_map_.checkIsBuiltAndTag(lamp)) {
 		return;
 	}
+	build_parameters(&lamp->id);
 	/* light's nodetree */
 	if (lamp->nodetree != NULL) {
 		build_nodetree(lamp->nodetree);
@@ -2386,6 +2400,7 @@ void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
 		return;
 	}
 	build_animdata(&ntree->id);
+	build_parameters(&ntree->id);
 	ComponentKey shading_key(&ntree->id, NodeType::SHADING);
 	/* nodetree's nodes... */
 	LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
@@ -2401,7 +2416,7 @@ void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
 			build_texture((Tex *)bnode->id);
 		}
 		else if (id_type == ID_IM) {
-			/* nothing for now. */
+			build_image((Image *)bnode->id);
 		}
 		else if (id_type == ID_OB) {
 			build_object(NUL

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list