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:
Diffstat (limited to 'source/blender/depsgraph/intern/builder/deg_builder_relations.cc')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc74
1 files changed, 44 insertions, 30 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index d88e9bc9c04..ab3081cb1ae 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -2769,6 +2769,45 @@ void DepsgraphRelationBuilder::build_simulation(Simulation *simulation)
add_relation(nodetree_key, simulation_eval_key, "NodeTree -> Simulation", 0);
}
+using Seq_build_prop_cb_data = struct Seq_build_prop_cb_data {
+ DepsgraphRelationBuilder *builder;
+ ComponentKey sequencer_key;
+ bool has_audio_strips;
+};
+
+static bool seq_build_prop_cb(Sequence *seq, void *user_data)
+{
+ Seq_build_prop_cb_data *cd = (Seq_build_prop_cb_data *)user_data;
+
+ cd->builder->build_idproperties(seq->prop);
+ if (seq->sound != nullptr) {
+ cd->builder->build_sound(seq->sound);
+ ComponentKey sound_key(&seq->sound->id, NodeType::AUDIO);
+ cd->builder->add_relation(sound_key, cd->sequencer_key, "Sound -> Sequencer");
+ cd->has_audio_strips = true;
+ }
+ if (seq->scene != nullptr) {
+ cd->builder->build_scene_parameters(seq->scene);
+ /* This is to support 3D audio. */
+ cd->has_audio_strips = true;
+ }
+ if (seq->type == SEQ_TYPE_SCENE && seq->scene != nullptr) {
+ if (seq->flag & SEQ_SCENE_STRIPS) {
+ cd->builder->build_scene_sequencer(seq->scene);
+ ComponentKey sequence_scene_audio_key(&seq->scene->id, NodeType::AUDIO);
+ cd->builder->add_relation(
+ sequence_scene_audio_key, cd->sequencer_key, "Sequence Scene Audio -> Sequencer");
+ ComponentKey sequence_scene_key(&seq->scene->id, NodeType::SEQUENCER);
+ cd->builder->add_relation(
+ sequence_scene_key, cd->sequencer_key, "Sequence Scene -> Sequencer");
+ }
+ ViewLayer *sequence_view_layer = BKE_view_layer_default_render(seq->scene);
+ cd->builder->build_scene_speakers(seq->scene, sequence_view_layer);
+ }
+ /* TODO(sergey): Movie clip, camera, mask. */
+ return true;
+}
+
void DepsgraphRelationBuilder::build_scene_sequencer(Scene *scene)
{
if (scene->ed == nullptr) {
@@ -2781,36 +2820,11 @@ void DepsgraphRelationBuilder::build_scene_sequencer(Scene *scene)
ComponentKey scene_audio_key(&scene->id, NodeType::AUDIO);
/* Make sure dependencies from sequences data goes to the sequencer evaluation. */
ComponentKey sequencer_key(&scene->id, NodeType::SEQUENCER);
- Sequence *seq;
- bool has_audio_strips = false;
- SEQ_ALL_BEGIN (scene->ed, seq) {
- build_idproperties(seq->prop);
- if (seq->sound != nullptr) {
- build_sound(seq->sound);
- ComponentKey sound_key(&seq->sound->id, NodeType::AUDIO);
- add_relation(sound_key, sequencer_key, "Sound -> Sequencer");
- has_audio_strips = true;
- }
- if (seq->scene != nullptr) {
- build_scene_parameters(seq->scene);
- /* This is to support 3D audio. */
- has_audio_strips = true;
- }
- if (seq->type == SEQ_TYPE_SCENE && seq->scene != nullptr) {
- if (seq->flag & SEQ_SCENE_STRIPS) {
- build_scene_sequencer(seq->scene);
- ComponentKey sequence_scene_audio_key(&seq->scene->id, NodeType::AUDIO);
- add_relation(sequence_scene_audio_key, sequencer_key, "Sequence Scene Audio -> Sequencer");
- ComponentKey sequence_scene_key(&seq->scene->id, NodeType::SEQUENCER);
- add_relation(sequence_scene_key, sequencer_key, "Sequence Scene -> Sequencer");
- }
- ViewLayer *sequence_view_layer = BKE_view_layer_default_render(seq->scene);
- build_scene_speakers(seq->scene, sequence_view_layer);
- }
- /* TODO(sergey): Movie clip, camera, mask. */
- }
- SEQ_ALL_END;
- if (has_audio_strips) {
+
+ Seq_build_prop_cb_data cb_data = {this, sequencer_key, false};
+
+ SEQ_for_each_callback(&scene->ed->seqbase, seq_build_prop_cb, &cb_data);
+ if (cb_data.has_audio_strips) {
add_relation(sequencer_key, scene_audio_key, "Sequencer -> Audio");
}
}