[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39158] branches/soc-2011-radish/source/ blender/editors/object/object_vgroup.c: Fixes a memory allocation problem
Jason Hays
jason_hays22 at mymail.eku.edu
Sun Aug 7 19:19:18 CEST 2011
Revision: 39158
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39158
Author: jason_hays22
Date: 2011-08-07 17:19:18 +0000 (Sun, 07 Aug 2011)
Log Message:
-----------
Fixes a memory allocation problem
Uses functions that reduce duplicate code for clearing/recalculating deformations.
Modified Paths:
--------------
branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c
Modified: branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c 2011-08-07 17:04:11 UTC (rev 39157)
+++ branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c 2011-08-07 17:19:18 UTC (rev 39158)
@@ -892,6 +892,16 @@
MEM_freeN(projA);
MEM_freeN(projB);
}
+static int dm_deform_clear(DerivedMesh *dm, Object *ob) {
+ dm->needsFree = 1;
+ dm->release(dm);
+ ob->derivedDeform=NULL;
+ // dm = NULL;
+ return NULL;
+}
+static DerivedMesh* dm_deform_recalc(Scene *scene, Object *ob) {
+ return mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+}
static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, int index, float *norm, float *coord, float d, float distToBe, float strength, float cp) {
DerivedMesh *dm;
MDeformWeight *dw;
@@ -902,7 +912,7 @@
float *oldPos = MEM_callocN(sizeof(float)*3, "oldPosition");
float vc, hc, dist;
int i, k;
- float **changes = MEM_mallocN(sizeof(float)*totweight, "vertHorzChange");
+ float **changes = MEM_mallocN(sizeof(float *)*totweight, "vertHorzChange");
float *dists = MEM_mallocN(sizeof(float)*totweight, "distance");
int *upDown = MEM_callocN(sizeof(int)*totweight, "upDownTracker");// track if up or down moved it closer for each bone
int *dwIndices = MEM_callocN(sizeof(int)*totweight, "dwIndexTracker");
@@ -917,7 +927,7 @@
}
do {
wasChange = FALSE;
- dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+ dm = dm_deform_recalc(scene, ob);
dm->getVert(dm, index, &m);
oldPos[0] = m.co[0];
oldPos[1] = m.co[1];
@@ -940,10 +950,7 @@
}
for(k = 0; k < 2; k++) {
if(dm) {
- dm->needsFree = 1;
- dm->release(dm);
- dm = NULL;
- ob->derivedDeform=NULL;
+ dm = dm_deform_clear(dm, ob);
}
oldw = dw->weight;
if(k) {
@@ -954,12 +961,13 @@
if(dw->weight == oldw) {
changes[i][0] = 0;
changes[i][1] = 0;
+ dists[i] = distToStart;
break;
}
if(dw->weight > 1) {
dw->weight = 1;
}
- dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+ dm = dm_deform_recalc(scene, ob);
dm->getVert(dm, index, &m);
getVerticalAndHorizontalChange(norm, d, coord, oldPos, distToStart, m.co, changes, dists, i);
dw->weight = oldw;
@@ -1052,10 +1060,7 @@
wasChange = FALSE;
}
if(dm) {
- dm->needsFree = 1;
- dm->release(dm);
- dm = NULL;
- ob->derivedDeform=NULL;
+ dm = dm_deform_clear(dm, ob);
}
}
//printf("best vc=%f hc=%f \n", changes[bestIndex][0], changes[bestIndex][1]);
More information about the Bf-blender-cvs
mailing list