[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37111] branches/soc-2011-onion/source/ blender/blenkernel/intern/multires.c: Revision: 29350

Jason Wilkins Jason.A.Wilkins at gmail.com
Fri Jun 3 01:31:18 CEST 2011


Revision: 37111
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37111
Author:   jwilkins
Date:     2011-06-02 23:31:18 +0000 (Thu, 02 Jun 2011)
Log Message:
-----------
Revision: 29350
Author: nicholasbishop
Date: 5:46:29 PM, Tuesday, June 08, 2010
Message:
* A little refactoring, pulled some common code together in multire

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c

Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c	2011-06-02 23:25:38 UTC (rev 37110)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c	2011-06-02 23:31:18 UTC (rev 37111)
@@ -607,6 +607,19 @@
 	dispdm->release(dispdm);
 }
 
+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;
+}
+
 static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple)
 {
 	Mesh *me = ob->data;
@@ -645,16 +658,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], highGridSize, lowGridSize);
-		}
 
 		/* low lower level dm no longer needed at this point */
 		lowdm->release(lowdm);
@@ -855,15 +864,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)
 					sub_v3_v3v3(diffGrid[j].co, gridData[i][j].co, lowGridData[i][j].co);
 




More information about the Bf-blender-cvs mailing list