[Bf-blender-cvs] [89de2ec] depsgraph_refactor: Depsgraph: Fix add parameters component to camera datablock

Sergey Sharybin noreply at git.blender.org
Mon Mar 16 11:11:25 CET 2015


Commit: 89de2ec1ada1a9e05ff284ee681f04368f7e18ab
Author: Sergey Sharybin
Date:   Mon Mar 16 15:10:40 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rB89de2ec1ada1a9e05ff284ee681f04368f7e18ab

Depsgraph: Fix add parameters component to camera datablock

Fixes drivers using camera properties as an input.

TODO: Add CACamera -> OBCamera relation.

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

M	source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
M	source/blender/depsgraph/intern/depsgraph_build_relations.cpp

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

diff --git a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
index 6e7d6f3..2ce285e 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
@@ -867,6 +867,13 @@ void DepsgraphNodeBuilder::build_camera(Object *ob)
 {
 	/* TODO: Link scene-camera links in somehow... */
 	Camera *cam = (Camera *)ob->data;
+	ID *camera_id = &cam->id;
+	if (camera_id->flag & LIB_DOIT) {
+		return;
+	}
+
+	add_operation_node(camera_id, DEPSNODE_TYPE_PARAMETERS, DEPSOP_TYPE_EXEC, NULL,
+	                   DEG_OPCODE_PLACEHOLDER, "Parameters Eval");
 
 	if (cam->dof_ob != NULL) {
 		/* TODO(sergey): For now parametrs are on object level. */
diff --git a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
index 3c02dfb..f80ca87 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -1557,12 +1557,25 @@ void DepsgraphRelationBuilder::build_obdata_geom(Scene *scene, Object *ob)
 void DepsgraphRelationBuilder::build_camera(Object *ob)
 {
 	Camera *cam = (Camera *)ob->data;
-	ComponentKey param_key(&ob->id, DEPSNODE_TYPE_PARAMETERS);
+	ID *camera_id = &cam->id;
+	if (camera_id->flag & LIB_DOIT) {
+		return;
+	}
+	camera_id->flag |= LIB_DOIT;
+
+	ComponentKey parameters_key(camera_id, DEPSNODE_TYPE_PARAMETERS);
+
+	if (BKE_animdata_from_id(camera_id) != NULL) {
+		ComponentKey animation_key(camera_id, DEPSNODE_TYPE_ANIMATION);
+		add_relation(animation_key, parameters_key,
+		             DEPSREL_TYPE_COMPONENT_ORDER, "Camera Parameters");
+	}
 
 	/* DOF */
 	if (cam->dof_ob) {
+		ComponentKey ob_param_key(&ob->id, DEPSNODE_TYPE_PARAMETERS);
 		ComponentKey dof_ob_key(&cam->dof_ob->id, DEPSNODE_TYPE_TRANSFORM);
-		add_relation(dof_ob_key, param_key, DEPSREL_TYPE_TRANSFORM, "Camera DOF");
+		add_relation(dof_ob_key, ob_param_key, DEPSREL_TYPE_TRANSFORM, "Camera DOF");
 	}
 }




More information about the Bf-blender-cvs mailing list