=bmesh=fixed shapekey mem leak
This commit is contained in:
		@@ -172,8 +172,8 @@ static void *new_mem_element(int size)
 | 
			
		||||
		/*reset the block we're keeping*/
 | 
			
		||||
		BLI_addtail(&lb, first);
 | 
			
		||||
		memset(first->data, 0, blocksize);
 | 
			
		||||
		cur = first;
 | 
			
		||||
		offs = 0;
 | 
			
		||||
		cur= first;
 | 
			
		||||
		offs= 0;
 | 
			
		||||
 | 
			
		||||
		return NULL;	
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -78,8 +78,6 @@ void mesh_to_bmesh_exec(BMesh *bm, BMOperator *op) {
 | 
			
		||||
		CustomData_set_layer_name(&bm->ldata, CD_MLOOPUV, i, bm->pdata.layers[li].name);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	CustomData_add_layer(&bm->vdata, CD_SHAPE_KEYINDEX, CD_ASSIGN, NULL, 0);
 | 
			
		||||
 | 
			
		||||
	if (!CustomData_has_layer(&bm->edata, CD_CREASE))
 | 
			
		||||
		CustomData_add_layer(&bm->edata, CD_CREASE, CD_ASSIGN, NULL, 0);
 | 
			
		||||
 | 
			
		||||
@@ -96,6 +94,8 @@ void mesh_to_bmesh_exec(BMesh *bm, BMOperator *op) {
 | 
			
		||||
 | 
			
		||||
	actkey = ob_get_keyblock(ob);
 | 
			
		||||
	if(actkey && actkey->totelem == me->totvert) {
 | 
			
		||||
		CustomData_add_layer(&bm->vdata, CD_SHAPE_KEYINDEX, CD_ASSIGN, NULL, 0);
 | 
			
		||||
		
 | 
			
		||||
		/*check if we need to generate unique ids for the shapekeys.
 | 
			
		||||
		  this also exists in the file reading code, but is here for
 | 
			
		||||
		  a sanity check*/
 | 
			
		||||
@@ -142,12 +142,12 @@ void mesh_to_bmesh_exec(BMesh *bm, BMOperator *op) {
 | 
			
		||||
		/*Copy Custom Data*/
 | 
			
		||||
		CustomData_to_bmesh_block(&me->vdata, &bm->vdata, i, &v->head.data);
 | 
			
		||||
 | 
			
		||||
		/*set shape key original index*/
 | 
			
		||||
		keyi = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_SHAPE_KEYINDEX);
 | 
			
		||||
		*keyi = i;
 | 
			
		||||
 | 
			
		||||
		/*set shapekey data*/
 | 
			
		||||
		if (me->key) {
 | 
			
		||||
			/*set shape key original index*/
 | 
			
		||||
			keyi = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_SHAPE_KEYINDEX);
 | 
			
		||||
			*keyi = i;
 | 
			
		||||
			
 | 
			
		||||
			for (block=me->key->block.first, j=0; block; block=block->next, j++) {
 | 
			
		||||
				float *co = CustomData_bmesh_get_n(&bm->vdata, v->head.data, 
 | 
			
		||||
				                                   CD_SHAPEKEY, j);
 | 
			
		||||
 
 | 
			
		||||
@@ -613,6 +613,12 @@ static void undoMesh_to_editbtMesh(void *umv, void *emv, void *UNUSED(obdata))
 | 
			
		||||
 | 
			
		||||
static void free_undo(void *umv)
 | 
			
		||||
{
 | 
			
		||||
	if (((Mesh*)umv)->key)
 | 
			
		||||
	{
 | 
			
		||||
		free_key(((Mesh*)umv)->key);
 | 
			
		||||
		MEM_freeN(((Mesh*)umv)->key);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	free_mesh(umv, 0);
 | 
			
		||||
	MEM_freeN(umv);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user