[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16091] branches/soc-2008-nicholasbishop/ source/blender: Better performance for loading old multires files by blocking multires updates during subdivision .

Nicholas Bishop nicholasbishop at gmail.com
Thu Aug 14 01:36:23 CEST 2008


Revision: 16091
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16091
Author:   nicholasbishop
Date:     2008-08-14 01:36:23 +0200 (Thu, 14 Aug 2008)

Log Message:
-----------
Better performance for loading old multires files by blocking multires updates during subdivision.

Modified Paths:
--------------
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
    branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c
    branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-08-13 23:31:29 UTC (rev 16090)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-08-13 23:36:23 UTC (rev 16091)
@@ -135,7 +135,7 @@
 
 int multiresModifier_switch_level(struct Object *ob, const int);
 void multiresModifier_join(struct Object *ob);
-void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob);
+void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int updateblock);
 void multiresModifier_setLevel(void *mmd_v, void *ob_v);
 int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src);
 

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-08-13 23:31:29 UTC (rev 16090)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-08-13 23:36:23 UTC (rev 16091)
@@ -1181,7 +1181,7 @@
 
 				/* TODO: subdivision should be doable in one step rather than iteratively. */
 				for(i = mmd->totlvl; i < highest_lvl; ++i)
-					multiresModifier_subdivide(mmd, base->object);
+					multiresModifier_subdivide(mmd, base->object, 0);
 			}
 		}
 		base = base->next;
@@ -1466,13 +1466,13 @@
 	mrdm->release(mrdm);
 }
 
-void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob)
+void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock)
 {
 	DerivedMesh *final = NULL;
 	int totsubvert, totsubface, totsubedge;
 	Mesh *me = get_mesh(ob);
 	MDisps *mdisps;
-	int i, slo, shi;
+	int i;
 
 	if(mmd->totlvl == multires_max_levels) {
 		// TODO
@@ -1484,15 +1484,11 @@
 	++mmd->lvl;
 	++mmd->totlvl;
 
-	slo = multires_side_tot[mmd->totlvl - 2];
-	shi = multires_side_tot[mmd->totlvl - 1];
-
 	mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS);
 	if(!mdisps)
 		mdisps = CustomData_add_layer(&me->fdata, CD_MDISPS, CD_DEFAULT, NULL, me->totface);
 
-
-	if(mdisps->disps) {
+	if(mdisps->disps && !updateblock) {
 		DerivedMesh *orig, *mrdm;
 		MultiresModifierData mmd_sub;
 
@@ -1523,7 +1519,7 @@
 	}
 
 
-	if(final) {
+	if(final && !updateblock) {
 		DerivedMesh *orig;
 
 		orig = CDDM_from_mesh(me, NULL);

Modified: branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c	2008-08-13 23:31:29 UTC (rev 16090)
+++ branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c	2008-08-13 23:36:23 UTC (rev 16091)
@@ -7793,7 +7793,7 @@
 					BLI_insertlinkbefore(&ob->modifiers, md, mmd);
 
 					for(i = 1; i < me->mr->level_count; ++i)
-						multiresModifier_subdivide(mmd, ob);
+						multiresModifier_subdivide(mmd, ob, 1);
 
 					mmd->lvl = mmd->totlvl;
 					orig = CDDM_from_mesh(me, NULL);

Modified: branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c	2008-08-13 23:31:29 UTC (rev 16090)
+++ branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c	2008-08-13 23:36:23 UTC (rev 16091)
@@ -1666,7 +1666,7 @@
 	MultiresModifierData *mmd = mmd_v;
 
 	if(mmd && ob_v) {
-		multiresModifier_subdivide(mmd, ob_v);
+		multiresModifier_subdivide(mmd, ob_v, 0);
 		BIF_undo_push("Multires subdivide");
 	}
 }





More information about the Bf-blender-cvs mailing list