diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-06-07 16:54:22 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-06-07 16:55:50 +0300 |
commit | bf417d640b2fd19417ebdc8343adfec1a4813df7 (patch) | |
tree | cbd7c66897971b6d31c03c8845940a889a8fe31e /source/blender/depsgraph/intern/builder/deg_builder_nodes.cc | |
parent | bda6f7df483f934e9001247e7073e2caed41f5a0 (diff) |
Sound: Fix 3D sound coming from scene strips
Need to pull in speakers from scene strips and make sure they
are properly updated.
Diffstat (limited to 'source/blender/depsgraph/intern/builder/deg_builder_nodes.cc')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes.cc | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index 64e5455dcbe..ae72720c267 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -79,6 +79,7 @@ extern "C" { #include "BKE_image.h" #include "BKE_key.h" #include "BKE_lattice.h" +#include "BKE_layer.h" #include "BKE_mask.h" #include "BKE_material.h" #include "BKE_mesh.h" @@ -1597,10 +1598,12 @@ void DepsgraphNodeBuilder::build_scene_sequencer(Scene *scene) if (seq->scene != NULL) { build_scene_parameters(seq->scene); } - if (seq->type == SEQ_TYPE_SCENE && seq->flag & SEQ_SCENE_STRIPS) { - if (seq->scene != NULL) { + if (seq->type == SEQ_TYPE_SCENE && seq->scene != NULL) { + if (seq->flag & SEQ_SCENE_STRIPS) { build_scene_sequencer(seq->scene); } + ViewLayer *sequence_view_layer = BKE_view_layer_default_render(seq->scene); + build_scene_speakers(seq->scene, sequence_view_layer); } /* TODO(sergey): Movie clip, scene, camera, mask. */ } @@ -1615,6 +1618,18 @@ void DepsgraphNodeBuilder::build_scene_audio(Scene *scene) add_operation_node(&scene->id, NodeType::AUDIO, OperationCode::SOUND_EVAL); } +void DepsgraphNodeBuilder::build_scene_speakers(Scene * /*scene*/, ViewLayer *view_layer) +{ + LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) { + Object *object = base->object; + if (object->type != OB_SPEAKER || !need_pull_base_into_graph(base)) { + continue; + } + /* NOTE: Can not use base because it does not belong to a current view layer. */ + build_object(-1, base->object, DEG_ID_LINKED_INDIRECTLY, true); + } +} + /* **** ID traversal callbacks functions **** */ void DepsgraphNodeBuilder::modifier_walk(void *user_data, |