[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56568] trunk/blender/source/blender: minor speedup for bmesh - add CustomData_bmesh_free_block_data(), use

Campbell Barton ideasman42 at gmail.com
Wed May 8 15:00:25 CEST 2013


Revision: 56568
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56568
Author:   campbellbarton
Date:     2013-05-08 13:00:25 +0000 (Wed, 08 May 2013)
Log Message:
-----------
minor speedup for bmesh - add CustomData_bmesh_free_block_data(), use
when the block would be immediately allocated again.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_customdata.h
    trunk/blender/source/blender/blenkernel/intern/customdata.c
    trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
    trunk/blender/source/blender/bmesh/intern/bmesh_interp.c

Modified: trunk/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_customdata.h	2013-05-08 13:00:14 UTC (rev 56567)
+++ trunk/blender/source/blender/blenkernel/BKE_customdata.h	2013-05-08 13:00:25 UTC (rev 56568)
@@ -307,6 +307,7 @@
 
 void CustomData_bmesh_set_default(struct CustomData *data, void **block);
 void CustomData_bmesh_free_block(struct CustomData *data, void **block);
+void CustomData_bmesh_free_block_data(struct CustomData *data, void **block);
 
 /* copy custom data to/from layers as in mesh/derivedmesh, to editmesh
  * blocks of data. the CustomData's must not be compatible */

Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c	2013-05-08 13:00:14 UTC (rev 56567)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c	2013-05-08 13:00:25 UTC (rev 56568)
@@ -2422,6 +2422,32 @@
 	*block = NULL;
 }
 
+/**
+ * Same as #CustomData_bmesh_free_block but zero the memory rather then freeing.
+ */
+void CustomData_bmesh_free_block_data(CustomData *data, void **block)
+{
+	const LayerTypeInfo *typeInfo;
+	int i;
+
+	if (*block == NULL)
+		return;
+
+	for (i = 0; i < data->totlayer; ++i) {
+		if (!(data->layers[i].flag & CD_FLAG_NOFREE)) {
+			typeInfo = layerType_getInfo(data->layers[i].type);
+
+			if (typeInfo->free) {
+				int offset = data->layers[i].offset;
+				typeInfo->free((char *)*block + offset, 1, typeInfo->size);
+			}
+		}
+	}
+
+	if (data->totsize)
+		memset(*block, 0, data->totsize);
+}
+
 static void CustomData_bmesh_alloc_block(CustomData *data, void **block)
 {
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-05-08 13:00:14 UTC (rev 56567)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-05-08 13:00:25 UTC (rev 56568)
@@ -759,7 +759,7 @@
 		return;
 	}
 	copy_v3_v3(target_vertex->no, source_vertex->no);
-	CustomData_bmesh_free_block(&target_mesh->vdata, &target_vertex->head.data);
+	CustomData_bmesh_free_block_data(&target_mesh->vdata, &target_vertex->head.data);
 	CustomData_bmesh_copy_data(&source_mesh->vdata, &target_mesh->vdata,
 	                           source_vertex->head.data, &target_vertex->head.data);
 }
@@ -771,7 +771,7 @@
 		BLI_assert(!"BMEdge: source and targer match");
 		return;
 	}
-	CustomData_bmesh_free_block(&target_mesh->edata, &target_edge->head.data);
+	CustomData_bmesh_free_block_data(&target_mesh->edata, &target_edge->head.data);
 	CustomData_bmesh_copy_data(&source_mesh->edata, &target_mesh->edata,
 	                           source_edge->head.data, &target_edge->head.data);
 }
@@ -783,7 +783,7 @@
 		BLI_assert(!"BMLoop: source and targer match");
 		return;
 	}
-	CustomData_bmesh_free_block(&target_mesh->ldata, &target_loop->head.data);
+	CustomData_bmesh_free_block_data(&target_mesh->ldata, &target_loop->head.data);
 	CustomData_bmesh_copy_data(&source_mesh->ldata, &target_mesh->ldata,
 	                           source_loop->head.data, &target_loop->head.data);
 }
@@ -796,7 +796,7 @@
 		return;
 	}
 	copy_v3_v3(target_face->no, source_face->no);
-	CustomData_bmesh_free_block(&target_mesh->pdata, &target_face->head.data);
+	CustomData_bmesh_free_block_data(&target_mesh->pdata, &target_face->head.data);
 	CustomData_bmesh_copy_data(&source_mesh->pdata, &target_mesh->pdata,
 	                           source_face->head.data, &target_face->head.data);
 	target_face->mat_nr = source_face->mat_nr;

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_interp.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_interp.c	2013-05-08 13:00:14 UTC (rev 56567)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_interp.c	2013-05-08 13:00:25 UTC (rev 56568)
@@ -55,7 +55,7 @@
 				/* do nothing */
 			}
 			else {
-				CustomData_bmesh_free_block(data_layer, &ele_dst->head.data);
+				CustomData_bmesh_free_block_data(data_layer, &ele_dst->head.data);
 				CustomData_bmesh_copy_data(data_layer, data_layer, ele1->head.data, &ele_dst->head.data);
 			}
 		}
@@ -64,7 +64,7 @@
 				/* do nothing */
 			}
 			else {
-				CustomData_bmesh_free_block(data_layer, &ele_dst->head.data);
+				CustomData_bmesh_free_block_data(data_layer, &ele_dst->head.data);
 				CustomData_bmesh_copy_data(data_layer, data_layer, ele2->head.data, &ele_dst->head.data);
 			}
 		}




More information about the Bf-blender-cvs mailing list