[Bf-blender-cvs] [a0561a05ef] master: Remove flag: `SNAP_OBJECT_USE_CACHE` from snap_context

Germano Cavalcante noreply at git.blender.org
Fri Feb 3 23:03:48 CET 2017


Commit: a0561a05efc93a1d8778dedae0bce680650d9d08
Author: Germano Cavalcante
Date:   Fri Feb 3 19:03:31 2017 -0300
Branches: master
https://developer.blender.org/rBa0561a05efc93a1d8778dedae0bce680650d9d08

Remove flag: `SNAP_OBJECT_USE_CACHE` from snap_context

Since the cache is created in one way or another, this flag is not really making a difference
More details here: D2496

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

M	source/blender/editors/armature/editarmature_sketch.c
M	source/blender/editors/include/ED_transform_snap_object_context.h
M	source/blender/editors/mesh/editmesh_tools.c
M	source/blender/editors/space_view3d/view3d_ruler.c
M	source/blender/editors/space_view3d/view3d_walk.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/transform/transform_snap_object.c

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

diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index cc4c1809fb..f6c04e9570 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -970,6 +970,9 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S
 	ToolSettings *ts = CTX_data_tool_settings(C);
 	int point_added = 0;
 
+	/* TODO: Since the function `ED_transform_snap_object_context_create_view3d` creates a cache,
+	 * the ideal would be to call this function only at the beginning of the snap operation,
+	 * or at the beginning of the operator itself */
 	struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
 	        CTX_data_main(C), CTX_data_scene(C), 0,
 	        CTX_wm_region(C), CTX_wm_view3d(C));
@@ -1038,6 +1041,8 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S
 		}
 	}
 
+	/* TODO: The ideal would be to call this function only once.
+	 * At the end of the operator */
 	ED_transform_snap_object_context_destroy(snap_context);
 	return point_added;
 }
diff --git a/source/blender/editors/include/ED_transform_snap_object_context.h b/source/blender/editors/include/ED_transform_snap_object_context.h
index 7944b43405..6eaae49912 100644
--- a/source/blender/editors/include/ED_transform_snap_object_context.h
+++ b/source/blender/editors/include/ED_transform_snap_object_context.h
@@ -65,10 +65,6 @@ struct SnapObjectParams {
 	unsigned int use_object_edit_cage : 1;
 };
 
-enum {
-	SNAP_OBJECT_USE_CACHE = (1 << 0),
-};
-
 typedef struct SnapObjectContext SnapObjectContext;
 SnapObjectContext *ED_transform_snap_object_context_create(
         struct Main *bmain, struct Scene *scene, int flag);
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 8f004bcf72..65ee097e8e 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -306,7 +306,7 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, BMEditMesh *em)
 	ED_view3d_init_mats_rv3d(obedit, ar->regiondata);
 
 	struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
-	        CTX_data_main(C), CTX_data_scene(C), SNAP_OBJECT_USE_CACHE,
+	        CTX_data_main(C), CTX_data_scene(C), 0,
 	        ar, CTX_wm_view3d(C));
 
 	BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
