[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18888] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Mon Feb 9 16:50:11 CET 2009


Revision: 18888
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18888
Author:   ton
Date:     2009-02-09 16:50:09 +0100 (Mon, 09 Feb 2009)

Log Message:
-----------
2.5

- Added depsgraph tag for object-change in AnimData, so the
  new animsys doesn't have to all objects anymore. 
  (Still WIP, depsgraph has to do this much better)

- Bugfix in notifiers; only 1 notifier was handled for
  frame updates

Result: 2 windows, displaying 2 scenes, now can be edited
independently, and play independent. Not when they share
data, of course. :)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-02-09 11:05:34 UTC (rev 18887)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-02-09 15:50:09 UTC (rev 18888)
@@ -587,7 +587,7 @@
 	 *	- NLA before Active Action, as Active Action behaves as 'tweaking track'
 	 *	  that overrides 'rough' work in NLA
 	 */
-	if ((recalc & ADT_RECALC_ANIM) /*|| (adt->recalc & ADT_RECALC_ANIM)*/) // XXX for now,don't check yet, as depsgraph doesn't know this yet
+	if ((recalc & ADT_RECALC_ANIM) || (adt->recalc & ADT_RECALC_ANIM))
  	{
 		/* evaluate NLA data */
 		if ((adt->nla_tracks.first) && !(adt->flag & ADT_NLA_EVAL_OFF))
@@ -599,6 +599,9 @@
 		// FIXME: what if the solo track was not tweaking one, then nla-solo should be checked too?
 		if (adt->action) 
 			animsys_evaluate_action(&id_ptr, adt->action, adt->remap, ctime);
+		
+		/* reset tag */
+		adt->recalc &= ~ADT_RECALC_ANIM;
 	}
 	
 	/* recalculate drivers 
@@ -639,29 +642,29 @@
 		printf("Evaluate all animation - %f \n", ctime);
 
 	/* macro for less typing */
-#define EVAL_ANIM_IDS(first) \
+#define EVAL_ANIM_IDS(first, flag) \
 	for (id= first; id; id= id->next) { \
 		AnimData *adt= BKE_animdata_from_id(id); \
-		BKE_animsys_evaluate_animdata(id, adt, ctime, ADT_RECALC_ANIM); \
+		BKE_animsys_evaluate_animdata(id, adt, ctime, flag); \
 	}
 	
 	/* nodes */
 	// TODO...
 	
 	/* textures */
-	EVAL_ANIM_IDS(main->tex.first);
+	EVAL_ANIM_IDS(main->tex.first, ADT_RECALC_ANIM);
 	
 	/* lamps */
-	EVAL_ANIM_IDS(main->lamp.first);
+	EVAL_ANIM_IDS(main->lamp.first, ADT_RECALC_ANIM);
 	
 	/* materials */
-	EVAL_ANIM_IDS(main->mat.first);
+	EVAL_ANIM_IDS(main->mat.first, ADT_RECALC_ANIM);
 	
 	/* cameras */
-	EVAL_ANIM_IDS(main->camera.first);
+	EVAL_ANIM_IDS(main->camera.first, ADT_RECALC_ANIM);
 	
 	/* shapekeys */
-	EVAL_ANIM_IDS(main->key.first);
+	EVAL_ANIM_IDS(main->key.first, ADT_RECALC_ANIM);
 	
 	/* curves */
 	// TODO...
@@ -670,13 +673,13 @@
 	// TODO...
 	
 	/* objects */
-	EVAL_ANIM_IDS(main->object.first);
+	EVAL_ANIM_IDS(main->object.first, 0);
 	
 	/* worlds */
-	EVAL_ANIM_IDS(main->world.first);
+	EVAL_ANIM_IDS(main->world.first, ADT_RECALC_ANIM);
 	
 	/* scenes */
-	EVAL_ANIM_IDS(main->scene.first);
+	EVAL_ANIM_IDS(main->scene.first, ADT_RECALC_ANIM);
 }
 
 /* ***************************************** */ 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c	2009-02-09 11:05:34 UTC (rev 18887)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c	2009-02-09 15:50:09 UTC (rev 18888)
@@ -324,7 +324,7 @@
 				/* now we need refs to all objects mentioned in this
 				 * pydriver expression, to call 'dag_add_relation'
 				 * for each of them */
-				Object **obarray = BPY_pydriver_get_objects(fcu->driver);
+				Object **obarray = NULL; // XXX BPY_pydriver_get_objects(fcu->driver);
 				if (obarray) {
 					Object *ob, **oba = obarray;
 					
@@ -2045,7 +2045,12 @@
 		}
 	}
 #endif // XXX old animation system
-	if(animdata_use_time(ob->adt)) ob->recalc |= OB_RECALC;
+	
+	if(animdata_use_time(ob->adt)) {
+		ob->recalc |= OB_RECALC;
+		ob->adt->recalc |= ADT_RECALC_ANIM;
+	}
+	
 	if((ob->adt) && (ob->type==OB_ARMATURE)) ob->recalc |= OB_RECALC_DATA;
 	
 	if(object_modifiers_use_time(ob)) ob->recalc |= OB_RECALC_DATA;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c	2009-02-09 11:05:34 UTC (rev 18887)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c	2009-02-09 15:50:09 UTC (rev 18888)
@@ -565,16 +565,44 @@
 	return 1;
 }
 
