[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29503] branches/soc-2010-nicolasbishop/ source/blender: Several bug fixes:
Nicholas Bishop
nicholasbishop at gmail.com
Thu Jun 17 04:11:05 CEST 2010
Revision: 29503
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29503
Author: nicholasbishop
Date: 2010-06-17 04:11:00 +0200 (Thu, 17 Jun 2010)
Log Message:
-----------
Several bug fixes:
* Added layerFree_grid to fix leaked memory when freeing CD_FACEGRID
* Added layerCopy_grid to fix copying a multires mesh and having masks not transfer over
* Added writing for CD_PAINTMASK layer
* Added writing and reading for CD_FACEGRID
Modified Paths:
--------------
branches/soc-2010-nicolasbishop/source/blender/blenkernel/BKE_customdata.h
branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/customdata.c
branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c
branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/readfile.c
branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/writefile.c
branches/soc-2010-nicolasbishop/source/blender/makesdna/DNA_customdata_types.h
Modified: branches/soc-2010-nicolasbishop/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/blenkernel/BKE_customdata.h 2010-06-17 01:13:56 UTC (rev 29502)
+++ branches/soc-2010-nicolasbishop/source/blender/blenkernel/BKE_customdata.h 2010-06-17 02:11:00 UTC (rev 29503)
@@ -280,6 +280,9 @@
void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata, int total);
void CustomData_bmesh_init_pool(struct CustomData *data, int allocsize);
+/* Subsurf grids */
+void CustomData_set_num_grid_elements(struct CustomData *data, int grid_elems);
+
/* External file storage */
void CustomData_external_add(struct CustomData *data,
Modified: branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/customdata.c 2010-06-17 01:13:56 UTC (rev 29502)
+++ branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/customdata.c 2010-06-17 02:11:00 UTC (rev 29503)
@@ -757,8 +757,27 @@
mcol[i] = default_mcol;
}
+void layerCopy_grid(const void *source_v, void *dest_v, int count)
+{
+ const CustomData *source = source_v;
+ CustomData *dest = dest_v;
+ int i;
+ for(i = 0; i < count; ++i)
+ CustomData_copy(source + i, dest + i, ~0, CD_DUPLICATE,
+ source[i].grid_elems);
+}
+void layerFree_grid(void *data, int count, int size)
+{
+ CustomData *cd = data;
+ int i;
+
+ for(i = 0; i < count; ++i) {
+ CustomData_free(cd + i, cd[i].grid_elems);
+ }
+}
+
const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
/* 0 */
{sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
@@ -800,7 +819,7 @@
{sizeof(MCol)*4, "MCol", 4, "TexturedCol", NULL, NULL, layerInterp_mcol,
layerSwap_mcol, layerDefault_mcol},
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
- {sizeof(CustomData), "CustomData", 1, "Face Grid", NULL, NULL, NULL, NULL, NULL},
+ {sizeof(CustomData), "CustomData", 1, "Face Grid", layerCopy_grid, layerFree_grid, NULL, NULL, NULL},
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
{sizeof(float), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
};
@@ -819,7 +838,8 @@
const CustomDataMask CD_MASK_MESH =
CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE |
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MCOL |
- CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS | CD_MASK_PAINTMASK;
+ CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
+ CD_MASK_FACEGRID | CD_MASK_PAINTMASK;
const CustomDataMask CD_MASK_EDITMESH =
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
CD_MASK_MCOL|CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS;
@@ -2321,6 +2341,12 @@
return keeplayer;
}
+/* Subsurf grids */
+void CustomData_set_num_grid_elements(CustomData *data, int grid_elems)
+{
+ data->grid_elems = grid_elems;
+}
+
/****************************** External Files *******************************/
static void customdata_external_filename(char filename[FILE_MAX], ID *id, CustomDataExternal *external)
Modified: branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c 2010-06-17 01:13:56 UTC (rev 29502)
+++ branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c 2010-06-17 02:11:00 UTC (rev 29503)
@@ -313,6 +313,7 @@
memset(cd, 0, sizeof(*cd));
CustomData_copy(&old, cd, ~0, CD_CALLOC, totelem);
CustomData_free(&old, 0);
+ CustomData_set_num_grid_elements(cd, totelem);
}
/* This will be replaced when we do CD_DISPS */
Modified: branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/readfile.c 2010-06-17 01:13:56 UTC (rev 29502)
+++ branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/readfile.c 2010-06-17 02:11:00 UTC (rev 29503)
@@ -3261,7 +3261,7 @@
static void direct_link_customdata(FileData *fd, CustomData *data, int count)
{
- int i = 0;
+ int i = 0, j;
data->layers= newdataadr(fd, data->layers);
data->external= newdataadr(fd, data->external);
@@ -3276,6 +3276,11 @@
layer->data = newdataadr(fd, layer->data);
if(layer->type == CD_MDISPS)
direct_link_mdisps(fd, count, layer->data, layer->flag & CD_FLAG_EXTERNAL);
+ if(layer->type == CD_FACEGRID) {
+ CustomData *grids = layer->data;
+ for(j = 0; j < count; ++j)
+ direct_link_customdata(fd, grids + j, grids[j].grid_elems);
+ }
i++;
}
}
Modified: branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/writefile.c 2010-06-17 01:13:56 UTC (rev 29502)
+++ branches/soc-2010-nicolasbishop/source/blender/blenloader/intern/writefile.c 2010-06-17 02:11:00 UTC (rev 29503)
@@ -1486,7 +1486,7 @@
static void write_customdata(WriteData *wd, ID *id, int count, CustomData *data, int partial_type, int partial_count)
{
- int i;
+ int i, j;
/* write external customdata (not for undo) */
if(data->external && !wd->current)
@@ -1506,6 +1506,16 @@
else if (layer->type == CD_MDISPS) {
write_mdisps(wd, count, layer->data, layer->flag & CD_FLAG_EXTERNAL);
}
+ else if (layer->type == CD_PAINTMASK) {
+ writedata(wd, DATA, sizeof(float)*count, layer->data);
+ }
+ else if (layer->type == CD_FACEGRID) {
+ CustomData *grids = layer->data;
+ writestruct(wd, DATA, "CustomData", count, grids);
+ for(j = 0; j < count; ++j)
+ write_customdata(wd, id, grids[j].grid_elems,
+ grids + j, -1, 0);
+ }
else {
CustomData_file_write_info(layer->type, &structname, &structnum);
if (structnum) {
Modified: branches/soc-2010-nicolasbishop/source/blender/makesdna/DNA_customdata_types.h
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/makesdna/DNA_customdata_types.h 2010-06-17 01:13:56 UTC (rev 29502)
+++ branches/soc-2010-nicolasbishop/source/blender/makesdna/DNA_customdata_types.h 2010-06-17 02:11:00 UTC (rev 29503)
@@ -54,7 +54,8 @@
typedef struct CustomData {
CustomDataLayer *layers; /* CustomDataLayers, ordered by type */
int totlayer, maxlayer; /* number of layers, size of layers array */
- int totsize, pad; /* in editmode, total size of all data layers */
+ int totsize; /* in editmode, total size of all data layers */
+ int grid_elems; /* For grids, number of elements */
void *pool; /* Bmesh: Memory pool for allocation of blocks */
CustomDataExternal *external; /* external file storing customdata layers */
} CustomData;
More information about the Bf-blender-cvs
mailing list