[Bf-blender-cvs] [96392c3] master: Correct error in recent snap-context commit
Campbell Barton
noreply at git.blender.org
Tue Apr 26 14:59:46 CEST 2016
Commit: 96392c33ef5fea3e77eedaef9748eb3e8e33095c
Author: Campbell Barton
Date: Tue Apr 26 23:01:11 2016 +1000
Branches: master
https://developer.blender.org/rB96392c33ef5fea3e77eedaef9748eb3e8e33095c
Correct error in recent snap-context commit
Edges currently don't use a BVH-tree,
but would still create and attempt to free the tree.
===================================================================
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 3e53fc3..484307d 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -628,7 +628,7 @@ static bool snapDerivedMesh(
BVHTreeFromMesh *treedata = NULL, treedata_stack;
if (sctx->flag & SNAP_OBJECT_USE_CACHE) {
- int tree_index = 0;
+ int tree_index = -1;
switch (snap_to) {
case SCE_SNAP_MODE_FACE:
tree_index = 1;
@@ -637,34 +637,39 @@ static bool snapDerivedMesh(
tree_index = 0;
break;
}
- if (sod->bvh_trees[tree_index] == NULL) {
- sod->bvh_trees[tree_index] = BLI_memarena_alloc(sctx->cache.mem_arena, sizeof(*treedata));
+ if (tree_index != -1) {
+ if (sod->bvh_trees[tree_index] == NULL) {
+ sod->bvh_trees[tree_index] = BLI_memarena_alloc(sctx->cache.mem_arena, sizeof(*treedata));
+ }
+ treedata = sod->bvh_trees[tree_index];
}
- treedata = sod->bvh_trees[tree_index];
}
else {
- treedata = &treedata_stack;
- memset(treedata, 0, sizeof(*treedata));
+ if (ELEM(snap_to, SCE_SNAP_MODE_FACE, SCE_SNAP_MODE_VERTEX)) {
+ treedata = &treedata_stack;
+ memset(treedata, 0, sizeof(*treedata));
+ }
}
- treedata->em_evil = em;
- treedata->em_evil_all = false;
- switch (snap_to) {
- case SCE_SNAP_MODE_FACE:
- bvhtree_from_mesh_looptri(treedata, dm, 0.0f, 4, 6);
- break;
- case SCE_SNAP_MODE_VERTEX:
- bvhtree_from_mesh_verts(treedata, dm, 0.0f, 2, 6);
- break;
+ if (treedata) {
+ treedata->em_evil = em;
+ treedata->em_evil_all = false;
+ switch (snap_to) {
+ case SCE_SNAP_MODE_FACE:
+ bvhtree_from_mesh_looptri(treedata, dm, 0.0f, 4, 6);
+ break;
+ case SCE_SNAP_MODE_VERTEX:
+ bvhtree_from_mesh_verts(treedata, dm, 0.0f, 2, 6);
+ break;
+ }
}
if (need_ray_start_correction_init) {
/* We *need* a reasonably valid len_diff in this case.
* Use BHVTree to find the closest face from ray_start_local.
*/
- BVHTreeNearest nearest;
-
- if (treedata->tree != NULL) {
+ if (treedata && treedata->tree != NULL) {
+ BVHTreeNearest nearest;
nearest.index = -1;
nearest.dist_sq = FLT_MAX;
/* Compute and store result. */
@@ -804,7 +809,9 @@ static bool snapDerivedMesh(
}
if ((sctx->flag & SNAP_OBJECT_USE_CACHE) == 0) {
- free_bvhtree_from_mesh(treedata);
+ if (treedata) {
+ free_bvhtree_from_mesh(treedata);
+ }
}
}
More information about the Bf-blender-cvs
mailing list