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')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc19
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h1
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc18
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.h1
4 files changed, 35 insertions, 4 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,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 896854870de..095fb17f622 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -214,6 +214,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder {
void build_sound(bSound *sound);
void build_scene_sequencer(Scene *scene);
void build_scene_audio(Scene *scene);
+ void build_scene_speakers(Scene *scene, ViewLayer *view_layer);
/* 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 a0f10e560fa..9b1d528ab37 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -76,6 +76,7 @@ extern "C" {
#include "BKE_fcurve.h"
#include "BKE_image.h"
#include "BKE_key.h"
+#include "BKE_layer.h"
#include "BKE_material.h"
#include "BKE_mball.h"
#include "BKE_modifier.h"
@@ -2349,12 +2350,14 @@ void DepsgraphRelationBuilder::build_scene_sequencer(Scene *scene)
/* This is to support 3D audio. */
has_audio_strips = true;
}
- 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);
ComponentKey sequence_scene_audio_key(&seq->scene->id, NodeType::AUDIO);
add_relation(sequence_scene_audio_key, scene_audio_key, "Sequence Audio -> Scene Audio");
}
+ 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. */
}
@@ -2368,6 +2371,17 @@ void DepsgraphRelationBuilder::build_scene_audio(Scene * /*scene*/)
{
}
+void DepsgraphRelationBuilder::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;
+ }
+ build_object(NULL, base->object);
+ }
+}
+
void DepsgraphRelationBuilder::build_copy_on_write_relations()
{
for (IDNode *id_node : graph_->id_nodes) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 55295c8b075..1a4784b5402 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -275,6 +275,7 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder {
void build_sound(bSound *sound);
void build_scene_sequencer(Scene *scene);
void build_scene_audio(Scene *scene);
+ void build_scene_speakers(Scene *scene, ViewLayer *view_layer);
void build_nested_datablock(ID *owner, ID *id);
void build_nested_nodetree(ID *owner, bNodeTree *ntree);