[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16033] branches/soc-2008-nicholasbishop/ source/blender/blenkernel: Multires doesn' t update itself outside of sculptmode now, so switching levels is somewhat faster outside of sculptmode.

Nicholas Bishop nicholasbishop at gmail.com
Sat Aug 9 02:18:37 CEST 2008


Revision: 16033
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16033
Author:   nicholasbishop
Date:     2008-08-09 02:18:37 +0200 (Sat, 09 Aug 2008)

Log Message:
-----------
Multires doesn't update itself outside of sculptmode now, so switching levels is somewhat faster outside of sculptmode.

Modified Paths:
--------------
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-08-08 23:36:12 UTC (rev 16032)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-08-09 00:18:37 UTC (rev 16033)
@@ -95,8 +95,11 @@
 int MultiresDM_get_totlvl(struct DerivedMesh *);
 int MultiresDM_get_lvl(struct DerivedMesh *);
 void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct DerivedMesh*));
-void MultiresDM_block_update(struct DerivedMesh *);
+int *MultiresDM_get_flags(struct DerivedMesh *);
 
+#define MULTIRES_DM_UPDATE_BLOCK 1
+#define MULTIRES_DM_UPDATE_ALWAYS 2
+
 /* Modifier */
 struct MDisps;
 struct MFace;

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-08-08 23:36:12 UTC (rev 16032)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-08-09 00:18:37 UTC (rev 16033)
@@ -1165,7 +1165,7 @@
 	IndexNode *vert_face_map_mem;
 
 	Mesh *me;
-	int block_update;
+	int flags;
 
 	void (*update)(DerivedMesh*);
 } MultiresDM;
@@ -1175,7 +1175,7 @@
 	MultiresDM *mrdm = (MultiresDM*)dm;
 
 	/* Before freeing, need to update the displacement map */
-	if(dm->needsFree && !mrdm->block_update)
+	if(dm->needsFree && !(mrdm->flags & MULTIRES_DM_UPDATE_BLOCK))
 		mrdm->update(dm);
 
 	if(DM_release(dm)) {
@@ -1261,7 +1261,7 @@
 	mrdm->lvl = ms->lvl;
 	mrdm->totlvl = ms->totlvl;
 	mrdm->subco = MEM_callocN(sizeof(MVert)*numVerts, "multires subdivided verts");
-	mrdm->block_update = 0;
+	mrdm->flags = 0;
 
 	dm->release = MultiresDM_release;
 
@@ -1325,7 +1325,7 @@
 	return mrdm->vert_face_map;
 }
 
-void MultiresDM_block_update(DerivedMesh *dm)
+int *MultiresDM_get_flags(DerivedMesh *dm)
 {
-	((MultiresDM*)dm)->block_update = 1;
+	return &((MultiresDM*)dm)->flags;
 }

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-08-08 23:36:12 UTC (rev 16032)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-08-09 00:18:37 UTC (rev 16033)
@@ -1176,6 +1176,7 @@
 	final->needsFree = 1;
 	final->release(final);
 	mrdm->needsFree = 1;
+	*MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_ALWAYS;
 	mrdm->release(mrdm);
 }
 
@@ -1584,7 +1585,7 @@
 	MFace *mface;
 	int i;
 
-	//if(!(G.f & G_SCULPTMODE)) return;
+	if(!(G.f & G_SCULPTMODE) && !(*MultiresDM_get_flags(dm) & MULTIRES_DM_UPDATE_ALWAYS)) return;
 
 	mdisps = dm->getFaceDataArray(dm, CD_MDISPS);
 
@@ -1612,7 +1613,7 @@
 			mmd.totlvl = totlvl;
 			mmd.lvl = lvl;
 			subco_dm = multires_dm_create_from_derived(&mmd, orig, me, 0, 0);
-			MultiresDM_block_update(subco_dm);
+			*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 */
@@ -1654,16 +1655,14 @@
 	SubsurfModifierData smd;
 	MultiresSubsurf ms = {me, mmd->totlvl, mmd->lvl};
 	DerivedMesh *result;
+	int i;
 
 	memset(&smd, 0, sizeof(SubsurfModifierData));
 	smd.levels = smd.renderLevels = mmd->lvl - 1;
 
 	result = subsurf_make_derived_from_derived_with_multires(dm, &smd, &ms, useRenderParams, NULL, isFinalCalc, 0);
-	/* TODO */
-	int i;
-	for(i = 0; i < result->getNumVerts(result); ++i) {
+	for(i = 0; i < result->getNumVerts(result); ++i)
 		MultiresDM_get_subco(result)[i] = CDDM_get_verts(result)[i];
-	}
 	multiresModifier_disp_run(result, MultiresDM_get_subco(result), 0);
 	MultiresDM_set_update(result, multiresModifier_update);
 





More information about the Bf-blender-cvs mailing list