[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53444] trunk/blender/source/blender/ blenkernel/intern: Update DerivedMesh for dynamic-topology sculpt mode

Nicholas Bishop nicholasbishop at gmail.com
Sun Dec 30 19:29:42 CET 2012


Revision: 53444
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53444
Author:   nicholasbishop
Date:     2012-12-30 18:29:41 +0000 (Sun, 30 Dec 2012)
Log Message:
-----------
Update DerivedMesh for dynamic-topology sculpt mode

* Build bmesh PBVH in CDDM when dyntopo is enabled

* Disable all modifiers when dyntopo is enabled

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

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-12-30 18:29:25 UTC (rev 53443)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-12-30 18:29:41 UTC (rev 53444)
@@ -1340,6 +1340,7 @@
 	MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
 	int has_multires = mmd != NULL, multires_applied = 0;
 	int sculpt_mode = ob->mode & OB_MODE_SCULPT && ob->sculpt;
+	int sculpt_dyntopo = (sculpt_mode && ob->sculpt->bm);
 
 	const int draw_flag = ((scene->toolsettings->multipaint ? CALC_WP_MULTIPAINT : 0) |
 	                       (scene->toolsettings->auto_normalize ? CALC_WP_AUTO_NORMALIZE : 0));
@@ -1407,7 +1408,7 @@
 			if (!modifier_isEnabled(scene, md, required_mode)) continue;
 			if (useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
 
-			if (mti->type == eModifierTypeType_OnlyDeform) {
+			if (mti->type == eModifierTypeType_OnlyDeform && !sculpt_dyntopo) {
 				if (!deformedVerts)
 					deformedVerts = mesh_getVertexCos(me, &numVerts);
 
@@ -1465,9 +1466,14 @@
 			modifier_setError(md, "Modifier requires original data, bad stack position");
 			continue;
 		}
-		if (sculpt_mode && (!has_multires || multires_applied)) {
+		if (sculpt_mode &&
+			(!has_multires || multires_applied || ob->sculpt->bm))
+		{
 			int unsupported = 0;
 
+			if (sculpt_dyntopo)
+				unsupported = TRUE;
+
 			if (scene->toolsettings->sculpt->flags & SCULPT_ONLY_DEFORM)
 				unsupported |= mti->type != eModifierTypeType_OnlyDeform;
 

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-12-30 18:29:25 UTC (rev 53443)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-12-30 18:29:41 UTC (rev 53444)
@@ -262,6 +262,17 @@
 		cddm->pbvh_draw = can_pbvh_draw(ob, dm);
 	}
 
+	/* Sculpting on a BMesh (dynamic-topology) gets a special PBVH */
+	if (!cddm->pbvh && ob->sculpt->bm) {
+		cddm->pbvh = BLI_pbvh_new();
+		cddm->pbvh_draw = TRUE;
+
+		BLI_pbvh_build_bmesh(cddm->pbvh, ob->sculpt->bm,
+							 ob->sculpt->bm_smooth_shading,
+							 ob->sculpt->bm_log);
+	}
+		
+
 	/* always build pbvh from original mesh, and only use it for drawing if
 	 * this derivedmesh is just original mesh. it's the multires subsurf dm
 	 * that this is actually for, to support a pbvh on a modified mesh */




More information about the Bf-blender-cvs mailing list