diff --git a/source/blender/editors/space_view3d/view3d_ruler.c b/source/blender/editors/space_view3d/view3d_ruler.c
index 688f459108..aefe30bbe3 100644
--- a/source/blender/editors/space_view3d/view3d_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_ruler.c
@@ -280,7 +280,7 @@ static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state)
 	}
 	else if (state == RULER_STATE_DRAG) {
 		ruler_info->snap_context = ED_transform_snap_object_context_create_view3d(
-		        CTX_data_main(C), CTX_data_scene(C), SNAP_OBJECT_USE_CACHE,
+		        CTX_data_main(C), CTX_data_scene(C), 0,
 		        ruler_info->ar, CTX_wm_view3d(C));
 	}
 	else {
diff --git a/source/blender/editors/space_view3d/view3d_walk.c b/source/blender/editors/space_view3d/view3d_walk.c
index 17c08ed420..542dc410bc 100644
--- a/source/blender/editors/space_view3d/view3d_walk.c
+++ b/source/blender/editors/space_view3d/view3d_walk.c
@@ -588,7 +588,7 @@ static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
 	walk->rv3d->rflag |= RV3D_NAVIGATING;
 
 	walk->snap_context = ED_transform_snap_object_context_create_view3d(
-	        CTX_data_main(C), walk->scene, SNAP_OBJECT_USE_CACHE,
+	        CTX_data_main(C), walk->scene, 0,
 	        walk->ar, walk->v3d);
 
 	walk->v3d_camera_control = ED_view3d_cameracontrol_acquire(
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 87ac54b2bd..318d271896 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -601,7 +601,7 @@ static void initSnappingMode(TransInfo *t)
 	if (t->spacetype == SPACE_VIEW3D) {
 		if (t->tsnap.object_context == NULL) {
 			t->tsnap.object_context = ED_transform_snap_object_context_create_view3d(
-			        G.main, t->scene, SNAP_OBJECT_USE_CACHE,
+			        G.main, t->scene, 0,
 			        t->ar, t->view);
 
 			ED_transform_snap_object_context_set_editmesh_callbacks(
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index 85209b0767..07617ec577 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -1092,274 +1092,259 @@ static bool snapDerivedMesh(
 		}
 	}
 
-	{
-		bool need_ray_start_correction_init =
-		        (snapdata->snap_to == SCE_SNAP_MODE_FACE) &&
-		        (snapdata->view_proj == VIEW_PROJ_ORTHO);
+	bool need_ray_start_correction_init =
+		    (snapdata->snap_to == SCE_SNAP_MODE_FACE) &&
+		    (snapdata->view_proj == VIEW_PROJ_ORTHO);
 
-		float imat[4][4];
-		float timat[3][3]; /* transpose inverse matrix for normals */
-		float ray_start_local[3], ray_normal_local[3];
-		float local_scale, local_depth, len_diff;
+	float imat[4][4];
+	float timat[3][3]; /* transpose inverse matrix for normals */
+	float ray_start_local[3], ray_normal_local[3];
+	float local_scale, local_depth, len_diff;
 
-		invert_m4_m4(imat, obmat);
-		transpose_m3_m4(timat, imat);
+	invert_m4_m4(imat, obmat);
+	transpose_m3_m4(timat, imat);
 
-		copy_v3_v3(ray_start_local, snapdata->ray_start);
-		copy_v3_v3(ray_normal_local, snapdata->ray_dir);
+	copy_v3_v3(ray_start_local, snapdata->ray_start);
+	copy_v3_v3(ray_normal_local, snapdata->ray_dir);
 
-		mul_m4_v3(imat, ray_start_local);
-		mul_mat3_m4_v3(imat, ray_normal_local);
+	mul_m4_v3(imat, ray_start_local);
+	mul_mat3_m4_v3(imat, ray_normal_local);
 
-		/* local scale in normal direction */
-		local_scale = normalize_v3(ray_normal_local);
-		local_depth = *ray_depth;
-		if (local_depth != BVH_RAYCAST_DIST_MAX) {
-			local_depth *= local_scale;
-		}
+	/* local scale in normal direction */
+	local_scale = normalize_v3(ray_normal_local);
+	local_depth = *ray_depth;
+	if (local_depth != BVH_RAYCAST_DIST_MAX) {
+		local_depth *= local_scale;
+	}
 
-		float lpmat[4][4];
-		float ray_org_local[3];
-		float ray_min_dist;
-		if (ELEM(snapdata->snap_to, SCE_SNAP_MODE_VERTEX, SCE_SNAP_MODE_EDGE)) {
-			mul_m4_m4m4(lpmat, snapdata->pmat, obmat);
-			ray_min_dist = snapdata->depth_range[0] * local_scale;
-		}
+	float lpmat[4][4];
+	float ray_org_local[3];
+	float ray_min_dist;
+	if (ELEM(snapdata->snap_to, SCE_SNAP_MODE_VERTEX, SCE_SNAP_MODE_EDGE)) {
+		mul_m4_m4m4(lpmat, snapdata->pmat, obmat);
+		ray_min_dist = snapdata->depth_range[0] * local_scale;
+	}
 
-		copy_v3_v3(ray_org_local, snapdata->ray_origin);
-		mul_m4_v3(imat, ray_org_local);
+	copy_v3_v3(ray_org_local, snapdata->ray_origin);
+	mul_m4_v3(imat, ray_org_local);
 
-		if (do_bb) {
-			BoundBox *bb = BKE_object_boundbox_get(ob);
+	if (do_bb) {
+		BoundBox *bb = BKE_object_boundbox_get(ob);
 
-			if (bb) {
-				BoundBox bb_temp;
+		if (bb) {
+			BoundBox bb_temp;
 
-				/* We cannot afford a bounding box with some null dimension, which may happen in some cases...
-				 * Threshold is rather high, but seems to be needed to get good behavior, see T46099. */
-				bb = BKE_boundbox_ensure_minimum_dimensions(bb, &bb_temp, 1e-1f);
+			/* We cannot afford a bounding box with some null dimension, which may happen in some cases...
+			 * Threshold is rather high, but seems to be needed to get good behavior, see T46099. */
+			bb = BKE_boundbox_ensure_minimum_dimensions(bb, &bb_temp, 1e-1f);
 
-				/* In vertex and edges you need to get the pixel distance from ray to BoundBox, see T46816. */
-				if (ELEM(snapdata->snap_to, SCE_SNAP_MODE_VERTEX, SCE_SNAP_MODE_EDGE)) {
-					float dist_px_sq = dist_squared_to_projected_aabb_simple(
-					        lpmat, snapdata->win_half, ray_min_dist, snapdata->mval,
-					        ray_org_local, ray_normal_local, bb->vec[0], bb->vec[6]);
-					if (dist_px_sq > SQUARE(*dist_px))
-					{
-						return retval;
-					}
+			/* In vertex and edges you need to get the pixel distance from ray to BoundBox, see T46816. */
+			if (ELEM(snapdata->snap_to, SCE_SNAP_MODE_VERTEX, SCE_SNAP_MODE_EDGE)) {
+				float dist_px_sq = dist_squared_to_projected_aabb_simple(
+					    lpmat, snapdata->win_half, ray_min_dist, snapdata->mval,
+					    ray_org_local, ray_normal_local, bb->vec[0], bb->vec[6]);
+				if (dist_px_sq > SQUARE(*dist_px))
+				{
+					return retval;
 				}
-				else {
-					/* was BKE_boundbox_ray_hit_check, see: cf6ca226fa58 */
-					if (!isect_ray_aabb_v3_simple(
-						ray_start_local, ray_normal_local, bb->vec[0], bb->vec[6], NULL, NULL))
-					{
-						return retval;
-					}
+			}
+			else {
+				/* was BKE_boundbox_ray_hit_check, see: cf6ca226fa58 */
+				if (!isect_ray_aabb_v3_simple(
+					ray_start_local, ray_normal_local, bb->vec[0], bb->vec[6], NULL, NULL))
+				{
+					return retval;
 				}
-				/* was local_depth, see: T47838 */
-				len_diff = dist_aabb_to_plane(bb->vec[0], bb->vec[6], ray_start_local, ray_normal_local);
-				if (len_diff < 0) len_diff = 0.0f;
-				need_ray_start_correction_init = false;
 			}
+			/* was local_depth, see: T47838 */
+			len_diff = dist_aabb_to_plane(bb->vec[0], bb->vec[6], ray_start_local, ray_normal_local);
+			if (len_diff < 0) len_diff = 0.0f;
+			need_ray_start_correction_init = false;
 		}
+	}
 
-		SnapObjectData_Mesh *sod = NULL;
-		BVHTreeFromMesh *treedata = NULL, treedata_stack;
-
-		if (sctx->flag & SNAP_OBJECT_USE_CACHE) {
-			void **sod_p;
-			if (BLI_ghash_ensure_p(sctx->cache.object_map, ob, &sod_p)) {
-				sod = *sod_p;
-			}
-			else {
-				sod = *sod_p = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(*sod));
-				sod->sd.type = SNAP_MESH;
-			}
+	SnapObjectData_Mesh *sod = NULL;
+	BVHTreeFromMesh *treedata = NULL;
 
-			int tree_index = -1;
-			switch (snapdata->snap_to) {
-				case SCE_SNAP_MODE_FACE:
-					tree_index = 2;
-					break;
-				case SCE_SNAP_

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list