[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42014] branches/bmesh/blender/source/ blender/blenkernel/intern/customdata.c: Improve checking for getting layer "n" of a layer type and skip zero-length allocations for Bmesh layers
Andrew Wiggin
ender79bl at gmail.com
Sun Nov 20 17:19:56 CET 2011
Revision: 42014
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42014
Author: ender79
Date: 2011-11-20 16:19:56 +0000 (Sun, 20 Nov 2011)
Log Message:
-----------
Improve checking for getting layer "n" of a layer type and skip zero-length allocations for Bmesh layers
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2011-11-20 16:13:27 UTC (rev 42013)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2011-11-20 16:19:56 UTC (rev 42014)
@@ -1314,13 +1314,13 @@
int CustomData_get_layer_index_n(const struct CustomData *data, int type, int n)
{
- int i;
+ int i = CustomData_get_layer_index(data, type);
- for(i=0; i < data->totlayer; ++i)
- if(data->layers[i].type == type)
- return i + n;
+ if (i != -1) {
+ i = (data->layers[i + n].type == type) ? (i + n) : (-1);
+ }
- return -1;
+ return i;
}
int CustomData_get_named_layer_index(const CustomData *data, int type, const char *name)
@@ -1526,7 +1526,7 @@
{
const LayerTypeInfo *typeInfo= layerType_getInfo(type);
int size = typeInfo->size * totelem, flag = 0, index = data->totlayer;
- void *newlayerdata;
+ void *newlayerdata = NULL;
/* Passing a layerdata to copy from with an alloctype that won't copy is
most likely a bug */
@@ -1541,7 +1541,7 @@
if((alloctype == CD_ASSIGN) || (alloctype == CD_REFERENCE)) {
newlayerdata = layerdata;
}
- else {
+ else if (size > 0) {
newlayerdata = MEM_callocN(size, layerType_getName(type));
if(!newlayerdata)
return NULL;
@@ -1957,7 +1957,7 @@
/* get the layer index of the first layer of type */
layer_index = data->typemap[type];
if(layer_index < 0) return NULL;
-
+
offset = layerType_getInfo(type)->size * index;
return (char *)data->layers[layer_index+n].data + offset;
}
@@ -1974,10 +1974,10 @@
void *CustomData_get_layer_n(const CustomData *data, int type, int n)
{
/* get the layer index of the active layer of type */
- int layer_index = CustomData_get_layer_index(data, type);
+ int layer_index = CustomData_get_layer_index_n(data, type, n);
if(layer_index < 0) return NULL;
- return data->layers[layer_index+n].data;
+ return data->layers[layer_index].data;
}
void *CustomData_get_layer_named(const struct CustomData *data, int type,
@@ -2018,10 +2018,10 @@
void *CustomData_set_layer_n(const struct CustomData *data, int type, int n, void *ptr)
{
/* get the layer index of the first layer of type */
- int layer_index = CustomData_get_layer_index(data, type);
+ int layer_index = CustomData_get_layer_index_n(data, type, n);
if(layer_index < 0) return NULL;
- data->layers[layer_index+n].data = ptr;
+ data->layers[layer_index].data = ptr;
return ptr;
}
@@ -2149,10 +2149,10 @@
int layer_index;
/* get the layer index of the first layer of type */
- layer_index = CustomData_get_layer_index(data, type);
+ layer_index = CustomData_get_layer_index_n(data, type, n);
if(layer_index < 0) return NULL;
- return (char *)block + data->layers[layer_index+n].offset;
+ return (char *)block + data->layers[layer_index].offset;
}
void CustomData_em_set(CustomData *data, void *block, int type, void *source)
@@ -2326,29 +2326,35 @@
int totloop, int totpoly)
{
int i;
- for(i=0; i < fdata->totlayer; i++){
- if(fdata->layers[i].type == CD_MTFACE){
+ for(i=0; i < fdata->totlayer; i++) {
+ if(fdata->layers[i].type == CD_MTFACE) {
CustomData_add_layer_named(pdata, CD_MTEXPOLY, CD_CALLOC, NULL, totpoly, fdata->layers[i].name);
CustomData_add_layer_named(ldata, CD_MLOOPUV, CD_CALLOC, NULL, totloop, fdata->layers[i].name);
}
- else if(fdata->layers[i].type == CD_MCOL)
+ else if (fdata->layers[i].type == CD_MCOL) {
CustomData_add_layer_named(ldata, CD_MLOOPCOL, CD_CALLOC, NULL, totloop, fdata->layers[i].name);
- else if(fdata->layers[i].type == CD_MDISPS)
+ }
+ else if (fdata->layers[i].type == CD_MDISPS) {
CustomData_add_layer_named(ldata, CD_MDISPS, CD_CALLOC, NULL, totloop, fdata->layers[i].name);
+ }
}
}
+
void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *ldata, int total)
{
int i;
- for(i=0; i < pdata->totlayer; i++){
- if(pdata->layers[i].type == CD_MTEXPOLY)
+ for(i=0; i < pdata->totlayer; i++) {
+ if (pdata->layers[i].type == CD_MTEXPOLY) {
CustomData_add_layer_named(fdata, CD_MTFACE, CD_CALLOC, NULL, total, pdata->layers[i].name);
+ }
}
- for(i=0; i < ldata->totlayer; i++){
- if(ldata->layers[i].type == CD_MLOOPCOL)
+ for(i=0; i < ldata->totlayer; i++) {
+ if (ldata->layers[i].type == CD_MLOOPCOL) {
CustomData_add_layer_named(fdata, CD_MCOL, CD_CALLOC, NULL, total, ldata->layers[i].name);
- if (ldata->layers[i].type == CD_WEIGHT_MLOOPCOL)
+ }
+ else if (ldata->layers[i].type == CD_WEIGHT_MLOOPCOL) {
CustomData_add_layer_named(fdata, CD_WEIGHT_MCOL, CD_CALLOC, NULL, total, ldata->layers[i].name);
+ }
}
}
More information about the Bf-blender-cvs
mailing list