[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50970] trunk/blender/source/blender: mask data is no longer automatically added when sculpting ( except when there is a multi-res modifier).

Campbell Barton ideasman42 at gmail.com
Mon Oct 1 07:19:57 CEST 2012


Revision: 50970
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50970
Author:   campbellbarton
Date:     2012-10-01 05:19:57 +0000 (Mon, 01 Oct 2012)
Log Message:
-----------
mask data is no longer automatically added when sculpting (except when there is a multi-res modifier).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/blenlib/BLI_pbvh.h
    trunk/blender/source/blender/editors/include/ED_sculpt.h
    trunk/blender/source/blender/editors/object/object_bake.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt_intern.h
    trunk/blender/source/blender/editors/sculpt_paint/sculpt_undo.c
    trunk/blender/source/blender/gpu/intern/gpu_buffers.c
    trunk/blender/source/blender/modifiers/intern/MOD_multires.c

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2012-10-01 04:59:21 UTC (rev 50969)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2012-10-01 05:19:57 UTC (rev 50970)
@@ -895,15 +895,16 @@
 		CCGKey highGridKey, lowGridKey;
 		CCGSubSurf *ss;
 		int i, numGrids, highGridSize;
+		int has_mask = CustomData_has_layer(&me->ldata, CD_GRID_PAINT_MASK);
 
 		/* create subsurf DM from original mesh at high level */
 		cddm = CDDM_from_mesh(me, NULL);
 		DM_set_only_copy(cddm, CD_MASK_BAREMESH);
-		highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, TRUE);
+		highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
 		ss = ((CCGDerivedMesh *)highdm)->ss;
 
 		/* create multires DM from original mesh at low level */
-		lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple, TRUE);
+		lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple, has_mask);
 		cddm->release(cddm);
 
 		/* copy subsurf grids and replace them with low displaced grids */
@@ -1166,17 +1167,18 @@
 			CCGKey highGridKey, lowGridKey;
 			CCGSubSurf *ss;
 			int i, j, numGrids, highGridSize, lowGridSize;
+			int has_mask = CustomData_has_layer(&me->ldata, CD_GRID_PAINT_MASK);
 
 			/* create subsurf DM from original mesh at high level */
 			if (ob->derivedDeform) cddm = CDDM_copy(ob->derivedDeform);
 			else cddm = CDDM_from_mesh(me, NULL);
 			DM_set_only_copy(cddm, CD_MASK_BAREMESH);
 
-			highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, TRUE);
+			highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
 			ss = ((CCGDerivedMesh *)highdm)->ss;
 
 			/* create multires DM from original mesh and displacements */
-			lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple, TRUE);
+			lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple, has_mask);
 			cddm->release(cddm);
 
 			/* gather grid data */
@@ -1228,12 +1230,13 @@
 		}
 		else {
 			DerivedMesh *cddm, *subdm;
+			int has_mask = CustomData_has_layer(&me->ldata, CD_GRID_PAINT_MASK);
 
 			if (ob->derivedDeform) cddm = CDDM_copy(ob->derivedDeform);
 			else cddm = CDDM_from_mesh(me, NULL);
 			DM_set_only_copy(cddm, CD_MASK_BAREMESH);
 
-			subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, TRUE);
+			subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
 			cddm->release(cddm);
 
 			multiresModifier_disp_run(dm, me, NULL, CALC_DISPLACEMENTS, subdm->getGridData(subdm), mmd->totlvl);
@@ -2109,7 +2112,7 @@
 	 *     reference subsurfed dm with this option, before calling multiresModifier_disp_run(),
 	 *     which implicitly expects both subsurfs from its first dm and oldGridData parameters to
 	 *     be of the same "format"! */
-	dm = multires_make_derived_from_derived(orig, mmd, ob, MULTIRES_ALLOC_PAINT_MASK);
+	dm = multires_make_derived_from_derived(orig, mmd, ob, 0);
 
 	multires_load_old_dm(dm, me, mmd->totlvl + 1);
 

Modified: trunk/blender/source/blender/blenlib/BLI_pbvh.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_pbvh.h	2012-10-01 04:59:21 UTC (rev 50969)
+++ trunk/blender/source/blender/blenlib/BLI_pbvh.h	2012-10-01 05:19:57 UTC (rev 50970)
@@ -233,7 +233,7 @@
 				if (vi.grid) { \
 					vi.co = CCG_elem_co(vi.key, vi.grid); \
 					vi.fno = CCG_elem_no(vi.key, vi.grid); \
-					vi.mask = CCG_elem_mask(vi.key, vi.grid); \
+					vi.mask = vi.key->has_mask ? CCG_elem_mask(vi.key, vi.grid) : NULL; \
 					vi.grid = CCG_elem_next(vi.key, vi.grid); \
 					if (vi.gh) { \
 						if (BLI_BITMAP_GET(vi.gh, vi.gy * vi.gridsize + vi.gx)) \

Modified: trunk/blender/source/blender/editors/include/ED_sculpt.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_sculpt.h	2012-10-01 04:59:21 UTC (rev 50969)
+++ trunk/blender/source/blender/editors/include/ED_sculpt.h	2012-10-01 05:19:57 UTC (rev 50970)
@@ -45,8 +45,12 @@
 void ED_sculpt_force_update(struct bContext *C);
 float *ED_sculpt_get_last_stroke(struct Object *ob);
 int ED_sculpt_minmax(struct bContext *C, float min[3], float max[3]);
-void ED_sculpt_mask_layers_ensure(struct Object *ob,
+int ED_sculpt_mask_layers_ensure(struct Object *ob,
                                   struct MultiresModifierData *mmd);
+enum {
+	ED_SCULPT_MASK_LAYER_CALC_VERT = (1 << 0),
+	ED_SCULPT_MASK_LAYER_CALC_LOOP = (1 << 1)
+};
 
 /* paint_ops.c */
 void ED_operatortypes_paint(void);

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2012-10-01 04:59:21 UTC (rev 50969)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2012-10-01 05:19:57 UTC (rev 50970)
@@ -1031,7 +1031,7 @@
 		tmp_mmd.lvl = *lvl;
 		tmp_mmd.sculptlvl = *lvl;
 		dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob,
-		                                        MULTIRES_USE_LOCAL_MMD);
+		                                        0);
 		cddm->release(cddm);
 	}
 
