Revision: 16033
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16033
Author:   nicholasbishop
Date:     2008-08-09 02:18:37 +0200 (Sat, 09 Aug 2008)

Log Message:
-----------
Multires doesn't update itself outside of sculptmode now, so switching levels 
is somewhat faster outside of sculptmode.

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

Modified: 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h   
2008-08-08 23:36:12 UTC (rev 16032)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h   
2008-08-09 00:18:37 UTC (rev 16033)
@@ -95,8 +95,11 @@
 int MultiresDM_get_totlvl(struct DerivedMesh *);
 int MultiresDM_get_lvl(struct DerivedMesh *);
 void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct 
DerivedMesh*));
-void MultiresDM_block_update(struct DerivedMesh *);
+int *MultiresDM_get_flags(struct DerivedMesh *);
 
+#define MULTIRES_DM_UPDATE_BLOCK 1
+#define MULTIRES_DM_UPDATE_ALWAYS 2
+
 /* Modifier */
 struct MDisps;
 struct MFace;

Modified: 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
   2008-08-08 23:36:12 UTC (rev 16032)
+++ 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
   2008-08-09 00:18:37 UTC (rev 16033)
@@ -1165,7 +1165,7 @@
        IndexNode *vert_face_map_mem;
 
        Mesh *me;
-       int block_update;
+       int flags;
 
        void (*update)(DerivedMesh*);
 } MultiresDM;
@@ -1175,7 +1175,7 @@
        MultiresDM *mrdm = (MultiresDM*)dm;
 
        /* Before freeing, need to update the displacement map */
-       if(dm->needsFree && !mrdm->block_update)
+       if(dm->needsFree && !(mrdm->flags & MULTIRES_DM_UPDATE_BLOCK))
                mrdm->update(dm);
 
        if(DM_release(dm)) {
@@ -1261,7 +1261,7 @@
        mrdm->lvl = ms->lvl;
        mrdm->totlvl = ms->totlvl;
        mrdm->subco = MEM_callocN(sizeof(MVert)*numVerts, "multires subdivided 
verts");
-       mrdm->block_update = 0;
+       mrdm->flags = 0;
 
        dm->release = MultiresDM_release;
 
@@ -1325,7 +1325,7 @@
        return mrdm->vert_face_map;
 }
 
-void MultiresDM_block_update(DerivedMesh *dm)
+int *MultiresDM_get_flags(DerivedMesh *dm)
 {
-       ((MultiresDM*)dm)->block_update = 1;
+       return &((MultiresDM*)dm)->flags;
 }

Modified: 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c    
    2008-08-08 23:36:12 UTC (rev 16032)
+++ 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c    
    2008-08-09 00:18:37 UTC (rev 16033)
@@ -1176,6 +1176,7 @@
        final->needsFree = 1;
        final->release(final);
        mrdm->needsFree = 1;
+       *MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_ALWAYS;
        mrdm->release(mrdm);
 }
 
@@ -1584,7 +1585,7 @@
        MFace *mface;
        int i;
 
-       //if(!(G.f & G_SCULPTMODE)) return;
+       if(!(G.f & G_SCULPTMODE) && !(*MultiresDM_get_flags(dm) & 
MULTIRES_DM_UPDATE_ALWAYS)) return;
 
        mdisps = dm->getFaceDataArray(dm, CD_MDISPS);
 
@@ -1612,7 +1613,7 @@
                        mmd.totlvl = totlvl;
                        mmd.lvl = lvl;
                        subco_dm = multires_dm_create_from_derived(&mmd, orig, 
me, 0, 0);
-                       MultiresDM_block_update(subco_dm);
+                       *MultiresDM_get_flags(subco_dm) |= 
MULTIRES_DM_UPDATE_BLOCK;
                        cur_lvl_orig_verts = CDDM_get_verts(subco_dm);
 
                        /* Subtract the original vertex cos from the new vertex 
cos */
@@ -1654,16 +1655,14 @@
        SubsurfModifierData smd;
        MultiresSubsurf ms = {me, mmd->totlvl, mmd->lvl};
        DerivedMesh *result;
+       int i;
 
        memset(&smd, 0, sizeof(SubsurfModifierData));
        smd.levels = smd.renderLevels = mmd->lvl - 1;
 
        result = subsurf_make_derived_from_derived_with_multires(dm, &smd, &ms, 
useRenderParams, NULL, isFinalCalc, 0);
-       /* TODO */
-       int i;
-       for(i = 0; i < result->getNumVerts(result); ++i) {
+       for(i = 0; i < result->getNumVerts(result); ++i)
                MultiresDM_get_subco(result)[i] = CDDM_get_verts(result)[i];
-       }
        multiresModifier_disp_run(result, MultiresDM_get_subco(result), 0);
        MultiresDM_set_update(result, multiresModifier_update);
 


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

Reply via email to