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

Nicholas Bishop nicholasbishop at gmail.com
Sun Jun 7 20:09:22 CEST 2009


Revision: 20716
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20716
Author:   nicholasbishop
Date:     2009-06-07 20:09:22 +0200 (Sun, 07 Jun 2009)

Log Message:
-----------
Multires/2.5:

Attempt to make multires updating a little cleaner by
assuming that no update needs to be performed, and only
doing the update when the modified flag is set (either
by sculpting or using some other tool that needs an update.)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h	2009-06-07 17:36:31 UTC (rev 20715)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h	2009-06-07 18:09:22 UTC (rev 20716)
@@ -50,10 +50,11 @@
 int MultiresDM_get_totlvl(struct DerivedMesh *);
 int MultiresDM_get_lvl(struct DerivedMesh *);
 void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct DerivedMesh*));
-int *MultiresDM_get_flags(struct DerivedMesh *);
 
-#define MULTIRES_DM_UPDATE_BLOCK 1
-#define MULTIRES_DM_UPDATE_ALWAYS 2
+/* The displacements will only be updated when
+   the MultiresDM has been marked as modified */
+void MultiresDM_mark_as_modified(struct DerivedMesh *);
+void multires_mark_as_modified(struct Object *ob);
 
 void multires_force_update(struct Object *ob);
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-06-07 17:36:31 UTC (rev 20715)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-06-07 18:09:22 UTC (rev 20716)
@@ -1298,7 +1298,7 @@
 	int *face_offsets;
 
 	Mesh *me;
-	int flags;
+	int modified;
 
 	void (*update)(DerivedMesh*);
 } MultiresDM;
@@ -1309,7 +1309,7 @@
 	int mvert_layer;
 
 	/* Before freeing, need to update the displacement map */
-	if(dm->needsFree && !(mrdm->flags & MULTIRES_DM_UPDATE_BLOCK))
+	if(dm->needsFree && mrdm->modified)
 		mrdm->update(dm);
 
 	/* If the MVert data is being used as the sculpt undo store, don't free it */
@@ -1382,7 +1382,7 @@
 	mrdm->lvl = ms->mmd->lvl;
 	mrdm->totlvl = ms->mmd->totlvl;
 	mrdm->subco = MEM_callocN(sizeof(MVert)*numVerts, "multires subdivided verts");
-	mrdm->flags = 0;
+	mrdm->modified = 0;
 
 	dm->release = MultiresDM_release;
 
@@ -1468,7 +1468,7 @@
 	return mrdm->face_offsets;
 }
 
-int *MultiresDM_get_flags(DerivedMesh *dm)
+void MultiresDM_mark_as_modified(DerivedMesh *dm)
 {
-	return &((MultiresDM*)dm)->flags;
+	((MultiresDM*)dm)->modified = 1;
 }

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-06-07 17:36:31 UTC (rev 20715)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-06-07 18:09:22 UTC (rev 20716)
@@ -165,7 +165,7 @@
 		for(i = 0; i < src_me->totvert; ++i)
 			VecCopyf(mvert[i].co, src_me->mvert[i].co);
 		mrdm->needsFree = 1;
-		*MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_ALWAYS;
+		MultiresDM_mark_as_modified(mrdm);
 		mrdm->release(mrdm);
 		dst->derivedFinal = NULL;
 
@@ -397,7 +397,7 @@
 	final->needsFree = 1;
 	final->release(final);
 	mrdm->needsFree = 1;
-	*MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_ALWAYS;
+	MultiresDM_mark_as_modified(mrdm);
 	mrdm->release(mrdm);
 }
 
@@ -475,7 +475,6 @@
 		
 		final = multires_subdisp_pre(mrdm, distance, simple);
 		mrdm->needsFree = 1;
-		*MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_BLOCK;
 		mrdm->release(mrdm);
 	}
 
@@ -1168,8 +1167,6 @@
 	Mesh *me;
 	MDisps *mdisps;
 
-	if(!(G.f & G_SCULPTMODE) && !(*MultiresDM_get_flags(dm) & MULTIRES_DM_UPDATE_ALWAYS)) return;
-
 	me = MultiresDM_get_mesh(dm);
 	mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS);
 
@@ -1191,7 +1188,6 @@
 			mmd.totlvl = totlvl;
 			mmd.lvl = lvl;
 			subco_dm = multires_dm_create_from_derived(&mmd, orig, me, 0, 0);
-			*MultiresDM_get_flags(subco_dm) |= MULTIRES_DM_UPDATE_BLOCK;
 			cur_lvl_orig_verts = CDDM_get_verts(subco_dm);
 
 			/* Subtract the original vertex cos from the new vertex cos */
@@ -1212,6 +1208,13 @@
 	}
 }
 
+void multires_mark_as_modified(struct Object *ob)
+{
+	if(ob && ob->derivedFinal) {
+		MultiresDM_mark_as_modified(ob->derivedFinal);
+	}
+}
+
 void multires_force_update(Object *ob)
 {
 	if(ob && ob->derivedFinal) {

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-06-07 17:36:31 UTC (rev 20715)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-06-07 18:09:22 UTC (rev 20716)
@@ -9001,7 +9001,7 @@
                                        
 					multires_load_old(dm, me->mr);
 
-					*MultiresDM_get_flags(dm) |= MULTIRES_DM_UPDATE_ALWAYS;
+					MultiresDM_mark_as_modified(dm);
 					dm->release(dm);
 					orig->release(orig);
 

Modified: branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c	2009-06-07 17:36:31 UTC (rev 20715)
+++ branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c	2009-06-07 18:09:22 UTC (rev 20716)
@@ -1521,6 +1521,7 @@
 		
 		mmd->undo_verts = s->session->mvert;
 		mmd->undo_verts_tot = s->session->totvert;
+		multires_mark_as_modified(CTX_data_active_object(C));
 	}
 
 	ED_region_tag_redraw(ar);





More information about the Bf-blender-cvs mailing list