[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