[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37161] branches/soc-2011-onion: Revision: 29503

Jason Wilkins Jason.A.Wilkins at gmail.com
Sat Jun 4 05:55:24 CEST 2011


Revision: 37161
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37161
Author:   jwilkins
Date:     2011-06-04 03:55:20 +0000 (Sat, 04 Jun 2011)
Log Message:
-----------
Revision: 29503
Author: nicholasbishop
Date: 9:11:00 PM, Wednesday, June 16, 2010
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-2011-onion/source/blender/blenkernel/BKE_customdata.h
    branches/soc-2011-onion/source/blender/blenkernel/intern/customdata.c
    branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c
    branches/soc-2011-onion/source/blender/blenloader/intern/readfile.c
    branches/soc-2011-onion/source/blender/blenloader/intern/writefile.c
    branches/soc-2011-onion/source/blender/makesdna/DNA_customdata_types.h

Property Changed:
----------------
    branches/soc-2011-onion/


Property changes on: branches/soc-2011-onion
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29483
/trunk/blender:36833-37054
   + /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29483,29503
/trunk/blender:36833-37054

Modified: branches/soc-2011-onion/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/BKE_customdata.h	2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenkernel/BKE_customdata.h	2011-06-04 03:55:20 UTC (rev 37161)
@@ -289,6 +289,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-2011-onion/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/customdata.c	2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/customdata.c	2011-06-04 03:55:20 UTC (rev 37161)
@@ -806,8 +806,28 @@
 		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);
+	}
+}
+
+
 static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
 	/* 0 */
 	{sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
@@ -850,7 +870,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},
 };
@@ -869,7 +889,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 | CD_MASK_FACEGRID;
@@ -2363,6 +2384,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-2011-onion/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c	2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c	2011-06-04 03:55:20 UTC (rev 37161)
@@ -341,6 +341,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-2011-onion/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenloader/intern/readfile.c	2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenloader/intern/readfile.c	2011-06-04 03:55:20 UTC (rev 37161)
@@ -3457,7 +3457,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);
@@ -3472,6 +3472,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-2011-onion/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenloader/intern/writefile.c	2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenloader/intern/writefile.c	2011-06-04 03:55:20 UTC (rev 37161)
@@ -1526,7 +1526,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)
@@ -1546,6 +1546,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-2011-onion/source/blender/makesdna/DNA_customdata_types.h
===================================================================
--- branches/soc-2011-onion/source/blender/makesdna/DNA_customdata_types.h	2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/makesdna/DNA_customdata_types.h	2011-06-04 03:55:20 UTC (rev 37161)
@@ -62,7 +62,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