Skip to content
Snippets Groups Projects
Commit 23fbc9f2 authored by Campbell Barton's avatar Campbell Barton
Browse files

Fix T39083: speakers were evaluated multiple times when used in sets

also skip checking all objects for speakers when no speakers are in the
blend file.
parent 8d09ec63
Branches
Tags
No related merge requests found
......@@ -134,7 +134,7 @@ void sound_free_waveform(struct bSound *sound);
void sound_read_waveform(struct bSound *sound);
void sound_update_scene(struct Scene *scene);
void sound_update_scene(struct Main *bmain, struct Scene *scene);
void *sound_get_factory(void *sound);
......
......@@ -1539,9 +1539,6 @@ static void scene_update_tagged_recursive(EvaluationContext *eval_ctx, Main *bma
/* scene drivers... */
scene_update_drivers(bmain, scene);
/* update sound system animation */
sound_update_scene(scene);
/* update masking curves */
BKE_mask_update_scene(bmain, scene);
......@@ -1575,6 +1572,8 @@ void BKE_scene_update_tagged(EvaluationContext *eval_ctx, Main *bmain, Scene *sc
* in the future this should handle updates for all datablocks, not
* only objects and scenes. - brecht */
scene_update_tagged_recursive(eval_ctx, bmain, scene, scene);
/* update sound system animation (TODO, move to depsgraph) */
sound_update_scene(bmain, scene);
/* extra call here to recalc scene animation (for sequencer) */
{
......@@ -1680,6 +1679,8 @@ void BKE_scene_update_for_newframe_ex(EvaluationContext *eval_ctx, Main *bmain,
/* BKE_object_handle_update() on all objects, groups and sets */
scene_update_tagged_recursive(eval_ctx, bmain, sce, sce);
/* update sound system animation (TODO, move to depsgraph) */
sound_update_scene(bmain, sce);
scene_depsgraph_hack(eval_ctx, sce, sce);
......
......@@ -681,7 +681,7 @@ void sound_read_waveform(bSound *sound)
}
}
void sound_update_scene(struct Scene *scene)
void sound_update_scene(Main *bmain, struct Scene *scene)
{
Object *ob;
Base *base;
......@@ -694,6 +694,11 @@ void sound_update_scene(struct Scene *scene)
void *handle;
float quat[4];
/* cheap test to skip looping over all objects (no speakers is a common case) */
if (BLI_listbase_is_empty(&bmain->speaker)) {
goto skip_speakers;
}
for (SETLOOPER(scene, sce_it, base)) {
ob = base->object;
if (ob->type == OB_SPEAKER) {
......@@ -743,6 +748,9 @@ void sound_update_scene(struct Scene *scene)
}
}
skip_speakers:
while ((handle = AUD_getSet(scene->speaker_handles))) {
AUD_removeSequence(scene->sound_scene, handle);
}
......@@ -808,7 +816,7 @@ void sound_read_waveform(struct bSound *sound) { (void)sound; }
void sound_init_main(struct Main *bmain) { (void)bmain; }
void sound_set_cfra(int cfra) { (void)cfra; }
void sound_update_sequencer(struct Main *main, struct bSound *sound) { (void)main; (void)sound; }
void sound_update_scene(struct Scene *scene) { (void)scene; }
void sound_update_scene(struct Main *UNUSED(bmain), struct Scene *UNUSED(scene)) { }
void sound_update_scene_sound(void *handle, struct bSound *sound) { (void)handle; (void)sound; }
void sound_update_scene_listener(struct Scene *scene) { (void)scene; }
void sound_update_fps(struct Scene *scene) { (void)scene; }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment