[Bf-blender-cvs] [7a4d5b78ea0] blender2.8: Depsgraph: Add missing nodes and relations for speaker

Sergey Sharybin noreply at git.blender.org
Mon Jun 25 11:54:17 CEST 2018


Commit: 7a4d5b78ea061196f7bf1550928680e9f094e38b
Author: Sergey Sharybin
Date:   Mon Jun 25 11:53:38 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB7a4d5b78ea061196f7bf1550928680e9f094e38b

Depsgraph: Add missing nodes and relations for speaker

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

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

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 3354f85bf27..524933a5f37 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -65,6 +65,7 @@ extern "C" {
 #include "DNA_lightprobe_types.h"
 #include "DNA_rigidbody_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_speaker_types.h"
 #include "DNA_texture_types.h"
 #include "DNA_world_types.h"
 
@@ -431,6 +432,9 @@ void DepsgraphNodeBuilder::build_id(ID *id) {
 		case ID_LT:
 			build_object_data_geometry_datablock(id);
 			break;
+		case ID_SPK:
+			build_speaker((Speaker *)id);
+			break;
 		default:
 			fprintf(stderr, "Unhandled ID %s\n", id->name);
 			BLI_assert(!"Should never happen");
@@ -615,6 +619,9 @@ void DepsgraphNodeBuilder::build_object_data(Object *object)
 		case OB_LIGHTPROBE:
 			build_object_data_lightprobe(object);
 			break;
+		case OB_SPEAKER:
+			build_object_data_speaker(object);
+			break;
 		default:
 		{
 			ID *obdata = (ID *)object->data;
@@ -648,6 +655,16 @@ void DepsgraphNodeBuilder::build_object_data_lightprobe(Object *object)
 	                   DEG_OPCODE_LIGHT_PROBE_EVAL);
 }
 
+void DepsgraphNodeBuilder::build_object_data_speaker(Object *object)
+{
+	Speaker *speaker = (Speaker *)object->data;
+	build_speaker(speaker);
+	add_operation_node(&object->id,
+	                   DEG_NODE_TYPE_PARAMETERS,
+	                   NULL,
+	                   DEG_OPCODE_SPEAKER_EVAL);
+}
+
 void DepsgraphNodeBuilder::build_object_transform(Object *object)
 {
 	OperationDepsNode *op_node;
@@ -1464,6 +1481,19 @@ void DepsgraphNodeBuilder::build_lightprobe(LightProbe *probe)
 	build_animdata(&probe->id);
 }
 
+void DepsgraphNodeBuilder::build_speaker(Speaker *speaker)
+{
+	if (built_map_.checkIsBuiltAndTag(speaker)) {
+		return;
+	}
+	/* Placeholder so we can add relations and tag ID node for update. */
+	add_operation_node(&speaker->id,
+	                   DEG_NODE_TYPE_PARAMETERS,
+	                   NULL,
+	                   DEG_OPCODE_SPEAKER_EVAL);
+	build_animdata(&speaker->id);
+}
+
 /* **** ID traversal callbacks functions **** */
 
 void DepsgraphNodeBuilder::modifier_walk(void *user_data,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 72aa5dbe003..487b834bd07 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -62,6 +62,7 @@ struct Probe;
 struct bPoseChannel;
 struct bConstraint;
 struct Scene;
+struct Speaker;
 struct Tex;
 struct World;
 
@@ -175,6 +176,7 @@ struct DepsgraphNodeBuilder {
 	void build_object_data_geometry_datablock(ID *obdata);
 	void build_object_data_lamp(Object *object);
 	void build_object_data_lightprobe(Object *object);
+	void build_object_data_speaker(Object *object);
 	void build_object_transform(Object *object);
 	void build_object_constraints(Object *object);
 	void build_pose_constraints(Object *object, bPoseChannel *pchan, int pchan_index);
@@ -209,6 +211,7 @@ struct DepsgraphNodeBuilder {
 	void build_mask(Mask *mask);
 	void build_movieclip(MovieClip *clip);
 	void build_lightprobe(LightProbe *probe);
+	void build_speaker(Speaker *speaker);
 
 protected:
 	struct SavedEntryTag {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index c9b9cf38cc5..9714cf9d853 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -65,6 +65,7 @@ extern "C" {
 #include "DNA_object_types.h"
 #include "DNA_rigidbody_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_speaker_types.h"
 #include "DNA_texture_types.h"
 #include "DNA_world_types.h"
 #include "DNA_object_force_types.h"
@@ -440,6 +441,9 @@ void DepsgraphRelationBuilder::build_id(ID *id)
 		case ID_LT:
 			build_object_data_geometry_datablock(id);
 			break;
+		case ID_SPK:
+			build_speaker((Speaker *)id);
+			break;
 		default:
 			fprintf(stderr, "Unhandled ID %s\n", id->name);
 			BLI_assert(!"Should never happen");
@@ -660,6 +664,9 @@ void DepsgraphRelationBuilder::build_object_data(Object *object)
 		case OB_LIGHTPROBE:
 			build_object_data_lightprobe(object);
 			break;
+		case OB_SPEAKER:
+			build_object_data_speaker(object);
+			break;
 	}
 	Key *key = BKE_key_from_object(object);
 	if (key != NULL) {
@@ -701,6 +708,19 @@ void DepsgraphRelationBuilder::build_object_data_lightprobe(Object *object)
 	add_relation(probe_key, object_key, "LightProbe Update");
 }
 
+void DepsgraphRelationBuilder::build_object_data_speaker(Object *object)
+{
+	Speaker *speaker = (Speaker *)object->data;
+	build_speaker(speaker);
+	OperationKey probe_key(&speaker->id,
+	                       DEG_NODE_TYPE_PARAMETERS,
+	                       DEG_OPCODE_SPEAKER_EVAL);
+	OperationKey object_key(&object->id,
+	                        DEG_NODE_TYPE_PARAMETERS,
+	                        DEG_OPCODE_SPEAKER_EVAL);
+	add_relation(probe_key, object_key, "Speaker Update");
+}
+
 void DepsgraphRelationBuilder::build_object_parent(Object *object)
 {
 	/* XXX: for now, need to use the component key (not just direct to the parent op),
@@ -2122,6 +2142,14 @@ void DepsgraphRelationBuilder::build_lightprobe(LightProbe *probe)
 	build_animdata(&probe->id);
 }
 
+void DepsgraphRelationBuilder::build_speaker(Speaker *speaker)
+{
+	if (built_map_.checkIsBuiltAndTag(speaker)) {
+		return;
+	}
+	build_animdata(&speaker->id);
+}
+
 void DepsgraphRelationBuilder::build_copy_on_write_relations()
 {
 	foreach (IDDepsNode *id_node, graph_->id_nodes) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 3d3a73b6551..2b9ba3edffb 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -75,6 +75,7 @@ struct bConstraint;
 struct ParticleSystem;
 struct ParticleSettings;
 struct Scene;
+struct Speaker;
 struct ViewLayer;
 struct Tex;
 struct World;
@@ -212,6 +213,7 @@ struct DepsgraphRelationBuilder
 	void build_object_data_geometry_datablock(ID *obdata);
 	void build_object_data_lamp(Object *object);
 	void build_object_data_lightprobe(Object *object);
+	void build_object_data_speaker(Object *object);
 	void build_object_parent(Object *object);
 	void build_constraints(ID *id,
 	                       eDepsNode_Type component_type,
@@ -263,6 +265,7 @@ struct DepsgraphRelationBuilder
 	void build_mask(Mask *mask);
 	void build_movieclip(MovieClip *clip);
 	void build_lightprobe(LightProbe *probe);
+	void build_speaker(Speaker *speaker);
 
 	void build_nested_datablock(ID *owner, ID *id);
 	void build_nested_nodetree(ID *owner, bNodeTree *ntree);
diff --git a/source/blender/depsgraph/intern/depsgraph_type_defines.cc b/source/blender/depsgraph/intern/depsgraph_type_defines.cc
index 9b1733bae8e..6d7f86581d9 100644
--- a/source/blender/depsgraph/intern/depsgraph_type_defines.cc
+++ b/source/blender/depsgraph/intern/depsgraph_type_defines.cc
@@ -141,6 +141,7 @@ const char *operationCodeAsString(eDepsOperation_Code opcode)
 		STRINGIFY_OPCODE(GEOMETRY_SHAPEKEY);
 		/* Object data. */
 		STRINGIFY_OPCODE(LIGHT_PROBE_EVAL);
+		STRINGIFY_OPCODE(SPEAKER_EVAL);
 		/* Pose. */
 		STRINGIFY_OPCODE(POSE_INIT);
 		STRINGIFY_OPCODE(POSE_INIT_IK);
diff --git a/source/blender/depsgraph/intern/depsgraph_types.h b/source/blender/depsgraph/intern/depsgraph_types.h
index c6eb0d57bac..6577e742266 100644
--- a/source/blender/depsgraph/intern/depsgraph_types.h
+++ b/source/blender/depsgraph/intern/depsgraph_types.h
@@ -211,6 +211,7 @@ typedef enum eDepsOperation_Code {
 
 	/* Object data. ------------------------------------- */
 	DEG_OPCODE_LIGHT_PROBE_EVAL,
+	DEG_OPCODE_SPEAKER_EVAL,
 
 	/* Pose. -------------------------------------------- */
 	/* Init pose, clear flags, etc. */



More information about the Bf-blender-cvs mailing list