Commit: 5ad8f53c6fe188e1db8143d00130c2754820cfe4
Author: Campbell Barton
Date:   Mon Nov 17 23:11:11 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rB5ad8f53c6fe188e1db8143d00130c2754820cfe4

don't store index as float (can fail for large values & conversion isn't free)

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

M       source/blender/blenkernel/intern/mesh_remap.c

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

diff --git a/source/blender/blenkernel/intern/mesh_remap.c 
b/source/blender/blenkernel/intern/mesh_remap.c
index 9697248..503d98f 100644
--- a/source/blender/blenkernel/intern/mesh_remap.c
+++ b/source/blender/blenkernel/intern/mesh_remap.c
@@ -464,9 +464,14 @@ void BKE_mesh_remap_calc_edges_from_dm(
                        MeshElemMap *vert2edge_src_map;
                        int *vert2edge_src_map_mem;
 
-                       /* Note we store an integer index in second element 
(first one is hit_dist). */
-                       float (*v_dst2src_map)[2] = 
MEM_mallocN(sizeof(*v_dst2src_map) * (size_t)numverts_dst, __func__);
-                       fill_vn_fl((float *)v_dst2src_map, numverts_dst * 2, 
-1.0f);
+                       struct {
+                               float hit_dist;
+                               int   index;
+                       } *v_dst2src_map = MEM_mallocN(sizeof(*v_dst2src_map) * 
(size_t)numverts_dst, __func__);
+
+                       for (i = 0; i < numverts_dst; i++) {
+                               v_dst2src_map[i].hit_dist = -1.0f;
+                       }
 
                        BKE_mesh_vert_edge_map_create(&vert2edge_src_map, 
&vert2edge_src_map_mem,
                                                      edges_src, num_verts_src, 
num_edges_src);
@@ -486,7 +491,7 @@ void BKE_mesh_remap_calc_edges_from_dm(
                                        const unsigned int vidx_dst = j ? 
e_dst->v1 : e_dst->v2;
 
                                        /* Compute closest verts only once! */
-                                       if (v_dst2src_map[vidx_dst][0] < 0.0f) {
+                                       if (v_dst2src_map[vidx_dst].hit_dist == 
-1.0f) {
                                                float tmp_co[3];
 
                                                copy_v3_v3(tmp_co, 
verts_dst[vidx_dst].co);
@@ -495,12 +500,12 @@ void BKE_mesh_remap_calc_edges_from_dm(
                                                        &treedata, &nearest, 
space_transform,
                                                        tmp_co, max_dist_sq, 
&hit_dist))
                                                {
-                                                       
v_dst2src_map[vidx_dst][0] = hit_dist;
-                                                       
v_dst2src_map[vidx_dst][1] = (float)nearest.index;
+                                                       
v_dst2src_map[vidx_dst].hit_dist = hit_dist;
+                                                       
v_dst2src_map[vidx_dst].index = nearest.index;
                                                }
                                                else {
                                                        /* No source for this 
dest vert! */
-                                                       
v_dst2src_map[vidx_dst][0] = FLT_MAX;
+                                                       
v_dst2src_map[vidx_dst].hit_dist = FLT_MAX;
                                                }
                                        }
                                }
@@ -509,8 +514,8 @@ void BKE_mesh_remap_calc_edges_from_dm(
                                 * total verts-to-verts distance. */
                                for (j = 2; j--;) {
                                        const unsigned int vidx_dst = j ? 
e_dst->v1 : e_dst->v2;
-                                       const float first_dist = 
v_dst2src_map[vidx_dst][0];
-                                       const int vidx_src = 
(int)v_dst2src_map[vidx_dst][1];
+                                       const float first_dist = 
v_dst2src_map[vidx_dst].hit_dist;
+                                       const int vidx_src = 
v_dst2src_map[vidx_dst].index;
                                        int *eidx_src, k;
 
                                        if (vidx_src < 0) {

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

Reply via email to