diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-05-01 12:23:20 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-05-03 16:50:40 +0300 |
commit | 17447ac5a6b56255dc3ee3ba5161a4aa640dca26 (patch) | |
tree | 31deec27de3a893e2ef0d10732de8b699020a835 /source/blender/depsgraph/intern/builder/deg_builder_relations.cc | |
parent | e6697d0127b3c683d7051c0201e391bfbf259d3f (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/deg_builder_relations.cc')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations.cc | 25 |
1 files changed, 22 insertions, 3 deletions
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() |