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

Brecht Van Lommel brecht at blender.org
Fri Sep 4 22:51:11 CEST 2009


Revision: 23002
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23002
Author:   blendix
Date:     2009-09-04 22:51:09 +0200 (Fri, 04 Sep 2009)

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

Notifiers
---------

Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:

* Geometry changes are now done with NC_GEOM, rather than
  NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
  notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
  should only be used for notifying about changes in space data,
  we don't want to go back to allqueue(REDRAW..).

Depsgraph
---------

The dependency graph now has a different flush call:

DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)

It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.

Docs
----

I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:

http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_depsgraph.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c
    branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
    branches/blender2.5/blender/source/blender/editors/armature/poselib.c
    branches/blender2.5/blender/source/blender/editors/armature/poseobject.c
    branches/blender2.5/blender/source/blender/editors/curve/editcurve.c
    branches/blender2.5/blender/source/blender/editors/curve/editfont.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_loop.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_layers.c
    branches/blender2.5/blender/source/blender/editors/mesh/meshtools.c
    branches/blender2.5/blender/source/blender/editors/metaball/editmball.c
    branches/blender2.5/blender/source/blender/editors/object/editconstraint.c
    branches/blender2.5/blender/source/blender/editors/object/editkey.c
    branches/blender2.5/blender/source/blender/editors/object/editlattice.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/object/object_modifier.c
    branches/blender2.5/blender/source/blender/editors/object/object_vgroup.c
    branches/blender2.5/blender/source/blender/editors/physics/editparticle.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_image.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    branches/blender2.5/blender/source/blender/editors/space_action/space_action.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_ops.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_console/space_console.c
    branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
    branches/blender2.5/blender/source/blender/editors/space_file/space_file.c
    branches/blender2.5/blender/source/blender/editors/space_graph/space_graph.c
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_info/space_info.c
    branches/blender2.5/blender/source/blender/editors/space_nla/space_nla.c
    branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/space_sequencer.c
    branches/blender2.5/blender/source/blender/editors/space_text/space_text.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c
    branches/blender2.5/blender/source/blender/editors/space_time/space_time.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_snap.c
    branches/blender2.5/blender/source/blender/editors/transform/transform.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
    branches/blender2.5/blender/source/blender/editors/util/editmode_undo.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_ops.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_armature.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_boid.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_cloth.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_curve.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_fluidsim.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_key.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lattice.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh_api.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_meta.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_object_force.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_particle.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_pose.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_sculpt_paint.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_smoke.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_space.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_userdef.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_wm.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_depsgraph.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_depsgraph.h	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_depsgraph.h	2009-09-04 20:51:09 UTC (rev 23002)
@@ -32,6 +32,8 @@
 #define DEPS_DEBUG
 */
 
+struct ID;
+struct Main;
 struct Scene;
 struct DagNodeQueue;
 struct DagForest;
@@ -103,8 +105,9 @@
 
 		/* flushes all recalc flags in objects down the dependency tree */
 void	DAG_scene_flush_update(struct Scene *sce, unsigned int lay, int time);
-		/* flushes all recalc flags for this object down the dependency tree */
-void	DAG_object_flush_update(struct Scene *sce, struct Object *ob, short flag);
+		/* flushes all recalc flags for this object down the dependency tree,
+		   but not the DAG only supports objects and object data currently */
+void	DAG_id_flush_update(struct ID *id, short flag);
 
 void	DAG_pose_sort(struct Object *ob);
 		

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c	2009-09-04 20:51:09 UTC (rev 23002)
@@ -130,7 +130,6 @@
 void free_armature(bArmature *arm)
 {
 	if (arm) {
-		/*		unlink_armature(arm);*/
 		free_bones(arm);
 		
 		/* free editmode data */

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c	2009-09-04 20:51:09 UTC (rev 23002)
@@ -589,7 +589,7 @@
 	MEM_freeN(mat);
 
 	/* update dag */
-	DAG_object_flush_update(scene, ob_new, OB_RECALC_DATA);
+	DAG_id_flush_update(&ob_new->id, OB_RECALC_DATA);
 
 	return 1;
 }

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c	2009-09-04 20:51:09 UTC (rev 23002)
@@ -61,6 +61,7 @@
 #include "DNA_space_types.h"
 #include "DNA_view2d_types.h"
 #include "DNA_view3d_types.h"
+#include "DNA_windowmanager_types.h"
 
 #include "BLI_ghash.h"
 
@@ -2141,39 +2142,77 @@
 	
 }
 
