[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22877] branches/bmesh/blender/source/ blender: cddm's recalc tesselation function works, and some memory leak fixes

Joseph Eagar joeedh at gmail.com
Sun Aug 30 01:55:35 CEST 2009


Revision: 22877
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22877
Author:   joeedh
Date:     2009-08-30 01:55:35 +0200 (Sun, 30 Aug 2009)

Log Message:
-----------
cddm's recalc tesselation function works, and some memory leak fixes

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/bmesh/operators/utils.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-08-29 23:41:09 UTC (rev 22876)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-08-29 23:55:35 UTC (rev 22877)
@@ -887,11 +887,11 @@
 		for (j=0; j<mp->totloop; j++, ml++) {
 			v = BLI_addfillvert(cddm->mvert[ml->v].co);
 			if (polyorigIndex)
-				v->f1 = polyorigIndex[i];
+				v->tmp.l = polyorigIndex[i];
 			else
-				v->f1 = i;
+				v->tmp.l = i;
 
-			v->f2 = mp->loopstart + j;
+			v->keyindex = mp->loopstart + j;
 
 			if (lastv)
 				BLI_addfilledge(lastv, v);
@@ -900,7 +900,7 @@
 				firstv = v;
 			lastv = v;
 		}
-		BLI_addfilledge(firstv, v);
+		BLI_addfilledge(lastv, firstv);
 		
 		BLI_edgefill(0, 0);
 		for (f=fillfacebase.first; f; f=f->next) {
@@ -909,10 +909,10 @@
 
 			/*these are loop indices, they'll be transformed
 			  into vert indices later.*/
-			mf[k].v1 = f->v1->f2;
-			mf[k].v2 = f->v2->f2;
-			mf[k].v3 = f->v3->f2;
-			origIndex[k] = f->v1->f1;
+			mf[k].v1 = f->v1->keyindex;
+			mf[k].v2 = f->v2->keyindex;
+			mf[k].v3 = f->v3->keyindex;
+			origIndex[k] = f->v1->tmp.l;
 
 			k++;
 		}
@@ -935,6 +935,17 @@
 		lindex[1] = mf->v2;
 		lindex[2] = mf->v3;
 
+		/*ensure winding is correct*/
+		if (mf->v1 > mf->v2) {
+			SWAP(int, mf->v1, mf->v2);
+		}
+		if (mf->v2 > mf->v3) {
+			SWAP(int, mf->v2, mf->v3);
+		}
+		if (mf->v1 > mf->v2) {
+			SWAP(int, mf->v1, mf->v2);
+		}
+
 		/*transform loop indices to vert indices*/
 		mf->v1 = cddm->mloop[mf->v1].v;
 		mf->v2 = cddm->mloop[mf->v2].v;
@@ -1067,6 +1078,8 @@
 	                 mesh->totvert);
 	CustomData_merge(&mesh->edata, &dm->edgeData, mask, alloctype,
 	                 mesh->totedge);
+	//CustomData_merge(&mesh->fdata, &dm->faceData, mask, alloctype,
+	//                 mesh->totface);
 	CustomData_merge(&mesh->ldata, &dm->loopData, mask, alloctype,
 	                 mesh->totloop);
 	CustomData_merge(&mesh->pdata, &dm->polyData, mask, alloctype,
@@ -1076,6 +1089,7 @@
 	cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE);
 	cddm->mloop = CustomData_get_layer(&dm->loopData, CD_MLOOP);
 	cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY);
+	//cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
 
 	index = CustomData_get_layer(&dm->vertData, CD_ORIGINDEX);
 	for(i = 0; i < mesh->totvert; ++i, ++index)

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2009-08-29 23:41:09 UTC (rev 22876)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2009-08-29 23:55:35 UTC (rev 22877)
@@ -1029,8 +1029,11 @@
 
 		((int*)CCS_getFaceUserData(ss, f))[1] = *index;
 	}
+	fiter->free(fiter);
 
 	CCS_processSync(ss);
+
+	V_FREE(fVerts);
 }
 
 /***/
@@ -2612,12 +2615,10 @@
 	int gridInternalEdges;
 	float *w = NULL, one = 1.0f;
 	WeightTable wtable = {0};
-	V_DECLARE(w);
 	/* MVert *mvert = NULL; - as yet unused */
 	MCol *mcol;
 	MEdge *medge = NULL;
 	MFace *mface = NULL;
-	FaceVertWeight *qweight, *tweight;
 
 	DM_from_template(&cgdm->dm, dm, CCS_getNumFinalVerts(ss),
 					 CCS_getNumFinalEdges(ss),
@@ -2724,8 +2725,6 @@
 	gridSideEdges = gridSize - 1;
 	gridInternalEdges = (gridSideEdges - 1) * gridSideEdges * 2; 
 
-	calc_ss_weights(gridFaces, &qweight, &tweight);
-
 	vertNum = 0;
 	edgeNum = 0;
 	faceNum = 0;
@@ -2931,6 +2930,11 @@
 	cgdm->dm.numFaceData = faceNum;
 	cgdm->dm.numLoopData = loopindex2;
 	cgdm->dm.numPolyData = faceNum;
+
+	V_FREE(vertidx);
+	V_FREE(loopidx);
+	free_ss_weights(&wtable);
+
 #if 0
 	for(index = 0; index < totface; ++index) {
 		CCFace *f = cgdm->faceMap[index].face;

Modified: branches/bmesh/blender/source/blender/bmesh/operators/utils.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/utils.c	2009-08-29 23:41:09 UTC (rev 22876)
+++ branches/bmesh/blender/source/blender/bmesh/operators/utils.c	2009-08-29 23:55:35 UTC (rev 22877)
@@ -891,11 +891,11 @@
 		switch( type ) {
 		case SIMVERT_FACE:
 			/* calling BM_Vert_FaceCount every time is time consumming, so call it only once per vertex */
-			v_ext[i].num_faces	= BM_Vert_FaceCount(v);
+			v_ext[i].num_faces = BM_Vert_FaceCount(v);
 			break;
 
 		case SIMVERT_VGROUP:
-			if( CustomData_has_layer(&(bm->vdata),CD_MDEFORMVERT) ) {
+			if( CustomData_has_layer(&(bm->vdata), CD_MDEFORMVERT) ) {
 				v_ext[i].dvert = CustomData_bmesh_get(&bm->vdata, v_ext[i].v->head.data, CD_MDEFORMVERT);
 			} else v_ext[i].dvert = NULL;
 			break;

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2009-08-29 23:41:09 UTC (rev 22876)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2009-08-29 23:55:35 UTC (rev 22877)
@@ -541,11 +541,11 @@
 
 static void undoMesh_to_editbtMesh(void *umv, void *emv)
 {
-	BMEditMesh *bm1 = umv, *bm2 = emv;
+	BMEditMesh *em1 = umv, *em2 = emv;
 
-	BMEdit_Free(bm2);
+	BMEdit_Free(em2);
 
-	*bm2 = *BMEdit_Copy(bm1);
+	*em2 = *BMEdit_Copy(em1);
 }
 
 
@@ -554,6 +554,7 @@
 	BMEditMesh *em = umv;
 
 	BMEdit_Free(em);
+	MEM_freeN(em);
 }
 
 /* and this is all the undo system needs to know */





More information about the Bf-blender-cvs mailing list