@@ -1052,7 +1052,7 @@
 	tmp_mmd.lvl = mmd->totlvl;
 	tmp_mmd.sculptlvl = mmd->totlvl;
 	dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob,
-	                                        MULTIRES_USE_LOCAL_MMD);
+	                                        0);
 	cddm->release(cddm);
 
 	return dm;

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2012-10-01 04:59:21 UTC (rev 50969)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2012-10-01 05:19:57 UTC (rev 50970)
@@ -159,8 +159,10 @@
 			/* set totlvl from existing MDISPS layer if object already had it */
 			multiresModifier_set_levels_from_disps((MultiresModifierData *)new_md, ob);
 
-			/* ensure that grid paint mask layer is created */
-			ED_sculpt_mask_layers_ensure(ob, (MultiresModifierData *)new_md);
+			if (ob->mode & OB_MODE_SCULPT) {
+				/* ensure that grid paint mask layer is created */
+				ED_sculpt_mask_layers_ensure(ob, (MultiresModifierData *)new_md);
+			}
 		}
 		else if (type == eModifierType_Skin) {
 			/* ensure skin-node customdata exists */
@@ -710,11 +712,6 @@
 	BLI_remlink(&ob->modifiers, md);
 	modifier_free(md);
 
-	if (ob->type == OB_MESH) {
-		/* ensure mesh paint mask layer remains after applying */
-		ED_sculpt_mask_layers_ensure(ob, NULL);
-	}
-
 	return 1;
 }
 

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c	2012-10-01 04:59:21 UTC (rev 50969)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c	2012-10-01 05:19:57 UTC (rev 50970)
@@ -197,7 +197,7 @@
 			for (x = 0; x < key.grid_size; x++) {
 				CCGElem *elem = CCG_grid_elem(&key, grids[g], x, y);
 				const float *co = CCG_elem_co(&key, elem);
-				float mask = *CCG_elem_mask(&key, elem);
+				float mask = key.has_mask ? *CCG_elem_mask(&key, elem) : 0.0f;
 
 				/* skip grid element if not in the effected area */
 				if (is_effected(area, planes, co, mask)) {

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-10-01 04:59:21 UTC (rev 50969)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-10-01 05:19:57 UTC (rev 50970)
@@ -1225,7 +1225,7 @@
 		if (sculpt_brush_test(&test, vd.co)) {
 			const float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist,
 			                                            ss->cache->view_normal, vd.no, vd.fno,
-			                                            smooth_mask ? 0 : *vd.mask);
+			                                            smooth_mask ? 0 : (vd.mask ? *vd.mask : 0.0f));
 			if (smooth_mask) {
 				float val = neighbor_average_mask(ss, vd.vert_indices[vd.i]) - *vd.mask;
 				val *= fade * bstrength;
@@ -1524,7 +1524,7 @@
 				/* offset vertex */
 				float fade = tex_strength(ss, brush, vd.co, test.dist,
 				                          ss->cache->sculpt_normal_symm, vd.no,
-				                          vd.fno, *vd.mask);
+				                          vd.fno, vd.mask ? *vd.mask : 0.0f);
 
 				mul_v3_v3fl(proxy[vd.i], offset, fade);
 
@@ -1580,7 +1580,7 @@
 				/* offset vertex */
 				const float fade = tex_strength(ss, brush, vd.co, test.dist,
 				                                ss->cache->sculpt_normal_symm,
-				                                vd.no, vd.fno, *vd.mask);
+				                                vd.no, vd.fno, vd.mask ? *vd.mask : 0.0f);
 				float val1[3];
 				float val2[3];
 
@@ -1623,7 +1623,7 @@
 			if (sculpt_brush_test(&test, vd.co)) {
 				float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist,
 				                                      ss->cache->view_normal, vd.no,
-				                                      vd.fno, *vd.mask);
+				                                      vd.fno, vd.mask ? *vd.mask : 0.0f);
 				float val[3];
 
 				sub_v3_v3v3(val, test.location, vd.co);
@@ -1677,7 +1677,8 @@
 		{
 			if (sculpt_brush_test(&test, origco[vd.i])) {
 				const float fade = bstrength * tex_strength(ss, brush, origco[vd.i], test.dist,
-				                                            ss->cache->sculpt_normal_symm, origno[vd.i], NULL, *vd.mask);
+				                                            ss->cache->sculpt_normal_symm, origno[vd.i],
+				                                            NULL, vd.mask ? *vd.mask : 0.0f);
 
 				mul_v3_v3fl(proxy[vd.i], grab_delta, fade);
 
@@ -1718,7 +1719,7 @@
 			if (sculpt_brush_test(&test, vd.co)) {
 				const float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist,
 				                                            ss->cache->sculpt_normal_symm,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list