[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29350] branches/soc-2010-nicolasbishop/ source/blender/blenkernel/intern/multires.c: * A little refactoring, pulled some common code together in multires

Nicholas Bishop nicholasbishop at gmail.com
Wed Jun 9 00:46:31 CEST 2010


Revision: 29350
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29350
Author:   nicholasbishop
Date:     2010-06-09 00:46:29 +0200 (Wed, 09 Jun 2010)

Log Message:
-----------
* A little refactoring, pulled some common code together in multires

Modified Paths:
--------------
    branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c

Modified: branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c	2010-06-08 22:40:02 UTC (rev 29349)
+++ branches/soc-2010-nicolasbishop/source/blender/blenkernel/intern/multires.c	2010-06-08 22:46:29 UTC (rev 29350)
@@ -460,6 +460,19 @@
 	return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0);
 }
 
+static DMGridData **copy_grids(DMGridData **grids, int totgrid, int gridsize)
+{
+	DMGridData **grids_copy = MEM_callocN(sizeof(DMGridData*) * totgrid, "subgrids");
+	int i;
+
+	for(i = 0; i < totgrid; ++i) {
+		grids_copy[i] = MEM_callocN(sizeof(DMGridData)*gridsize*gridsize, "subgrid");
+		memcpy(grids_copy[i], grids[i], sizeof(DMGridData)*gridsize*gridsize);
+	}
+
+	return grids_copy;
+}
+
 void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple)
 {
 	Mesh *me = ob->data;
@@ -498,16 +511,12 @@
 		lowGridSize = lowdm->getGridSize(lowdm);
 		lowGridData = lowdm->getGridData(lowdm);
 
-		subGridData = MEM_callocN(sizeof(float*)*numGrids, "subGridData*");
+		/* backup subsurf grids */
+		subGridData = copy_grids(highGridData, numGrids, highGridSize);
 
-		for(i = 0; i < numGrids; ++i) {
-			/* backup subsurf grids */
-			subGridData[i] = MEM_callocN(sizeof(DMGridData)*highGridSize*highGridSize, "subGridData");
-			memcpy(subGridData[i], highGridData[i], sizeof(DMGridData)*highGridSize*highGridSize);
-
-			/* overwrite with current displaced grids */
+		/* overwrite with current displaced grids */
+		for(i = 0; i < numGrids; ++i)
 			multires_copy_dm_grid(highGridData[i], lowGridData[i], 4 /* TODO */, highGridSize, lowGridSize);
-		}
 
 		/* low lower level dm no longer needed at this point */
 		lowdm->release(lowdm);
@@ -762,15 +771,13 @@
 			lowGridData = lowdm->getGridData(lowdm);
 			gridData = dm->getGridData(dm);
 
-			subGridData = MEM_callocN(sizeof(DMGridData*)*numGrids, "subGridData*");
+			/* backup subsurf grids */
+			subGridData = copy_grids(highGridData, numGrids, highGridSize);
+
 			diffGrid = MEM_callocN(sizeof(DMGridData)*lowGridSize*lowGridSize, "diff");
 
+			/* write difference of subsurf and displaced low level into high subsurf */
 			for(i = 0; i < numGrids; ++i) {
-				/* backup subsurf grids */
-				subGridData[i] = MEM_callocN(sizeof(DMGridData)*highGridSize*highGridSize, "subGridData");
-				memcpy(subGridData[i], highGridData[i], sizeof(DMGridData)*highGridSize*highGridSize);
-
-				/* write difference of subsurf and displaced low level into high subsurf */
 				for(j = 0; j < lowGridSize*lowGridSize; ++j) {
 					int k;
 					for(k = 0; k < 4 /* TODO */; ++k)





More information about the Bf-blender-cvs mailing list