[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15746] branches/soc-2008-nicholasbishop/ source/blender/blenkernel: Removed some unneeded data copies made in MultiresDM.

Nicholas Bishop nicholasbishop at gmail.com
Fri Jul 25 00:49:30 CEST 2008


Revision: 15746
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15746
Author:   nicholasbishop
Date:     2008-07-25 00:49:29 +0200 (Fri, 25 Jul 2008)

Log Message:
-----------
Removed some unneeded data copies made in MultiresDM.

Modified Paths:
--------------
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-07-24 22:49:29 UTC (rev 15746)
@@ -72,6 +72,11 @@
 struct MFace;
 struct MEdge;
 
+typedef struct MultiresSubsurf {
+	struct Mesh *me;
+	int totlvl, lvl;
+} MultiresSubsurf;
+
 typedef struct IndexNode {
 	struct IndexNode *next, *prev;
 	int index;
@@ -81,13 +86,11 @@
 			  const int totvert, const int totface);
 
 /* MultiresDM */
-void MultiresDM_set_mesh(struct DerivedMesh *dm, struct Mesh *me);
 struct Mesh *MultiresDM_get_mesh(struct DerivedMesh *dm);
-struct DerivedMesh *MultiresDM_new(struct DerivedMesh*, int, int, int, int, int);
+struct DerivedMesh *MultiresDM_new(struct MultiresSubsurf *, struct DerivedMesh*, int, int, int);
 void *MultiresDM_get_vertnorm(struct DerivedMesh *);
 void *MultiresDM_get_orco(struct DerivedMesh *);
 void *MultiresDM_get_subco(struct DerivedMesh *);
-struct MFace *MultiresDM_get_orfa(struct DerivedMesh *);
 struct ListBase *MultiresDM_get_vert_face_map(struct DerivedMesh *);
 int MultiresDM_get_totlvl(struct DerivedMesh *);
 int MultiresDM_get_lvl(struct DerivedMesh *);

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h	2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h	2008-07-24 22:49:29 UTC (rev 15746)
@@ -32,7 +32,7 @@
 struct Object;
 struct DerivedMesh;
 struct EditMesh;
