Commit: 0893f3a2b5fba4492fa00d507df515847be62b29 Author: Germano Cavalcante Date: Fri Feb 24 14:14:49 2017 -0300 Branches: snap_system_clip_planes https://developer.blender.org/rB0893f3a2b5fba4492fa00d507df515847be62b29
Fix crash due to dereferenced array od edges and clean debug printfs =================================================================== 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 63aa00f1f8..2501489371 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -1588,18 +1588,6 @@ static bool snapCamera( return retval; } -static const BVHTreeFromMesh *G_treedata = NULL; -static uint G_ed_num = 0; -static void G_test_ed(char *func) { - if (G_treedata && G_treedata->edge) { - printf("%s\n", func); - printf("edge_allocated = %s\n", G_treedata->edge_allocated ? "True" : "False"); - const MEdge *ed = &G_treedata->edge[G_ed_num - 1]; - printf("reading edge %d:\n", G_ed_num - 1); - printf("\t[v1, v2: %d, %d]\n", ed->v1, ed->v2); - } -} - static bool snapDerivedMesh( SnapObjectContext *sctx, SnapData *snpdt, Object *ob, float obmat[4][4], const unsigned int ob_index, @@ -1779,6 +1767,9 @@ static bool snapDerivedMesh( } if (snpdt->snap_to_flag & SCE_SELECT_VERTEX) { + if (!treedata_lt->edge_allocated) { /* Snap to edges may already have been used before */ + treedata_lt->edge = DM_get_edge_array(dm, &treedata_lt->edge_allocated); + } if (sod->has_loose_vert) { /* the tree is owned by the DM and may have been freed since we last used! */ if (sod->bvh_trees[0] && !bvhcache_has_tree(dm->bvhCache, sod->bvh_trees[0])) { @@ -1786,9 +1777,6 @@ static bool snapDerivedMesh( sod->bvh_trees[0] = NULL; } if (sod->bvh_trees[0] == NULL) { - if (treedata_lt->edge == NULL) { /* Snap to edges may already have been used before */ - treedata_lt->edge = DM_get_edge_array(dm, &treedata_lt->edge_allocated); - } sod->bvh_trees[0] = snp_bvhtree_from_mesh_loose_verts( dm, treedata_lt->edge, treedata_lt->vert); @@ -1797,6 +1785,9 @@ static bool snapDerivedMesh( } } if (snpdt->snap_to_flag & SCE_SELECT_EDGE) { + if (!treedata_lt->edge_allocated) { + treedata_lt->edge = DM_get_edge_array(dm, &treedata_lt->edge_allocated); + } if (sod->has_loose_edge) { /* the tree is owned by the DM and may have been freed since we last used! */ if (sod->bvh_trees[1] && !bvhcache_has_tree(dm->bvhCache, sod->bvh_trees[1])) { @@ -1804,9 +1795,6 @@ static bool snapDerivedMesh( sod->bvh_trees[1] = NULL; } if (sod->bvh_trees[1] == NULL) { - if (treedata_lt->edge == NULL) { - treedata_lt->edge = DM_get_edge_array(dm, &treedata_lt->edge_allocated); - } sod->bvh_trees[1] = snp_bvhtree_from_mesh_loose_edges( dm, treedata_lt->edge, treedata_lt->vert); @@ -1869,10 +1857,6 @@ static bool snapDerivedMesh( if ((neasrest2d.vert_index != -1) || (neasrest2d.edge_index != -1)) { - G_treedata = treedata_lt; - G_ed_num = dm->getNumEdges(dm); - G_test_ed("***start***\n"__func__); - copy_v3_v3(r_loc, neasrest2d.co); mul_m4_v3(obmat, r_loc); if (r_no) { @@ -1889,10 +1873,6 @@ static bool snapDerivedMesh( } } - G_test_ed(__func__": before release"); - dm->release(dm); - G_test_ed(__func__": after release :("); - return retval; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs