[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57419] trunk/blender/source/blender/ blenkernel: fix for problem with creating weight-paint preview.
Campbell Barton
ideasman42 at gmail.com
Thu Jun 13 02:33:49 CEST 2013
Revision: 57419
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57419
Author: campbellbarton
Date: 2013-06-13 00:33:48 +0000 (Thu, 13 Jun 2013)
Log Message:
-----------
fix for problem with creating weight-paint preview.
In the case where the modifier stack didnt need deform-verts to calculate,
they would not be available for the preview either.
This fixes a bug caused by r57206 which set mirror to preview so the mirrored
weights would be displayed, but it only worked when there was an armature after it, see [#35545].
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57206
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_modifier.h
trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
trunk/blender/source/blender/blenkernel/intern/modifier.c
Modified: trunk/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_modifier.h 2013-06-12 23:17:31 UTC (rev 57418)
+++ trunk/blender/source/blender/blenkernel/BKE_modifier.h 2013-06-13 00:33:48 UTC (rev 57419)
@@ -371,11 +371,12 @@
* evaluation, assuming the data indicated by dataMask is required at the
* end of the stack.
*/
-struct CDMaskLink *modifiers_calcDataMasks(struct Scene *scene,
+struct CDMaskLink *modifiers_calcDataMasks(struct Scene *scene,
struct Object *ob,
struct ModifierData *md,
CustomDataMask dataMask,
- int required_mode);
+ int required_mode,
+ ModifierData *previewmd, CustomDataMask previewmask);
struct ModifierData *modifiers_getLastPreview(struct Scene *scene,
struct ModifierData *md,
int required_mode);
Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2013-06-12 23:17:31 UTC (rev 57418)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2013-06-13 00:33:48 UTC (rev 57419)
@@ -1482,7 +1482,7 @@
ModifierData *firstmd, *md, *previewmd = NULL;
CDMaskLink *datamasks, *curr;
/* XXX Always copying POLYINDEX, else tessellated data are no more valid! */
- CustomDataMask mask, nextmask, append_mask = CD_MASK_ORIGINDEX;
+ CustomDataMask mask, nextmask, previewmask = 0, append_mask = CD_MASK_ORIGINDEX;
float (*deformedVerts)[3] = NULL;
DerivedMesh *dm = NULL, *orcodm, *clothorcodm, *finaldm;
int numVerts = me->totvert;
@@ -1532,17 +1532,24 @@
if (useRenderParams) required_mode = eModifierMode_Render;
else required_mode = eModifierMode_Realtime;
- datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
- curr = datamasks;
-
if (do_mod_wmcol || do_mod_mcol) {
/* Find the last active modifier generating a preview, or NULL if none. */
/* XXX Currently, DPaint modifier just ignores this.
* Needs a stupid hack...
* The whole "modifier preview" thing has to be (re?)designed, anyway! */
previewmd = modifiers_getLastPreview(scene, md, required_mode);
+
+ /* even if the modifier doesn't need the data, to make a preview it may */
+ if (previewmd) {
+ if (do_mod_wmcol) {
+ previewmask = CD_MASK_MDEFORMVERT;
+ }
+ }
}
+ datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode, previewmd, previewmask);
+ curr = datamasks;
+
if (deform_r) *deform_r = NULL;
*final_r = NULL;
@@ -2028,7 +2035,7 @@
dm = NULL;
md = modifiers_getVirtualModifierList(ob);
- datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
+ datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode, NULL, 0);
curr = datamasks;
for (i = 0; md; i++, md = md->next, curr = curr->next) {
Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c 2013-06-12 23:17:31 UTC (rev 57418)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c 2013-06-13 00:33:48 UTC (rev 57419)
@@ -363,7 +363,9 @@
return 1;
}
-CDMaskLink *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
+CDMaskLink *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md,
+ CustomDataMask dataMask, int required_mode,
+ ModifierData *previewmd, CustomDataMask previewmask)
{
CDMaskLink *dataMasks = NULL;
CDMaskLink *curr, *prev;
@@ -374,10 +376,15 @@
curr = MEM_callocN(sizeof(CDMaskLink), "CDMaskLink");
- if (modifier_isEnabled(scene, md, required_mode))
+ if (modifier_isEnabled(scene, md, required_mode)) {
if (mti->requiredDataMask)
curr->mask = mti->requiredDataMask(ob, md);
+ if (previewmd == md) {
+ curr->mask |= previewmask;
+ }
+ }
+
/* prepend new datamask */
curr->next = dataMasks;
dataMasks = curr;
More information about the Bf-blender-cvs
mailing list