Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-05-01 12:23:20 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-05-03 16:50:40 +0300
commit17447ac5a6b56255dc3ee3ba5161a4aa640dca26 (patch)
tree31deec27de3a893e2ef0d10732de8b699020a835 /source/blender/depsgraph/intern/builder
parente6697d0127b3c683d7051c0201e391bfbf259d3f (diff)
Depsgraph: Make sound ID part of the graph
Currently those IDs are not covered by copy-on-write mechanism since that ruins the current design of BKE_sound, But this change allows to move towards system where sound handlers are only valid for an evaluated ID datablocks.
Diffstat (limited to 'source/blender/depsgraph/intern/builder')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc22
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h2
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc25
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.h2
4 files changed, 46 insertions, 5 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index b6822a89093..d46eb8d04cb 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -58,6 +58,7 @@ extern "C" {
#include "DNA_lightprobe_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
+#include "DNA_sound_types.h"
#include "DNA_speaker_types.h"
#include "DNA_texture_types.h"
#include "DNA_world_types.h"
@@ -443,6 +444,9 @@ void DepsgraphNodeBuilder::build_id(ID *id)
case ID_SPK:
build_speaker((Speaker *)id);
break;
+ case ID_SO:
+ build_sound((bSound *)id);
+ break;
case ID_TXT:
/* Not a part of dependency graph. */
break;
@@ -708,7 +712,7 @@ void DepsgraphNodeBuilder::build_object_data_speaker(Object *object)
{
Speaker *speaker = (Speaker *)object->data;
build_speaker(speaker);
- add_operation_node(&object->id, NodeType::PARAMETERS, OperationCode::SPEAKER_EVAL);
+ add_operation_node(&object->id, NodeType::AUDIO, OperationCode::SPEAKER_EVAL);
}
void DepsgraphNodeBuilder::build_object_transform(Object *object)
@@ -1543,9 +1547,23 @@ void DepsgraphNodeBuilder::build_speaker(Speaker *speaker)
return;
}
/* Placeholder so we can add relations and tag ID node for update. */
- add_operation_node(&speaker->id, NodeType::PARAMETERS, OperationCode::SPEAKER_EVAL);
+ add_operation_node(&speaker->id, NodeType::AUDIO, OperationCode::SPEAKER_EVAL);
build_animdata(&speaker->id);
build_parameters(&speaker->id);
+ if (speaker->sound != NULL) {
+ build_sound(speaker->sound);
+ }
+}
+
+void DepsgraphNodeBuilder::build_sound(bSound *sound)
+{
+ if (built_map_.checkIsBuiltAndTag(sound)) {
+ return;
+ }
+ /* Placeholder so we can add relations and tag ID node for update. */
+ add_operation_node(&sound->id, NodeType::AUDIO, OperationCode::SOUND_EVAL);
+ build_animdata(&sound->id);
+ build_parameters(&sound->id);
}
/* **** ID traversal callbacks functions **** */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index cf7cf1a62d8..68fb9ab6cc2 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -32,6 +32,7 @@
#include "DEG_depsgraph.h"
struct Base;
+struct bSound;
struct CacheFile;
struct Camera;
struct Collection;
@@ -206,6 +207,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder {
void build_movieclip(MovieClip *clip);
void build_lightprobe(LightProbe *probe);
void build_speaker(Speaker *speaker);
+ void build_sound(bSound *sound);
/* Per-ID information about what was already in the dependency graph.
* Allows to re-use certain values, to speed up following evaluation. */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index d3fd16d889f..242b78f1b8f 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -58,6 +58,7 @@ extern "C" {
#include "DNA_object_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
+#include "DNA_sound_types.h"
#include "DNA_speaker_types.h"
#include "DNA_texture_types.h"
#include "DNA_world_types.h"
@@ -487,6 +488,9 @@ void DepsgraphRelationBuilder::build_id(ID *id)
case ID_SPK:
build_speaker((Speaker *)id);
break;
+ case ID_SO:
+ build_sound((bSound *)id);
+ break;
case ID_TXT:
/* Not a part of dependency graph. */
break;
@@ -766,9 +770,9 @@ void DepsgraphRelationBuilder::build_object_data_speaker(Object *object)
{
Speaker *speaker = (Speaker *)object->data;
build_speaker(speaker);
- OperationKey probe_key(&speaker->id, NodeType::PARAMETERS, OperationCode::SPEAKER_EVAL);
- OperationKey object_key(&object->id, NodeType::PARAMETERS, OperationCode::SPEAKER_EVAL);
- add_relation(probe_key, object_key, "Speaker Update");
+ ComponentKey speaker_key(&speaker->id, NodeType::AUDIO);
+ ComponentKey object_key(&object->id, NodeType::AUDIO);
+ add_relation(speaker_key, object_key, "Speaker Update");
}
void DepsgraphRelationBuilder::build_object_parent(Object *object)
@@ -2276,6 +2280,21 @@ void DepsgraphRelationBuilder::build_speaker(Speaker *speaker)
}
build_animdata(&speaker->id);
build_parameters(&speaker->id);
+ if (speaker->sound != NULL) {
+ build_sound(speaker->sound);
+ ComponentKey speaker_key(&speaker->id, NodeType::AUDIO);
+ ComponentKey sound_key(&speaker->sound->id, NodeType::AUDIO);
+ add_relation(sound_key, speaker_key, "Sound -> Speaker");
+ }
+}
+
+void DepsgraphRelationBuilder::build_sound(bSound *sound)
+{
+ if (built_map_.checkIsBuiltAndTag(sound)) {
+ return;
+ }
+ build_animdata(&sound->id);
+ build_parameters(&sound->id);
}
void DepsgraphRelationBuilder::build_copy_on_write_relations()
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 90bdb9bae65..e84bd857090 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -45,6 +45,7 @@
#include "intern/node/deg_node_operation.h"
struct Base;
+struct bSound;
struct CacheFile;
struct Camera;
struct Collection;
@@ -264,6 +265,7 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder {
void build_movieclip(MovieClip *clip);
void build_lightprobe(LightProbe *probe);
void build_speaker(Speaker *speaker);
+ void build_sound(bSound *sound);
void build_nested_datablock(ID *owner, ID *id);
void build_nested_nodetree(ID *owner, bNodeTree *ntree);