-struct MultiresModifierData;
+struct MultiresSubsurf;
 struct SubsurfModifierData;
 
 struct DerivedMesh *subsurf_make_derived_from_derived(
@@ -44,7 +44,7 @@
 struct DerivedMesh *subsurf_make_derived_from_derived_with_multires(
                         struct DerivedMesh *dm,
                         struct SubsurfModifierData *smd,
-			struct MultiresModifierData *mmd,
+			struct MultiresSubsurf *ms,
                         int useRenderParams, float (*vertCos)[3],
                         int isFinalCalc, int editMode);
 

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-07-24 22:49:29 UTC (rev 15746)
@@ -1158,9 +1158,6 @@
 	int lvl, totlvl;
 	float (*orco)[3];
 	float (*subco)[3];
-	MFace *orfa;
-	int totorco;
-	int totorfa;
 
 	float (*norm)[3];
 
@@ -1182,7 +1179,6 @@
 		mrdm->update(dm);
 
 	if(DM_release(dm)) {
-		MEM_freeN(mrdm->orfa);
 		MEM_freeN(mrdm->subco);
 		MEM_freeN(mrdm->orco);
 		MEM_freeN(mrdm->norm);
@@ -1199,10 +1195,10 @@
 	float (*v)[3] = mrdm->orco;
 	int i;
 
-	mrdm->norm = MEM_callocN(sizeof(float)*3 * mrdm->totorco, "MultiresDM vertnorms");
+	mrdm->norm = MEM_callocN(sizeof(float)*3 * mrdm->me->totvert, "MultiresDM vertnorms");
 
-	for(i = 0; i < mrdm->totorfa; ++i) {
-		MFace *f = &mrdm->orfa[i];
+	for(i = 0; i < mrdm->me->totface; ++i) {
+		MFace *f = &mrdm->me->mface[i];
 		float n[3];
 		if(f->v4)
 			CalcNormFloat4(v[f->v1], v[f->v2], v[f->v3], v[f->v4], n);
@@ -1216,11 +1212,11 @@
 			VecAddf(mrdm->norm[f->v4], mrdm->norm[f->v4], n);
 	}
 
-	for(i = 0; i < mrdm->totorco; ++i)
+	for(i = 0; i < mrdm->me->totvert; ++i)
 		Normalize(mrdm->norm[i]);
 }
 
-DerivedMesh *MultiresDM_new(DerivedMesh *orig, int numVerts, int numEdges, int numFaces, int lvl, int totlvl)
+DerivedMesh *MultiresDM_new(MultiresSubsurf *ms, DerivedMesh *orig, int numVerts, int numEdges, int numFaces)
 {
 	MultiresDM *mrdm = MEM_callocN(sizeof(MultiresDM), "MultiresDM");
 	CDDerivedMesh *cddm = cdDM_create("MultiresDM CDDM");
@@ -1230,6 +1226,8 @@
 	MEM_freeN(cddm);
 	dm = &mrdm->cddm.dm;
 
+	mrdm->me = ms->me;
+
 	if(dm) {
 		MDisps *disps;
 		MVert *mvert;
@@ -1247,9 +1245,7 @@
 		mrdm->orco = MEM_callocN(sizeof(float) * 3 * orig->getNumVerts(orig), "multires orco");
 		for(i = 0; i < orig->getNumVerts(orig); ++i)
 			VecCopyf(mrdm->orco[i], mvert[i].co);
-		mrdm->totorco = orig->getNumVerts(orig);
-		mrdm->orfa = MEM_dupallocN(CustomData_get_layer(&orig->faceData, CD_MFACE));
-		mrdm->totorfa = orig->getNumFaces(orig);
+		mrdm->me->totvert = orig->getNumVerts(orig);
 	}
 	else
 		DM_init(dm, numVerts, numEdges, numFaces);
@@ -1262,8 +1258,8 @@
 	mrdm->cddm.medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE);
 	mrdm->cddm.mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
 
-	mrdm->lvl = lvl;
-	mrdm->totlvl = totlvl;
+	mrdm->lvl = ms->lvl;
+	mrdm->totlvl = ms->totlvl;
 	mrdm->subco = MEM_callocN(sizeof(float)*3*numVerts, "multires subdivided coords");
 	mrdm->block_update = 0;
 
@@ -1274,11 +1270,6 @@
 	return dm;
 }
 
-void MultiresDM_set_mesh(DerivedMesh *dm, Mesh *me)
-{
-	((MultiresDM*)dm)->me = me;
-}
-
 Mesh *MultiresDM_get_mesh(DerivedMesh *dm)
 {
 	return ((MultiresDM*)dm)->me;
@@ -1300,11 +1291,6 @@
 	return ((MultiresDM*)dm)->subco;
 }
 
-MFace *MultiresDM_get_orfa(DerivedMesh *dm)
-{
-	return ((MultiresDM*)dm)->orfa;
-}
-
 int MultiresDM_get_totlvl(DerivedMesh *dm)
 {
 	return ((MultiresDM*)dm)->totlvl;
@@ -1330,8 +1316,8 @@
 	MultiresDM *mrdm = (MultiresDM*)dm;
 
 	if(!mrdm->vert_face_map)
-		create_vert_face_map(&mrdm->vert_face_map, &mrdm->vert_face_map_mem, mrdm->orfa,
-				     mrdm->totorco, mrdm->totorfa);
+		create_vert_face_map(&mrdm->vert_face_map, &mrdm->vert_face_map_mem, mrdm->me->mface,
+				     mrdm->me->totvert, mrdm->me->totface);
 
 	return mrdm->vert_face_map;
 }

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-07-24 22:49:29 UTC (rev 15746)
@@ -1227,7 +1227,7 @@
 {
 	float inv[3][3];
 
-	d->face = MultiresDM_get_orfa(dm) + face_index;
+	d->face = MultiresDM_get_mesh(dm)->mface + face_index;
 	/* Get the multires grid from customdata and calculate the TS matrix */
 	d->grid = (MDisps*)dm->getFaceDataArray(dm, CD_MDISPS);
 	if(d->grid)
@@ -1600,14 +1600,14 @@
 						    int useRenderParams, int isFinalCalc)
 {
 	SubsurfModifierData smd;
+	MultiresSubsurf ms = {me, mmd->totlvl, mmd->lvl};
 	DerivedMesh *result;
 
 	memset(&smd, 0, sizeof(SubsurfModifierData));
 	smd.levels = smd.renderLevels = mmd->lvl - 1;
 
-	result = subsurf_make_derived_from_derived_with_multires(dm, &smd, mmd, useRenderParams, NULL, isFinalCalc, 0);
+	result = subsurf_make_derived_from_derived_with_multires(dm, &smd, &ms, useRenderParams, NULL, isFinalCalc, 0);
 	MultiresDM_set_update(result, multiresModifier_update);
-	MultiresDM_set_mesh(result, me);
 
 	return result;
 }

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c	2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c	2008-07-24 22:49:29 UTC (rev 15746)
@@ -471,7 +471,7 @@
 
 DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
                                  int drawInteriorEdges, int useSubsurfUv,
-                                 DerivedMesh *dm, MultiresModifierData *mmd)
+                                 DerivedMesh *dm, MultiresSubsurf *ms)
 {
 	DerivedMesh *result;
 	int edgeSize = ccgSubSurf_getEdgeSize(ss);
@@ -527,10 +527,10 @@
 	}
 	ccgFaceIterator_free(fi);
 
