Revision: 22684
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22684
Author:   nicholasbishop
Date:     2009-08-21 20:15:50 +0200 (Fri, 21 Aug 2009)

Log Message:
-----------
2.5/Multires:

* Fixed multires subdivision of a sculpted object. Accidentally broke this when 
I fixed removing a multires modifier.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h        
2009-08-21 17:53:27 UTC (rev 22683)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h        
2009-08-21 18:15:50 UTC (rev 22684)
@@ -36,6 +36,7 @@
 typedef struct MultiresSubsurf {
        struct MultiresModifierData *mmd;
        struct Object *ob;
+       int local_mmd;
 } MultiresSubsurf;
 
 /* MultiresDM */
@@ -59,7 +60,7 @@
 
 void multires_force_update(struct Object *ob);
 
-struct DerivedMesh *multires_dm_create_from_derived(struct 
MultiresModifierData*, struct DerivedMesh*,
+struct DerivedMesh *multires_dm_create_from_derived(struct 
MultiresModifierData*, int local_mmd, struct DerivedMesh*,
                                                    struct Object *, int, int);
 
 struct MultiresModifierData *find_multires_modifier(struct Object *ob);

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c    
    2009-08-21 17:53:27 UTC (rev 22683)
+++ 
branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c    
    2009-08-21 18:15:50 UTC (rev 22684)
@@ -1288,6 +1288,7 @@
        CDDerivedMesh cddm;
 
        MultiresModifierData *mmd;
+       int local_mmd;
 
        int lvl, totlvl;
        float (*orco)[3];
@@ -1308,13 +1309,14 @@
        MultiresDM *mrdm = (MultiresDM*)dm;
        int mvert_layer;
 
-       /* Check that mmd still exists */
-       if(BLI_findindex(&mrdm->ob->modifiers, mrdm->mmd) < 0)
-               mrdm->mmd = NULL;
-
        /* Before freeing, need to update the displacement map */
-       if(dm->needsFree && mrdm->modified && mrdm->mmd)
-               mrdm->update(dm);
+       if(dm->needsFree && mrdm->modified) {
+               /* Check that mmd still exists */
+               if(!mrdm->local_mmd && BLI_findindex(&mrdm->ob->modifiers, 
mrdm->mmd) < 0)
+                       mrdm->mmd = NULL;
+               if(mrdm->mmd)
+                       mrdm->update(dm);
+       }
 
        /* If the MVert data is being used as the sculpt undo store, don't free 
it */
        mvert_layer = CustomData_get_layer_index(&dm->vertData, CD_MVERT);
@@ -1353,6 +1355,7 @@
 
        mrdm->mmd = ms->mmd;
        mrdm->ob = ms->ob;
+       mrdm->local_mmd = ms->local_mmd;
 
        if(dm) {
                MDisps *disps;

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c     
2009-08-21 17:53:27 UTC (rev 22683)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c     
2009-08-21 18:15:50 UTC (rev 22684)
@@ -8121,7 +8121,7 @@
        if(mmd->lvl == 1)
                return dm;
 
-       final = multires_dm_create_from_derived(mmd, dm, ob, useRenderParams, 
isFinalCalc);
+       final = multires_dm_create_from_derived(mmd, 0, dm, ob, 
useRenderParams, isFinalCalc);
        if(mmd->undo_signal && mmd->undo_verts && mmd->undo_verts_tot == 
final->getNumVerts(final)) {
                int i;
                MVert *dst = CDDM_get_verts(final);

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c     
2009-08-21 17:53:27 UTC (rev 22683)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c     
2009-08-21 18:15:50 UTC (rev 22684)
@@ -223,7 +223,7 @@
 
        memset(&mmd_sub, 0, sizeof(MultiresModifierData));
        mmd_sub.lvl = mmd_sub.totlvl = totlvl;
-       mrdm = multires_dm_create_from_derived(&mmd_sub, orig, ob, 0, 0);
+       mrdm = multires_dm_create_from_derived(&mmd_sub, 1, orig, ob, 0, 0);
                
        mvd = CDDM_get_verts(mrdm);
        /* Need to map from ccg to mrdm */
@@ -469,7 +469,7 @@
                orig = CDDM_from_mesh(me, NULL);
                memset(&mmd_sub, 0, sizeof(MultiresModifierData));
                mmd_sub.lvl = mmd_sub.totlvl = mmd->lvl;
-               mrdm = multires_dm_create_from_derived(&mmd_sub, orig, ob, 0, 
0);
+               mrdm = multires_dm_create_from_derived(&mmd_sub, 1, orig, ob, 
0, 0);
                totsubvert = mrdm->getNumVerts(mrdm);
                totsubedge = mrdm->getNumEdges(mrdm);
                totsubface = mrdm->getNumFaces(mrdm);
@@ -1192,7 +1192,7 @@
                           (includes older displacements but not new sculpts) */
                        mmd.totlvl = totlvl;
                        mmd.lvl = lvl;
-                       subco_dm = multires_dm_create_from_derived(&mmd, orig, 
ob, 0, 0);
+                       subco_dm = multires_dm_create_from_derived(&mmd, 1, 
orig, ob, 0, 0);
                        cur_lvl_orig_verts = CDDM_get_verts(subco_dm);
 
                        /* Subtract the original vertex cos from the new vertex 
cos */
@@ -1229,7 +1229,7 @@
        }
 }
 
-struct DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, 
DerivedMesh *dm, Object *ob,
+struct DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, 
int local_mmd, DerivedMesh *dm, Object *ob,
                                                    int useRenderParams, int 
isFinalCalc)
 {
        SubsurfModifierData smd;
@@ -1239,6 +1239,7 @@
 
        ms.mmd = mmd;
        ms.ob = ob;
+       ms.local_mmd = local_mmd;
 
        memset(&smd, 0, sizeof(SubsurfModifierData));
        smd.levels = smd.renderLevels = mmd->lvl - 1;

Modified: 
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2009-08-21 17:53:27 UTC (rev 22683)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2009-08-21 18:15:50 UTC (rev 22684)
@@ -9416,7 +9416,7 @@
 
                                        mmd->lvl = mmd->totlvl;
                                        orig = CDDM_from_mesh(me, NULL);
-                                       dm = 
multires_dm_create_from_derived(mmd, orig, ob, 0, 0);
+                                       dm = 
multires_dm_create_from_derived(mmd, 0, orig, ob, 0, 0);
                                        
                                        multires_load_old(dm, me->mr);
 


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

Reply via email to