[Bf-blender-cvs] [d4ae4f5] depsgraph_refactor: Depsgraph: Make update for new frame closer to the master as well
Sergey Sharybin
noreply at git.blender.org
Thu Nov 6 11:39:02 CET 2014
Commit: d4ae4f59dbbdc8ab97327d3ac6041f34ca5fbb70
Author: Sergey Sharybin
Date: Thu Nov 6 11:25:39 2014 +0100
Branches: depsgraph_refactor
https://developer.blender.org/rBd4ae4f59dbbdc8ab97327d3ac6041f34ca5fbb70
Depsgraph: Make update for new frame closer to the master as well
===================================================================
M source/blender/blenkernel/intern/scene.c
===================================================================
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index b68ca72..f4d6126 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1718,91 +1718,95 @@ void BKE_scene_update_for_newframe(EvaluationContext *eval_ctx, Main *bmain, Sce
void BKE_scene_update_for_newframe_ex(EvaluationContext *eval_ctx, Main *bmain, Scene *sce, unsigned int lay, bool do_invisible_flush)
{
- if (DEG_get_eval_mode() == DEG_EVAL_MODE_OLD) {
- float ctime = BKE_scene_frame_get(sce);
- Scene *sce_iter;
+ float ctime = BKE_scene_frame_get(sce);
+ Scene *sce_iter;
#ifdef DETAILED_ANALYSIS_OUTPUT
- double start_time = PIL_check_seconds_timer();
+ double start_time = PIL_check_seconds_timer();
#endif
+ bool use_new_eval = DEG_get_eval_mode() == DEG_EVAL_MODE_NEW;
- /* keep this first */
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_PRE);
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
-
- /* update animated image textures for particles, modifiers, gpu, etc,
+ /* keep this first */
+ BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_PRE);
+ BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
+
+ /* update animated image textures for particles, modifiers, gpu, etc,
* call this at the start so modifiers with textures don't lag 1 frame */
- BKE_image_update_frame(bmain, sce->r.cfra);
-
- /* rebuild rigid body worlds before doing the actual frame update
+ BKE_image_update_frame(bmain, sce->r.cfra);
+
+ /* rebuild rigid body worlds before doing the actual frame update
* this needs to be done on start frame but animation playback usually starts one frame later
* we need to do it here to avoid rebuilding the world on every simulation change, which can be very expensive
*/
- scene_rebuild_rbw_recursive(sce, ctime);
-
- sound_set_cfra(sce->r.cfra);
-
- /* clear animation overrides */
- /* XXX TODO... */
-
- for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set)
- DAG_scene_relations_update(bmain, sce_iter);
-
+ scene_rebuild_rbw_recursive(sce, ctime);
+
+ sound_set_cfra(sce->r.cfra);
+
+ /* clear animation overrides */
+ /* XXX TODO... */
+
+ for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set)
+ DAG_scene_relations_update(bmain, sce_iter);
+
+ if (!use_new_eval) {
/* flush recalc flags to dependencies, if we were only changing a frame
- * this would not be necessary, but if a user or a script has modified
- * some datablock before BKE_scene_update_tagged was called, we need the flush */
+ * this would not be necessary, but if a user or a script has modified
+ * some datablock before BKE_scene_update_tagged was called, we need the flush */
DAG_ids_flush_tagged(bmain);
-
+
/* Following 2 functions are recursive
- * so don't call within 'scene_update_tagged_recursive' */
+ * so don't call within 'scene_update_tagged_recursive' */
DAG_scene_update_flags(bmain, sce, lay, true, do_invisible_flush); // only stuff that moves or needs display still
-
- BKE_mask_evaluate_all_masks(bmain, ctime, true);
-
- /* All 'standard' (i.e. without any dependencies) animation is handled here,
+ }
+
+ BKE_mask_evaluate_all_masks(bmain, ctime, true);
+
+ /* All 'standard' (i.e. without any dependencies) animation is handled here,
* with an 'local' to 'macro' order of evaluation. This should ensure that
* settings stored nestled within a hierarchy (i.e. settings in a Texture block
* 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, sce, ctime);
- /*...done with recursive funcs */
-
- /* clear "LIB_DOIT" flag from all materials, to prevent infinite recursion problems later
+ BKE_animsys_evaluate_all_animation(bmain, sce, ctime);
+ /*...done with recursive funcs */
+
+ /* clear "LIB_DOIT" flag from all materials, to prevent infinite recursion problems later
* when trying to find materials with drivers that need evaluating [#32017]
*/
- BKE_main_id_tag_idcode(bmain, ID_MA, false);
- BKE_main_id_tag_idcode(bmain, ID_LA, false);
-
- /* run rigidbody sim */
- /* NOTE: current position is so that rigidbody sim affects other objects, might change in the future */
- scene_do_rb_simulation_recursive(sce, ctime);
-
- /* BKE_object_handle_update() on all objects, groups and sets */
+ BKE_main_id_tag_idcode(bmain, ID_MA, false);
+ BKE_main_id_tag_idcode(bmain, ID_LA, false);
+
+ /* run rigidbody sim */
+ /* NOTE: current position is so that rigidbody sim affects other objects, might change in the future */
+ scene_do_rb_simulation_recursive(sce, ctime);
+
+ /* BKE_object_handle_update() on all objects, groups and sets */
+ if (use_new_eval) {
+ DEG_evaluate_on_framechange(eval_ctx, sce->depsgraph, ctime);
+ }
+ else {
scene_update_tagged_recursive(eval_ctx, bmain, sce, sce);
- /* update sound system animation (TODO, move to depsgraph) */
- sound_update_scene(bmain, sce);
-
+ }
+
+ /* update sound system animation (TODO, move to depsgraph) */
+ sound_update_scene(bmain, sce);
+
+ if (!use_new_eval) {
scene_depsgraph_hack(eval_ctx, sce, sce);
-
- /* notify editors and python about recalc */
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_POST);
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_POST);
-
+ }
+
+ /* notify editors and python about recalc */
+ BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_POST);
+ BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_POST);
+
+ if (!use_new_eval) {
DAG_ids_check_recalc(bmain, sce, true);
-
/* clear recalc flags */
DAG_ids_clear_recalc(bmain);
-
+ }
+
#ifdef DETAILED_ANALYSIS_OUTPUT
- fprintf(stderr, "frame update start_time %f duration %f\n", start_time, PIL_check_seconds_timer() - start_time);
+ fprintf(stderr, "frame update start_time %f duration %f\n", start_time, PIL_check_seconds_timer() - start_time);
#endif
- }
- else {
- float ctime = BKE_scene_frame_get(sce);
- /* new depsgraph */
- BLI_assert(sce->depsgraph);
- DEG_evaluate_on_framechange(eval_ctx, sce->depsgraph, ctime);
- }
}
/* return default layer, also used to patch old files */
More information about the Bf-blender-cvs
mailing list