[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16033] branches/soc-2008-nicholasbishop/ source/blender/blenkernel: Multires doesn' t update itself outside of sculptmode now, so switching levels is somewhat faster outside of sculptmode.
Nicholas Bishop
nicholasbishop at gmail.com
Sat Aug 9 02:18:37 CEST 2008
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);
More information about the Bf-blender-cvs
mailing list