[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