[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