diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-05-01 13:46:47 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-05-03 16:50:40 +0300 |
commit | 3369b8289167ddf3dbca0e3895d598bf73534124 (patch) | |
tree | 81a5025da18727686a03644d0fa45eb3999c0695 /source/blender/depsgraph/intern/builder | |
parent | e8f10d6475765685acee21ca5e8d48f568ee2031 (diff) |
Depsgraph: Add scene audio component
The idea is to make that responsible for dealing with
things like audio update on frame jump and such.
Diffstat (limited to 'source/blender/depsgraph/intern/builder')
6 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index 563edafcb0e..a9cafd933d9 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -1585,6 +1585,11 @@ void DepsgraphNodeBuilder::build_sequencer(Scene *scene) SEQ_END; } +void DepsgraphNodeBuilder::build_scene_audio(Scene *scene) +{ + add_operation_node(&scene->id, NodeType::AUDIO, OperationCode::SOUND_EVAL); +} + /* **** 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 9805bd97b08..9074efefe50 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -209,6 +209,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder { void build_speaker(Speaker *speaker); void build_sound(bSound *sound); void build_sequencer(Scene *scene); + void build_scene_audio(Scene *scene); /* 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_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc index c03416e956e..1b9524e5832 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc @@ -154,6 +154,7 @@ void DepsgraphNodeBuilder::build_view_layer(Scene *scene, } /* Sequencer. */ if (linked_state == DEG_ID_LINKED_DIRECTLY) { + build_scene_audio(scene); build_sequencer(scene); } /* Collections. */ diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 46d565ad190..8fef35570fe 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -2307,15 +2307,25 @@ void DepsgraphRelationBuilder::build_sequencer(Scene *scene) /* Make sure dependnecies from sequences data goes to the sequencer evaluation. */ ComponentKey sequencer_key(&scene->id, NodeType::SEQUENCER); Sequence *seq; + bool has_audio_strips = false; SEQ_BEGIN (scene->ed, seq) { if (seq->sound != NULL) { build_sound(seq->sound); ComponentKey sound_key(&seq->sound->id, NodeType::AUDIO); add_relation(sound_key, sequencer_key, "Sound -> Sequencer"); + has_audio_strips = true; } /* TODO(sergey): Movie clip, scene, camera, mask. */ } SEQ_END; + if (has_audio_strips) { + ComponentKey scene_audio_key(&scene->id, NodeType::AUDIO); + add_relation(sequencer_key, scene_audio_key, "Sequencer -> Audio"); + } +} + +void DepsgraphRelationBuilder::build_scene_audio(Scene * /*scene*/) +{ } 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 190b4064481..30fbe5bcf6b 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -270,6 +270,7 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder { void build_speaker(Speaker *speaker); void build_sound(bSound *sound); void build_sequencer(Scene *scene); + void build_scene_audio(Scene *scene); void build_nested_datablock(ID *owner, ID *id); void build_nested_nodetree(ID *owner, bNodeTree *ntree); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc index 8a23e4b9b6e..cadb4ab3611 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc @@ -132,6 +132,7 @@ void DepsgraphRelationBuilder::build_view_layer(Scene *scene, } /* Sequencer. */ if (linked_state == DEG_ID_LINKED_DIRECTLY) { + build_scene_audio(scene); build_sequencer(scene); } /* Build all set scenes. */ |