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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to