3D Audio GSoC:
[blender-staging.git] / source / blender / blenkernel / intern / scene.c
index e045bd0fb82cd84a431da39e44a34f9622f07ad7..12e81e8296e26a2f5d1716b2bda6cdfb7c1a4926 100644 (file)
@@ -473,9 +473,10 @@ Scene *add_scene(const char *name)
 
        BLI_strncpy(sce->r.engine, "BLENDER_RENDER", sizeof(sce->r.engine));
 
-       sce->audio.distance_model = 2.0;
-       sce->audio.doppler_factor = 1.0;
-       sce->audio.speed_of_sound = 343.3;
+       sce->audio.distance_model = 2.0f;
+       sce->audio.doppler_factor = 1.0f;
+       sce->audio.speed_of_sound = 343.3f;
+       sce->audio.volume = 1.0f;
 
        BLI_strncpy(sce->r.pic, U.renderdir, sizeof(sce->r.pic));
 
@@ -915,7 +916,7 @@ static void scene_update_drivers(Main *UNUSED(bmain), Scene *scene)
        
        /* scene itself */
        if (scene->adt && scene->adt->drivers.first) {
-               BKE_animsys_evaluate_animdata(&scene->id, scene->adt, ctime, ADT_RECALC_DRIVERS);
+               BKE_animsys_evaluate_animdata(scene, &scene->id, scene->adt, ctime, ADT_RECALC_DRIVERS);
        }
        
        /* world */
@@ -925,7 +926,7 @@ static void scene_update_drivers(Main *UNUSED(bmain), Scene *scene)
                AnimData *adt= BKE_animdata_from_id(wid);
                
                if (adt && adt->drivers.first)
-                       BKE_animsys_evaluate_animdata(wid, adt, ctime, ADT_RECALC_DRIVERS);
+                       BKE_animsys_evaluate_animdata(scene, wid, adt, ctime, ADT_RECALC_DRIVERS);
        }
        
        /* nodes */
@@ -934,7 +935,7 @@ static void scene_update_drivers(Main *UNUSED(bmain), Scene *scene)
                AnimData *adt= BKE_animdata_from_id(nid);
                
                if (adt && adt->drivers.first)
-                       BKE_animsys_evaluate_animdata(nid, adt, ctime, ADT_RECALC_DRIVERS);
+                       BKE_animsys_evaluate_animdata(scene, nid, adt, ctime, ADT_RECALC_DRIVERS);
        }
 }
 
@@ -965,6 +966,9 @@ static void scene_update_tagged_recursive(Main *bmain, Scene *scene, Scene *scen
        
        /* scene drivers... */
        scene_update_drivers(bmain, scene);
+
+       /* update sound system animation */
+       sound_update_scene(bmain, scene);
 }
 
 /* this is called in main loop, doing tagged updates before redraw */
@@ -985,7 +989,7 @@ void scene_update_tagged(Main *bmain, Scene *scene)
                float ctime = BKE_curframe(scene);
                
                if (adt && (adt->recalc & ADT_RECALC_ANIM))
-                       BKE_animsys_evaluate_animdata(&scene->id, adt, ctime, 0);
+                       BKE_animsys_evaluate_animdata(scene, &scene->id, adt, ctime, 0);
        }
        
        if (scene->physics_settings.quick_cache_step)
@@ -1000,6 +1004,8 @@ void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
 {
        float ctime = BKE_curframe(sce);
        Scene *sce_iter;
+
+       sound_set_cfra(sce->r.cfra);
        
        /* clear animation overrides */
        // XXX TODO...
@@ -1020,7 +1026,7 @@ void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
         * can be overridden by settings from Scene, which owns the Texture through a hierarchy
         * such as Scene->World->MTex/Texture) can still get correctly overridden.
         */
-       BKE_animsys_evaluate_all_animation(bmain, ctime);
+       BKE_animsys_evaluate_all_animation(bmain, sce, ctime);
        /*...done with recusrive funcs */
 
        /* object_handle_update() on all objects, groups and sets */