-
-/* flag this object and all its relations to recalc */
-/* if you need to do more objects, tag object yourself and
-   use DAG_scene_flush_update() in end */
-void DAG_object_flush_update(Scene *sce, Object *ob, short flag)
+void DAG_id_flush_update(ID *id, short flag)
 {
-	
-	if(ob==NULL || sce->theDag==NULL) return;
+	Main *bmain= G.main;
+	wmWindowManager *wm;
+	wmWindow *win;
+	Scene *sce;
+	Object *obt, *ob= NULL;
+	short idtype;
 
-	ob->recalc |= flag;
-	BKE_ptcache_object_reset(sce, ob, PTCACHE_RESET_DEPSGRAPH);
-	
-	/* all users of this ob->data should be checked */
-	/* BUT! displists for curves are still only on cu */
-	if(flag & OB_RECALC_DATA) {
-		if(ob->type!=OB_CURVE && ob->type!=OB_SURF) {
-			ID *id= ob->data;
-			if(id && id->us>1) {
-				/* except when there's a key and shapes are locked */
-				if(ob_get_key(ob) && (ob->shapeflag & (OB_SHAPE_LOCK|OB_SHAPE_TEMPLOCK)));
-				else {
-					Object *obt;
-					for (obt=G.main->object.first; obt; obt= obt->id.next) {
-						if (obt != ob && obt->data==ob->data) {
-							obt->recalc |= OB_RECALC_DATA;
-							BKE_ptcache_object_reset(sce, obt, PTCACHE_RESET_DEPSGRAPH);
-						}
-					}
+	/* only one scene supported currently, making more scenes work
+	   correctly requires changes beyond just the dependency graph */
+
+	if((wm= bmain->wm.first)) {
+		/* if we have a windowmanager, use sce from first window */
+		for(win=wm->windows.first; win; win=win->next) {
+			sce= (win->screen)? win->screen->scene: NULL;
+
+			if(sce)
+				break;
+		}
+	}
+	else
+		/* if not, use the first sce */
+		sce= bmain->scene.first;
+
+	if(!id || !sce || !sce->theDag)
+		return;
+
+	/* set flags & pointcache for object */
+	if(GS(id->name) == ID_OB) {
+		ob= (Object*)id;
+		ob->recalc |= flag;
+		BKE_ptcache_object_reset(sce, ob, PTCACHE_RESET_DEPSGRAPH);
+
+		if(flag & OB_RECALC_DATA) {
+			/* all users of this ob->data should be checked */
+			id= ob->data;
+
+			/* no point in trying in this cases */
+			if(!id || id->us <= 1)
+				id= NULL;
+			/* curves and surfaces only need to mark one object, since
+			   otherwise cu->displist would be computed multiple times */
+			else if(ob->type==OB_CURVE || ob->type==OB_SURF)
+				id= NULL;
+			/* also for locked shape keys we make an exception */
+			else if(ob_get_key(ob) && (ob->shapeflag & (OB_SHAPE_LOCK|OB_SHAPE_TEMPLOCK)))
+				id= NULL;
+		}
+	}
+
+	/* set flags & pointcache for object data */
+	if(id) {
+		idtype= GS(id->name);
+
+		if(ELEM7(idtype, ID_ME, ID_CU, ID_MB, ID_LA, ID_LT, ID_CA, ID_AR)) {
+			for(obt=bmain->object.first; obt; obt= obt->id.next) {
+				if(!(ob && obt == ob) && obt->data == id) {
+					obt->recalc |= OB_RECALC_DATA;
+					BKE_ptcache_object_reset(sce, obt, PTCACHE_RESET_DEPSGRAPH);
+
+					/* for these we only flag one object, otherwise cu->displist
+					   would be computed multiple times */
+					if(obt->type==OB_CURVE || obt->type==OB_SURF)
+						break;
 				}
 			}
 		}
 	}
-	
+
+	/* flush to other objects that depend on this one */
 // XXX	if(G.curscreen)
 //		DAG_scene_flush_update(sce, dag_screen_view3d_layers(), 0);
 //	else

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c	2009-09-04 20:51:09 UTC (rev 23002)
@@ -977,7 +977,7 @@
 		}
 	}
 
-// XXX do this in caller	DAG_object_flush_update(scene, meshOb, OB_RECALC_DATA);
+// XXX do this in caller	DAG_id_flush_update(&me->id, OB_RECALC_DATA);
 }
 
 void mesh_calc_normals(MVert *mverts, int numVerts, MFace *mfaces, int numFaces, float **faceNors_r) 
@@ -1265,7 +1265,7 @@
 		MEM_freeN(me->pv->vert_map);
 		me->pv->vert_map= NULL;
 
-// XXX do this in caller		DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+// XXX do this in caller		DAG_id_flush_update(&me->id, OB_RECALC_DATA);
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-09-04 20:51:09 UTC (rev 23002)
@@ -83,7 +83,7 @@
 		mmd->lvl += distance;
 		if(mmd->lvl < 1) mmd->lvl = 1;
 		else if(mmd->lvl > mmd->totlvl) mmd->lvl = mmd->totlvl;
-		/* XXX: DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); 
+		/* XXX: DAG_id_flush_update(&ob->id, OB_RECALC_DATA); 
 		   object_handle_update(ob);*/
 		return 1;
 	}

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c	2009-09-04 20:51:09 UTC (rev 23002)
@@ -2631,7 +2631,7 @@
 	ParticleInterpolationData pind;
 	
 	float birthtime = 0.0, dietime = 0.0;
-	float t, time = 0.0, keytime = 0.0, dfra = 1.0, frs_sec = scene->r.frs_sec;
+	float t, time = 0.0, dfra = 1.0, frs_sec = scene->r.frs_sec;
 	float col[4] = {0.5f, 0.5f, 0.5f, 1.0f};
 	float prev_tangent[3], hairmat[4][4];
 	float rotmat[3][3];
@@ -2853,14 +2853,13 @@
 
 	ParticleSystem *psys = edit->psys;
 	ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
-	ParticleSettings *part = psys ? psys->part : NULL;
 	ParticleData *pa = psys ? psys->particles : NULL;
 
 	ParticleInterpolationData pind;
 	ParticleKey result;
 	
 	float birthtime = 0.0, dietime = 0.0;
-	float t, time = 0.0, keytime = 0.0, dfra = 1.0, frs_sec;
+	float t, time = 0.0, keytime = 0.0, frs_sec;
 	float hairmat[4][4];
 	int k,i;
 	int steps = (int)pow(2.0, (double)pset->draw_step);
@@ -3161,7 +3160,7 @@
 	psys->cfra=bsystem_time(scene,ob,scene->r.cfra+1,0.0);
 
 	DAG_scene_sort(scene);
-	DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+	DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 }
 void object_remove_particle_system(Scene *scene, Object *ob)
 {
@@ -3184,7 +3183,7 @@
 		((ParticleSystem *) ob->particlesystem.first)->flag |= PSYS_CURRENT;
 
 	DAG_scene_sort(scene);
-	DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+	DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 }
 static void default_particle_settings(ParticleSettings *part)
 {
@@ -3364,7 +3363,7 @@
 			}
 		}
 		if(flush)
-			DAG_object_flush_update(scene, base->object, OB_RECALC_DATA);
+			DAG_id_flush_update(&base->object->id, OB_RECALC_DATA);
 	}
 }
 
@@ -3396,7 +3395,7 @@
 		}
 
 		if(flush_update && found)
-			DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+			DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 	}
 
 	return node;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c	2009-09-04 20:14:59 UTC (rev 23001)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c	2009-09-04 20:51:09 UTC (rev 23002)
@@ -1947,7 +1947,7 @@
 		if(CONTINUE_PHYSICS == 0) {
 			for(ob=G.main->object.first; ob; ob=ob->id.next)
 				if(BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_OUTDATED))
-					DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+					DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 		}
 	}
 }

Modified: branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list