+/* This (evil) function is needed to cope with two legacy Blender rendering features
+* mblur (motion blur that renders 'subframes' and blurs them together), and fields 
+* rendering. Thus, the use of ugly globals from object.c
+*/
+// BAD... EVIL... JUJU...!!!!
+// XXX moved here temporarily
+float frame_to_float (Scene *scene, int cfra)		/* see also bsystem_time in object.c */
+{
+	extern float bluroffs;	/* bad stuff borrowed from object.c */
+	extern float fieldoffs;
+	float ctime;
+	
+	ctime= (float)cfra;
+	ctime+= bluroffs+fieldoffs;
+	ctime*= scene->r.framelen;
+	
+	return ctime;
+}
+
 static void scene_update(Scene *sce, unsigned int lay)
 {
 	Base *base;
 	Object *ob;
+	float ctime = frame_to_float(sce, sce->r.cfra); 
 	
 	if(sce->theDag==NULL)
 		DAG_scene_sort(sce);
 	
 	DAG_scene_update_flags(sce, lay);   // only stuff that moves or needs display still
 	
+	/* 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(G.main, ctime);
+	
 	for(base= sce->base.first; base; base= base->next) {
 		ob= base->object;
 		
@@ -588,43 +616,15 @@
 	}
 }
 
-/* This (evil) function is needed to cope with two legacy Blender rendering features
- * mblur (motion blur that renders 'subframes' and blurs them together), and fields 
- * rendering. Thus, the use of ugly globals from object.c
- */
-// BAD... EVIL... JUJU...!!!!
-// XXX moved here temporarily
-float frame_to_float (Scene *scene, int cfra)		/* see also bsystem_time in object.c */
-{
-	extern float bluroffs;	/* bad stuff borrowed from object.c */
-	extern float fieldoffs;
-	float ctime;
-	
-	ctime= (float)cfra;
-	ctime+= bluroffs+fieldoffs;
-	ctime*= scene->r.framelen;
-	
-	return ctime;
-}
 
 /* applies changes right away, does all sets too */
 void scene_update_for_newframe(Scene *sce, unsigned int lay)
 {
 	Scene *scene= sce;
-	float ctime = frame_to_float(sce, sce->r.cfra); 
 	
 	/* clear animation overrides */
 	// XXX TODO...
 	
-	/* 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(G.main, ctime);
-	
-	
 #ifndef DISABLE_PYTHON
 	if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED, 0);
 #endif

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-02-09 11:05:34 UTC (rev 18887)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-02-09 15:50:09 UTC (rev 18888)
@@ -1002,6 +1002,7 @@
 	delta = RNA_int_get(op->ptr, "delta");
 
 	CTX_data_scene(C)->r.cfra += delta;
+
 	WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C));
 
 	return OPERATOR_FINISHED;
@@ -1760,7 +1761,7 @@
 				scene->r.cfra= scene->r.sfra;
 		}
 
-		WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C));
+		WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
 		
 		return OPERATOR_FINISHED;
 	}

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2009-02-09 11:05:34 UTC (rev 18887)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2009-02-09 15:50:09 UTC (rev 18888)
@@ -121,7 +121,7 @@
 /* ************** Notifiers ****************** */
 
 typedef struct wmNotifier {
-	struct wmNotifier *prev, *next;
+	struct wmNotifier *next, *prev;
 	
 	struct wmWindowManager *wm;
 	struct wmWindow *window;
@@ -162,9 +162,9 @@
 
 	/* NC_SCREEN screen */
 #define ND_SCREENBROWSE		(1<<16)
-#define ND_SCENEBROWSE		(2<<16)
 
 	/* NC_SCENE Scene */
+#define ND_SCENEBROWSE		(1<<16)
 #define	ND_MARKERS			(2<<16)
 #define	ND_FRAME			(3<<16)
 #define	ND_RENDER_OPTIONS	(4<<16)

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-02-09 11:05:34 UTC (rev 18887)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-02-09 15:50:09 UTC (rev 18888)
@@ -162,29 +162,33 @@
 		wmWindow *win;
 		
 		for(win= wm->windows.first; win; win= win->next) {
-			ScrArea *sa;
-			ARegion *ar;
+			
+			/* filter out notifiers */
+			if(note->category==NC_SCREEN && note->reference && note->reference!=win->screen);
+			else if(note->category==NC_SCENE && note->reference && note->reference!=win->screen->scene);
+			else {
+				ScrArea *sa;
+				ARegion *ar;
 
-			/* XXX context in notifiers? */
-			CTX_wm_window_set(C, win);
+				/* XXX context in notifiers? */
+				CTX_wm_window_set(C, win);
 
-			/* printf("notifier win %d screen %s\n", win->winid, win->screen->id.name+2); */
-			ED_screen_do_listen(win, note);
+				/* printf("notifier win %d screen %s\n", win->winid, win->screen->id.name+2); */
+				ED_screen_do_listen(win, note);
 
-			for(ar=win->screen->regionbase.first; ar; ar= ar->next) {
-				ED_region_do_listen(ar, note);
-			}
-			
-			for(sa= win->screen->areabase.first; sa; sa= sa->next) {
-				ED_area_do_listen(sa, note);
-				for(ar=sa->regionbase.first; ar; ar= ar->next) {
+				for(ar=win->screen->regionbase.first; ar; ar= ar->next) {
 					ED_region_do_listen(ar, note);
 				}
+				
+				for(sa= win->screen->areabase.first; sa; sa= sa->next) {
+					ED_area_do_listen(sa, note);
+					for(ar=sa->regionbase.first; ar; ar= ar->next) {
+						ED_region_do_listen(ar, note);
+					}
+				}
 			}
 		}
 		
-		CTX_wm_window_set(C, NULL);
-		
 		MEM_freeN(note);
 	}
 	





More information about the Bf-blender-cvs mailing list