[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