[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22684] branches/blender2.5/blender/source /blender: 2.5/Multires:
Nicholas Bishop
nicholasbishop at gmail.com
Fri Aug 21 20:15:50 CEST 2009
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);
More information about the Bf-blender-cvs
mailing list