Revision: 43600
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43600
Author:   mont29
Date:     2012-01-22 10:14:01 +0000 (Sun, 22 Jan 2012)
Log Message:
-----------
Fix a crasher in WeightVG modifiers.

Problem was, if no vertices were ever added to one of the obect's vgroups, 
there is no CD_DEFORMVERT layer, even though there might be several valid 
vgroup indices... Odd no one noticed that earlier.

Many thanks to miikah for finding that bug!

Modified Paths:
--------------
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgedit.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgmix.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c

Modified: trunk/blender/source/blender/modifiers/intern/MOD_weightvgedit.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_weightvgedit.c    
2012-01-22 06:10:21 UTC (rev 43599)
+++ trunk/blender/source/blender/modifiers/intern/MOD_weightvgedit.c    
2012-01-22 10:14:01 UTC (rev 43600)
@@ -204,6 +204,17 @@
                return dm;
 
        dvert = CustomData_duplicate_referenced_layer(&dm->vertData, 
CD_MDEFORMVERT, numVerts);
+       /* If no vertices were ever added to an object's vgroup, dvert might be 
NULL. */
+       if(!dvert)
+               /* If this modifier is not allowed to add vertices, just 
return. */
+               if(!do_add)
+                       return dm;
+               /* Else, add a valid data layer! */
+               dvert = CustomData_add_layer_named(&dm->vertData, 
CD_MDEFORMVERT, CD_CALLOC,
+                                                  NULL, numVerts, 
wmd->defgrp_name);
+               /* Ultimate security check. */
+               if(!dvert)
+                       return dm;
 
        /* Get org weights, assuming 0.0 for vertices not in given vgroup. */
        org_w = MEM_mallocN(sizeof(float) * numVerts, "WeightVGEdit Modifier, 
org_w");

Modified: trunk/blender/source/blender/modifiers/intern/MOD_weightvgmix.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_weightvgmix.c     
2012-01-22 06:10:21 UTC (rev 43599)
+++ trunk/blender/source/blender/modifiers/intern/MOD_weightvgmix.c     
2012-01-22 10:14:01 UTC (rev 43600)
@@ -251,6 +251,17 @@
        }
 
        dvert = CustomData_duplicate_referenced_layer(&dm->vertData, 
CD_MDEFORMVERT, numVerts);
+       /* If no vertices were ever added to an object's vgroup, dvert might be 
NULL. */
+       if(!dvert)
+               /* If not affecting all vertices, just return. */
+               if(wmd->mix_set != MOD_WVG_SET_ALL)
+                       return dm;
+               /* Else, add a valid data layer! */
+               dvert = CustomData_add_layer_named(&dm->vertData, 
CD_MDEFORMVERT, CD_CALLOC,
+                                                  NULL, numVerts, 
wmd->defgrp_name_a);
+               /* Ultimate security check. */
+               if(!dvert)
+                       return dm;
 
        /* Find out which vertices to work on. */
        tidx = MEM_mallocN(sizeof(int) * numVerts, "WeightVGMix Modifier, 
tidx");

Modified: trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c       
2012-01-22 06:10:21 UTC (rev 43599)
+++ trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c       
2012-01-22 10:14:01 UTC (rev 43600)
@@ -378,6 +378,10 @@
                return dm;
 
        dvert = CustomData_duplicate_referenced_layer(&dm->vertData, 
CD_MDEFORMVERT, numVerts);
+       /* If no vertices were ever added to an object's vgroup, dvert might be 
NULL.
+        * As this modifier never add vertices to vgroup, just return. */
+       if(!dvert)
+               return dm;
 
        /* Find out which vertices to work on (all vertices in vgroup), and get 
their relevant weight.
         */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to