-	if(mmd) {
-		result = MultiresDM_new(dm, ccgSubSurf_getNumFinalVerts(ss),
+	if(ms) {
+		result = MultiresDM_new(ms, dm, ccgSubSurf_getNumFinalVerts(ss),
 					ccgSubSurf_getNumFinalEdges(ss),
-					ccgSubSurf_getNumFinalFaces(ss), mmd->lvl, mmd->totlvl);
+					ccgSubSurf_getNumFinalFaces(ss));
 		mr_orig = MultiresDM_get_subco(result);
 	}
 	else {
@@ -564,7 +564,7 @@
 
 		DM_interp_vert_data(dm, result, vertIdx, weight[0][0], numVerts, i);
 		VecCopyf(mvert->co, ccgSubSurf_getFaceCenterData(ss, f));
-		if(mmd) {
+		if(ms) {
 			VecCopyf(mr_orig, mvert->co);
 			mr_orig += 3;
 			multires_displacer_init(&d, result, index, 0);
@@ -581,7 +581,7 @@
 			int nextS = (S + 1) % numVerts;
 			int otherS = (numVerts == 4) ? (S + 2) % numVerts : 3;
 
-			if(mmd) multires_displacer_anchor(&d, 2, S);
+			if(ms) multires_displacer_anchor(&d, 2, S);
 			for(x = 1; x < gridFaces; x++) {
 				float w[4];
 				w[prevS]  = weight[x][0][0];
@@ -591,7 +591,7 @@
 				DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i);
 				VecCopyf(mvert->co,
 				         ccgSubSurf_getFaceGridEdgeData(ss, f, S, x));
-				if(mmd) {
+				if(ms) {
 					VecCopyf(mr_orig, mvert->co);
 					mr_orig += 3;
 					multires_displace(&d, mvert->co);
@@ -608,7 +608,7 @@
 			int nextS = (S + 1) % numVerts;
 			int otherS = (numVerts == 4) ? (S + 2) % numVerts : 3;
 
-			if(mmd) multires_displacer_anchor(&d, 3, S);
+			if(ms) multires_displacer_anchor(&d, 3, S);
 			for(y = 1; y < gridFaces; y++) {
 				for(x = 1; x < gridFaces; x++) {
 					float w[4];
@@ -619,7 +619,7 @@
 					DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i);
 					VecCopyf(mvert->co,
 					         ccgSubSurf_getFaceGridData(ss, f, S, x, y));
-					if(mmd) {
+					if(ms) {
 						VecCopyf(mr_orig, mvert->co);
 						mr_orig += 3;
 						multires_displace(&d, mvert->co);
@@ -630,7 +630,7 @@
 					++origIndex;
 					i++;
 				}
-				if(mmd) multires_displacer_jump(&d);
+				if(ms) multires_displacer_jump(&d);
 			}
 		}
 
@@ -656,7 +656,7 @@
 			w[0] = 1 - w[1];
 			DM_interp_vert_data(dm, result, vertIdx, w, 2, i);
 			VecCopyf(mvert->co, ccgSubSurf_getEdgeData(ss, e, x));
-			if(mmd) {
+			if(ms) {
 				int numFaces = ccgSubSurf_getEdgeNumFaces(ss, e);
 				int edgeface;
 
@@ -693,7 +693,7 @@
 
 		DM_copy_vert_data(dm, result, vertIdx, i, 1);
 		VecCopyf(mvert->co, ccgSubSurf_getVertData(ss, v));
-		if(mmd) {
+		if(ms) {
 			int numFaces = ccgSubSurf_getVertNumFaces(ss, v);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list