[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44864] trunk/blender/source/blender: Don' t wait for sculpt stroke to create PBVH.

Nicholas Bishop nicholasbishop at gmail.com
Wed Mar 14 07:31:05 CET 2012


Revision: 44864
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44864
Author:   nicholasbishop
Date:     2012-03-14 06:30:55 +0000 (Wed, 14 Mar 2012)
Log Message:
-----------
Don't wait for sculpt stroke to create PBVH.

This idea is borrowed from the multires modifier, which already
checked if the object was in sculpt mode and, if so, created the
PBVH. That check is now moved higher up the chain into
mesh_build_data(), so that it occurs for CDDerivedMesh too.

This also replaces an assert in cdDM_getPBVH for tesselated mesh faces
with a call to create them if missing.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/modifiers/intern/MOD_multires.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-03-14 06:14:15 UTC (rev 44863)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-03-14 06:30:55 UTC (rev 44864)
@@ -1993,6 +1993,12 @@
 	ob->derivedFinal->needsFree = 0;
 	ob->derivedDeform->needsFree = 0;
 	ob->lastDataMask = dataMask;
+
+	if((ob->mode & OB_MODE_SCULPT) && ob->sculpt) {
+		/* create PBVH immediately (would be created on the fly too,
+		   but this avoids waiting on first stroke) */
+		ob->sculpt->pbvh= ob->derivedFinal->getPBVH(ob, ob->derivedFinal);
+	}
 }
 
 static void editbmesh_build_data(Scene *scene, Object *obedit, BMEditMesh *em, CustomDataMask dataMask)

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-03-14 06:14:15 UTC (rev 44863)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-03-14 06:30:55 UTC (rev 44864)
@@ -276,7 +276,9 @@
 		Mesh *me= ob->data;
 		cddm->pbvh = BLI_pbvh_new();
 		cddm->pbvh_draw = can_pbvh_draw(ob, dm);
-		BLI_assert(!(me->mface == NULL && me->mpoly != NULL)); /* BMESH ONLY complain if mpoly is valid but not mface */
+
+		BKE_mesh_tessface_ensure(me);
+		
 		BLI_pbvh_build_mesh(cddm->pbvh, me->mface, me->mvert,
 		                    me->totface, me->totvert);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_multires.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_multires.c	2012-03-14 06:14:15 UTC (rev 44863)
+++ trunk/blender/source/blender/modifiers/intern/MOD_multires.c	2012-03-14 06:30:55 UTC (rev 44864)
@@ -71,8 +71,6 @@
 static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
 						   int useRenderParams, int isFinalCalc)
 {
-	SculptSession *ss= ob->sculpt;
-	int sculpting= (ob->mode & OB_MODE_SCULPT) && ss;
 	MultiresModifierData *mmd = (MultiresModifierData*)md;
 	DerivedMesh *result;
 	Mesh *me= (Mesh*)ob->data;
@@ -94,11 +92,6 @@
 		result->release(result);
 		result= cddm;
 	}
-	else if(sculpting) {
-		/* would be created on the fly too, just nicer this
-		 * way on first stroke after e.g. switching levels */
-		ss->pbvh= result->getPBVH(ob, result);
-	}
 
 	return result;
 }




More information about the Bf-blender-cvs mailing list