Commit: 631ecbc4cae1ade3ae1104e0d2945e35282f103e
Author: Germano Cavalcante
Date:   Sun Feb 26 14:16:54 2017 -0300
Branches: master
https://developer.blender.org/rB631ecbc4cae1ade3ae1104e0d2945e35282f103e

Fix unreported bug: Ensure you have the correct array directory even after the 
`dm->release(dm)`

===================================================================

M       source/blender/editors/transform/transform_snap_object.c

===================================================================

diff --git a/source/blender/editors/transform/transform_snap_object.c 
b/source/blender/editors/transform/transform_snap_object.c
index 53f6b37c22..cf16bb8817 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -87,6 +87,8 @@ typedef struct SnapObjectData {
 typedef struct SnapObjectData_Mesh {
        SnapObjectData sd;
        BVHTreeFromMesh *bvh_trees[3];
+       MPoly *mpoly;
+       bool poly_allocated;
 
 } SnapObjectData_Mesh;
 
@@ -1173,6 +1175,29 @@ static bool snapDerivedMesh(
                        if (treedata->cached && 
!bvhcache_has_tree(dm->bvhCache, treedata->tree)) {
                                free_bvhtree_from_mesh(treedata);
                        }
+                       else {
+                               if (!treedata->vert_allocated) {
+                                       treedata->vert = DM_get_vert_array(dm, 
&treedata->vert_allocated);
+                               }
+                               if ((tree_index == 1) && 
!treedata->edge_allocated) {
+                                       treedata->edge = DM_get_edge_array(dm, 
&treedata->vert_allocated);
+                               }
+                               if (tree_index == 2) {
+                                       if (!treedata->loop_allocated) {
+                                               treedata->loop = 
DM_get_loop_array(dm, &treedata->loop_allocated);
+                                       }
+                                       if (!treedata->looptri_allocated) {
+                                               if (!sod->poly_allocated) {
+                                                       sod->mpoly = 
DM_get_poly_array(dm, &sod->poly_allocated);
+                                               }
+                                               treedata->looptri = 
DM_get_looptri_array(
+                                                       dm, treedata->vert,
+                                                       sod->mpoly, 
dm->getNumPolys(dm),
+                                                       treedata->loop, 
dm->getNumLoops(dm),
+                                                       
&treedata->looptri_allocated);
+                                       }
+                               }
+                       }
                }
        }
 
@@ -1855,6 +1880,9 @@ static void snap_object_data_free(void *sod_v)
                                        
free_bvhtree_from_mesh(sod->bvh_trees[i]);
                                }
                        }
+                       if (sod->poly_allocated) {
+                               MEM_freeN(sod->mpoly);
+                       }
                        break;
                }
                case SNAP_EDIT_MESH:

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to